From 4d5e1f690dcf42997f09c1638ea96ae7a603baef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Mon, 29 Jan 2018 14:46:13 +0800 Subject: [PATCH] screen-cast-stream: Add API to transform relative coordinates Will be used to translate stream local coordinates to stage coordinates. --- .../meta-screen-cast-monitor-stream.c | 19 +++++++++++++++++++ src/backends/meta-screen-cast-stream.c | 14 ++++++++++++++ src/backends/meta-screen-cast-stream.h | 11 +++++++++++ 3 files changed, 44 insertions(+) diff --git a/src/backends/meta-screen-cast-monitor-stream.c b/src/backends/meta-screen-cast-monitor-stream.c index 853090a43..df43f977c 100644 --- a/src/backends/meta-screen-cast-monitor-stream.c +++ b/src/backends/meta-screen-cast-monitor-stream.c @@ -176,6 +176,24 @@ meta_screen_cast_monitor_stream_set_parameters (MetaScreenCastStream *stream, logical_monitor_layout.height)); } +static void +meta_screen_cast_monitor_stream_transform_position (MetaScreenCastStream *stream, + double stream_x, + double stream_y, + double *x, + double *y) +{ + MetaScreenCastMonitorStream *monitor_stream = + META_SCREEN_CAST_MONITOR_STREAM (stream); + MetaRectangle logical_monitor_layout; + + logical_monitor_layout = + meta_logical_monitor_get_layout (monitor_stream->logical_monitor); + + *x = logical_monitor_layout.x + stream_x; + *y = logical_monitor_layout.y + stream_y; +} + static void meta_screen_cast_monitor_stream_set_property (GObject *object, guint prop_id, @@ -247,6 +265,7 @@ meta_screen_cast_monitor_stream_class_init (MetaScreenCastMonitorStreamClass *kl stream_class->create_src = meta_screen_cast_monitor_stream_create_src; stream_class->set_parameters = meta_screen_cast_monitor_stream_set_parameters; + stream_class->transform_position = meta_screen_cast_monitor_stream_transform_position; g_object_class_install_property (object_class, PROP_MONITOR, diff --git a/src/backends/meta-screen-cast-stream.c b/src/backends/meta-screen-cast-stream.c index 1c9613585..97ee4bfcf 100644 --- a/src/backends/meta-screen-cast-stream.c +++ b/src/backends/meta-screen-cast-stream.c @@ -136,6 +136,20 @@ meta_screen_cast_stream_get_object_path (MetaScreenCastStream *stream) return priv->object_path; } +void +meta_screen_cast_stream_transform_position (MetaScreenCastStream *stream, + double stream_x, + double stream_y, + double *x, + double *y) +{ + META_SCREEN_CAST_STREAM_GET_CLASS (stream)->transform_position (stream, + stream_x, + stream_y, + x, + y); +} + static void meta_screen_cast_stream_set_property (GObject *object, guint prop_id, diff --git a/src/backends/meta-screen-cast-stream.h b/src/backends/meta-screen-cast-stream.h index 36706ee7e..fd7930c4c 100644 --- a/src/backends/meta-screen-cast-stream.h +++ b/src/backends/meta-screen-cast-stream.h @@ -41,6 +41,11 @@ struct _MetaScreenCastStreamClass GError **error); void (* set_parameters) (MetaScreenCastStream *stream, GVariantBuilder *parameters_builder); + void (* transform_position) (MetaScreenCastStream *stream, + double stream_x, + double stream_y, + double *x, + double *y); }; gboolean meta_screen_cast_stream_start (MetaScreenCastStream *stream, @@ -50,4 +55,10 @@ void meta_screen_cast_stream_close (MetaScreenCastStream *stream); char * meta_screen_cast_stream_get_object_path (MetaScreenCastStream *stream); +void meta_screen_cast_stream_transform_position (MetaScreenCastStream *stream, + double stream_x, + double stream_y, + double *x, + double *y); + #endif /* META_SCREEN_CAST_STREAM_H */