diff --git a/video/vid_gdk.c b/video/vid_gdk.c index 57e239f..cb619ee 100644 --- a/video/vid_gdk.c +++ b/video/vid_gdk.c @@ -70,6 +70,7 @@ static long X11_buffersize; int vid_surfcachesize; void *vid_surfcache; +static int vid_center_x, vid_center_y; void (*vid_menudrawfn) (void); void (*vid_menukeyfn) (int key); @@ -192,7 +193,7 @@ void VID_Init(unsigned char *palette) gtk_widget_set_size_request(x_win, 320, 200); gtk_window_set_position(x_win,GTK_WIN_POS_CENTER_ALWAYS); g_signal_connect (x_win, "destroy", G_CALLBACK (exit), NULL); - gtk_widget_set_events(x_win, GDK_BUTTON_PRESS_MASK); + gtk_widget_set_events(x_win, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); // FOR LATER! @@ -239,7 +240,12 @@ void VID_Init(unsigned char *palette) vid.aspect = ((float) vid.height / (float) vid.width) * (320.0 / 240.0); mouse_enabled = true; - gtk_main_iteration (); + gdk_window_get_geometry (gtk_widget_get_window(x_win), &vid_frame[0], &vid_frame[1], &vid_frame[2], &vid_frame[3], NULL); + gdk_window_get_position(gtk_widget_get_window(x_win), &vid_frame[0], &vid_frame[1]); + vid_center_x = (int)(((float)vid_frame[2] / 2) + vid_frame[0]); + vid_center_y = (int)(((float)vid_frame[2] / 2) + vid_frame[1]); + vid_frame[2] += vid_frame[0]; + vid_frame[3] += vid_frame[1]; } void VID_ShiftPalette(unsigned char *p) @@ -397,14 +403,14 @@ struct { int keyq_head = 0; int keyq_tail = 0; - +int mouse_buttons=3; +int mouse_oldbuttonstate; +int mouse_buttonstate; void GetEvent(void) { int w, h; - GdkEvent *event; event = gdk_event_get(); - gtk_window_get_size(GTK_WINDOW(x_win), &w, &h); if (event) switch (event->type) { @@ -419,34 +425,38 @@ void GetEvent(void) keyq_head = (keyq_head + 1) & 63; break; case GDK_ENTER_NOTIFY: - //XSetInputFocus(GDK_WINDOW_XDISPLAY(gtk_widget_get_window(x_win)), - // GDK_WINDOW_XWINDOW(gtk_widget_get_window(x_win)), RevertToNone, - // CurrentTime); + IN_ActivateMouse(); break; case GDK_LEAVE_NOTIFY: - //XSetInputFocus(GDK_WINDOW_XDISPLAY(gtk_widget_get_window(x_win)), - // None, RevertToNone, CurrentTime); + IN_DeactivateMouse(); break; - default: - break; - } - - if(config_notify_width != w || config_notify_height != h){ - config_notify_width = w; + case GDK_CONFIGURE: + gtk_window_get_size(GTK_WINDOW(x_win), &w, &h); + gdk_window_get_geometry (gtk_widget_get_window(x_win), &vid_frame[0], &vid_frame[1], &vid_frame[2], &vid_frame[3], NULL); + gdk_window_get_position(gtk_widget_get_window(x_win), &vid_frame[0], &vid_frame[1]); + vid_center_x = (int)(((float)vid_frame[2] / 2) + vid_frame[0]); + vid_center_y = (int)(((float)vid_frame[2] / 2) + vid_frame[1]); + vid_frame[2] += vid_frame[0]; + vid_frame[3] += vid_frame[1]; + config_notify_width = w; config_notify_height = h; config_notify = 1; + break; + case GDK_BUTTON_PRESS: + Key_Event (K_MOUSE1, true); + printf("MOUSE 1 DOWN\n"); + break; + case GDK_BUTTON_RELEASE: + Key_Event (K_MOUSE1, false); + printf("MOUSE 1 UP\n"); + break; + break; } } -static int vid_center_x, vid_center_y; + // flushes the given rectangles from the view buffer to the screen void VID_Update(vrect_t * rects) { - gdk_window_get_geometry (gtk_widget_get_window(x_win), &vid_frame[0], &vid_frame[1], &vid_frame[2], &vid_frame[3], NULL); - gdk_window_get_position(gtk_widget_get_window(x_win), &vid_frame[0], &vid_frame[1]); - vid_center_x = (int)(((float)vid_frame[2] / 2) + vid_frame[0]); - vid_center_y = (int)(((float)vid_frame[2] / 2) + vid_frame[1]); - vid_frame[2] += vid_frame[0]; - vid_frame[3] += vid_frame[1]; if (config_notify) { @@ -515,15 +525,19 @@ void Sys_DisplayWindow(int window) void Sys_SendKeyEvents(void) { - if (gdk_initialized) { - while (gdk_events_pending()) { - GetEvent(); - while (keyq_head != keyq_tail) { - Key_Event(keyq[keyq_tail].key, keyq[keyq_tail].down); - keyq_tail = (keyq_tail + 1) & 63; - } + if (!gdk_initialized) + return; + + while (gdk_events_pending()) + { + GetEvent(); + while (keyq_head != keyq_tail) + { + Key_Event(keyq[keyq_tail].key, keyq[keyq_tail].down); + keyq_tail = (keyq_tail + 1) & 63; + } } - } + } void D_BeginDirectRect(int x, int y, byte * pbitmap, int width, int height) @@ -561,12 +575,12 @@ extern vec3_t deathcam_angles; //eukara - deathcam void IN_Move (usercmd_t *cmd) { vec3_t tangles; // eukara - deathcam -/* + if (m_filter->value) { mouse_x = (mouse_x + old_mouse_x) * 0.5; mouse_y = (mouse_y + old_mouse_y) * 0.5; } -*/ + if (mouse_enabled == true) { @@ -638,7 +652,10 @@ void IN_Move (usercmd_t *cmd) if((mouse_x || mouse_y) && mouse_enabled) gdk_display_warp_pointer (display, screen, vid_center_x, vid_center_y); } -void IN_Commands(){} +void IN_Commands() +{ + +} void IN_Init(){} void IN_Shutdown(){} @@ -676,8 +693,14 @@ void VID_CreateSplash() gtk_main (); } -void VID_Init_Cvars(){} -void IN_Init_Cvars(){} +void VID_Init_Cvars() +{ + +} +void IN_Init_Cvars() +{ + m_filter = Cvar_Get ("m_filter", "0", CVAR_ARCHIVE|CVAR_ORIGINAL); +} /* ===========