mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-25 07:26:29 +00:00
vulkan/window: add support for mouse/keyboard events
This commit is contained in:
parent
9b7c20bfca
commit
0ea427823e
2 changed files with 94 additions and 0 deletions
|
@ -99,6 +99,8 @@ enum
|
||||||
SIGNAL_CLOSE,
|
SIGNAL_CLOSE,
|
||||||
SIGNAL_DRAW,
|
SIGNAL_DRAW,
|
||||||
SIGNAL_RESIZE,
|
SIGNAL_RESIZE,
|
||||||
|
SIGNAL_MOUSE_EVENT,
|
||||||
|
SIGNAL_KEY_EVENT,
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -202,6 +204,38 @@ gst_vulkan_window_class_init (GstVulkanWindowClass * klass)
|
||||||
g_signal_new ("resize", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0,
|
g_signal_new ("resize", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0,
|
||||||
NULL, NULL, NULL, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
|
NULL, NULL, NULL, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstVulkanWindow::mouse-event:
|
||||||
|
* @object: the #GstVulkanWindow
|
||||||
|
* @id: the name of the event
|
||||||
|
* @button: the id of the button
|
||||||
|
* @x: the x coordinate of the mouse event
|
||||||
|
* @y: the y coordinate of the mouse event
|
||||||
|
*
|
||||||
|
* Will be emitted when a mouse event is received by the #GstVulkanWindow.
|
||||||
|
*
|
||||||
|
* Since: 1.18
|
||||||
|
*/
|
||||||
|
gst_vulkan_window_signals[SIGNAL_MOUSE_EVENT] =
|
||||||
|
g_signal_new ("mouse-event", G_TYPE_FROM_CLASS (klass),
|
||||||
|
G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 4, G_TYPE_STRING,
|
||||||
|
G_TYPE_INT, G_TYPE_DOUBLE, G_TYPE_DOUBLE);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstVulkanWindow::key-event:
|
||||||
|
* @object: the #GstVulkanWindow
|
||||||
|
* @id: the name of the event
|
||||||
|
* @key: the id of the key pressed
|
||||||
|
*
|
||||||
|
* Will be emitted when a key event is received by the #GstVulkanWindow.
|
||||||
|
*
|
||||||
|
* Since: 1.18
|
||||||
|
*/
|
||||||
|
gst_vulkan_window_signals[SIGNAL_KEY_EVENT] =
|
||||||
|
g_signal_new ("key-event", G_TYPE_FROM_CLASS (klass),
|
||||||
|
G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 2, G_TYPE_STRING,
|
||||||
|
G_TYPE_STRING);
|
||||||
|
|
||||||
gobject_class->set_property = gst_vulkan_window_set_property;
|
gobject_class->set_property = gst_vulkan_window_set_property;
|
||||||
gobject_class->get_property = gst_vulkan_window_get_property;
|
gobject_class->get_property = gst_vulkan_window_get_property;
|
||||||
gobject_class->finalize = gst_vulkan_window_finalize;
|
gobject_class->finalize = gst_vulkan_window_finalize;
|
||||||
|
@ -471,6 +505,50 @@ gst_vulkan_window_get_surface_dimensions (GstVulkanWindow * window,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gst_vulkan_window_send_key_event (GstVulkanWindow * window,
|
||||||
|
const char *event_type, const char *key_str)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GST_IS_VULKAN_WINDOW (window));
|
||||||
|
|
||||||
|
g_signal_emit (window, gst_vulkan_window_signals[SIGNAL_KEY_EVENT], 0,
|
||||||
|
event_type, key_str);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gst_vulkan_window_send_mouse_event (GstVulkanWindow * window,
|
||||||
|
const char *event_type, int button, double posx, double posy)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GST_IS_VULKAN_WINDOW (window));
|
||||||
|
|
||||||
|
g_signal_emit (window, gst_vulkan_window_signals[SIGNAL_MOUSE_EVENT], 0,
|
||||||
|
event_type, button, posx, posy);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_vulkan_window_handle_events:
|
||||||
|
* @window: a #GstVulkanWindow
|
||||||
|
* @handle_events: a #gboolean indicating if events should be handled or not.
|
||||||
|
*
|
||||||
|
* Tell a @window that it should handle events from the window system. These
|
||||||
|
* events are forwarded upstream as navigation events. In some window systems
|
||||||
|
* events are not propagated in the window hierarchy if a client is listening
|
||||||
|
* for them. This method allows you to disable events handling completely
|
||||||
|
* from the @window.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gst_vulkan_window_handle_events (GstVulkanWindow * window,
|
||||||
|
gboolean handle_events)
|
||||||
|
{
|
||||||
|
GstVulkanWindowClass *window_class;
|
||||||
|
|
||||||
|
g_return_if_fail (GST_IS_VULKAN_WINDOW (window));
|
||||||
|
window_class = GST_VULKAN_WINDOW_GET_CLASS (window);
|
||||||
|
|
||||||
|
if (window_class->handle_events)
|
||||||
|
window_class->handle_events (window, handle_events);
|
||||||
|
}
|
||||||
|
|
||||||
GType gst_vulkan_dummy_window_get_type (void);
|
GType gst_vulkan_dummy_window_get_type (void);
|
||||||
G_DEFINE_TYPE (GstVulkanDummyWindow, gst_vulkan_dummy_window,
|
G_DEFINE_TYPE (GstVulkanDummyWindow, gst_vulkan_dummy_window,
|
||||||
GST_TYPE_VULKAN_WINDOW);
|
GST_TYPE_VULKAN_WINDOW);
|
||||||
|
|
|
@ -91,6 +91,8 @@ struct _GstVulkanWindowClass {
|
||||||
void (*get_surface_dimensions) (GstVulkanWindow *window,
|
void (*get_surface_dimensions) (GstVulkanWindow *window,
|
||||||
guint * width,
|
guint * width,
|
||||||
guint * height);
|
guint * height);
|
||||||
|
void (*handle_events) (GstVulkanWindow *window,
|
||||||
|
gboolean handle_events);
|
||||||
|
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
gpointer _reserved[GST_PADDING];
|
gpointer _reserved[GST_PADDING];
|
||||||
|
@ -116,6 +118,20 @@ GST_VULKAN_API
|
||||||
void gst_vulkan_window_set_window_handle (GstVulkanWindow *window,
|
void gst_vulkan_window_set_window_handle (GstVulkanWindow *window,
|
||||||
guintptr handle);
|
guintptr handle);
|
||||||
|
|
||||||
|
GST_VULKAN_API
|
||||||
|
void gst_vulkan_window_handle_events (GstVulkanWindow * window,
|
||||||
|
gboolean handle_events);
|
||||||
|
GST_VULKAN_API
|
||||||
|
void gst_vulkan_window_send_key_event (GstVulkanWindow * window,
|
||||||
|
const char * event_type,
|
||||||
|
const char * key_str);
|
||||||
|
GST_VULKAN_API
|
||||||
|
void gst_vulkan_window_send_mouse_event (GstVulkanWindow * window,
|
||||||
|
const char * event_type,
|
||||||
|
int button,
|
||||||
|
double posx,
|
||||||
|
double posy);
|
||||||
|
|
||||||
GST_VULKAN_API
|
GST_VULKAN_API
|
||||||
gboolean gst_vulkan_window_open (GstVulkanWindow *window,
|
gboolean gst_vulkan_window_open (GstVulkanWindow *window,
|
||||||
GError ** error);
|
GError ** error);
|
||||||
|
|
Loading…
Reference in a new issue