gboolean gimp_device_info_get_event_coords (GimpDeviceInfo *info, GdkWindow *window, GdkEvent *event, GimpCoords *coords) { gdouble x; if (gdk_event_get_axis (event, GDK_AXIS_X, &x)) { *coords = default_coords; coords->x = x; gdk_event_get_axis (event, GDK_AXIS_Y, &coords->y); if (gdk_event_get_axis (event, GDK_AXIS_PRESSURE, &coords->pressure)) { coords->pressure = gimp_device_info_map_axis (info, GDK_AXIS_PRESSURE, coords->pressure); } if (gdk_event_get_axis (event, GDK_AXIS_XTILT, &coords->xtilt)) { coords->xtilt = gimp_device_info_map_axis (info, GDK_AXIS_XTILT, coords->xtilt); } if (gdk_event_get_axis (event, GDK_AXIS_YTILT, &coords->ytilt)) { coords->ytilt = gimp_device_info_map_axis (info, GDK_AXIS_YTILT, coords->ytilt); } if (gdk_event_get_axis (event, GDK_AXIS_WHEEL, &coords->wheel)) { coords->wheel = gimp_device_info_map_axis (info, GDK_AXIS_WHEEL, coords->wheel); } return TRUE; } gimp_device_info_get_device_coords (info, window, coords); return FALSE; }
static gboolean gimp_display_shell_autoscroll_timeout (gpointer data) { GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (data); ScrollInfo *info = shell->scroll_info; GimpCoords device_coords; GimpCoords image_coords; gint dx = 0; gint dy = 0; gimp_device_info_get_device_coords (info->device, gtk_widget_get_window (shell->canvas), &device_coords); if (device_coords.x < 0) dx = device_coords.x; else if (device_coords.x > shell->disp_width) dx = device_coords.x - shell->disp_width; if (device_coords.y < 0) dy = device_coords.y; else if (device_coords.y > shell->disp_height) dy = device_coords.y - shell->disp_height; if (dx || dy) { GimpDisplay *display = shell->display; GimpTool *active_tool = tool_manager_get_active (display->gimp); gint scroll_amount_x = AUTOSCROLL_DX * dx; gint scroll_amount_y = AUTOSCROLL_DX * dy; info->time += AUTOSCROLL_DT; gimp_display_shell_scroll_unoverscrollify (shell, scroll_amount_x, scroll_amount_y, &scroll_amount_x, &scroll_amount_y); gimp_display_shell_scroll (shell, scroll_amount_x, scroll_amount_y); gimp_display_shell_untransform_coords (shell, &device_coords, &image_coords); if (gimp_tool_control_get_snap_to (active_tool->control)) { gint x, y, width, height; gimp_tool_control_get_snap_offsets (active_tool->control, &x, &y, &width, &height); gimp_display_shell_snap_coords (shell, &image_coords, x, y, width, height); } tool_manager_motion_active (display->gimp, &image_coords, info->time, info->state, display); return TRUE; } else { g_slice_free (ScrollInfo, info); shell->scroll_info = NULL; return FALSE; } }
gboolean gimp_device_info_get_event_coords (GimpDeviceInfo *info, GdkWindow *window, const GdkEvent *event, GimpCoords *coords) { gdouble x; if (gdk_event_get_axis (event, GDK_AXIS_X, &x)) { *coords = default_coords; coords->x = x; gdk_event_get_axis (event, GDK_AXIS_Y, &coords->y); /* translate event coordinates to window coordinates, only * happens if we drag a guide from a ruler */ if (event->any.window && event->any.window != window) { GtkWidget *src_widget; GtkWidget *dest_widget; src_widget = gtk_get_event_widget ((GdkEvent *) event); gdk_window_get_user_data (window, (gpointer) &dest_widget); if (src_widget && dest_widget) { gint offset_x; gint offset_y; gtk_widget_translate_coordinates (src_widget, dest_widget, 0, 0, &offset_x, &offset_y); coords->x += offset_x; coords->y += offset_y; } } if (gdk_event_get_axis (event, GDK_AXIS_PRESSURE, &coords->pressure)) { coords->pressure = gimp_device_info_map_axis (info, GDK_AXIS_PRESSURE, coords->pressure); } if (gdk_event_get_axis (event, GDK_AXIS_XTILT, &coords->xtilt)) { coords->xtilt = gimp_device_info_map_axis (info, GDK_AXIS_XTILT, coords->xtilt); } if (gdk_event_get_axis (event, GDK_AXIS_YTILT, &coords->ytilt)) { coords->ytilt = gimp_device_info_map_axis (info, GDK_AXIS_YTILT, coords->ytilt); } if (gdk_event_get_axis (event, GDK_AXIS_WHEEL, &coords->wheel)) { coords->wheel = gimp_device_info_map_axis (info, GDK_AXIS_WHEEL, coords->wheel); } return TRUE; } gimp_device_info_get_device_coords (info, window, coords); return FALSE; }
gboolean gimp_device_info_get_event_coords (GimpDeviceInfo *info, GdkWindow *window, const GdkEvent *event, GimpCoords *coords) { gdouble x; if (gdk_event_get_axis (event, GDK_AXIS_X, &x)) { *coords = default_coords; coords->x = x; gdk_event_get_axis (event, GDK_AXIS_Y, &coords->y); /* translate event coordinates to window coordinates, only * happens if we drag a guide from a ruler */ if (event->any.window && event->any.window != window) { GtkWidget *src_widget; GtkWidget *dest_widget; src_widget = gtk_get_event_widget ((GdkEvent *) event); gdk_window_get_user_data (window, (gpointer) &dest_widget); if (src_widget && dest_widget) { gint offset_x; gint offset_y; if (gtk_widget_translate_coordinates (src_widget, dest_widget, 0, 0, &offset_x, &offset_y)) { coords->x += offset_x; coords->y += offset_y; } } } if (gdk_event_get_axis (event, GDK_AXIS_PRESSURE, &coords->pressure)) { coords->pressure = gimp_device_info_map_axis (info, GDK_AXIS_PRESSURE, coords->pressure); } if (gdk_event_get_axis (event, GDK_AXIS_XTILT, &coords->xtilt)) { coords->xtilt = gimp_device_info_map_axis (info, GDK_AXIS_XTILT, coords->xtilt); } if (gdk_event_get_axis (event, GDK_AXIS_YTILT, &coords->ytilt)) { coords->ytilt = gimp_device_info_map_axis (info, GDK_AXIS_YTILT, coords->ytilt); } if (gdk_event_get_axis (event, GDK_AXIS_WHEEL, &coords->wheel)) { coords->wheel = gimp_device_info_map_axis (info, GDK_AXIS_WHEEL, coords->wheel); } if (gimp_device_info_get_mode (info) != GDK_MODE_DISABLED && gdk_device_get_source (info->device) != GDK_SOURCE_MOUSE) { /* The event was generated by an enabled extended non-mouse device */ coords->extended = TRUE; } else { /* The event was generated by a not extended enabled device */ coords->extended = FALSE; } return TRUE; } gimp_device_info_get_device_coords (info, window, coords); return FALSE; }