Exemplo n.º 1
0
static int
uni_nav_motion_notify (GtkWidget * widget, GdkEventMotion * ev)
{
    UniNav *nav = UNI_NAV (widget);
    int mx, my;
    gdk_window_get_pointer (gtk_widget_get_window (widget), &mx, &my, NULL);

    /* Make coordinates relative to window. */
    mx -= 4;
    my -= 4;

    /* Convert Nav space to Zoom space coordinates. */
    gdouble zoom2nav_factor = uni_nav_get_zoom2nav_factor (nav);
    GdkRectangle rect;
    uni_image_view_get_viewport (nav->view, &rect);

    /* Convert Zoom space to Nav space coordinates. */
    rect.width = (gdouble) rect.width / zoom2nav_factor;
    rect.height = (gdouble) rect.height / zoom2nav_factor;

    /* Subtract half of the XOR rectangles size from the coordinates. */
    mx -= (rect.width / 2);
    my -= (rect.height / 2);

    /* Do the adjusted coordinate conversion. */
    int zoom_x_ofs = mx * zoom2nav_factor;
    int zoom_y_ofs = my * zoom2nav_factor;

    uni_image_view_set_offset (nav->view, zoom_x_ofs, zoom_y_ofs, TRUE);
    uni_nav_draw_rectangle (nav, TRUE);

    return TRUE;
}
Exemplo n.º 2
0
static GdkRectangle
gtk_image_get_current_rectangle (UniNav * nav)
{
    GdkRectangle rect;
    uni_image_view_get_viewport (nav->view, &rect);

    /* Convert Zoom space to Nav space coordinates. */
    gdouble zoom2nav_factor = uni_nav_get_zoom2nav_factor (nav);
    rect.x = (gdouble) rect.x / zoom2nav_factor;
    rect.y = (gdouble) rect.y / zoom2nav_factor;
    rect.width = (gdouble) rect.width / zoom2nav_factor;
    rect.height = (gdouble) rect.height / zoom2nav_factor;

    return rect;
}
Exemplo n.º 3
0
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;
}