Alexandre Julliard : winex11: Store the DC bounds rectangle as a pointer.

Alexandre Julliard julliard at winehq.org
Fri Apr 27 10:55:46 CDT 2012


Module: wine
Branch: master
Commit: bc6f2f86151458a041ce3baf076de12530ed65d8
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=bc6f2f86151458a041ce3baf076de12530ed65d8

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Apr 25 13:18:28 2012 +0200

winex11: Store the DC bounds rectangle as a pointer.

---

 dlls/winex11.drv/graphics.c |    1 +
 dlls/winex11.drv/init.c     |   28 +++++++---------------------
 dlls/winex11.drv/x11drv.h   |    2 +-
 3 files changed, 9 insertions(+), 22 deletions(-)

diff --git a/dlls/winex11.drv/graphics.c b/dlls/winex11.drv/graphics.c
index b9149bc..0d1e49b 100644
--- a/dlls/winex11.drv/graphics.c
+++ b/dlls/winex11.drv/graphics.c
@@ -109,6 +109,7 @@ static void add_pen_device_bounds( X11DRV_PDEVICE *dev, const POINT *points, int
     RECT bounds, rect;
     int width = 0;
 
+    if (!dev->bounds) return;
     reset_bounds( &bounds );
 
     if (dev->pen.type & PS_GEOMETRIC || dev->pen.width > 1)
diff --git a/dlls/winex11.drv/init.c b/dlls/winex11.drv/init.c
index 70f792b..ea0befa 100644
--- a/dlls/winex11.drv/init.c
+++ b/dlls/winex11.drv/init.c
@@ -118,7 +118,6 @@ static X11DRV_PDEVICE *create_x11_physdev( Drawable drawable )
 
     if (!(physDev = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*physDev) ))) return NULL;
 
-    reset_bounds( &physDev->bounds );
     wine_tsx11_lock();
     physDev->drawable = drawable;
     physDev->gc = XCreateGC( gdi_display, drawable, 0, NULL );
@@ -192,37 +191,24 @@ void add_device_bounds( X11DRV_PDEVICE *dev, const RECT *rect )
 {
     RECT rc;
 
+    if (!dev->bounds) return;
     if (dev->region && GetRgnBox( dev->region, &rc ))
     {
-        if (IntersectRect( &rc, &rc, rect )) add_bounds_rect( &dev->bounds, &rc );
+        if (IntersectRect( &rc, &rc, rect )) add_bounds_rect( dev->bounds, &rc );
     }
-    else add_bounds_rect( &dev->bounds, rect );
+    else add_bounds_rect( dev->bounds, rect );
 }
 
 /***********************************************************************
- *           dibdrv_GetBoundsRect
- */
-static UINT X11DRV_GetBoundsRect( PHYSDEV dev, RECT *rect, UINT flags )
-{
-    X11DRV_PDEVICE *pdev = get_x11drv_dev( dev );
-
-    if (IsRectEmpty( &pdev->bounds )) return DCB_RESET;
-    if (rect) *rect = pdev->bounds;
-    if (flags & DCB_RESET) reset_bounds( &pdev->bounds );
-    return DCB_SET;
-}
-
-
-/***********************************************************************
  *           X11DRV_SetBoundsRect
  */
 static UINT X11DRV_SetBoundsRect( PHYSDEV dev, RECT *rect, UINT flags )
 {
     X11DRV_PDEVICE *pdev = get_x11drv_dev( dev );
 
-    if (IsRectEmpty( &pdev->bounds )) return DCB_RESET;
-    if (flags & DCB_RESET) reset_bounds( &pdev->bounds );
-    return DCB_SET;
+    if (flags & DCB_DISABLE) pdev->bounds = NULL;
+    else if (flags & DCB_ENABLE) pdev->bounds = rect;
+    return DCB_RESET;  /* we don't have device-specific bounds */
 }
 
 
@@ -516,7 +502,7 @@ static const struct gdi_dc_funcs x11drv_funcs =
     NULL,                               /* pFrameRgn */
     NULL,                               /* pGdiComment */
     NULL,                               /* pGdiRealizationInfo */
-    X11DRV_GetBoundsRect,               /* pGetBoundsRect */
+    NULL,                               /* pGetBoundsRect */
     NULL,                               /* pGetCharABCWidths */
     NULL,                               /* pGetCharABCWidthsI */
     NULL,                               /* pGetCharWidth */
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 28040f6..2548155 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -123,7 +123,7 @@ typedef struct
     Drawable      drawable;
     RECT          dc_rect;       /* DC rectangle relative to drawable */
     RECT          drawable_rect; /* Drawable rectangle relative to screen */
-    RECT          bounds;        /* Graphics bounds */
+    RECT         *bounds;        /* Graphics bounds */
     HRGN          region;        /* Device region (visible region & clip region) */
     X_PHYSPEN     pen;
     X_PHYSBRUSH   brush;




More information about the wine-cvs mailing list