screen-cast: Implement MetaEisViewport in all stream types
This will be used to describe a eis_region in a eis_device. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3228>
This commit is contained in:
parent
7faac2aef4
commit
d4559a9ca4
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include "backends/meta-screen-cast-area-stream.h"
|
#include "backends/meta-screen-cast-area-stream.h"
|
||||||
|
|
||||||
|
#include "backends/meta-eis.h"
|
||||||
#include "backends/meta-screen-cast-area-stream-src.h"
|
#include "backends/meta-screen-cast-area-stream-src.h"
|
||||||
|
|
||||||
struct _MetaScreenCastAreaStream
|
struct _MetaScreenCastAreaStream
|
||||||
@ -32,9 +33,13 @@ struct _MetaScreenCastAreaStream
|
|||||||
float scale;
|
float scale;
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (MetaScreenCastAreaStream,
|
static void meta_eis_viewport_iface_init (MetaEisViewportInterface *eis_viewport_iface);
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_CODE (MetaScreenCastAreaStream,
|
||||||
meta_screen_cast_area_stream,
|
meta_screen_cast_area_stream,
|
||||||
META_TYPE_SCREEN_CAST_STREAM)
|
META_TYPE_SCREEN_CAST_STREAM,
|
||||||
|
G_IMPLEMENT_INTERFACE (META_TYPE_EIS_VIEWPORT,
|
||||||
|
meta_eis_viewport_iface_init))
|
||||||
|
|
||||||
ClutterStage *
|
ClutterStage *
|
||||||
meta_screen_cast_area_stream_get_stage (MetaScreenCastAreaStream *area_stream)
|
meta_screen_cast_area_stream_get_stage (MetaScreenCastAreaStream *area_stream)
|
||||||
@ -116,6 +121,85 @@ meta_screen_cast_area_stream_new (MetaScreenCastSession *session,
|
|||||||
return area_stream;
|
return area_stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_screen_cast_area_stream_is_standalone (MetaEisViewport *viewport)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
meta_screen_cast_area_stream_get_mapping_id (MetaEisViewport *viewport)
|
||||||
|
{
|
||||||
|
MetaScreenCastStream *stream = META_SCREEN_CAST_STREAM (viewport);
|
||||||
|
|
||||||
|
return meta_screen_cast_stream_get_mapping_id (stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_screen_cast_area_stream_get_position (MetaEisViewport *viewport,
|
||||||
|
int *out_x,
|
||||||
|
int *out_y)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_screen_cast_area_stream_get_size (MetaEisViewport *viewport,
|
||||||
|
int *out_width,
|
||||||
|
int *out_height)
|
||||||
|
{
|
||||||
|
MetaScreenCastAreaStream *area_stream =
|
||||||
|
META_SCREEN_CAST_AREA_STREAM (viewport);
|
||||||
|
|
||||||
|
*out_width = (int) roundf (area_stream->area.width * area_stream->scale);
|
||||||
|
*out_height = (int) roundf (area_stream->area.height * area_stream->scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
static double
|
||||||
|
meta_screen_cast_area_stream_get_physical_scale (MetaEisViewport *viewport)
|
||||||
|
{
|
||||||
|
MetaScreenCastAreaStream *area_stream =
|
||||||
|
META_SCREEN_CAST_AREA_STREAM (viewport);
|
||||||
|
|
||||||
|
return area_stream->scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
transform_position (MetaScreenCastAreaStream *area_stream,
|
||||||
|
double x,
|
||||||
|
double y,
|
||||||
|
double *out_x,
|
||||||
|
double *out_y)
|
||||||
|
{
|
||||||
|
*out_x = area_stream->area.x + (int) roundf (x / area_stream->scale);
|
||||||
|
*out_y = area_stream->area.y + (int) roundf (y / area_stream->scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_screen_cast_area_stream_transform_coordinate (MetaEisViewport *viewport,
|
||||||
|
double x,
|
||||||
|
double y,
|
||||||
|
double *out_x,
|
||||||
|
double *out_y)
|
||||||
|
{
|
||||||
|
MetaScreenCastAreaStream *area_stream =
|
||||||
|
META_SCREEN_CAST_AREA_STREAM (viewport);
|
||||||
|
|
||||||
|
transform_position (area_stream, x, y, out_x, out_y);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_eis_viewport_iface_init (MetaEisViewportInterface *eis_viewport_iface)
|
||||||
|
{
|
||||||
|
eis_viewport_iface->is_standalone = meta_screen_cast_area_stream_is_standalone;
|
||||||
|
eis_viewport_iface->get_mapping_id = meta_screen_cast_area_stream_get_mapping_id;
|
||||||
|
eis_viewport_iface->get_position = meta_screen_cast_area_stream_get_position;
|
||||||
|
eis_viewport_iface->get_size = meta_screen_cast_area_stream_get_size;
|
||||||
|
eis_viewport_iface->get_physical_scale = meta_screen_cast_area_stream_get_physical_scale;
|
||||||
|
eis_viewport_iface->transform_coordinate = meta_screen_cast_area_stream_transform_coordinate;
|
||||||
|
}
|
||||||
|
|
||||||
static MetaScreenCastStreamSrc *
|
static MetaScreenCastStreamSrc *
|
||||||
meta_screen_cast_area_stream_create_src (MetaScreenCastStream *stream,
|
meta_screen_cast_area_stream_create_src (MetaScreenCastStream *stream,
|
||||||
GError **error)
|
GError **error)
|
||||||
@ -156,8 +240,7 @@ meta_screen_cast_area_stream_transform_position (MetaScreenCastStream *stream,
|
|||||||
MetaScreenCastAreaStream *area_stream =
|
MetaScreenCastAreaStream *area_stream =
|
||||||
META_SCREEN_CAST_AREA_STREAM (stream);
|
META_SCREEN_CAST_AREA_STREAM (stream);
|
||||||
|
|
||||||
*x = area_stream->area.x + (int) roundf (stream_x / area_stream->scale);
|
transform_position (area_stream, stream_x, stream_y, x, y);
|
||||||
*y = area_stream->area.y + (int) roundf (stream_y / area_stream->scale);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include "backends/meta-screen-cast-monitor-stream.h"
|
#include "backends/meta-screen-cast-monitor-stream.h"
|
||||||
|
|
||||||
|
#include "backends/meta-eis.h"
|
||||||
#include "backends/meta-logical-monitor.h"
|
#include "backends/meta-logical-monitor.h"
|
||||||
#include "backends/meta-screen-cast-monitor-stream-src.h"
|
#include "backends/meta-screen-cast-monitor-stream-src.h"
|
||||||
|
|
||||||
@ -42,9 +43,13 @@ struct _MetaScreenCastMonitorStream
|
|||||||
MetaLogicalMonitor *logical_monitor;
|
MetaLogicalMonitor *logical_monitor;
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (MetaScreenCastMonitorStream,
|
static void meta_eis_viewport_iface_init (MetaEisViewportInterface *eis_viewport_iface);
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_CODE (MetaScreenCastMonitorStream,
|
||||||
meta_screen_cast_monitor_stream,
|
meta_screen_cast_monitor_stream,
|
||||||
META_TYPE_SCREEN_CAST_STREAM)
|
META_TYPE_SCREEN_CAST_STREAM,
|
||||||
|
G_IMPLEMENT_INTERFACE (META_TYPE_EIS_VIEWPORT,
|
||||||
|
meta_eis_viewport_iface_init))
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
update_monitor (MetaScreenCastMonitorStream *monitor_stream,
|
update_monitor (MetaScreenCastMonitorStream *monitor_stream,
|
||||||
@ -214,6 +219,81 @@ meta_screen_cast_monitor_stream_transform_position (MetaScreenCastStream *stream
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_screen_cast_monitor_stream_is_standalone (MetaEisViewport *viewport)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
meta_screen_cast_monitor_stream_get_mapping_id (MetaEisViewport *viewport)
|
||||||
|
{
|
||||||
|
MetaScreenCastStream *stream = META_SCREEN_CAST_STREAM (viewport);
|
||||||
|
|
||||||
|
return meta_screen_cast_stream_get_mapping_id (stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_screen_cast_monitor_stream_get_position (MetaEisViewport *viewport,
|
||||||
|
int *out_x,
|
||||||
|
int *out_y)
|
||||||
|
{
|
||||||
|
MetaScreenCastMonitorStream *monitor_stream =
|
||||||
|
META_SCREEN_CAST_MONITOR_STREAM (viewport);
|
||||||
|
MtkRectangle layout;
|
||||||
|
|
||||||
|
layout = meta_logical_monitor_get_layout (monitor_stream->logical_monitor);
|
||||||
|
*out_x = layout.x;
|
||||||
|
*out_y = layout.y;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_screen_cast_monitor_stream_get_size (MetaEisViewport *viewport,
|
||||||
|
int *out_width,
|
||||||
|
int *out_height)
|
||||||
|
{
|
||||||
|
MetaScreenCastMonitorStream *monitor_stream =
|
||||||
|
META_SCREEN_CAST_MONITOR_STREAM (viewport);
|
||||||
|
MtkRectangle layout;
|
||||||
|
|
||||||
|
layout = meta_logical_monitor_get_layout (monitor_stream->logical_monitor);
|
||||||
|
*out_width = layout.width;
|
||||||
|
*out_height = layout.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
static double
|
||||||
|
meta_screen_cast_monitor_stream_get_physical_scale (MetaEisViewport *viewport)
|
||||||
|
{
|
||||||
|
MetaScreenCastMonitorStream *monitor_stream =
|
||||||
|
META_SCREEN_CAST_MONITOR_STREAM (viewport);
|
||||||
|
|
||||||
|
return meta_logical_monitor_get_scale (monitor_stream->logical_monitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_screen_cast_monitor_stream_transform_coordinate (MetaEisViewport *viewport,
|
||||||
|
double x,
|
||||||
|
double y,
|
||||||
|
double *out_x,
|
||||||
|
double *out_y)
|
||||||
|
{
|
||||||
|
*out_x = x;
|
||||||
|
*out_y = y;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_eis_viewport_iface_init (MetaEisViewportInterface *eis_viewport_iface)
|
||||||
|
{
|
||||||
|
eis_viewport_iface->is_standalone = meta_screen_cast_monitor_stream_is_standalone;
|
||||||
|
eis_viewport_iface->get_mapping_id = meta_screen_cast_monitor_stream_get_mapping_id;
|
||||||
|
eis_viewport_iface->get_position = meta_screen_cast_monitor_stream_get_position;
|
||||||
|
eis_viewport_iface->get_size = meta_screen_cast_monitor_stream_get_size;
|
||||||
|
eis_viewport_iface->get_physical_scale = meta_screen_cast_monitor_stream_get_physical_scale;
|
||||||
|
eis_viewport_iface->transform_coordinate = meta_screen_cast_monitor_stream_transform_coordinate;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_screen_cast_monitor_stream_set_property (GObject *object,
|
meta_screen_cast_monitor_stream_set_property (GObject *object,
|
||||||
guint prop_id,
|
guint prop_id,
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include "backends/meta-screen-cast-stream.h"
|
#include "backends/meta-screen-cast-stream.h"
|
||||||
|
|
||||||
|
#include "backends/meta-remote-desktop-session.h"
|
||||||
#include "backends/meta-screen-cast-session.h"
|
#include "backends/meta-screen-cast-session.h"
|
||||||
|
|
||||||
#include "meta-private-enum-types.h"
|
#include "meta-private-enum-types.h"
|
||||||
@ -59,6 +60,8 @@ typedef struct _MetaScreenCastStreamPrivate
|
|||||||
MetaScreenCastFlag flags;
|
MetaScreenCastFlag flags;
|
||||||
|
|
||||||
MetaScreenCastStreamSrc *src;
|
MetaScreenCastStreamSrc *src;
|
||||||
|
|
||||||
|
char *mapping_id;
|
||||||
} MetaScreenCastStreamPrivate;
|
} MetaScreenCastStreamPrivate;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -217,6 +220,15 @@ meta_screen_cast_stream_get_flags (MetaScreenCastStream *stream)
|
|||||||
return priv->flags;
|
return priv->flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
meta_screen_cast_stream_get_mapping_id (MetaScreenCastStream *stream)
|
||||||
|
{
|
||||||
|
MetaScreenCastStreamPrivate *priv =
|
||||||
|
meta_screen_cast_stream_get_instance_private (stream);
|
||||||
|
|
||||||
|
return priv->mapping_id;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_screen_cast_stream_set_property (GObject *object,
|
meta_screen_cast_stream_set_property (GObject *object,
|
||||||
guint prop_id,
|
guint prop_id,
|
||||||
@ -286,6 +298,7 @@ meta_screen_cast_stream_finalize (GObject *object)
|
|||||||
meta_screen_cast_stream_close (stream);
|
meta_screen_cast_stream_close (stream);
|
||||||
|
|
||||||
g_clear_pointer (&priv->object_path, g_free);
|
g_clear_pointer (&priv->object_path, g_free);
|
||||||
|
g_clear_pointer (&priv->mapping_id, g_free);
|
||||||
|
|
||||||
G_OBJECT_CLASS (meta_screen_cast_stream_parent_class)->finalize (object);
|
G_OBJECT_CLASS (meta_screen_cast_stream_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
@ -358,6 +371,7 @@ meta_screen_cast_stream_initable_init (GInitable *initable,
|
|||||||
MetaDBusScreenCastStream *skeleton = META_DBUS_SCREEN_CAST_STREAM (stream);
|
MetaDBusScreenCastStream *skeleton = META_DBUS_SCREEN_CAST_STREAM (stream);
|
||||||
MetaScreenCastStreamPrivate *priv =
|
MetaScreenCastStreamPrivate *priv =
|
||||||
meta_screen_cast_stream_get_instance_private (stream);
|
meta_screen_cast_stream_get_instance_private (stream);
|
||||||
|
MetaRemoteDesktopSession *remote_desktop_session;
|
||||||
GVariantBuilder parameters_builder;
|
GVariantBuilder parameters_builder;
|
||||||
GVariant *parameters_variant;
|
GVariant *parameters_variant;
|
||||||
static unsigned int global_stream_number = 0;
|
static unsigned int global_stream_number = 0;
|
||||||
@ -365,6 +379,20 @@ meta_screen_cast_stream_initable_init (GInitable *initable,
|
|||||||
g_variant_builder_init (¶meters_builder, G_VARIANT_TYPE_VARDICT);
|
g_variant_builder_init (¶meters_builder, G_VARIANT_TYPE_VARDICT);
|
||||||
meta_screen_cast_stream_set_parameters (stream, ¶meters_builder);
|
meta_screen_cast_stream_set_parameters (stream, ¶meters_builder);
|
||||||
|
|
||||||
|
remote_desktop_session =
|
||||||
|
meta_screen_cast_session_get_remote_desktop_session (priv->session);
|
||||||
|
if (remote_desktop_session)
|
||||||
|
{
|
||||||
|
const char *mapping_id;
|
||||||
|
|
||||||
|
mapping_id =
|
||||||
|
meta_remote_desktop_session_acquire_mapping_id (remote_desktop_session);
|
||||||
|
priv->mapping_id = g_strdup (mapping_id);
|
||||||
|
g_variant_builder_add (¶meters_builder, "{sv}",
|
||||||
|
"mapping-id",
|
||||||
|
g_variant_new ("s", priv->mapping_id));
|
||||||
|
}
|
||||||
|
|
||||||
parameters_variant = g_variant_builder_end (¶meters_builder);
|
parameters_variant = g_variant_builder_end (¶meters_builder);
|
||||||
meta_dbus_screen_cast_stream_set_parameters (skeleton, parameters_variant);
|
meta_dbus_screen_cast_stream_set_parameters (skeleton, parameters_variant);
|
||||||
|
|
||||||
|
@ -68,3 +68,4 @@ MetaScreenCastCursorMode meta_screen_cast_stream_get_cursor_mode (MetaScreenCast
|
|||||||
|
|
||||||
MetaScreenCastFlag meta_screen_cast_stream_get_flags (MetaScreenCastStream *stream);
|
MetaScreenCastFlag meta_screen_cast_stream_get_flags (MetaScreenCastStream *stream);
|
||||||
|
|
||||||
|
const char * meta_screen_cast_stream_get_mapping_id (MetaScreenCastStream *stream);
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
|
|
||||||
#include "backends/meta-crtc-mode.h"
|
#include "backends/meta-crtc-mode.h"
|
||||||
#include "backends/meta-cursor-tracker-private.h"
|
#include "backends/meta-cursor-tracker-private.h"
|
||||||
|
#include "backends/meta-monitor.h"
|
||||||
|
#include "backends/meta-output.h"
|
||||||
#include "backends/meta-screen-cast-session.h"
|
#include "backends/meta-screen-cast-session.h"
|
||||||
#include "backends/meta-stage-private.h"
|
#include "backends/meta-stage-private.h"
|
||||||
#include "backends/meta-virtual-monitor.h"
|
#include "backends/meta-virtual-monitor.h"
|
||||||
@ -108,6 +110,16 @@ meta_screen_cast_virtual_stream_src_get_view (MetaScreenCastVirtualStreamSrc *vi
|
|||||||
return view_from_src (META_SCREEN_CAST_STREAM_SRC (virtual_src));
|
return view_from_src (META_SCREEN_CAST_STREAM_SRC (virtual_src));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MetaLogicalMonitor *
|
||||||
|
meta_screen_cast_virtual_stream_src_logical_monitor (MetaScreenCastVirtualStreamSrc *virtual_src)
|
||||||
|
{
|
||||||
|
MetaVirtualMonitor *virtual_monitor = virtual_src->virtual_monitor;
|
||||||
|
MetaOutput *output = meta_virtual_monitor_get_output (virtual_monitor);
|
||||||
|
MetaMonitor *monitor = meta_output_get_monitor (output);
|
||||||
|
|
||||||
|
return meta_monitor_get_logical_monitor (monitor);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sync_cursor_state (MetaScreenCastVirtualStreamSrc *virtual_src)
|
sync_cursor_state (MetaScreenCastVirtualStreamSrc *virtual_src)
|
||||||
{
|
{
|
||||||
|
@ -31,3 +31,5 @@ MetaScreenCastVirtualStreamSrc * meta_screen_cast_virtual_stream_src_new (MetaSc
|
|||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
ClutterStageView * meta_screen_cast_virtual_stream_src_get_view (MetaScreenCastVirtualStreamSrc *virtual_src);
|
ClutterStageView * meta_screen_cast_virtual_stream_src_get_view (MetaScreenCastVirtualStreamSrc *virtual_src);
|
||||||
|
|
||||||
|
MetaLogicalMonitor * meta_screen_cast_virtual_stream_src_logical_monitor (MetaScreenCastVirtualStreamSrc *virtual_src);
|
||||||
|
@ -20,18 +20,23 @@
|
|||||||
|
|
||||||
#include "backends/meta-screen-cast-virtual-stream.h"
|
#include "backends/meta-screen-cast-virtual-stream.h"
|
||||||
|
|
||||||
|
#include "backends/meta-eis.h"
|
||||||
|
#include "backends/meta-logical-monitor.h"
|
||||||
#include "backends/meta-screen-cast-virtual-stream-src.h"
|
#include "backends/meta-screen-cast-virtual-stream-src.h"
|
||||||
#include "backends/meta-virtual-monitor.h"
|
#include "backends/meta-virtual-monitor.h"
|
||||||
|
|
||||||
|
|
||||||
struct _MetaScreenCastVirtualStream
|
struct _MetaScreenCastVirtualStream
|
||||||
{
|
{
|
||||||
MetaScreenCastStream parent;
|
MetaScreenCastStream parent;
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (MetaScreenCastVirtualStream,
|
static void meta_eis_viewport_iface_init (MetaEisViewportInterface *eis_viewport_iface);
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_CODE (MetaScreenCastVirtualStream,
|
||||||
meta_screen_cast_virtual_stream,
|
meta_screen_cast_virtual_stream,
|
||||||
META_TYPE_SCREEN_CAST_STREAM)
|
META_TYPE_SCREEN_CAST_STREAM,
|
||||||
|
G_IMPLEMENT_INTERFACE (META_TYPE_EIS_VIEWPORT,
|
||||||
|
meta_eis_viewport_iface_init))
|
||||||
|
|
||||||
MetaScreenCastVirtualStream *
|
MetaScreenCastVirtualStream *
|
||||||
meta_screen_cast_virtual_stream_new (MetaScreenCastSession *session,
|
meta_screen_cast_virtual_stream_new (MetaScreenCastSession *session,
|
||||||
@ -56,6 +61,99 @@ meta_screen_cast_virtual_stream_new (MetaScreenCastSession *session,
|
|||||||
return virtual_stream;
|
return virtual_stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_screen_cast_virtual_stream_is_standalone (MetaEisViewport *viewport)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
meta_screen_cast_virtual_stream_get_mapping_id (MetaEisViewport *viewport)
|
||||||
|
{
|
||||||
|
MetaScreenCastStream *stream = META_SCREEN_CAST_STREAM (viewport);
|
||||||
|
|
||||||
|
return meta_screen_cast_stream_get_mapping_id (stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_screen_cast_virtual_stream_get_position (MetaEisViewport *viewport,
|
||||||
|
int *out_x,
|
||||||
|
int *out_y)
|
||||||
|
{
|
||||||
|
MetaScreenCastVirtualStream *virtual_stream =
|
||||||
|
META_SCREEN_CAST_VIRTUAL_STREAM (viewport);
|
||||||
|
MetaScreenCastStream *stream = META_SCREEN_CAST_STREAM (virtual_stream);
|
||||||
|
MetaScreenCastStreamSrc *src = meta_screen_cast_stream_get_src (stream);
|
||||||
|
MetaScreenCastVirtualStreamSrc *virtual_src =
|
||||||
|
META_SCREEN_CAST_VIRTUAL_STREAM_SRC (src);
|
||||||
|
MetaLogicalMonitor *logical_monitor =
|
||||||
|
meta_screen_cast_virtual_stream_src_logical_monitor (virtual_src);
|
||||||
|
MtkRectangle layout;
|
||||||
|
|
||||||
|
layout = meta_logical_monitor_get_layout (logical_monitor);
|
||||||
|
*out_x = layout.x;
|
||||||
|
*out_y = layout.y;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_screen_cast_virtual_stream_get_size (MetaEisViewport *viewport,
|
||||||
|
int *out_width,
|
||||||
|
int *out_height)
|
||||||
|
{
|
||||||
|
MetaScreenCastVirtualStream *virtual_stream =
|
||||||
|
META_SCREEN_CAST_VIRTUAL_STREAM (viewport);
|
||||||
|
MetaScreenCastStream *stream = META_SCREEN_CAST_STREAM (virtual_stream);
|
||||||
|
MetaScreenCastStreamSrc *src = meta_screen_cast_stream_get_src (stream);
|
||||||
|
MetaScreenCastVirtualStreamSrc *virtual_src =
|
||||||
|
META_SCREEN_CAST_VIRTUAL_STREAM_SRC (src);
|
||||||
|
MetaLogicalMonitor *logical_monitor =
|
||||||
|
meta_screen_cast_virtual_stream_src_logical_monitor (virtual_src);
|
||||||
|
MtkRectangle layout;
|
||||||
|
|
||||||
|
layout = meta_logical_monitor_get_layout (logical_monitor);
|
||||||
|
*out_width = layout.width;
|
||||||
|
*out_height = layout.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
static double
|
||||||
|
meta_screen_cast_virtual_stream_get_physical_scale (MetaEisViewport *viewport)
|
||||||
|
{
|
||||||
|
MetaScreenCastVirtualStream *virtual_stream =
|
||||||
|
META_SCREEN_CAST_VIRTUAL_STREAM (viewport);
|
||||||
|
MetaScreenCastStream *stream = META_SCREEN_CAST_STREAM (virtual_stream);
|
||||||
|
MetaScreenCastStreamSrc *src = meta_screen_cast_stream_get_src (stream);
|
||||||
|
MetaScreenCastVirtualStreamSrc *virtual_src =
|
||||||
|
META_SCREEN_CAST_VIRTUAL_STREAM_SRC (src);
|
||||||
|
MetaLogicalMonitor *logical_monitor =
|
||||||
|
meta_screen_cast_virtual_stream_src_logical_monitor (virtual_src);
|
||||||
|
|
||||||
|
return meta_logical_monitor_get_scale (logical_monitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_screen_cast_virtual_stream_transform_coordinate (MetaEisViewport *viewport,
|
||||||
|
double x,
|
||||||
|
double y,
|
||||||
|
double *out_x,
|
||||||
|
double *out_y)
|
||||||
|
{
|
||||||
|
*out_x = x;
|
||||||
|
*out_y = y;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_eis_viewport_iface_init (MetaEisViewportInterface *eis_viewport_iface)
|
||||||
|
{
|
||||||
|
eis_viewport_iface->is_standalone = meta_screen_cast_virtual_stream_is_standalone;
|
||||||
|
eis_viewport_iface->get_mapping_id = meta_screen_cast_virtual_stream_get_mapping_id;
|
||||||
|
eis_viewport_iface->get_position = meta_screen_cast_virtual_stream_get_position;
|
||||||
|
eis_viewport_iface->get_size = meta_screen_cast_virtual_stream_get_size;
|
||||||
|
eis_viewport_iface->get_physical_scale = meta_screen_cast_virtual_stream_get_physical_scale;
|
||||||
|
eis_viewport_iface->transform_coordinate = meta_screen_cast_virtual_stream_transform_coordinate;
|
||||||
|
}
|
||||||
|
|
||||||
static MetaScreenCastStreamSrc *
|
static MetaScreenCastStreamSrc *
|
||||||
meta_screen_cast_virtual_stream_create_src (MetaScreenCastStream *stream,
|
meta_screen_cast_virtual_stream_create_src (MetaScreenCastStream *stream,
|
||||||
GError **error)
|
GError **error)
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include "backends/meta-screen-cast-window-stream.h"
|
#include "backends/meta-screen-cast-window-stream.h"
|
||||||
|
|
||||||
|
#include "backends/meta-eis.h"
|
||||||
#include "backends/meta-logical-monitor.h"
|
#include "backends/meta-logical-monitor.h"
|
||||||
#include "backends/meta-monitor-manager-private.h"
|
#include "backends/meta-monitor-manager-private.h"
|
||||||
#include "backends/meta-screen-cast-session.h"
|
#include "backends/meta-screen-cast-session.h"
|
||||||
@ -54,11 +55,15 @@ static GInitableIface *initable_parent_iface;
|
|||||||
static void
|
static void
|
||||||
meta_screen_cast_window_stream_init_initable_iface (GInitableIface *iface);
|
meta_screen_cast_window_stream_init_initable_iface (GInitableIface *iface);
|
||||||
|
|
||||||
|
static void meta_eis_viewport_iface_init (MetaEisViewportInterface *eis_viewport_iface);
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (MetaScreenCastWindowStream,
|
G_DEFINE_TYPE_WITH_CODE (MetaScreenCastWindowStream,
|
||||||
meta_screen_cast_window_stream,
|
meta_screen_cast_window_stream,
|
||||||
META_TYPE_SCREEN_CAST_STREAM,
|
META_TYPE_SCREEN_CAST_STREAM,
|
||||||
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
|
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
|
||||||
meta_screen_cast_window_stream_init_initable_iface))
|
meta_screen_cast_window_stream_init_initable_iface)
|
||||||
|
G_IMPLEMENT_INTERFACE (META_TYPE_EIS_VIEWPORT,
|
||||||
|
meta_eis_viewport_iface_init))
|
||||||
|
|
||||||
MetaWindow *
|
MetaWindow *
|
||||||
meta_screen_cast_window_stream_get_window (MetaScreenCastWindowStream *window_stream)
|
meta_screen_cast_window_stream_get_window (MetaScreenCastWindowStream *window_stream)
|
||||||
@ -271,6 +276,77 @@ meta_screen_cast_window_stream_init_initable_iface (GInitableIface *iface)
|
|||||||
iface->init = meta_screen_cast_window_stream_initable_init;
|
iface->init = meta_screen_cast_window_stream_initable_init;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_screen_cast_window_stream_is_standalone (MetaEisViewport *viewport)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
meta_screen_cast_window_stream_get_mapping_id (MetaEisViewport *viewport)
|
||||||
|
{
|
||||||
|
MetaScreenCastStream *stream = META_SCREEN_CAST_STREAM (viewport);
|
||||||
|
|
||||||
|
return meta_screen_cast_stream_get_mapping_id (stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_screen_cast_window_stream_get_position (MetaEisViewport *viewport,
|
||||||
|
int *out_x,
|
||||||
|
int *out_y)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_screen_cast_window_stream_get_size (MetaEisViewport *viewport,
|
||||||
|
int *out_width,
|
||||||
|
int *out_height)
|
||||||
|
{
|
||||||
|
MetaScreenCastWindowStream *window_stream =
|
||||||
|
META_SCREEN_CAST_WINDOW_STREAM (viewport);
|
||||||
|
|
||||||
|
*out_width = window_stream->stream_width;
|
||||||
|
*out_height = window_stream->stream_height;
|
||||||
|
}
|
||||||
|
|
||||||
|
static double
|
||||||
|
meta_screen_cast_window_stream_get_physical_scale (MetaEisViewport *viewport)
|
||||||
|
{
|
||||||
|
return 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_screen_cast_window_stream_transform_coordinate (MetaEisViewport *viewport,
|
||||||
|
double x,
|
||||||
|
double y,
|
||||||
|
double *out_x,
|
||||||
|
double *out_y)
|
||||||
|
{
|
||||||
|
MetaScreenCastWindowStream *window_stream =
|
||||||
|
META_SCREEN_CAST_WINDOW_STREAM (viewport);
|
||||||
|
MetaScreenCastWindow *screen_cast_window =
|
||||||
|
META_SCREEN_CAST_WINDOW (meta_window_actor_from_window (window_stream->window));
|
||||||
|
|
||||||
|
meta_screen_cast_window_transform_relative_position (screen_cast_window,
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
out_x,
|
||||||
|
out_y);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
meta_eis_viewport_iface_init (MetaEisViewportInterface *eis_viewport_iface)
|
||||||
|
{
|
||||||
|
eis_viewport_iface->is_standalone = meta_screen_cast_window_stream_is_standalone;
|
||||||
|
eis_viewport_iface->get_mapping_id = meta_screen_cast_window_stream_get_mapping_id;
|
||||||
|
eis_viewport_iface->get_position = meta_screen_cast_window_stream_get_position;
|
||||||
|
eis_viewport_iface->get_size = meta_screen_cast_window_stream_get_size;
|
||||||
|
eis_viewport_iface->get_physical_scale = meta_screen_cast_window_stream_get_physical_scale;
|
||||||
|
eis_viewport_iface->transform_coordinate = meta_screen_cast_window_stream_transform_coordinate;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_screen_cast_window_stream_init (MetaScreenCastWindowStream *window_stream)
|
meta_screen_cast_window_stream_init (MetaScreenCastWindowStream *window_stream)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user