X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Fsubsys%2Fwin32k%2Feng%2Fbitblt.c;h=79349c81c184f1d40c88e4358ffcfd27a03f6172;hp=dbd8ea9ba5cd01ebc2cfc9834a136de73dec558c;hb=c37765923c69d93e03efe168f99a6615ac2b9b3c;hpb=5d7043ea5ae5c0712b27091a933d58d1eed3e183 diff --git a/reactos/subsys/win32k/eng/bitblt.c b/reactos/subsys/win32k/eng/bitblt.c index dbd8ea9ba5c..79349c81c18 100644 --- a/reactos/subsys/win32k/eng/bitblt.c +++ b/reactos/subsys/win32k/eng/bitblt.c @@ -290,7 +290,7 @@ EngBitBlt(SURFOBJ *DestObj, return TRUE; } - if (NULL != SourcePoint) + if (UsesSource && NULL != SourcePoint) { InputRect.left = SourcePoint->x; InputRect.right = SourcePoint->x + (DestRect->right - DestRect->left); @@ -362,10 +362,10 @@ EngBitBlt(SURFOBJ *DestObj, return FALSE; } - OutputRect.left = DestRect->left + Translate.x; - OutputRect.right = DestRect->right + Translate.x; - OutputRect.top = DestRect->top + Translate.y; - OutputRect.bottom = DestRect->bottom + Translate.y; + OutputRect.left += Translate.x; + OutputRect.right += Translate.x; + OutputRect.top += Translate.y; + OutputRect.bottom += Translate.y; if(BrushOrigin) { @@ -412,11 +412,13 @@ EngBitBlt(SURFOBJ *DestObj, ClipRect.right = ClipRegion->rclBounds.right + Translate.x; ClipRect.top = ClipRegion->rclBounds.top + Translate.y; ClipRect.bottom = ClipRegion->rclBounds.bottom + Translate.y; - EngIntersectRect(&CombinedRect, &OutputRect, &ClipRect); - Pt.x = InputPoint.x + CombinedRect.left - OutputRect.left; - Pt.y = InputPoint.y + CombinedRect.top - OutputRect.top; - Ret = (*BltRectFunc)(OutputObj, InputObj, Mask, ColorTranslation, - &CombinedRect, &Pt, MaskOrigin, Brush, &AdjustedBrushOrigin, Rop4); + if (EngIntersectRect(&CombinedRect, &OutputRect, &ClipRect)) + { + Pt.x = InputPoint.x + CombinedRect.left - OutputRect.left; + Pt.y = InputPoint.y + CombinedRect.top - OutputRect.top; + Ret = (*BltRectFunc)(OutputObj, InputObj, Mask, ColorTranslation, + &CombinedRect, &Pt, MaskOrigin, Brush, &AdjustedBrushOrigin, Rop4); + } break; case DC_COMPLEX: Ret = TRUE; @@ -446,12 +448,15 @@ EngBitBlt(SURFOBJ *DestObj, ClipRect.right = RectEnum.arcl[i].right + Translate.x; ClipRect.top = RectEnum.arcl[i].top + Translate.y; ClipRect.bottom = RectEnum.arcl[i].bottom + Translate.y; - EngIntersectRect(&CombinedRect, &OutputRect, &ClipRect); - Pt.x = InputPoint.x + CombinedRect.left - OutputRect.left; - Pt.y = InputPoint.y + CombinedRect.top - OutputRect.top; - Ret = (*BltRectFunc)(OutputObj, InputObj, Mask, ColorTranslation, - &CombinedRect, &Pt, MaskOrigin, Brush, &AdjustedBrushOrigin, Rop4) && - Ret; + if (EngIntersectRect(&CombinedRect, &OutputRect, &ClipRect)) + { + Pt.x = InputPoint.x + CombinedRect.left - OutputRect.left; + Pt.y = InputPoint.y + CombinedRect.top - OutputRect.top; + Ret = (*BltRectFunc)(OutputObj, InputObj, Mask, + ColorTranslation, &CombinedRect, &Pt, + MaskOrigin, Brush, &AdjustedBrushOrigin, + Rop4) && Ret; + } } } while(EnumMore); @@ -1001,15 +1006,21 @@ EngMaskBitBlt(SURFOBJ *DestObj, ClipRect.right = ClipRegion->rclBounds.right + Translate.x; ClipRect.top = ClipRegion->rclBounds.top + Translate.y; ClipRect.bottom = ClipRegion->rclBounds.bottom + Translate.y; - EngIntersectRect(&CombinedRect, &OutputRect, &ClipRect); - Pt.x = InputPoint.x + CombinedRect.left - OutputRect.left; - Pt.y = InputPoint.y + CombinedRect.top - OutputRect.top; - if(Mask->iBitmapFormat == BMF_8BPP) - Ret = AlphaBltMask(OutputObj, InputObj, Mask, DestColorTranslation, SourceColorTranslation, - &CombinedRect, &Pt, MaskOrigin, Brush, &AdjustedBrushOrigin); - else - Ret = BltMask(OutputObj, InputObj, Mask, DestColorTranslation, - &CombinedRect, &Pt, MaskOrigin, Brush, &AdjustedBrushOrigin, R4_MASK); + if (EngIntersectRect(&CombinedRect, &OutputRect, &ClipRect)) + { + Pt.x = InputPoint.x + CombinedRect.left - OutputRect.left; + Pt.y = InputPoint.y + CombinedRect.top - OutputRect.top; + if(Mask->iBitmapFormat == BMF_8BPP) + { + Ret = AlphaBltMask(OutputObj, InputObj, Mask, DestColorTranslation, SourceColorTranslation, + &CombinedRect, &Pt, MaskOrigin, Brush, &AdjustedBrushOrigin); + } + else + { + Ret = BltMask(OutputObj, InputObj, Mask, DestColorTranslation, + &CombinedRect, &Pt, MaskOrigin, Brush, &AdjustedBrushOrigin, R4_MASK); + } + } break; case DC_COMPLEX: Ret = TRUE; @@ -1039,15 +1050,26 @@ EngMaskBitBlt(SURFOBJ *DestObj, ClipRect.right = RectEnum.arcl[i].right + Translate.x; ClipRect.top = RectEnum.arcl[i].top + Translate.y; ClipRect.bottom = RectEnum.arcl[i].bottom + Translate.y; - EngIntersectRect(&CombinedRect, &OutputRect, &ClipRect); - Pt.x = InputPoint.x + CombinedRect.left - OutputRect.left; - Pt.y = InputPoint.y + CombinedRect.top - OutputRect.top; - if(Mask->iBitmapFormat == BMF_8BPP) - Ret = AlphaBltMask(OutputObj, InputObj, Mask, DestColorTranslation, SourceColorTranslation, - &CombinedRect, &Pt, MaskOrigin, Brush, &AdjustedBrushOrigin) && Ret; - else - Ret = BltMask(OutputObj, InputObj, Mask, DestColorTranslation, - &CombinedRect, &Pt, MaskOrigin, Brush, &AdjustedBrushOrigin, R4_MASK) && Ret; + if (EngIntersectRect(&CombinedRect, &OutputRect, &ClipRect)) + { + Pt.x = InputPoint.x + CombinedRect.left - OutputRect.left; + Pt.y = InputPoint.y + CombinedRect.top - OutputRect.top; + if(Mask->iBitmapFormat == BMF_8BPP) + { + Ret = AlphaBltMask(OutputObj, InputObj, Mask, + DestColorTranslation, + SourceColorTranslation, + &CombinedRect, &Pt, MaskOrigin, Brush, + &AdjustedBrushOrigin) && Ret; + } + else + { + Ret = BltMask(OutputObj, InputObj, Mask, + DestColorTranslation, &CombinedRect, &Pt, + MaskOrigin, Brush, &AdjustedBrushOrigin, + R4_MASK) && Ret; + } + } } } while(EnumMore);