GestureController::ZoomGesture::ZoomGesture(WebPageProxy& page)
    : Gesture(gtk_gesture_zoom_new(page.viewWidget()), page)
    , m_initialScale(0)
    , m_scale(0)
{
    g_signal_connect_swapped(m_gesture.get(), "begin", G_CALLBACK(begin), this);
    g_signal_connect_swapped(m_gesture.get(), "scale-changed", G_CALLBACK(scaleChanged), this);
}
示例#2
0
文件: gestures.c 项目: ELWIN-MAO/gtk
GtkWidget *
do_gestures (GtkWidget *do_widget)
{
    GtkWidget *drawing_area;
    GtkGesture *gesture;

    if (!window)
    {
        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_default_size (GTK_WINDOW (window), 400, 400);
        gtk_window_set_title (GTK_WINDOW (window), "Gestures");
        g_signal_connect (window, "destroy",
                          G_CALLBACK (gtk_widget_destroyed), &window);

        drawing_area = gtk_drawing_area_new ();
        gtk_container_add (GTK_CONTAINER (window), drawing_area);
        gtk_widget_add_events (drawing_area,
                               GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
                               GDK_POINTER_MOTION_MASK | GDK_TOUCH_MASK);

        g_signal_connect (drawing_area, "draw",
                          G_CALLBACK (drawing_area_draw), NULL);

        /* Swipe */
        gesture = gtk_gesture_swipe_new (drawing_area);
        g_signal_connect (gesture, "swipe",
                          G_CALLBACK (swipe_gesture_swept), drawing_area);
        gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture),
                GTK_PHASE_BUBBLE);
        g_object_weak_ref (G_OBJECT (drawing_area), (GWeakNotify) g_object_unref, gesture);

        /* Long press */
        gesture = gtk_gesture_long_press_new (drawing_area);
        g_signal_connect (gesture, "pressed",
                          G_CALLBACK (long_press_gesture_pressed), drawing_area);
        g_signal_connect (gesture, "end",
                          G_CALLBACK (long_press_gesture_end), drawing_area);
        gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture),
                GTK_PHASE_BUBBLE);
        g_object_weak_ref (G_OBJECT (drawing_area), (GWeakNotify) g_object_unref, gesture);

        /* Rotate */
        rotate = gesture = gtk_gesture_rotate_new (drawing_area);
        g_signal_connect (gesture, "angle-changed",
                          G_CALLBACK (rotation_angle_changed), drawing_area);
        gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture),
                GTK_PHASE_BUBBLE);
        g_object_weak_ref (G_OBJECT (drawing_area), (GWeakNotify) g_object_unref, gesture);

        /* Zoom */
        zoom = gesture = gtk_gesture_zoom_new (drawing_area);
        g_signal_connect (gesture, "scale-changed",
                          G_CALLBACK (zoom_scale_changed), drawing_area);
        gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (gesture),
                GTK_PHASE_BUBBLE);
        g_object_weak_ref (G_OBJECT (drawing_area), (GWeakNotify) g_object_unref, gesture);
    }

    if (!gtk_widget_get_visible (window))
        gtk_widget_show_all (window);
    else
    {
        gtk_widget_destroy (window);
        window = NULL;
    }

    return window;
}