[Xfce4-commits] [xfce/xfwm4] 02/02: compositor: fix clipping region with zooming

noreply at xfce.org noreply at xfce.org
Fri Dec 8 20:01:14 CET 2017


This is an automated email from the git hooks/post-receive script.

o   l   i   v   i   e   r       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository xfce/xfwm4.

commit a7db4b7d82ce46d3d5e55ad3e86b48e42ef6c809
Author: Olivier Fourdan <fourdan at xfce.org>
Date:   Fri Dec 8 19:59:14 2017 +0100

    compositor: fix clipping region with zooming
    
    When using xpresent as vblank method, the clipping region would not
    match the zoom level causing artifacts.
    
    Signed-off-by: Olivier Fourdan <fourdan at xfce.org>
---
 src/compositor.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/compositor.c b/src/compositor.c
index 94e177f..91cb9f1 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -2122,8 +2122,7 @@ paint_all (ScreenInfo *screen_info, XserverRegion region, gushort buffer)
                                                0.0  /* blue  */);
             }
             XFixesIntersectRegion (dpy, cw->borderClip, cw->borderClip, cw->borderSize);
-            XFixesSetPictureClipRegion (dpy, paint_buffer,
-                                        0, 0, cw->borderClip);
+            XFixesSetPictureClipRegion (dpy, paint_buffer, 0, 0, cw->borderClip);
             paint_win (cw, paint_region, paint_buffer, FALSE);
         }
 
@@ -2140,9 +2139,7 @@ paint_all (ScreenInfo *screen_info, XserverRegion region, gushort buffer)
     }
 
     TRACE ("Copying data back to screen");
-    /* Set clipping back to the given region */
-    XFixesSetPictureClipRegion (dpy, screen_info->rootBuffer[buffer],
-                                0, 0, region);
+#ifdef HAVE_EPOXY
     if (screen_info->use_glx)
     {
         if (screen_info->zoomed)
@@ -2150,14 +2147,25 @@ paint_all (ScreenInfo *screen_info, XserverRegion region, gushort buffer)
             paint_cursor (screen_info, region,
                           screen_info->rootBuffer[buffer]);
         }
+        /* Set clipping back to the given region */
+        XFixesSetPictureClipRegion (dpy, screen_info->rootBuffer[buffer], 0, 0, region);
+
     }
     else
+#endif /* HAVE_EPOXY */
     {
         if (screen_info->zoomed)
         {
             paint_cursor (screen_info, region, paint_buffer);
-            XFixesSetPictureClipRegion (dpy, paint_buffer,
-                                        0, 0, None);
+            /* Fixme: copy back whole screen if zoomed
+               It would be better to scale the clipping region if possible. */
+            XFixesSetPictureClipRegion (dpy, screen_info->rootBuffer[buffer], 0, 0, None);
+            XFixesSetPictureClipRegion (dpy, paint_buffer, 0, 0, None);
+        }
+        else
+        {
+            /* Set clipping back to the given region */
+            XFixesSetPictureClipRegion (dpy, screen_info->rootBuffer[buffer], 0, 0, region);
         }
     }
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list