screen-cast: Fix window recording on HiDPI

Using the same scale for the window as the
logical monitor only works correctly when having
the experimental 'scale-monitor-framebuffer'
feature enabled.
Without this experimental feature, the stream
will contain a black screen, where the actual
window only takes a small part of it.

Therefore, use a scale of 1 for the non-
experimental case.

Patch is based on commit 3fa6a92cc5.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/976
This commit is contained in:
Pascal Nowack 2019-12-16 19:00:19 +01:00
parent e32e20521d
commit e89cea8e5a

View File

@ -225,11 +225,15 @@ meta_screen_cast_window_stream_initable_init (GInitable *initable,
G_CALLBACK (on_window_unmanaged), G_CALLBACK (on_window_unmanaged),
window_stream); window_stream);
if (meta_is_stage_views_scaled ())
scale = (int) ceilf (meta_logical_monitor_get_scale (logical_monitor));
else
scale = 1;
/* We cannot set the stream size to the exact size of the window, because /* We cannot set the stream size to the exact size of the window, because
* windows can be resized, whereas streams cannot. * windows can be resized, whereas streams cannot.
* So we set a size equals to the size of the logical monitor for the window. * So we set a size equals to the size of the logical monitor for the window.
*/ */
scale = (int) ceil (meta_logical_monitor_get_scale (logical_monitor));
window_stream->logical_width = logical_monitor->rect.width; window_stream->logical_width = logical_monitor->rect.width;
window_stream->logical_height = logical_monitor->rect.height; window_stream->logical_height = logical_monitor->rect.height;
window_stream->stream_width = logical_monitor->rect.width * scale; window_stream->stream_width = logical_monitor->rect.width * scale;