mirror of
https://github.com/reactos/reactos.git
synced 2025-07-27 15:11:41 +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 *prclDest,
|
||||||
IN RECTL *prclSrc,
|
IN RECTL *prclSrc,
|
||||||
IN POINTL *MaskOrigin,
|
IN POINTL *MaskOrigin,
|
||||||
IN ULONG Mode
|
IN ULONG Mode)
|
||||||
)
|
|
||||||
{
|
{
|
||||||
COLORADJUSTMENT ca;
|
COLORADJUSTMENT ca;
|
||||||
POINTL lBrushOrigin;
|
POINTL lBrushOrigin;
|
||||||
|
@ -807,9 +806,12 @@ NtGdiEngStretchBlt(
|
||||||
return EngStretchBlt(psoDest, psoSource, Mask, ClipRegion, ColorTranslation, &ca, &lBrushOrigin, &rclDest, &rclSrc, &lMaskOrigin, Mode);
|
return EngStretchBlt(psoDest, psoSource, Mask, ClipRegion, ColorTranslation, &ca, &lBrushOrigin, &rclDest, &rclSrc, &lMaskOrigin, Mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
BOOL
|
BOOL
|
||||||
APIENTRY
|
APIENTRY
|
||||||
EngStretchBlt(
|
EngStretchBltROP(
|
||||||
IN SURFOBJ *psoDest,
|
IN SURFOBJ *psoDest,
|
||||||
IN SURFOBJ *psoSource,
|
IN SURFOBJ *psoSource,
|
||||||
IN SURFOBJ *Mask,
|
IN SURFOBJ *Mask,
|
||||||
|
@ -820,11 +822,10 @@ EngStretchBlt(
|
||||||
IN RECTL *prclDest,
|
IN RECTL *prclDest,
|
||||||
IN RECTL *prclSrc,
|
IN RECTL *prclSrc,
|
||||||
IN POINTL *MaskOrigin,
|
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 InputRect;
|
||||||
RECTL OutputRect;
|
RECTL OutputRect;
|
||||||
POINTL Translate;
|
POINTL Translate;
|
||||||
|
@ -835,9 +836,9 @@ EngStretchBlt(
|
||||||
PSTRETCHRECTFUNC BltRectFunc;
|
PSTRETCHRECTFUNC BltRectFunc;
|
||||||
BOOLEAN Ret;
|
BOOLEAN Ret;
|
||||||
POINTL AdjustedBrushOrigin;
|
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 */
|
/* Copy destination onto itself: nop */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -964,7 +965,7 @@ EngStretchBlt(
|
||||||
|
|
||||||
Ret = (*BltRectFunc)(psoOutput, psoInput, Mask, ClipRegion,
|
Ret = (*BltRectFunc)(psoOutput, psoInput, Mask, ClipRegion,
|
||||||
ColorTranslation, &OutputRect, &InputRect, MaskOrigin,
|
ColorTranslation, &OutputRect, &InputRect, MaskOrigin,
|
||||||
&AdjustedBrushOrigin, Mode);
|
&AdjustedBrushOrigin, ROP4);
|
||||||
|
|
||||||
IntEngLeave(&EnterLeaveDest);
|
IntEngLeave(&EnterLeaveDest);
|
||||||
if (UsesSource)
|
if (UsesSource)
|
||||||
|
@ -975,6 +976,40 @@ EngStretchBlt(
|
||||||
return Ret;
|
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
|
BOOL APIENTRY
|
||||||
IntEngStretchBlt(SURFOBJ *psoDest,
|
IntEngStretchBlt(SURFOBJ *psoDest,
|
||||||
SURFOBJ *psoSource,
|
SURFOBJ *psoSource,
|
||||||
|
@ -1104,8 +1139,8 @@ IntEngStretchBlt(SURFOBJ *psoDest,
|
||||||
if (! ret)
|
if (! ret)
|
||||||
{
|
{
|
||||||
// FIXME: see previous fixme
|
// FIXME: see previous fixme
|
||||||
ret = EngStretchBlt(psoDest, psoSource, MaskSurf, ClipRegion, ColorTranslation,
|
ret = EngStretchBltROP(psoDest, psoSource, MaskSurf, ClipRegion, ColorTranslation,
|
||||||
&ca, BrushOrigin, &OutputRect, &InputRect, NULL, ROP);
|
&ca, BrushOrigin, &OutputRect, &InputRect, NULL, COLORONCOLOR, Brush, ROP);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (UsesSource)
|
if (UsesSource)
|
||||||
|
|
|
@ -756,7 +756,9 @@ NtGdiStretchBlt(
|
||||||
RECTL SourceRect;
|
RECTL SourceRect;
|
||||||
BOOL Status = FALSE;
|
BOOL Status = FALSE;
|
||||||
XLATEOBJ *XlateObj = NULL;
|
XLATEOBJ *XlateObj = NULL;
|
||||||
|
POINTL BrushOrigin;
|
||||||
PGDIBRUSHOBJ BrushObj = NULL;
|
PGDIBRUSHOBJ BrushObj = NULL;
|
||||||
|
GDIBRUSHINST BrushInst;
|
||||||
BOOL UsesSource = ROP3_USES_SOURCE(ROP);
|
BOOL UsesSource = ROP3_USES_SOURCE(ROP);
|
||||||
BOOL UsesPattern = ROP3_USES_PATTERN(ROP);
|
BOOL UsesPattern = ROP3_USES_PATTERN(ROP);
|
||||||
|
|
||||||
|
@ -835,6 +837,9 @@ NtGdiStretchBlt(
|
||||||
IntLPtoDP(DCSrc, (LPPOINT)&SourceRect, 2);
|
IntLPtoDP(DCSrc, (LPPOINT)&SourceRect, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BrushOrigin.x = 0;
|
||||||
|
BrushOrigin.y = 0;
|
||||||
|
|
||||||
/* Determine surfaces to be used in the bitblt */
|
/* Determine surfaces to be used in the bitblt */
|
||||||
BitmapDest = SURFACE_LockSurface(DCDest->w.hBitmap);
|
BitmapDest = SURFACE_LockSurface(DCDest->w.hBitmap);
|
||||||
if (BitmapDest == NULL)
|
if (BitmapDest == NULL)
|
||||||
|
@ -920,13 +925,16 @@ NtGdiStretchBlt(
|
||||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
|
BrushOrigin = *((PPOINTL)&BrushObj->ptOrigin);
|
||||||
|
IntGdiInitBrushInstance(&BrushInst, BrushObj, DCDest->XlateBrush);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Perform the bitblt operation */
|
/* Perform the bitblt operation */
|
||||||
Status = IntEngStretchBlt(&BitmapDest->SurfObj, &BitmapSrc->SurfObj,
|
Status = IntEngStretchBlt(&BitmapDest->SurfObj, &BitmapSrc->SurfObj,
|
||||||
NULL, DCDest->CombinedClip, XlateObj,
|
NULL, DCDest->CombinedClip, XlateObj,
|
||||||
&DestRect, &SourceRect, NULL, NULL, NULL,
|
&DestRect, &SourceRect, NULL,
|
||||||
ROP3_TO_ROP4(ROP));
|
BrushObj ? &BrushInst.BrushObject : NULL,
|
||||||
|
&BrushOrigin, ROP3_TO_ROP4(ROP));
|
||||||
|
|
||||||
failed:
|
failed:
|
||||||
if (XlateObj)
|
if (XlateObj)
|
||||||
|
|
|
@ -938,26 +938,6 @@ EngReadStateEvent(
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
return 0;
|
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
|
* @unimplemented
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue