Author: tkreuzer
Date: Thu Apr 22 05:53:49 2010
New Revision: 46986
URL:
http://svn.reactos.org/svn/reactos?rev=46986&view=rev
Log:
[WIN32K]
- Call DC_vPrepareDCsForBlit in IntRectangle with device coordinates instead of in
NtGdiRectangle with logical coordinates. Fixes updating mouse pointer.
- Update TODO.txt
Modified:
branches/reactos-yarotows/subsystems/win32/win32k/TODO.txt
branches/reactos-yarotows/subsystems/win32/win32k/objects/fillshap.c
Modified: branches/reactos-yarotows/subsystems/win32/win32k/TODO.txt
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win…
==============================================================================
--- branches/reactos-yarotows/subsystems/win32/win32k/TODO.txt [iso-8859-1] (original)
+++ branches/reactos-yarotows/subsystems/win32/win32k/TODO.txt [iso-8859-1] Thu Apr 22
05:53:49 2010
@@ -10,7 +10,6 @@
Before the merge:
-----------------
-# Fix mouse pointer regression
# Resize the desktop window after mode switch
# Update mouse area after mode switch
# Invalidate the whole Window content after mode switch
Modified: branches/reactos-yarotows/subsystems/win32/win32k/objects/fillshap.c
URL:
http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win…
==============================================================================
--- branches/reactos-yarotows/subsystems/win32/win32k/objects/fillshap.c [iso-8859-1]
(original)
+++ branches/reactos-yarotows/subsystems/win32/win32k/objects/fillshap.c [iso-8859-1] Thu
Apr 22 05:53:49 2010
@@ -539,19 +539,6 @@
pdcattr = dc->pdcattr;
- /* Do we rotate or shear? */
- if (!(dc->dclevel.mxWorldToDevice.flAccel & MX_SCALE))
- {
-
- POINTL DestCoords[4];
- ULONG PolyCounts = 4;
- DestCoords[0].x = DestCoords[3].x = LeftRect;
- DestCoords[0].y = DestCoords[1].y = TopRect;
- DestCoords[1].x = DestCoords[2].x = RightRect;
- DestCoords[2].y = DestCoords[3].y = BottomRect;
- // Use IntGdiPolyPolygon so to support PATH.
- return IntGdiPolyPolygon(dc, DestCoords, &PolyCounts, 1);
- }
// Rectangle Path only.
if ( PATH_IsPathOpen(dc->dclevel) )
{
@@ -577,6 +564,8 @@
DestRect.bottom--;
}
+ DC_vPrepareDCsForBlit(dc, DestRect, NULL, DestRect);
+
if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
DC_vUpdateFillBrush(dc);
@@ -590,6 +579,7 @@
ret = FALSE;
goto cleanup;
}
+
psurf = dc->dclevel.pSurface;
if (!psurf)
{
@@ -655,6 +645,8 @@
}
cleanup:
+ DC_vFinishBlit(dc, NULL);
+
/* Move current position in DC?
MSDN: The current position is neither used nor updated by Rectangle. */
@@ -671,7 +663,6 @@
{
DC *dc;
BOOL ret; // default to failure
- RECT rect = {LeftRect, TopRect, RightRect, BottomRect} ;
dc = DC_LockDc(hDC);
if (!dc)
@@ -686,16 +677,25 @@
return TRUE;
}
- DC_vPrepareDCsForBlit(dc, rect, NULL, rect);
- if (dc->pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
- DC_vUpdateFillBrush(dc);
-
- if (dc->pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY))
- DC_vUpdateLineBrush(dc);
-
- ret = IntRectangle ( dc, LeftRect, TopRect, RightRect, BottomRect );
- DC_vFinishBlit(dc, NULL);
- DC_UnlockDc ( dc );
+ /* Do we rotate or shear? */
+ if (!(dc->dclevel.mxWorldToDevice.flAccel & MX_SCALE))
+ {
+ POINTL DestCoords[4];
+ ULONG PolyCounts = 4;
+
+ DestCoords[0].x = DestCoords[3].x = LeftRect;
+ DestCoords[0].y = DestCoords[1].y = TopRect;
+ DestCoords[1].x = DestCoords[2].x = RightRect;
+ DestCoords[2].y = DestCoords[3].y = BottomRect;
+ // Use IntGdiPolyPolygon so to support PATH.
+ ret = IntGdiPolyPolygon(dc, DestCoords, &PolyCounts, 1);
+ }
+ else
+ {
+ ret = IntRectangle(dc, LeftRect, TopRect, RightRect, BottomRect );
+ }
+
+ DC_UnlockDc(dc);
return ret;
}