diff --git a/reactos/win32ss/gdi/eng/inteng.h b/reactos/win32ss/gdi/eng/inteng.h index d4a0ec473e2..589bb8d1821 100644 --- a/reactos/win32ss/gdi/eng/inteng.h +++ b/reactos/win32ss/gdi/eng/inteng.h @@ -86,6 +86,7 @@ IntEngStretchBlt(SURFOBJ *DestObj, SURFOBJ *Mask, CLIPOBJ *ClipRegion, XLATEOBJ *ColorTranslation, + COLORADJUSTMENT *pca, RECTL *DestRect, RECTL *SourceRect, POINTL *pMaskOrigin, @@ -152,14 +153,16 @@ IntEngSetPointerShape( IN RECTL *prcl, IN FLONG fl); -BOOL APIENTRY -IntEngAlphaBlend(IN SURFOBJ *Dest, - IN SURFOBJ *Source, - IN CLIPOBJ *ClipRegion, - IN XLATEOBJ *ColorTranslation, - IN PRECTL DestRect, - IN PRECTL SourceRect, - IN BLENDOBJ *BlendObj); +BOOL +APIENTRY +IntEngAlphaBlend( + _Inout_ SURFOBJ *psoDest, + _In_ SURFOBJ *psoSource, + _In_opt_ CLIPOBJ *pco, + _In_opt_ XLATEOBJ *pxlo, + _In_ RECTL *prclDest, + _In_ RECTL *prclSrc, + _In_ BLENDOBJ *pBlendObj); BOOL APIENTRY IntEngCopyBits(SURFOBJ *psoDest, diff --git a/reactos/win32ss/gdi/eng/stretchblt.c b/reactos/win32ss/gdi/eng/stretchblt.c index 7bed7d2ce17..ee0de15cfcf 100644 --- a/reactos/win32ss/gdi/eng/stretchblt.c +++ b/reactos/win32ss/gdi/eng/stretchblt.c @@ -169,6 +169,7 @@ EngStretchBltROP( InputRect.right = OutputRect.right - OutputRect.left; InputRect.top = 0; InputRect.bottom = OutputRect.bottom - OutputRect.top; + psoInput = NULL; } if (NULL != ClipRegion) @@ -364,6 +365,7 @@ IntEngStretchBlt(SURFOBJ *psoDest, SURFOBJ *MaskSurf, CLIPOBJ *ClipRegion, XLATEOBJ *ColorTranslation, + COLORADJUSTMENT *pca, RECTL *DestRect, RECTL *SourceRect, POINTL *pMaskOrigin, @@ -372,7 +374,6 @@ IntEngStretchBlt(SURFOBJ *psoDest, DWORD Rop4) { BOOLEAN ret; - COLORADJUSTMENT ca; POINTL MaskOrigin = {0, 0}; SURFACE *psurfDest; //SURFACE *psurfSource = NULL; @@ -383,9 +384,15 @@ IntEngStretchBlt(SURFOBJ *psoDest, LONG InputClWidth, InputClHeight, InputWidth, InputHeight; ASSERT(psoDest); - psurfDest = CONTAINING_RECORD(psoDest, SURFACE, SurfObj); - ASSERT(psurfDest); + ASSERT(psoSource); ASSERT(DestRect); + ASSERT(SourceRect); + ASSERT(!RECTL_bIsEmptyRect(SourceRect)); + + /* If no clip object is given, use trivial one */ + if (!ClipRegion) ClipRegion = &gxcoTrivial.ClipObj; + + psurfDest = CONTAINING_RECORD(psoDest, SURFACE, SurfObj); /* Sanity check */ ASSERT(IS_VALID_ROP4(Rop4)); @@ -420,20 +427,17 @@ IntEngStretchBlt(SURFOBJ *psoDest, InputClippedRect.bottom = DestRect->top; } - if (UsesSource) + if (NULL == SourceRect || NULL == psoSource) { - if (NULL == SourceRect || NULL == psoSource) - { - return FALSE; - } - InputRect = *SourceRect; + return FALSE; + } + InputRect = *SourceRect; - if (InputRect.right < InputRect.left || - InputRect.bottom < InputRect.top) - { - /* Everything clipped away, nothing to do */ - return TRUE; - } + if (InputRect.right < InputRect.left || + InputRect.bottom < InputRect.top) + { + /* Everything clipped away, nothing to do */ + return TRUE; } if (ClipRegion) @@ -473,18 +477,17 @@ IntEngStretchBlt(SURFOBJ *psoDest, //psurfSource = CONTAINING_RECORD(psoSource, SURFACE, SurfObj); } - /* Prepare color adjustment */ - /* Call the driver's DrvStretchBlt if available */ if (psurfDest->flags & HOOK_STRETCHBLTROP) { /* Drv->StretchBltROP (look at http://www.osronline.com/ddkx/graphics/ddifncs_0z3b.htm ) */ ret = GDIDEVFUNCS(psoDest).StretchBltROP(psoDest, - (UsesSource) ? psoSource : NULL, + psoSource, MaskSurf, ClipRegion, ColorTranslation, - &ca, BrushOrigin, + pca, + BrushOrigin, &OutputRect, &InputRect, &MaskOrigin, @@ -496,11 +499,11 @@ IntEngStretchBlt(SURFOBJ *psoDest, if (! ret) { ret = EngStretchBltROP(psoDest, - (UsesSource) ? psoSource : NULL, + psoSource, MaskSurf, ClipRegion, ColorTranslation, - &ca, + pca, BrushOrigin, &OutputRect, &InputRect, @@ -536,8 +539,12 @@ NtGdiEngStretchBlt( _SEH2_TRY { - ProbeForRead(pca, sizeof(COLORADJUSTMENT), 1); - RtlCopyMemory(&ca,pca, sizeof(COLORADJUSTMENT)); + if (pca) + { + ProbeForRead(pca, sizeof(COLORADJUSTMENT), 1); + RtlCopyMemory(&ca,pca, sizeof(COLORADJUSTMENT)); + pca = &ca; + } ProbeForRead(BrushOrigin, sizeof(POINTL), 1); RtlCopyMemory(&lBrushOrigin, BrushOrigin, sizeof(POINTL)); @@ -558,7 +565,7 @@ NtGdiEngStretchBlt( } _SEH2_END; - return EngStretchBlt(psoDest, psoSource, Mask, ClipRegion, ColorTranslation, &ca, &lBrushOrigin, &rclDest, &rclSrc, &lMaskOrigin, Mode); + return EngStretchBlt(psoDest, psoSource, Mask, ClipRegion, ColorTranslation, pca, &lBrushOrigin, &rclDest, &rclSrc, &lMaskOrigin, Mode); } /* EOF */ diff --git a/reactos/win32ss/gdi/ntgdi/bitblt.c b/reactos/win32ss/gdi/ntgdi/bitblt.c index 9845f02aa3e..26deeae2be5 100644 --- a/reactos/win32ss/gdi/ntgdi/bitblt.c +++ b/reactos/win32ss/gdi/ntgdi/bitblt.c @@ -67,7 +67,7 @@ TranslateCOLORREF(PDC pdc, COLORREF crColor) return index; default: - DPRINT("Unsupported color type %d passed\n", crColor >> 24); + DPRINT("Unsupported color type %u passed\n", crColor >> 24); crColor &= 0xFFFFFF; } @@ -122,7 +122,7 @@ NtGdiAlphaBlend( ahDC[1] = hDCSrc ; if (!GDIOBJ_bLockMultipleObjects(2, (HGDIOBJ*)ahDC, apObj, GDIObjType_DC_TYPE)) { - DPRINT1("Invalid dc handle (dest=0x%08x, src=0x%08x) passed to NtGdiAlphaBlend\n", hDCDest, hDCSrc); + DPRINT1("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hDCDest, hDCSrc); EngSetLastError(ERROR_INVALID_HANDLE); return FALSE; } @@ -270,7 +270,7 @@ NtGdiTransparentBlt( ahDC[1] = hdcSrc ; if (!GDIOBJ_bLockMultipleObjects(2, (HGDIOBJ*)ahDC, apObj, GDIObjType_DC_TYPE)) { - DPRINT1("Invalid dc handle (dest=0x%08x, src=0x%08x) passed to NtGdiAlphaBlend\n", hdcDst, hdcSrc); + DPRINT1("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hdcDst, hdcSrc); EngSetLastError(ERROR_INVALID_HANDLE); return FALSE; } @@ -424,7 +424,7 @@ NtGdiMaskBlt( ahDC[1] = UsesSource ? hdcSrc : NULL; if (!GDIOBJ_bLockMultipleObjects(2, (HGDIOBJ*)ahDC, apObj, GDIObjType_DC_TYPE)) { - DPRINT1("Invalid dc handle (dest=0x%08x, src=0x%08x) passed to NtGdiAlphaBlend\n", hdcDest, hdcSrc); + DPRINT1("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hdcDest, hdcSrc); EngSetLastError(ERROR_INVALID_HANDLE); return FALSE; } @@ -435,7 +435,7 @@ NtGdiMaskBlt( if (NULL == DCDest) { if(DCSrc) DC_UnlockDc(DCSrc); - DPRINT("Invalid destination dc handle (0x%08x) passed to NtGdiBitBlt\n", hdcDest); + DPRINT("Invalid destination dc handle (0x%p) passed to NtGdiBitBlt\n", hdcDest); return FALSE; } @@ -487,6 +487,13 @@ NtGdiMaskBlt( SourceRect.right = SourcePoint.x + DestRect.right - DestRect.left; SourceRect.bottom = SourcePoint.y + DestRect.bottom - DestRect.top ; } + else + { + SourceRect.left = 0; + SourceRect.top = 0; + SourceRect.right = 0; + SourceRect.bottom = 0; + } /* Prepare blit */ DC_vPrepareDCsForBlit(DCDest, DestRect, DCSrc, SourceRect); @@ -619,7 +626,7 @@ GreStretchBltMask( ahDC[2] = UsesMask ? hDCMask : NULL; if (!GDIOBJ_bLockMultipleObjects(3, (HGDIOBJ*)ahDC, apObj, GDIObjType_DC_TYPE)) { - DPRINT1("Invalid dc handle (dest=0x%08x, src=0x%08x) passed to NtGdiAlphaBlend\n", hDCDest, hDCSrc); + DPRINT1("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hDCDest, hDCSrc); EngSetLastError(ERROR_INVALID_HANDLE); return FALSE; } @@ -728,10 +735,11 @@ GreStretchBltMask( /* Perform the bitblt operation */ Status = IntEngStretchBlt(&BitmapDest->SurfObj, - &BitmapSrc->SurfObj, + BitmapSrc ? &BitmapSrc->SurfObj : NULL, BitmapMask ? &BitmapMask->SurfObj : NULL, DCDest->rosdc.CombinedClip, XlateObj, + &DCDest->dclevel.ca, &DestRect, &SourceRect, BitmapMask ? &MaskPoint : NULL, diff --git a/reactos/win32ss/gdi/ntgdi/dc.h b/reactos/win32ss/gdi/ntgdi/dc.h index 15583b29204..00323c36d0c 100644 --- a/reactos/win32ss/gdi/ntgdi/dc.h +++ b/reactos/win32ss/gdi/ntgdi/dc.h @@ -265,7 +265,7 @@ DC_vSelectPalette(PDC pdc, PPALETTE ppal) pdc->dclevel.ppal = ppal; } -extern PBRUSH pbrDefaultBrush ; -extern PSURFACE psurfDefaultBitmap; +extern _Notnull_ PBRUSH pbrDefaultBrush; +extern _Notnull_ PSURFACE psurfDefaultBitmap; #endif /* not __WIN32K_DC_H */ diff --git a/reactos/win32ss/gdi/ntgdi/dibobj.c b/reactos/win32ss/gdi/ntgdi/dibobj.c index 6fd01ee87c0..8d4e2eefcd9 100644 --- a/reactos/win32ss/gdi/ntgdi/dibobj.c +++ b/reactos/win32ss/gdi/ntgdi/dibobj.c @@ -439,16 +439,15 @@ NtGdiSetDIBitsToDeviceInternal( EngSetLastError(ERROR_INVALID_HANDLE); goto Exit2; } - if (pDC->dctype == DC_TYPE_INFO) + + pSurf = pDC->dclevel.pSurface; + if ((pDC->dctype == DC_TYPE_INFO) || !pSurf) { DC_UnlockDc(pDC); goto Exit2; } - pSurf = pDC->dclevel.pSurface; - if(!pSurf) pSurf = psurfDefaultBitmap; - - pDestSurf = pSurf ? &pSurf->SurfObj : NULL; + pDestSurf = &pSurf->SurfObj; ScanLines = min(ScanLines, abs(bmi->bmiHeader.biHeight) - StartScan); @@ -1175,6 +1174,7 @@ NtGdiStretchDIBitsInternal( NULL, pdc->rosdc.CombinedClip, &exlo.xlo, + &pdc->dclevel.ca, &rcDst, &rcSrc, NULL, @@ -1474,7 +1474,7 @@ DIB_CreateDIBSection( //SIZEL Size; HANDLE hSecure; - DPRINT("format (%ld,%ld), planes %d, bpp %d, size %ld, colors %ld (%s)\n", + DPRINT("format (%ld,%ld), planes %u, bpp %u, size %lu, colors %lu (%s)\n", bi->biWidth, bi->biHeight, bi->biPlanes, bi->biBitCount, bi->biSizeImage, bi->biClrUsed, usage == DIB_PAL_COLORS? "PAL" : "RGB"); @@ -1608,7 +1608,7 @@ DIB_CreateDIBSection( cleanup: if (!res || !bmp || !bm.bmBits) { - DPRINT("Got an error res=%08x, bmp=%p, bm.bmBits=%p\n", res, bmp, bm.bmBits); + DPRINT("Got an error res=%p, bmp=%p, bm.bmBits=%p\n", res, bmp, bm.bmBits); if (bm.bmBits) { // MmUnsecureVirtualMemory(hSecure); // FIXME: Implement this! @@ -1677,7 +1677,7 @@ DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width, *size = header->biSizeImage; return 1; } - DPRINT1("(%d): unknown/wrong size for header\n", header->biSize ); + DPRINT1("(%u): unknown/wrong size for header\n", header->biSize ); return -1; } diff --git a/reactos/win32ss/user/ntuser/winsta.c b/reactos/win32ss/user/ntuser/winsta.c index b2e4d54d664..7fa70dd60b0 100644 --- a/reactos/win32ss/user/ntuser/winsta.c +++ b/reactos/win32ss/user/ntuser/winsta.c @@ -61,19 +61,19 @@ UserCreateWinstaDirectoy() } else { - swprintf(wstrWindowStationsDir, - L"%ws\\%ld%ws", - SESSION_DIR, - Peb->SessionId, + swprintf(wstrWindowStationsDir, + L"%ws\\%ld%ws", + SESSION_DIR, + Peb->SessionId, WINSTA_OBJ_DIR); RtlCreateUnicodeString( &gustrWindowStationsDir, wstrWindowStationsDir); } - InitializeObjectAttributes(&ObjectAttributes, - &gustrWindowStationsDir, - 0, - NULL, + InitializeObjectAttributes(&ObjectAttributes, + &gustrWindowStationsDir, + 0, + NULL, NULL); Status = ZwCreateDirectoryObject(&hWinstaDir, 0, &ObjectAttributes); if (!NT_SUCCESS(Status)) @@ -433,7 +433,7 @@ NtUserCreateWindowStation( InitCursorImpl(); } - TRACE("NtUserCreateWindowStation created object 0x%x with name %wZ handle 0x%x\n", + TRACE("NtUserCreateWindowStation created object 0x%x with name %wZ handle 0x%x\n", WindowStation, &WindowStationObject->Name, WindowStation); return WindowStation; } @@ -631,7 +631,7 @@ NtUserGetObjectInformation( Status = IntValidateDesktopHandle( hObject, UserMode, - 0, + 0, &DesktopObject); if (!NT_SUCCESS(Status)) {