SURFOBJ *Mask,
CLIPOBJ *ClipRegion,
XLATEOBJ *ColorTranslation,
+ COLORADJUSTMENT *pca,
RECTL *DestRect,
RECTL *SourceRect,
POINTL *pMaskOrigin,
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,
InputRect.right = OutputRect.right - OutputRect.left;
InputRect.top = 0;
InputRect.bottom = OutputRect.bottom - OutputRect.top;
+ psoInput = NULL;
}
if (NULL != ClipRegion)
SURFOBJ *MaskSurf,
CLIPOBJ *ClipRegion,
XLATEOBJ *ColorTranslation,
+ COLORADJUSTMENT *pca,
RECTL *DestRect,
RECTL *SourceRect,
POINTL *pMaskOrigin,
DWORD Rop4)
{
BOOLEAN ret;
- COLORADJUSTMENT ca;
POINTL MaskOrigin = {0, 0};
SURFACE *psurfDest;
//SURFACE *psurfSource = NULL;
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));
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)
//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,
if (! ret)
{
ret = EngStretchBltROP(psoDest,
- (UsesSource) ? psoSource : NULL,
+ psoSource,
MaskSurf,
ClipRegion,
ColorTranslation,
- &ca,
+ pca,
BrushOrigin,
&OutputRect,
&InputRect,
_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));
}
_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 */
return index;
default:
- DPRINT("Unsupported color type %d passed\n", crColor >> 24);
+ DPRINT("Unsupported color type %u passed\n", crColor >> 24);
crColor &= 0xFFFFFF;
}
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;
}
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;
}
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;
}
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;
}
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);
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;
}
/* 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,
pdc->dclevel.ppal = ppal;
}
-extern PBRUSH pbrDefaultBrush ;
-extern PSURFACE psurfDefaultBitmap;
+extern _Notnull_ PBRUSH pbrDefaultBrush;
+extern _Notnull_ PSURFACE psurfDefaultBitmap;
#endif /* not __WIN32K_DC_H */
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);
NULL,
pdc->rosdc.CombinedClip,
&exlo.xlo,
+ &pdc->dclevel.ca,
&rcDst,
&rcSrc,
NULL,
//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");
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!
*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;
}
}
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))
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;
}
Status = IntValidateDesktopHandle(
hObject,
UserMode,
- 0,
+ 0,
&DesktopObject);
if (!NT_SUCCESS(Status))
{