mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
Preparation for StretchBlt pattern support:
- Supply BrushObj and BrushOrigin to IntStretchBlt - Implement EngStretchBltROP to do the work, let EngStretchBlt call it (this allows ROP support for real now) svn path=/trunk/; revision=39501
This commit is contained in:
parent
43ef418be5
commit
c74ee95b77
3 changed files with 57 additions and 34 deletions
|
@ -771,8 +771,7 @@ NtGdiEngStretchBlt(
|
|||
IN RECTL *prclDest,
|
||||
IN RECTL *prclSrc,
|
||||
IN POINTL *MaskOrigin,
|
||||
IN ULONG Mode
|
||||
)
|
||||
IN ULONG Mode)
|
||||
{
|
||||
COLORADJUSTMENT ca;
|
||||
POINTL lBrushOrigin;
|
||||
|
@ -807,9 +806,12 @@ NtGdiEngStretchBlt(
|
|||
return EngStretchBlt(psoDest, psoSource, Mask, ClipRegion, ColorTranslation, &ca, &lBrushOrigin, &rclDest, &rclSrc, &lMaskOrigin, Mode);
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
BOOL
|
||||
APIENTRY
|
||||
EngStretchBlt(
|
||||
EngStretchBltROP(
|
||||
IN SURFOBJ *psoDest,
|
||||
IN SURFOBJ *psoSource,
|
||||
IN SURFOBJ *Mask,
|
||||
|
@ -820,11 +822,10 @@ EngStretchBlt(
|
|||
IN RECTL *prclDest,
|
||||
IN RECTL *prclSrc,
|
||||
IN POINTL *MaskOrigin,
|
||||
IN ULONG Mode
|
||||
)
|
||||
IN ULONG Mode,
|
||||
IN BRUSHOBJ *Brush,
|
||||
IN DWORD ROP4)
|
||||
{
|
||||
// www.osr.com/ddk/graphics/gdifncs_0bs7.htm
|
||||
|
||||
RECTL InputRect;
|
||||
RECTL OutputRect;
|
||||
POINTL Translate;
|
||||
|
@ -835,9 +836,9 @@ EngStretchBlt(
|
|||
PSTRETCHRECTFUNC BltRectFunc;
|
||||
BOOLEAN Ret;
|
||||
POINTL AdjustedBrushOrigin;
|
||||
BOOL UsesSource = ROP4_USES_SOURCE(Mode);
|
||||
BOOL UsesSource = ROP4_USES_SOURCE(ROP4);
|
||||
|
||||
if (Mode == R4_NOOP)
|
||||
if (ROP4 == R4_NOOP)
|
||||
{
|
||||
/* Copy destination onto itself: nop */
|
||||
return TRUE;
|
||||
|
@ -964,7 +965,7 @@ EngStretchBlt(
|
|||
|
||||
Ret = (*BltRectFunc)(psoOutput, psoInput, Mask, ClipRegion,
|
||||
ColorTranslation, &OutputRect, &InputRect, MaskOrigin,
|
||||
&AdjustedBrushOrigin, Mode);
|
||||
&AdjustedBrushOrigin, ROP4);
|
||||
|
||||
IntEngLeave(&EnterLeaveDest);
|
||||
if (UsesSource)
|
||||
|
@ -975,6 +976,40 @@ EngStretchBlt(
|
|||
return Ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
BOOL
|
||||
APIENTRY
|
||||
EngStretchBlt(
|
||||
IN SURFOBJ *psoDest,
|
||||
IN SURFOBJ *psoSource,
|
||||
IN SURFOBJ *Mask,
|
||||
IN CLIPOBJ *ClipRegion,
|
||||
IN XLATEOBJ *ColorTranslation,
|
||||
IN COLORADJUSTMENT *pca,
|
||||
IN POINTL *BrushOrigin,
|
||||
IN RECTL *prclDest,
|
||||
IN RECTL *prclSrc,
|
||||
IN POINTL *MaskOrigin,
|
||||
IN ULONG Mode)
|
||||
{
|
||||
return EngStretchBltROP(
|
||||
psoDest,
|
||||
psoSource,
|
||||
Mask,
|
||||
ClipRegion,
|
||||
ColorTranslation,
|
||||
pca,
|
||||
BrushOrigin,
|
||||
prclDest,
|
||||
prclSrc,
|
||||
MaskOrigin,
|
||||
Mode,
|
||||
NULL,
|
||||
SRCCOPY);
|
||||
}
|
||||
|
||||
BOOL APIENTRY
|
||||
IntEngStretchBlt(SURFOBJ *psoDest,
|
||||
SURFOBJ *psoSource,
|
||||
|
@ -1104,8 +1139,8 @@ IntEngStretchBlt(SURFOBJ *psoDest,
|
|||
if (! ret)
|
||||
{
|
||||
// FIXME: see previous fixme
|
||||
ret = EngStretchBlt(psoDest, psoSource, MaskSurf, ClipRegion, ColorTranslation,
|
||||
&ca, BrushOrigin, &OutputRect, &InputRect, NULL, ROP);
|
||||
ret = EngStretchBltROP(psoDest, psoSource, MaskSurf, ClipRegion, ColorTranslation,
|
||||
&ca, BrushOrigin, &OutputRect, &InputRect, NULL, COLORONCOLOR, Brush, ROP);
|
||||
}
|
||||
|
||||
if (UsesSource)
|
||||
|
|
|
@ -756,7 +756,9 @@ NtGdiStretchBlt(
|
|||
RECTL SourceRect;
|
||||
BOOL Status = FALSE;
|
||||
XLATEOBJ *XlateObj = NULL;
|
||||
POINTL BrushOrigin;
|
||||
PGDIBRUSHOBJ BrushObj = NULL;
|
||||
GDIBRUSHINST BrushInst;
|
||||
BOOL UsesSource = ROP3_USES_SOURCE(ROP);
|
||||
BOOL UsesPattern = ROP3_USES_PATTERN(ROP);
|
||||
|
||||
|
@ -835,6 +837,9 @@ NtGdiStretchBlt(
|
|||
IntLPtoDP(DCSrc, (LPPOINT)&SourceRect, 2);
|
||||
}
|
||||
|
||||
BrushOrigin.x = 0;
|
||||
BrushOrigin.y = 0;
|
||||
|
||||
/* Determine surfaces to be used in the bitblt */
|
||||
BitmapDest = SURFACE_LockSurface(DCDest->w.hBitmap);
|
||||
if (BitmapDest == NULL)
|
||||
|
@ -920,13 +925,16 @@ NtGdiStretchBlt(
|
|||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||
goto failed;
|
||||
}
|
||||
BrushOrigin = *((PPOINTL)&BrushObj->ptOrigin);
|
||||
IntGdiInitBrushInstance(&BrushInst, BrushObj, DCDest->XlateBrush);
|
||||
}
|
||||
|
||||
/* Perform the bitblt operation */
|
||||
Status = IntEngStretchBlt(&BitmapDest->SurfObj, &BitmapSrc->SurfObj,
|
||||
NULL, DCDest->CombinedClip, XlateObj,
|
||||
&DestRect, &SourceRect, NULL, NULL, NULL,
|
||||
ROP3_TO_ROP4(ROP));
|
||||
&DestRect, &SourceRect, NULL,
|
||||
BrushObj ? &BrushInst.BrushObject : NULL,
|
||||
&BrushOrigin, ROP3_TO_ROP4(ROP));
|
||||
|
||||
failed:
|
||||
if (XlateObj)
|
||||
|
|
|
@ -938,26 +938,6 @@ EngReadStateEvent(
|
|||
UNIMPLEMENTED;
|
||||
return 0;
|
||||
}
|
||||
BOOL APIENTRY
|
||||
EngStretchBltROP(
|
||||
IN SURFOBJ *Dest,
|
||||
IN SURFOBJ *Source,
|
||||
IN SURFOBJ *Mask,
|
||||
IN CLIPOBJ *Clip,
|
||||
IN XLATEOBJ *Xlate,
|
||||
IN COLORADJUSTMENT *ColorAdjustment,
|
||||
IN POINTL *BrushOrigin,
|
||||
IN RECTL *DestRect,
|
||||
IN RECTL *SourceRect,
|
||||
IN POINTL *MaskPoint,
|
||||
IN ULONG Mode,
|
||||
IN BRUSHOBJ *BrushObj,
|
||||
IN DWORD ROP4)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
|
|
Loading…
Reference in a new issue