[ros-dev] [ros-diffs] [jimtabor] 51835: [Win32k|User32] - Move creation of the scrollbar Gray brush from user32 to win32k. - Noticed a color and pattern (patchy white pattern) difference when using GreCreateBitmap and i...

Timo Kreuzer timo.kreuzer at web.de
Sun May 22 06:17:58 UTC 2011


We don't need that on LE architectures since the pixel size doesn't 
change and the upper 16 bits are simply padding.
If we ever ported this to a BE architecture (maybe ppc?), we would in 
fact need that. Or use WORD and add padding words between the pixel words.



Am 21.05.2011 15:26, schrieb Adam:
> I was thinking that should actually be:
>
>
> +    static const DWORD wPattern55AA[] = { 0x55555555, 0xAAAAAAAA, 
> 0x55555555, 0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555, 0xAAAAAAAA };
>
>
> Note that you need 8 hex digits for 32-bit numbers.
>
>
> On Sat, 21 May 2011 23:23:01 +1000, Timo Kreuzer <timo.kreuzer at web.de> 
> wrote:
>
>> Hi,
>>
>> I suspect its an alignment issue, since GreCreateBitmap requires 
>> 32bit alignment, while CreateBitmap uses 16 bit alignment.
>> So changing
>>
>> +    static const WORD wPattern55AA[] = { 0x5555, 0xaaaa, 0x5555, 
>> 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa };
>>
>> to
>>
>> +    static const DWORD wPattern55AA[] = { 0x5555, 0xaaaa, 0x5555, 
>> 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa };
>>
>> Should do the trick.
>>
>>
>> Am 21.05.2011 08:34, schrieb jimtabor at svn.reactos.org:
>>> Author: jimtabor
>>> Date: Sat May 21 06:34:02 2011
>>> New Revision: 51835
>>>
>>> URL: http://svn.reactos.org/svn/reactos?rev=51835&view=rev
>>> Log:
>>> [Win32k|User32]
>>> - Move creation of the scrollbar Gray brush from user32 to win32k.
>>> - Noticed a color and pattern (patchy white pattern) difference when 
>>> using GreCreateBitmap and it did not work the same as the main 
>>> function. Correcting this fixed the Gray brush. Someone from 
>>> YAROTOWS needs to look into this.
>>>
>>> Modified:
>>>      trunk/reactos/dll/win32/user32/windows/defwnd.c
>>>      trunk/reactos/subsystems/win32/win32k/include/brush.h
>>>      trunk/reactos/subsystems/win32/win32k/ntuser/ntuser.c
>>>      trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c
>>>      trunk/reactos/subsystems/win32/win32k/objects/brush.c
>>>
>>> Modified: trunk/reactos/dll/win32/user32/windows/defwnd.c
>>> URL: 
>>> http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/user32/windows/defwnd.c?rev=51835&r1=51834&r2=51835&view=diff
>>> ============================================================================== 
>>>
>>> --- trunk/reactos/dll/win32/user32/windows/defwnd.c [iso-8859-1] 
>>> (original)
>>> +++ trunk/reactos/dll/win32/user32/windows/defwnd.c [iso-8859-1] Sat 
>>> May 21 06:34:02 2011
>>> @@ -927,8 +927,8 @@
>>>   HBRUSH
>>>   DefWndControlColor(HDC hDC, UINT ctlType)
>>>   {
>>> -  if (CTLCOLOR_SCROLLBAR == ctlType)
>>> -    {
>>> +  if (ctlType == CTLCOLOR_SCROLLBAR)
>>> +  {
>>>         HBRUSH hb = GetSysColorBrush(COLOR_SCROLLBAR);
>>>         COLORREF bk = GetSysColor(COLOR_3DHILIGHT);
>>>         SetTextColor(hDC, GetSysColor(COLOR_3DFACE));
>>> @@ -938,37 +938,24 @@
>>>          * we better use 0x55aa bitmap brush to make scrollbar's 
>>> background
>>>          * look different from the window background.
>>>          */
>>> -      if (bk == GetSysColor(COLOR_WINDOW))
>>> -    {
>>> -          static const WORD wPattern55AA[] =
>>> -          {
>>> -              0x5555, 0xaaaa, 0x5555, 0xaaaa,
>>> -              0x5555, 0xaaaa, 0x5555, 0xaaaa
>>> -          };
>>> -          static HBITMAP hPattern55AABitmap = NULL;
>>> -          static HBRUSH hPattern55AABrush = NULL;
>>> -          if (hPattern55AABrush == NULL)
>>> -            {
>>> -              hPattern55AABitmap = CreateBitmap(8, 8, 1, 1, 
>>> wPattern55AA);
>>> -              hPattern55AABrush = 
>>> CreatePatternBrush(hPattern55AABitmap);
>>> -            }
>>> -          return hPattern55AABrush;
>>> -    }
>>> -      UnrealizeObject(hb);
>>> +      if ( bk == GetSysColor(COLOR_WINDOW))
>>> +          return gpsi->hbrGray;
>>> +
>>> +      UnrealizeObject( hb );
>>>         return hb;
>>> -    }
>>> +  }
>>>
>>>     SetTextColor(hDC, GetSysColor(COLOR_WINDOWTEXT));
>>>
>>> -  if ((CTLCOLOR_EDIT == ctlType) || (CTLCOLOR_LISTBOX == ctlType))
>>> -    {
>>> +  if ((ctlType == CTLCOLOR_EDIT) || (ctlType == CTLCOLOR_LISTBOX))
>>> +  {
>>>         SetBkColor(hDC, GetSysColor(COLOR_WINDOW));
>>> -    }
>>> +  }
>>>     else
>>> -    {
>>> +  {
>>>         SetBkColor(hDC, GetSysColor(COLOR_3DFACE));
>>>         return GetSysColorBrush(COLOR_3DFACE);
>>> -    }
>>> +  }
>>>
>>>     return GetSysColorBrush(COLOR_WINDOW);
>>>   }
>>>
>>> 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=51835&r1=51834&r2=51835&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 May 21 06:34:02 2011
>>> @@ -129,3 +129,5 @@
>>>   VOID FASTCALL FreeObjectAttr(PVOID);
>>>
>>>   BOOL FASTCALL IntGdiSetBrushOwner(PBRUSH,DWORD);
>>> +BOOL FASTCALL GreSetBrushOwner(HBRUSH,DWORD);
>>> +
>>>
>>> Modified: trunk/reactos/subsystems/win32/win32k/ntuser/ntuser.c
>>> URL: 
>>> http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/ntuser.c?rev=51835&r1=51834&r2=51835&view=diff
>>> ============================================================================== 
>>>
>>> --- trunk/reactos/subsystems/win32/win32k/ntuser/ntuser.c 
>>> [iso-8859-1] (original)
>>> +++ trunk/reactos/subsystems/win32/win32k/ntuser/ntuser.c 
>>> [iso-8859-1] Sat May 21 06:34:02 2011
>>> @@ -92,6 +92,8 @@
>>>     HANDLE  hPowerRequestEvent,
>>>     HANDLE  hMediaRequestEvent)
>>>   {
>>> +    static const WORD wPattern55AA[] = { 0x5555, 0xaaaa, 0x5555, 
>>> 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa };
>>> +    HBITMAP hPattern55AABitmap = NULL;
>>>       NTSTATUS Status;
>>>
>>>   // Set W32PF_Flags |= (W32PF_READSCREENACCESSGRANTED | 
>>> W32PF_IOWINSTA)
>>> @@ -125,6 +127,14 @@
>>>
>>>       CsrInit();
>>>
>>> +    if (gpsi->hbrGray == NULL)
>>> +    {
>>> +       hPattern55AABitmap = GreCreateBitmap(8, 8, 1, 1, 
>>> (LPBYTE)wPattern55AA);
>>> +       gpsi->hbrGray = IntGdiCreatePatternBrush(hPattern55AABitmap);
>>> +       GreDeleteObject(hPattern55AABitmap);
>>> +       GreSetBrushOwner(gpsi->hbrGray, GDI_OBJ_HMGR_PUBLIC);
>>> +    }
>>> +
>>>       return STATUS_SUCCESS;
>>>   }
>>>
>>>
>>> Modified: trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c
>>> URL: 
>>> http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c?rev=51835&r1=51834&r2=51835&view=diff
>>> ============================================================================== 
>>>
>>> --- trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c 
>>> [iso-8859-1] (original)
>>> +++ trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c 
>>> [iso-8859-1] Sat May 21 06:34:02 2011
>>> @@ -154,15 +154,23 @@
>>>       IN UINT cBitsPixel,
>>>       IN OPTIONAL PVOID pvBits)
>>>   {
>>> +    HBITMAP hbmp;
>>>       /* Call the extended function */
>>> -    return GreCreateBitmapEx(nWidth,
>>> +    hbmp = GreCreateBitmapEx(nWidth,
>>>                                nHeight,
>>>                                0, /* auto width */
>>>                                BitmapFormat(cBitsPixel * cPlanes, 
>>> BI_RGB),
>>>                                0, /* no bitmap flags */
>>>                                0, /* auto size */
>>> -                             pvBits,
>>> -                             DDB_SURFACE /* DDB */);
>>> +                             NULL,
>>> +                             DDB_SURFACE /* DDB */);
>>> +    if (pvBits&&  hbmp)
>>> +    {
>>> +       PSURFACE psurf = SURFACE_ShareLockSurface(hbmp);
>>> +       UnsafeSetBitmapBits(psurf, 0, pvBits);
>>> +       SURFACE_ShareUnlockSurface(psurf);
>>> +    }
>>> +    return hbmp;
>>>   }
>>>
>>>   HBITMAP
>>>
>>> Modified: trunk/reactos/subsystems/win32/win32k/objects/brush.c
>>> URL: 
>>> http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/brush.c?rev=51835&r1=51834&r2=51835&view=diff
>>> ============================================================================== 
>>>
>>> --- trunk/reactos/subsystems/win32/win32k/objects/brush.c 
>>> [iso-8859-1] (original)
>>> +++ trunk/reactos/subsystems/win32/win32k/objects/brush.c 
>>> [iso-8859-1] Sat May 21 06:34:02 2011
>>> @@ -59,6 +59,19 @@
>>>       GDIOBJ_vSetObjectOwner(&pbr->BaseObject, ulOwner);
>>>
>>>       return TRUE;
>>> +}
>>> +
>>> +BOOL
>>> +FASTCALL
>>> +GreSetBrushOwner(HBRUSH hBrush, ULONG ulOwner)
>>> +{
>>> +    BOOL Ret;
>>> +    PBRUSH pbrush;
>>> +
>>> +    pbrush = BRUSH_ShareLockBrush(hBrush);
>>> +    Ret = IntGdiSetBrushOwner(pbrush, ulOwner);
>>> +    BRUSH_ShareUnlockBrush(pbrush);
>>> +    return Ret;
>>>   }
>>>
>>>   BOOL
>>>
>>>
>>>
>>
>>
>> _______________________________________________
>> Ros-dev mailing list
>> Ros-dev at reactos.org
>> http://www.reactos.org/mailman/listinfo/ros-dev
>
>




More information about the Ros-dev mailing list