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:

committed by
Robert Mader

parent
7faac2aef4
commit
d4559a9ca4
@ -20,6 +20,7 @@
|
||||
|
||||
#include "backends/meta-screen-cast-window-stream.h"
|
||||
|
||||
#include "backends/meta-eis.h"
|
||||
#include "backends/meta-logical-monitor.h"
|
||||
#include "backends/meta-monitor-manager-private.h"
|
||||
#include "backends/meta-screen-cast-session.h"
|
||||
@ -54,11 +55,15 @@ static GInitableIface *initable_parent_iface;
|
||||
static void
|
||||
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,
|
||||
meta_screen_cast_window_stream,
|
||||
META_TYPE_SCREEN_CAST_STREAM,
|
||||
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 *
|
||||
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;
|
||||
}
|
||||
|
||||
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
|
||||
meta_screen_cast_window_stream_init (MetaScreenCastWindowStream *window_stream)
|
||||
{
|
||||
|
Reference in New Issue
Block a user