Author: tkreuzer
Date: Sat Mar 24 17:19:34 2012
New Revision: 56220

URL: http://svn.reactos.org/svn/reactos?rev=56220&view=rev
Log:
[WIN32K]
Modify EBRUSHOBJ_pvGetEngBrush to return a pointer to the SURFOBJ, instead of a 
handle, this simplifies the code

Modified:
    trunk/reactos/subsystems/win32/win32k/eng/bitblt.c
    trunk/reactos/subsystems/win32/win32k/eng/engbrush.c
    trunk/reactos/subsystems/win32/win32k/eng/mouse.c
    trunk/reactos/subsystems/win32/win32k/eng/stretchblt.c
    trunk/reactos/subsystems/win32/win32k/include/brush.h

Modified: trunk/reactos/subsystems/win32/win32k/eng/bitblt.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng/bitblt.c?rev=56220&r1=56219&r2=56220&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/eng/bitblt.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/eng/bitblt.c [iso-8859-1] Sat Mar 24 
17:19:34 2012
@@ -39,16 +39,13 @@
     BYTE *pjMskLine, *pjMskCurrent;
     BYTE fjMaskBit0, fjMaskBit;
     /* Pattern brushes */
-    PEBRUSHOBJ pebo = NULL;
-    SURFOBJ *psoPattern = NULL;
-    PSURFACE psurfPattern;
+    SURFOBJ *psoPattern;
     ULONG PatternWidth = 0, PatternHeight = 0;
     LONG PatternX0 = 0, PatternX = 0, PatternY = 0;
     LONG SrcX = 0, SrcY = 0;
     PFN_DIB_PutPixel fnDest_PutPixel = NULL;
     PFN_DIB_GetPixel fnPattern_GetPixel = NULL, fnSrc_GetPixel = NULL, 
fnDest_GetPixel;
     ULONG Pattern = 0, Source = 0, Dest = 0;
-    HBITMAP hbmPattern;
     DWORD fgndRop, bkgndRop;
 
     ASSERT(IS_VALID_ROP4(Rop4));
@@ -61,20 +58,16 @@
     /* Determine pattern */
     if (pbo && pbo->iSolidColor == 0xFFFFFFFF)
     {
-        pebo = CONTAINING_RECORD(pbo, EBRUSHOBJ, BrushObject);
-
-        hbmPattern = EBRUSHOBJ_pvGetEngBrush(pebo);
-        psurfPattern = SURFACE_ShareLockSurface(hbmPattern);
-        if (psurfPattern != NULL)
-        {
-            psoPattern = &psurfPattern->SurfObj;
+        psoPattern = BRUSHOBJ_psoPattern(pbo);
+        if (psoPattern)
+        {
             PatternWidth = psoPattern->sizlBitmap.cx;
             PatternHeight = psoPattern->sizlBitmap.cy;
             fnPattern_GetPixel = 
DibFunctionsForBitmapFormat[psoPattern->iBitmapFormat].DIB_GetPixel;
         }
     }
     else
-        psurfPattern = NULL;
+        psoPattern = NULL;
 
     pjMskLine = (PBYTE)psoMask->pvScan0 + pptlMask->y * psoMask->lDelta + 
(pptlMask->x >> 3);
     fjMaskBit0 = 0x80 >> (pptlMask->x & 0x07);
@@ -92,7 +85,7 @@
         SrcX = pptlSource->x;
     }
 
-    if (psurfPattern)
+    if (psoPattern)
     {
         PatternY = (prclDest->top - pptlBrush->y) % PatternHeight;
         if (PatternY < 0)
@@ -120,7 +113,7 @@
         {
             Rop4 = (*pjMskCurrent & fjMaskBit) ? fgndRop : bkgndRop;
 
-            if(psurfPattern)
+            if(psoPattern)
             {
                 if(ROP4_USES_PATTERN(Rop4))
                     Pattern = fnPattern_GetPixel(psoPattern, PatternX, 
PatternY);
@@ -152,7 +145,7 @@
             pjMskCurrent += (fjMaskBit >> 7);
         }
         pjMskLine += psoMask->lDelta;
-        if(psurfPattern)
+        if(psoPattern)
         {
             PatternY++;
             PatternY %= PatternHeight;
@@ -165,11 +158,10 @@
         }
     }
 
-    if (psurfPattern)
-        SURFACE_ShareUnlockSurface(psurfPattern);
-
     return TRUE;
 }
+
+#ifndef _USE_DIBLIB_
 
 static BOOLEAN APIENTRY
 BltPatCopy(SURFOBJ* Dest,
@@ -204,10 +196,8 @@
               ROP4 Rop4)
 {
     BLTINFO BltInfo;
-    PEBRUSHOBJ GdiBrush = NULL;
-    SURFACE *psurfPattern;
+    SURFOBJ *psoPattern;
     BOOLEAN Result;
-    HBITMAP hbmPattern;
 
     BltInfo.DestSurface = OutputObj;
     BltInfo.SourceSurface = InputObj;
@@ -226,12 +216,10 @@
     /* Pattern brush */
     if (ROP4_USES_PATTERN(Rop4) && pbo && pbo->iSolidColor == 0xFFFFFFFF)
     {
-        GdiBrush = CONTAINING_RECORD(pbo, EBRUSHOBJ, BrushObject);
-        hbmPattern = EBRUSHOBJ_pvGetEngBrush(GdiBrush);
-        psurfPattern = SURFACE_ShareLockSurface(hbmPattern);
-        if (psurfPattern)
-        {
-            BltInfo.PatternSurface = &psurfPattern->SurfObj;
+        psoPattern = BRUSHOBJ_psoPattern(pbo);
+        if (psoPattern)
+        {
+            BltInfo.PatternSurface = psoPattern;
         }
         else
         {
@@ -240,16 +228,10 @@
     }
     else
     {
-        psurfPattern = NULL;
+        psoPattern = NULL;
     }
 
     Result = 
DibFunctionsForBitmapFormat[OutputObj->iBitmapFormat].DIB_BitBlt(&BltInfo);
-
-    /* Pattern brush */
-    if (psurfPattern)
-    {
-        SURFACE_ShareUnlockSurface(psurfPattern);
-    }
 
     return Result;
 }
@@ -649,6 +631,7 @@
     return bResult;
 }
 
+#endif // !_USE_DIBLIB_
 
 /**** REACTOS FONT RENDERING CODE 
*********************************************/
 

Modified: trunk/reactos/subsystems/win32/win32k/eng/engbrush.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng/engbrush.c?rev=56220&r1=56219&r2=56220&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/eng/engbrush.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/eng/engbrush.c [iso-8859-1] Sat Mar 
24 17:19:34 2012
@@ -97,7 +97,8 @@
     /* Check if there's a GDI realisation */
     if (pebo->pengbrush)
     {
-        EngDeleteSurface(pebo->pengbrush);
+        /* Unlock the bitmap again */
+        SURFACE_ShareUnlockSurface(pebo->pengbrush);
         pebo->pengbrush = NULL;
     }
 
@@ -139,6 +140,7 @@
     EBRUSHOBJ *pebo;
     HBITMAP hbmpRealize;
     SURFOBJ *psoRealize;
+    PSURFACE psurfRealize;
     POINTL ptlSrc = {0, 0};
     RECTL rclDest;
     ULONG lWidth;
@@ -159,10 +161,13 @@
     }
 
     /* Lock the bitmap */
-    psoRealize = EngLockSurface(hbmpRealize);
-    if (!psoRealize)
-    {
-        EngDeleteSurface(hbmpRealize);
+    psurfRealize = SURFACE_ShareLockSurface(hbmpRealize);
+
+    /* Already delete the pattern bitmap (will be kept until dereferenced) */
+    EngDeleteSurface(hbmpRealize);
+
+    if (!psurfRealize)
+    {
         return FALSE;
     }
 
@@ -170,13 +175,12 @@
     rclDest.left = rclDest.top = 0;
     rclDest.right = psoPattern->sizlBitmap.cx;
     rclDest.bottom = psoPattern->sizlBitmap.cy;
+    psoRealize = &psurfRealize->SurfObj;
     EngCopyBits(psoRealize, psoPattern, NULL, pxlo, &rclDest, &ptlSrc);
 
-    /* Unlock the bitmap again */
-    EngUnlockSurface(psoRealize);
 
     pebo = CONTAINING_RECORD(pbo, EBRUSHOBJ, BrushObject);
-    pebo->pengbrush = (PVOID)hbmpRealize;
+    pebo->pengbrush = (PVOID)psurfRealize;
 
     return TRUE;
 }
@@ -211,7 +215,7 @@
     psurfMask = NULL;
 
     /* Initialize XLATEOBJ for the brush */
-    EXLATEOBJ_vInitialize(&exlo, 
+    EXLATEOBJ_vInitialize(&exlo,
                           psurfPattern->ppal,
                           pebo->psurfTrg->ppal,
                           0,
@@ -256,6 +260,17 @@
     }
 
     return pebo->pengbrush;
+}
+
+SURFOBJ*
+NTAPI
+EBRUSHOBJ_psoPattern(EBRUSHOBJ *pebo)
+{
+    PSURFACE psurfPattern;
+
+    psurfPattern = EBRUSHOBJ_pvGetEngBrush(pebo);
+
+    return psurfPattern ? &psurfPattern->SurfObj : NULL;
 }
 
 

Modified: trunk/reactos/subsystems/win32/win32k/eng/mouse.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng/mouse.c?rev=56220&r1=56219&r2=56220&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/eng/mouse.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/eng/mouse.c [iso-8859-1] Sat Mar 24 
17:19:34 2012
@@ -337,7 +337,7 @@
 
         /* Calculate lDelta for our surfaces. */
         lDelta = WIDTH_BYTES_ALIGN32(sizel.cx,
-                                      BitsPerFormat(pso->iBitmapFormat));
+                                     BitsPerFormat(pso->iBitmapFormat));
 
         /* Create a bitmap for saving the pixels under the cursor. */
         hbmSave = EngCreateBitmap(sizel,

Modified: trunk/reactos/subsystems/win32/win32k/eng/stretchblt.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng/stretchblt.c?rev=56220&r1=56219&r2=56220&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/eng/stretchblt.c [iso-8859-1] 
(original)
+++ trunk/reactos/subsystems/win32/win32k/eng/stretchblt.c [iso-8859-1] Sat Mar 
24 17:19:34 2012
@@ -35,11 +35,8 @@
                   ROP4 Rop4)
 {
     POINTL RealBrushOrigin;
-    SURFACE* psurfPattern;
-    PEBRUSHOBJ GdiBrush = NULL;
-    SURFOBJ* PatternSurface = NULL;
+    SURFOBJ* psoPattern;
     BOOL bResult;
-    HBITMAP hbmPattern;
 
     if (BrushOrigin == NULL)
     {
@@ -53,33 +50,19 @@
     /* Pattern brush */
     if (ROP4_USES_PATTERN(Rop4) && pbo && pbo->iSolidColor == 0xFFFFFFFF)
     {
-        GdiBrush = CONTAINING_RECORD(pbo, EBRUSHOBJ, BrushObject);
-        hbmPattern = EBRUSHOBJ_pvGetEngBrush(GdiBrush);
-        psurfPattern = SURFACE_ShareLockSurface(hbmPattern);
-        if (psurfPattern)
-        {
-            PatternSurface = &psurfPattern->SurfObj;
-        }
-        else
-        {
-            /* FIXME: What to do here? */
-        }
+        psoPattern = BRUSHOBJ_psoPattern(pbo);
+
+        if (!psoPattern) return FALSE;
     }
     else
     {
-        psurfPattern = NULL;
+        psoPattern = NULL;
     }
 
     bResult = 
DibFunctionsForBitmapFormat[psoDest->iBitmapFormat].DIB_StretchBlt(
-               psoDest, psoSource, Mask, PatternSurface,
+               psoDest, psoSource, Mask, psoPattern,
                OutputRect, InputRect, MaskOrigin, pbo, &RealBrushOrigin,
                ColorTranslation, Rop4);
-
-    /* Pattern brush */
-    if (psurfPattern)
-    {
-        SURFACE_ShareUnlockSurface(psurfPattern);
-    }
 
     return bResult;
 }

Modified: trunk/reactos/subsystems/win32/win32k/include/brush.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/brush.h?rev=56220&r1=56219&r2=56220&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/include/brush.h [iso-8859-1] 
(original)
+++ trunk/reactos/subsystems/win32/win32k/include/brush.h [iso-8859-1] Sat Mar 
24 17:19:34 2012
@@ -122,6 +122,13 @@
 NTAPI
 EBRUSHOBJ_pvGetEngBrush(EBRUSHOBJ *pebo);
 
+SURFOBJ*
+NTAPI
+EBRUSHOBJ_psoPattern(EBRUSHOBJ *pebo);
+
+#define BRUSHOBJ_psoPattern(pbo) \
+    EBRUSHOBJ_psoPattern(CONTAINING_RECORD(pbo, EBRUSHOBJ, BrushObject))
+
 BOOL FASTCALL IntGdiSetBrushOwner(PBRUSH,DWORD);
 BOOL FASTCALL GreSetBrushOwner(HBRUSH,DWORD);
 


Reply via email to