diff --git a/dlls/gdi32/dibdrv/dc.c b/dlls/gdi32/dibdrv/dc.c index 2fbd6dd39bc..f223bc1cca0 100644 --- a/dlls/gdi32/dibdrv/dc.c +++ b/dlls/gdi32/dibdrv/dc.c @@ -417,6 +417,15 @@ static INT dibdrv_DescribePixelFormat( PHYSDEV dev, INT fmt, UINT size, PIXELFOR return 0; } +/*********************************************************************** + * dibdrv_GetDeviceGammaRamp + */ +static BOOL dibdrv_GetDeviceGammaRamp( PHYSDEV dev, void *ramp ) +{ + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; +} + /*********************************************************************** * dibdrv_GetPixelFormat */ @@ -426,6 +435,15 @@ static INT dibdrv_GetPixelFormat( PHYSDEV dev ) return 0; } +/*********************************************************************** + * dibdrv_SetDeviceGammaRamp + */ +static BOOL dibdrv_SetDeviceGammaRamp( PHYSDEV dev, void *ramp ) +{ + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; +} + /*********************************************************************** * dibdrv_SetPixelFormat */ @@ -598,7 +616,7 @@ const struct gdi_dc_funcs dib_driver = NULL, /* pGetCharABCWidthsI */ NULL, /* pGetCharWidth */ NULL, /* pGetDeviceCaps */ - NULL, /* pGetDeviceGammaRamp */ + dibdrv_GetDeviceGammaRamp, /* pGetDeviceGammaRamp */ NULL, /* pGetFontData */ NULL, /* pGetFontUnicodeRanges */ NULL, /* pGetGlyphIndices */ @@ -660,7 +678,7 @@ const struct gdi_dc_funcs dib_driver = dibdrv_SetDIBColorTable, /* pSetDIBColorTable */ NULL, /* pSetDIBitsToDevice */ dibdrv_SetDeviceClipping, /* pSetDeviceClipping */ - NULL, /* pSetDeviceGammaRamp */ + dibdrv_SetDeviceGammaRamp, /* pSetDeviceGammaRamp */ NULL, /* pSetLayout */ NULL, /* pSetMapMode */ NULL, /* pSetMapperFlags */ diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c index b21fb74657f..abb2d6aaccd 100644 --- a/dlls/gdi32/driver.c +++ b/dlls/gdi32/driver.c @@ -355,6 +355,7 @@ static INT nulldrv_GetDeviceCaps( PHYSDEV dev, INT cap ) static BOOL nulldrv_GetDeviceGammaRamp( PHYSDEV dev, void *ramp ) { + SetLastError( ERROR_INVALID_PARAMETER ); return FALSE; } @@ -587,6 +588,7 @@ static DWORD nulldrv_SetLayout( PHYSDEV dev, DWORD layout ) static BOOL nulldrv_SetDeviceGammaRamp( PHYSDEV dev, void *ramp ) { + SetLastError( ERROR_INVALID_PARAMETER ); return FALSE; } diff --git a/dlls/gdi32/tests/dc.c b/dlls/gdi32/tests/dc.c index 8c92b5e516d..922907a4969 100644 --- a/dlls/gdi32/tests/dc.c +++ b/dlls/gdi32/tests/dc.c @@ -305,22 +305,39 @@ static void test_device_caps( HDC hdc, HDC ref_dc, const char *descr ) DESKTOPVERTRES, DESKTOPHORZRES, BLTALIGNMENT, - SHADEBLENDCAPS, - COLORMGMTCAPS + SHADEBLENDCAPS }; unsigned int i; + WORD ramp[3][256]; + BOOL ret; if (GetObjectType( hdc ) == OBJ_METADC) + { for (i = 0; i < sizeof(caps)/sizeof(caps[0]); i++) ok( GetDeviceCaps( hdc, caps[i] ) == (caps[i] == TECHNOLOGY ? DT_METAFILE : 0), "wrong caps on %s for %u: %u\n", descr, caps[i], GetDeviceCaps( hdc, caps[i] ) ); + + SetLastError( 0xdeadbeef ); + ret = GetDeviceGammaRamp( hdc, &ramp ); + ok( !ret, "GetDeviceGammaRamp succeeded on %s\n", descr ); + ok( GetLastError() == ERROR_INVALID_PARAMETER || broken(GetLastError() == 0xdeadbeef), /* nt4 */ + "wrong error %u on %s\n", GetLastError(), descr ); + } else + { for (i = 0; i < sizeof(caps)/sizeof(caps[0]); i++) ok( GetDeviceCaps( hdc, caps[i] ) == GetDeviceCaps( ref_dc, caps[i] ), "mismatched caps on %s for %u: %u/%u\n", descr, caps[i], GetDeviceCaps( hdc, caps[i] ), GetDeviceCaps( ref_dc, caps[i] ) ); + SetLastError( 0xdeadbeef ); + ret = GetDeviceGammaRamp( hdc, &ramp ); + ok( !ret, "GetDeviceGammaRamp succeeded on %s\n", descr ); + ok( GetLastError() == ERROR_INVALID_PARAMETER || broken(GetLastError() == 0xdeadbeef), /* nt4 */ + "wrong error %u on %s\n", GetLastError(), descr ); + } + if (GetObjectType( hdc ) == OBJ_MEMDC) { char buffer[sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)]; @@ -342,6 +359,12 @@ static void test_device_caps( HDC hdc, HDC ref_dc, const char *descr ) "mismatched caps on %s and DIB for %u: %u/%u\n", descr, caps[i], GetDeviceCaps( hdc, caps[i] ), GetDeviceCaps( ref_dc, caps[i] ) ); + SetLastError( 0xdeadbeef ); + ret = GetDeviceGammaRamp( hdc, &ramp ); + ok( !ret, "GetDeviceGammaRamp succeeded on %s\n", descr ); + ok( GetLastError() == ERROR_INVALID_PARAMETER || broken(GetLastError() == 0xdeadbeef), /* nt4 */ + "wrong error %u on %s\n", GetLastError(), descr ); + SelectObject( hdc, old ); DeleteObject( dib ); } diff --git a/dlls/winex11.drv/xvidmode.c b/dlls/winex11.drv/xvidmode.c index e279b70cd6c..e108dee9edf 100644 --- a/dlls/winex11.drv/xvidmode.c +++ b/dlls/winex11.drv/xvidmode.c @@ -424,6 +424,11 @@ static BOOL X11DRV_XF86VM_SetGammaRamp(LPDDGAMMARAMP ramp) */ BOOL X11DRV_GetDeviceGammaRamp(PHYSDEV dev, LPVOID ramp) { + if (GetObjectType( dev->hdc ) == OBJ_MEMDC) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } #ifdef SONAME_LIBXXF86VM return X11DRV_XF86VM_GetGammaRamp(ramp); #else @@ -440,6 +445,11 @@ BOOL X11DRV_GetDeviceGammaRamp(PHYSDEV dev, LPVOID ramp) */ BOOL X11DRV_SetDeviceGammaRamp(PHYSDEV dev, LPVOID ramp) { + if (GetObjectType( dev->hdc ) == OBJ_MEMDC) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } #ifdef SONAME_LIBXXF86VM return X11DRV_XF86VM_SetGammaRamp(ramp); #else