[mutter/gbsneto/window-screencast-fixes: 1/7] window-actor: Use frame rect to retrieve window geometry



commit 78c3fb65ca235797d69d1221a1c036beee838408
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Mon Mar 16 19:28:09 2020 -0300

    window-actor: Use frame rect to retrieve window geometry
    
    The window actor encapsulates the entire buffer, which contains
    even undesired things like the window shadow.
    
    Use the MetaWindow's frame rect instead.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/1129

 src/compositor/meta-window-actor.c | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)
---
diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c
index 32b85ed1f..da2ceb112 100644
--- a/src/compositor/meta-window-actor.c
+++ b/src/compositor/meta-window-actor.c
@@ -1268,9 +1268,12 @@ meta_window_actor_blit_to_framebuffer (MetaScreenCastWindow *screen_cast_window,
                                        CoglFramebuffer      *framebuffer)
 {
   MetaWindowActor *window_actor = META_WINDOW_ACTOR (screen_cast_window);
+  MetaWindowActorPrivate *priv =
+    meta_window_actor_get_instance_private (window_actor);
   ClutterActor *actor = CLUTTER_ACTOR (window_actor);
   ClutterPaintContext *paint_context;
   MetaRectangle scaled_clip;
+  MetaRectangle frame_rect;
   CoglColor clear_color;
   float resource_scale;
   float width, height;
@@ -1279,19 +1282,20 @@ meta_window_actor_blit_to_framebuffer (MetaScreenCastWindow *screen_cast_window,
   if (meta_window_actor_is_destroyed (window_actor))
     return FALSE;
 
-  clutter_actor_get_size (actor, &width, &height);
-
-  if (width == 0 || height == 0)
-    return FALSE;
-
   if (!clutter_actor_get_resource_scale (actor, &resource_scale))
     return FALSE;
 
-  width = ceilf (width * resource_scale);
-  height = ceilf (height * resource_scale);
+  meta_window_get_frame_rect (priv->window, &frame_rect);
+
+  x = floorf (frame_rect.x * resource_scale);
+  y = floorf (frame_rect.y * resource_scale);
+  width = ceilf (frame_rect.width * resource_scale);
+  height = ceilf (frame_rect.height * resource_scale);
+
+  if (width == 0 || height == 0)
+    return FALSE;
 
   cogl_color_init_from_4ub (&clear_color, 0, 0, 0, 0);
-  clutter_actor_get_position (actor, &x, &y);
 
   cogl_framebuffer_push_matrix (framebuffer);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]