[ros-bugs] [Bug 4107] Fix for PatBlt, BitBlt, StretchBlt

ReactOS.Bugzilla at www.reactos.org ReactOS.Bugzilla at www.reactos.org
Tue Feb 17 19:30:13 CET 2009


http://www.reactos.org/bugzilla/show_bug.cgi?id=4107


amine48rz <amine48rz at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|jimtabor at adsl-64-217-116-   |
                   |74.dsl.hstntx.swbell.net    |
         AssignedTo|grschneider at gmail.com       |jimtabor at adsl-64-217-116-
                   |                            |74.dsl.hstntx.swbell.net
             Status|REOPENED                    |NEW




--- Comment #17 from bolt <bstsoft at narod.ru>  2009-02-11 20:53:01 CET ---
(In reply to comment #16)
> Latest patch was integrated in r39483.
> Only thing left in this bug is:
> -----
> 2.Fixed HatchBrushes
> -  {0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00}, /* HS_HORIZONTAL */
> +  {0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00}, /* HS_HORIZONTAL */
> -  {0x08, 0x08, 0x08, 0xff, 0x08, 0x08, 0x08, 0x08}, /* HS_CROSS      */
> +  {0x08, 0x08, 0x08, 0x08, 0xff, 0x08, 0x08, 0x08}, /* HS_CROSS      */
> or error occurred in "IntGdiCreateBitmap"
>    hPattern = IntGdiCreateBitmap(8, 8, 1, 1, (LPBYTE)HatchBrushes[Style]);
> establishment of pattern in the reverse order.
> see Brush_4107_20090202.jpg
> -----

[18:47:12] <BSTSoft> (Height < 0 ? BMF_TOPDOWN : 0)???
[18:47:12] <BSTSoft> can correct both = (Height > 0 ? BMF_TOPDOWN : 0)
[18:49:30] <DosX> no, the TOPDOWN check is right this way
[18:49:42] <DosX> if the size is negative, the image is topdown

pso->pvScan0 = (PVOID)((ULONG_PTR)pso->pvBits + pso->cjBits - pso->lDelta);
then
pso->pvScan0 = HatchBrushes[HS_CROSS][7]
then
DIB_1BPP_PutPixel(SURFOBJ *SurfObj, LONG x, LONG y, ULONG c)
{
  PBYTE addr = (PBYTE)SurfObj->pvScan0 + y * SurfObj->lDelta + (x >> 3);

  if (0 == (c & 0x01))
    *addr &= ~MASK1BPP(x);
  else
    *addr |= MASK1BPP(x);
}

  PBYTE addr = (PBYTE)SurfObj->pvScan0 + y * SurfObj->lDelta + (x >> 3);
it as
addr = HatchBrushes[HS_CROSS][7+y*(-1)]

result bytes

{0x08, 0x08, 0x08, 0xff, 0x08, 0x08, 0x08, 0x08}, /* HS_CROSS      */
y=0 = 0x08
y=1 = 0x08
y=2 = 0x08
y=3 = 0x08
y=4 = 0xff
y=5 = 0x08
y=6 = 0x08
y=7 = 0x08

Windows in the sequence of withdrawal
y=0 = 0x08
y=1 = 0x08
y=2 = 0x08
y=3 = 0xff
y=4 = 0x08
y=5 = 0x08
y=6 = 0x08
y=7 = 0x08

My fix corrects an array of 
    if (0 == (Flags & BMF_TOPDOWN))
    {
        pso->pvScan0 = (PVOID)((ULONG_PTR)pso->pvBits + pso->cjBits -
pso->lDelta);
        pso->lDelta = - pso->lDelta;
    }
    else
    {
        pso->pvScan0 = pso->pvBits;
    }


-- 
Configure bugmail: http://www.reactos.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.


More information about the Ros-bugs mailing list