mirror of
https://github.com/brl/mutter.git
synced 2025-03-25 04:33:52 +00:00
screen-cast-window-src: Keep a screen cast window instead of an actor
Practically it's the same object, but ideally, we should not deal with "actors" anywhere here. https://gitlab.gnome.org/GNOME/mutter/merge_requests/413
This commit is contained in:
parent
14c6a347c1
commit
c80ba819e7
@ -31,10 +31,10 @@ struct _MetaScreenCastWindowStreamSrc
|
|||||||
{
|
{
|
||||||
MetaScreenCastStreamSrc parent;
|
MetaScreenCastStreamSrc parent;
|
||||||
|
|
||||||
MetaWindowActor *window_actor;
|
MetaScreenCastWindow *screen_cast_window;
|
||||||
|
|
||||||
unsigned long actor_after_paint_handler_id;
|
unsigned long screen_cast_window_after_paint_handler_id;
|
||||||
unsigned long actor_destroyed_handler_id;
|
unsigned long screen_cast_window_destroyed_handler_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (MetaScreenCastWindowStreamSrc,
|
G_DEFINE_TYPE (MetaScreenCastWindowStreamSrc,
|
||||||
@ -88,15 +88,14 @@ capture_into (MetaScreenCastWindowStreamSrc *window_src,
|
|||||||
uint8_t *data)
|
uint8_t *data)
|
||||||
{
|
{
|
||||||
MetaRectangle stream_rect;
|
MetaRectangle stream_rect;
|
||||||
MetaScreenCastWindow *screen_cast_window;
|
|
||||||
|
|
||||||
stream_rect.x = 0;
|
stream_rect.x = 0;
|
||||||
stream_rect.y = 0;
|
stream_rect.y = 0;
|
||||||
stream_rect.width = get_stream_width (window_src);
|
stream_rect.width = get_stream_width (window_src);
|
||||||
stream_rect.height = get_stream_height (window_src);
|
stream_rect.height = get_stream_height (window_src);
|
||||||
|
|
||||||
screen_cast_window = META_SCREEN_CAST_WINDOW (window_src->window_actor);
|
meta_screen_cast_window_capture_into (window_src->screen_cast_window,
|
||||||
meta_screen_cast_window_capture_into (screen_cast_window, &stream_rect, data);
|
&stream_rect, data);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -121,11 +120,10 @@ meta_screen_cast_window_stream_src_get_videocrop (MetaScreenCastStreamSrc *src,
|
|||||||
{
|
{
|
||||||
MetaScreenCastWindowStreamSrc *window_src =
|
MetaScreenCastWindowStreamSrc *window_src =
|
||||||
META_SCREEN_CAST_WINDOW_STREAM_SRC (src);
|
META_SCREEN_CAST_WINDOW_STREAM_SRC (src);
|
||||||
MetaScreenCastWindow *screen_cast_window;
|
|
||||||
MetaRectangle stream_rect;
|
MetaRectangle stream_rect;
|
||||||
|
|
||||||
screen_cast_window = META_SCREEN_CAST_WINDOW (window_src->window_actor);
|
meta_screen_cast_window_get_frame_bounds (window_src->screen_cast_window,
|
||||||
meta_screen_cast_window_get_frame_bounds (screen_cast_window, crop_rect);
|
crop_rect);
|
||||||
|
|
||||||
stream_rect.x = 0;
|
stream_rect.x = 0;
|
||||||
stream_rect.y = 0;
|
stream_rect.y = 0;
|
||||||
@ -141,23 +139,24 @@ static void
|
|||||||
meta_screen_cast_window_stream_src_stop (MetaScreenCastWindowStreamSrc *window_src)
|
meta_screen_cast_window_stream_src_stop (MetaScreenCastWindowStreamSrc *window_src)
|
||||||
|
|
||||||
{
|
{
|
||||||
if (!window_src->window_actor)
|
if (!window_src->screen_cast_window)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (window_src->actor_after_paint_handler_id)
|
|
||||||
g_signal_handler_disconnect (window_src->window_actor,
|
|
||||||
window_src->actor_after_paint_handler_id);
|
|
||||||
window_src->actor_after_paint_handler_id = 0;
|
|
||||||
|
|
||||||
if (window_src->actor_destroyed_handler_id)
|
if (window_src->screen_cast_window_after_paint_handler_id)
|
||||||
g_signal_handler_disconnect (window_src->window_actor,
|
g_signal_handler_disconnect (window_src->screen_cast_window,
|
||||||
window_src->actor_destroyed_handler_id);
|
window_src->screen_cast_window_after_paint_handler_id);
|
||||||
window_src->actor_destroyed_handler_id = 0;
|
window_src->screen_cast_window_after_paint_handler_id = 0;
|
||||||
|
|
||||||
|
if (window_src->screen_cast_window_destroyed_handler_id)
|
||||||
|
g_signal_handler_disconnect (window_src->screen_cast_window,
|
||||||
|
window_src->screen_cast_window_destroyed_handler_id);
|
||||||
|
window_src->screen_cast_window_destroyed_handler_id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
window_actor_after_paint (MetaWindowActor *actor,
|
screen_cast_window_after_paint (MetaScreenCastWindow *screen_cast_window,
|
||||||
MetaScreenCastWindowStreamSrc *window_src)
|
MetaScreenCastWindowStreamSrc *window_src)
|
||||||
{
|
{
|
||||||
MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (window_src);
|
MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (window_src);
|
||||||
|
|
||||||
@ -165,11 +164,11 @@ window_actor_after_paint (MetaWindowActor *actor,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
window_actor_destroyed (MetaWindowActor *actor,
|
screen_cast_window_destroyed (MetaScreenCastWindow *screen_cast_window,
|
||||||
MetaScreenCastWindowStreamSrc *window_src)
|
MetaScreenCastWindowStreamSrc *window_src)
|
||||||
{
|
{
|
||||||
meta_screen_cast_window_stream_src_stop (window_src);
|
meta_screen_cast_window_stream_src_stop (window_src);
|
||||||
window_src->window_actor = NULL;
|
window_src->screen_cast_window = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -183,18 +182,18 @@ meta_screen_cast_window_stream_src_enable (MetaScreenCastStreamSrc *src)
|
|||||||
if (!window_actor)
|
if (!window_actor)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
window_src->window_actor = window_actor;
|
window_src->screen_cast_window = META_SCREEN_CAST_WINDOW (window_actor);
|
||||||
|
|
||||||
window_src->actor_after_paint_handler_id =
|
window_src->screen_cast_window_after_paint_handler_id =
|
||||||
g_signal_connect_after (window_src->window_actor,
|
g_signal_connect_after (window_src->screen_cast_window,
|
||||||
"paint",
|
"paint",
|
||||||
G_CALLBACK (window_actor_after_paint),
|
G_CALLBACK (screen_cast_window_after_paint),
|
||||||
window_src);
|
window_src);
|
||||||
|
|
||||||
window_src->actor_destroyed_handler_id =
|
window_src->screen_cast_window_destroyed_handler_id =
|
||||||
g_signal_connect (window_src->window_actor,
|
g_signal_connect (window_src->screen_cast_window,
|
||||||
"destroy",
|
"destroy",
|
||||||
G_CALLBACK (window_actor_destroyed),
|
G_CALLBACK (screen_cast_window_destroyed),
|
||||||
window_src);
|
window_src);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user