event_name, button, posx, posy);
}
+
+static void
+gst_glimage_sink_mouse_scroll_event_cb (GstGLWindow * window,
+ double posx, double posy, double delta_x, double delta_y,
+ GstGLImageSink * gl_sink)
+{
+ GST_DEBUG_OBJECT (gl_sink, "event scroll at %g, %g", posx, posy);
+ gst_navigation_send_mouse_scroll_event (GST_NAVIGATION (gl_sink),
+ posx, posy, delta_x, delta_y);
+}
+
static gboolean
_ensure_gl_setup (GstGLImageSink * gl_sink)
{
gl_sink->mouse_sig_id =
g_signal_connect (window, "mouse-event",
G_CALLBACK (gst_glimage_sink_mouse_event_cb), gl_sink);
+ gl_sink->mouse_scroll_sig_id =
+ g_signal_connect (window, "scroll-event",
+ G_CALLBACK (gst_glimage_sink_mouse_scroll_event_cb), gl_sink);
gst_gl_window_set_render_rectangle (window, gl_sink->x, gl_sink->y,
gl_sink->width, gl_sink->height);
if (glimage_sink->mouse_sig_id)
g_signal_handler_disconnect (window, glimage_sink->mouse_sig_id);
glimage_sink->mouse_sig_id = 0;
+ if (glimage_sink->mouse_scroll_sig_id)
+ g_signal_handler_disconnect (window,
+ glimage_sink->mouse_scroll_sig_id);
+ glimage_sink->mouse_scroll_sig_id = 0;
gst_object_unref (window);
gst_object_unref (glimage_sink->context);
if (gl_sink->mouse_sig_id)
g_signal_handler_disconnect (window, gl_sink->mouse_sig_id);
gl_sink->mouse_sig_id = 0;
+ if (gl_sink->mouse_scroll_sig_id)
+ g_signal_handler_disconnect (window, gl_sink->mouse_scroll_sig_id);
+ gl_sink->mouse_scroll_sig_id = 0;
g_atomic_int_set (&gl_sink->to_quit, 1);
SIGNAL_0,
EVENT_MOUSE_SIGNAL,
EVENT_KEY_SIGNAL,
+ EVENT_SCROLL_SIGNAL,
LAST_SIGNAL
};
G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 2, G_TYPE_STRING,
G_TYPE_STRING);
+ /**
+ * GstGLWindow::scroll-event:
+ * @object: the #GstGLWindow
+ * @x: the x coordinate of the mouse event
+ * @y: the y coordinate of the mouse event
+ * @delta_x: the x offset of the scroll event
+ * @delta_y: the y offset of the scroll event
+ *
+ * Will be emitted when a mouse scroll event is received by the GstGLwindow.
+ *
+ * Since: 1.18
+ */
+ gst_gl_window_signals[EVENT_SCROLL_SIGNAL] =
+ g_signal_new ("scroll-event", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic,
+ G_TYPE_NONE, 4, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE,
+ G_TYPE_DOUBLE);
+
_init_debug ();
}
event_type, button, posx, posy);
}
+void
+gst_gl_window_send_scroll_event (GstGLWindow * window,
+ double posx, double posy, double delta_x, double delta_y)
+{
+ g_signal_emit (window, gst_gl_window_signals[EVENT_SCROLL_SIGNAL], 0,
+ posx, posy, delta_x, delta_y);
+}
+
+
/**
* gst_gl_window_handle_events:
* @window: a #GstGLWindow