static gboolean button_press_event_cb (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { PhotosPrintPreview *preview = PHOTOS_PRINT_PREVIEW (user_data); preview->priv->cursorx = event->x; preview->priv->cursory = event->y; switch (event->button) { case 1: preview->priv->grabbed = press_inside_image_area (preview, event->x, event->y); break; default: break; } if (preview->priv->grabbed) { gtk_widget_queue_draw (GTK_WIDGET (preview)); } gtk_widget_grab_focus (preview->priv->area); return FALSE; }
gboolean photos_print_preview_point_in_image_area (PhotosPrintPreview *preview, guint x, guint y) { g_return_val_if_fail (PHOTOS_IS_PRINT_PREVIEW (preview), FALSE); return press_inside_image_area (preview, x, y); }
static gboolean motion_notify_event_cb (GtkWidget *widget, GdkEventMotion *event, gpointer user_data) { EomPrintPreviewPrivate *priv = EOM_PRINT_PREVIEW (user_data)->priv; gdouble dx, dy; GtkAllocation allocation; if (priv->grabbed) { dx = event->x - priv->cursorx; dy = event->y - priv->cursory; gtk_widget_get_allocation (widget, &allocation); /* Make sure the image stays inside the margins */ priv->image_x_align += (dx + priv->r_dx)/(allocation.width - priv->r_width - priv->l_rmargin - priv->r_rmargin); if (priv->image_x_align < 0. || priv->image_x_align > 1.) { priv->image_x_align = CLAMP (priv->image_x_align, 0., 1.); priv->r_dx += dx; } else priv->r_dx = 0; priv->image_y_align += (dy + priv->r_dy)/(allocation.height - priv->r_height - priv->t_rmargin - priv->b_rmargin); if (priv->image_y_align < 0. || priv->image_y_align > 1.) { priv->image_y_align = CLAMP (priv->image_y_align, 0., 1.); priv->r_dy += dy; } else priv->r_dy = 0; /* we do this to correctly change the property values */ g_object_set (EOM_PRINT_PREVIEW (user_data), "image-x-align", priv->image_x_align, "image-y-align", priv->image_y_align, NULL); priv->cursorx = event->x; priv->cursory = event->y; g_signal_emit (G_OBJECT (user_data), preview_signals [SIGNAL_IMAGE_MOVED], 0); } else { if (press_inside_image_area (EOM_PRINT_PREVIEW (user_data), event->x, event->y)) { GdkCursor *cursor; cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget), GDK_FLEUR); gdk_window_set_cursor (gtk_widget_get_window (widget), cursor); gdk_cursor_unref (cursor); } else { gdk_window_set_cursor (gtk_widget_get_window (widget), NULL); } } return FALSE; }
gboolean eog_print_preview_point_in_image_area (EogPrintPreview *preview, guint x, guint y) { g_return_val_if_fail (EOG_IS_PRINT_PREVIEW (preview), FALSE); return press_inside_image_area (preview, x, y); }