gboolean uni_dragger_motion_notify (UniDragger * tool, GdkEventMotion * ev) { if (tool->pressed) tool->dragging = TRUE; else return FALSE; tool->drag_ofs_x = ev->x; tool->drag_ofs_y = ev->y; int dx, dy; uni_dragger_get_drag_delta (tool, &dx, &dy); if (abs (dx) < 1 && abs (dy) < 1) return FALSE; if ( pow(dx, 2) + pow(dy, 2) > 7 && UNI_IMAGE_VIEW(tool->view)->pixbuf != NULL && UNI_IMAGE_VIEW(tool->view)->vadj->upper <= UNI_IMAGE_VIEW(tool->view)->vadj->page_size && UNI_IMAGE_VIEW(tool->view)->hadj->upper <= UNI_IMAGE_VIEW(tool->view)->hadj->page_size ) { uni_dragger_button_release (tool, (GdkEventButton*)ev); gtk_drag_begin (GTK_WIDGET(tool->view), gtk_target_list_new(target_table, G_N_ELEMENTS(target_table)), GDK_ACTION_COPY, 1, (GdkEvent*)ev); return TRUE; } GdkRectangle viewport; uni_image_view_get_viewport (UNI_IMAGE_VIEW (tool->view), &viewport); int offset_x = viewport.x + dx; int offset_y = viewport.y + dy; uni_image_view_set_offset (UNI_IMAGE_VIEW (tool->view), offset_x, offset_y, FALSE); tool->drag_base_x = tool->drag_ofs_x; tool->drag_base_y = tool->drag_ofs_y; return TRUE; }
static int uni_image_view_button_release (GtkWidget * widget, GdkEventButton * ev) { UniImageView *view = UNI_IMAGE_VIEW (widget); return uni_dragger_button_release (UNI_DRAGGER(view->tool), ev); }