mirror of
https://github.com/reactos/reactos.git
synced 2025-02-25 09:50:02 +00:00
- Handle correctly bottom-up surfaces in the VGA driver.
svn path=/trunk/; revision=9976
This commit is contained in:
parent
40afa3d500
commit
ac183abd23
4 changed files with 13 additions and 10 deletions
|
@ -77,7 +77,7 @@ VGAtoDIB(SURFOBJ *Dest, SURFOBJ *Source, XLATEOBJ *ColorTranslation,
|
|||
|
||||
// FIXME: Optimize to retrieve entire bytes at a time (see /display/vgavideo/vgavideo.c:vgaGetByte)
|
||||
|
||||
GDIpos = Dest->pvBits /* + (DestRect->top * Dest->lDelta) + (DestRect->left >> 1) */ ;
|
||||
GDIpos = Dest->pvScan0 /* + (DestRect->top * Dest->lDelta) + (DestRect->left >> 1) */ ;
|
||||
dx = DestRect->right - DestRect->left;
|
||||
dy = DestRect->bottom - DestRect->top;
|
||||
|
||||
|
@ -87,7 +87,7 @@ VGAtoDIB(SURFOBJ *Dest, SURFOBJ *Source, XLATEOBJ *ColorTranslation,
|
|||
DestDevSurf.NextScan = Dest->lDelta;
|
||||
DestDevSurf.StartBmp = Dest->pvScan0;
|
||||
|
||||
DIB_BltFromVGA(SourcePoint->x, SourcePoint->y, dx, dy, Dest->pvBits, Dest->lDelta);
|
||||
DIB_BltFromVGA(SourcePoint->x, SourcePoint->y, dx, dy, Dest->pvScan0, Dest->lDelta);
|
||||
|
||||
} else {
|
||||
// Color translation
|
||||
|
@ -353,7 +353,7 @@ VGADDI_BltMask(SURFOBJ* Dest, SURFOBJ* Source, SURFOBJ* Mask,
|
|||
{
|
||||
if (Mask != NULL)
|
||||
{
|
||||
tMask = Mask->pvBits;
|
||||
tMask = Mask->pvScan0;
|
||||
for (j=0; j<dy; j++)
|
||||
{
|
||||
lMask = tMask;
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: pointer.c,v 1.2 2004/01/16 13:18:23 gvg Exp $
|
||||
/* $Id: pointer.c,v 1.3 2004/07/03 13:45:42 navaraf Exp $
|
||||
*
|
||||
* PROJECT: ReactOS VGA16 display driver
|
||||
* FILE: drivers/dd/vga/display/objects/pointer.c
|
||||
|
@ -245,8 +245,8 @@ DrvSetPointerShape(SURFOBJ* pso,
|
|||
}
|
||||
ppdev->flCursor = ppdev->flCursor & (~ CURSOR_DOWN);
|
||||
|
||||
NewWidth = psoMask->lDelta << 3;
|
||||
NewHeight = (psoMask->cjBits / psoMask->lDelta) / 2;
|
||||
NewWidth = abs(psoMask->lDelta) << 3;
|
||||
NewHeight = (psoMask->cjBits / abs(psoMask->lDelta)) / 2;
|
||||
|
||||
/* Reallocate the space for the cursor if necessary. */
|
||||
if (ppdev->pPointerAttributes->Width != NewWidth ||
|
||||
|
@ -275,11 +275,10 @@ DrvSetPointerShape(SURFOBJ* pso,
|
|||
ImageBehindCursor = VGADDI_AllocSavedScreenBits(SavedMemSize);
|
||||
}
|
||||
|
||||
Src = (PUCHAR)psoMask->pvScan0;
|
||||
/* Copy the new cursor in. */
|
||||
for (i = 0; i < (NewHeight * 2); i++)
|
||||
{
|
||||
Src = (PUCHAR)psoMask->pvBits;
|
||||
Src += (i * (NewWidth >> 3));
|
||||
Dest = (PUCHAR)ppdev->pPointerAttributes->Pixels;
|
||||
if (i >= NewHeight)
|
||||
{
|
||||
|
@ -290,6 +289,7 @@ DrvSetPointerShape(SURFOBJ* pso,
|
|||
Dest += ((NewHeight - i - 1) * (NewWidth >> 3));
|
||||
}
|
||||
memcpy(Dest, Src, NewWidth >> 3);
|
||||
Src += psoMask->lDelta;
|
||||
}
|
||||
|
||||
/* Set the new cursor position */
|
||||
|
|
|
@ -28,7 +28,7 @@ DrvTransparentBlt(SURFOBJ* Dest,
|
|||
if(sy<dy) dy = sy;
|
||||
|
||||
// FIXME: adjust using SourceRect
|
||||
DIB_TransparentBltToVGA(DestRect->left, DestRect->top, dx, dy, Source->pvBits, Source->lDelta, TransparentColor);
|
||||
DIB_TransparentBltToVGA(DestRect->left, DestRect->top, dx, dy, Source->pvScan0, Source->lDelta, TransparentColor);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -407,7 +407,10 @@ void DIB_BltFromVGA(int x, int y, int w, int h, void *b, int Dest_lDelta)
|
|||
}
|
||||
|
||||
/* Reset the destination. */
|
||||
memset(b, 0, h * Dest_lDelta);
|
||||
for (j = 0; j < h; j++)
|
||||
{
|
||||
memset(b + (j * Dest_lDelta), 0, abs(Dest_lDelta));
|
||||
}
|
||||
|
||||
for (plane = 0; plane < 4; plane++)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue