diff --git a/win32ss/gdi/eng/mouse.c b/win32ss/gdi/eng/mouse.c index 1ea4ef827fe..ca70aacbcfd 100644 --- a/win32ss/gdi/eng/mouse.c +++ b/win32ss/gdi/eng/mouse.c @@ -425,7 +425,11 @@ EngSetPointerShape( /* Color bitmap must have the same format as the dest surface */ if (psoColor->iBitmapFormat != pso->iBitmapFormat) { - DPRINT1("Screen surface and cursor color bitmap format don't match!.\n"); + /* >>> DPRINT1 #10: el propio ya existente, pero amplíalo con los valores */ + DPRINT1( + "EngSetPointerShape: Screen surface and cursor color bitmap format don't match! " + "psoColor->iBitmapFormat=%lu pso->iBitmapFormat=%lu\n", + psoColor->iBitmapFormat, pso->iBitmapFormat); goto failure; } @@ -632,12 +636,41 @@ IntEngSetPointerShape( pfnSetPointerShape = GDIDEVFUNCS(pso).SetPointerShape; + /* >>> DPRINT1 #5: valor crudo del puntero de función y del SURFOBJ pantalla */ + DPRINT1( + "IntEngSetPointerShape: pfnSetPointerShape=%p pso=%p pso->dhpdev=%p " + "pso->iBitmapFormat=%lu psoMask=%p psoColor=%p pxlo=%p xHot=%ld yHot=%ld x=%ld y=%ld fl=0x%08lx\n", + pfnSetPointerShape, pso, pso->dhpdev, pso->iBitmapFormat, psoMask, psoColor, pxlo, xHot, yHot, x, y, fl); + if (pfnSetPointerShape) { /* Drivers expect to get an XLATEOBJ */ if (pxlo == NULL) pxlo = &gexloTrivial.xlo; + /* >>> DPRINT1 #6: dump detallado de psoMask/psoColor justo antes de cruzar al driver */ + if (psoMask) + DPRINT1( + "IntEngSetPointerShape: psoMask -> iBitmapFormat=%lu sizlBitmap=(%ld,%ld) " + "lDelta=%ld pvScan0=%p pvBits=%p\n", + psoMask->iBitmapFormat, psoMask->sizlBitmap.cx, psoMask->sizlBitmap.cy, psoMask->lDelta, + psoMask->pvScan0, psoMask->pvBits); + if (psoColor) + DPRINT1( + "IntEngSetPointerShape: psoColor -> iBitmapFormat=%lu sizlBitmap=(%ld,%ld) " + "lDelta=%ld pvScan0=%p pvBits=%p (screen fmt=%lu -> %s)\n", + psoColor->iBitmapFormat, psoColor->sizlBitmap.cx, psoColor->sizlBitmap.cy, psoColor->lDelta, + psoColor->pvScan0, psoColor->pvBits, pso->iBitmapFormat, + psoColor->iBitmapFormat == pso->iBitmapFormat ? "COINCIDE" : "*** NO COINCIDE ***"); + + DPRINT1( + "IntEngSetPointerShape: pxlo=%p flXlate=0x%08lx cEntries=%lu iSrcType=%lu iDstType=%lu\n", pxlo, + pxlo->flXlate, pxlo->cEntries, pxlo->iSrcType, pxlo->iDstType); + + /* >>> DPRINT1 #7: justo antes de la llamada indirecta — última línea segura antes del posible BSOD */ + DPRINT1("IntEngSetPointerShape: ---> ENTRANDO al driver DrvSetPointerShape en %p\n", pfnSetPointerShape); + + /* Call the driver */ ulResult = pfnSetPointerShape(pso, psoMask, @@ -650,12 +683,21 @@ IntEngSetPointerShape( prcl, fl); + + /* >>> DPRINT1 #8: si esto se imprime, el driver volvió con vida */ + DPRINT1("IntEngSetPointerShape: <--- SALIÓ del driver, ulResult=%lu\n", ulResult); + /* Check if the driver accepted it */ if (ulResult == SPS_ACCEPT_NOEXCLUDE) bHardwarePointer = TRUE; bSoftwarePointer = !bHardwarePointer; } + else + { + /* >>> DPRINT1 #9: no hay función de driver instalada — se usará el cursor software */ + DPRINT1("IntEngSetPointerShape: pfnSetPointerShape es NULL, se usará EngSetPointerShape\n"); + } if (bSoftwarePointer) { @@ -745,7 +787,7 @@ GreSetPointerShape( psurfMask = NULL; } - /* Check for color bitmap */ +/* Check for color bitmap */ if (hbmColor) { /* We have one, lock it */ @@ -755,11 +797,36 @@ GreSetPointerShape( { /* Create an XLATEOBJ, no mono support */ EXLATEOBJ_vInitialize(&exlo, psurfColor->ppal, psurf->ppal, 0, 0, 0); + + /* >>> DPRINT1 #1: estado del bitmap de color y de la paleta */ + DPRINT1( + "GreSetPointerShape: hbmColor=%p psurfColor=%p iBitmapFormat=%lu " + "sizlBitmap=(%ld,%ld) lDelta=%ld pvScan0=%p ppalColor=%p ppalScreen=%p\n", + hbmColor, psurfColor, psurfColor->SurfObj.iBitmapFormat, psurfColor->SurfObj.sizlBitmap.cx, + psurfColor->SurfObj.sizlBitmap.cy, psurfColor->SurfObj.lDelta, psurfColor->SurfObj.pvScan0, + psurfColor->ppal, psurf->ppal); + } + else + { + /* >>> DPRINT1 #2: SURFACE_ShareLockSurface falló para hbmColor */ + DPRINT1("GreSetPointerShape: SURFACE_ShareLockSurface(hbmColor=%p) devolvió NULL\n", hbmColor); } } else psurfColor = NULL; + /* >>> DPRINT1 #3: estado de la máscara y de la superficie de pantalla destino */ +DPRINT1( + "GreSetPointerShape: hbmMask=%p psurfMask=%p psurf(screen)=%p " + "screen.iBitmapFormat=%lu screen.sizlBitmap=(%ld,%ld) fl=0x%08lx\n", + hbmMask, + psurfMask, + psurf, + psurf->SurfObj.iBitmapFormat, + psurf->SurfObj.sizlBitmap.cx, + psurf->SurfObj.sizlBitmap.cy, + fl); + /* We must have a valid surface in case of alpha bitmap */ ASSERT(((fl & SPS_ALPHA) && psurfColor) || !(fl & SPS_ALPHA)); @@ -775,6 +842,16 @@ GreSetPointerShape( &pdc->ppdev->Pointer.Exclude, fl | SPS_CHANGE); + /* >>> DPRINT1 #4: resultado devuelto por toda la cadena */ + DPRINT1( + "GreSetPointerShape: IntEngSetPointerShape devolvió ulResult=%lu " + "(%s)\n", + ulResult, + ulResult == SPS_ACCEPT_NOEXCLUDE ? "SPS_ACCEPT_NOEXCLUDE" + : ulResult == SPS_DECLINE ? "SPS_DECLINE" + : ulResult == SPS_ERROR ? "SPS_ERROR" + : "?"); + /* Cleanup */ if (psurfColor) {