gdi32: Use get_dc_attr in SetBkMode.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
4a32a87537
commit
99b591582d
|
@ -1555,34 +1555,6 @@ INT WINAPI GetRelAbs( HDC hdc, DWORD dwIgnore )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* SetBkMode (GDI32.@)
|
|
||||||
*/
|
|
||||||
INT WINAPI SetBkMode( HDC hdc, INT mode )
|
|
||||||
{
|
|
||||||
INT ret = 0;
|
|
||||||
DC *dc;
|
|
||||||
|
|
||||||
if ((mode <= 0) || (mode > BKMODE_LAST))
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_INVALID_PARAMETER);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if ((dc = get_dc_ptr( hdc )))
|
|
||||||
{
|
|
||||||
PHYSDEV physdev = GET_DC_PHYSDEV( dc, pSetBkMode );
|
|
||||||
mode = physdev->funcs->pSetBkMode( physdev, mode );
|
|
||||||
if (mode)
|
|
||||||
{
|
|
||||||
ret = dc->attr->background_mode;
|
|
||||||
dc->attr->background_mode = mode;
|
|
||||||
}
|
|
||||||
release_dc_ptr( dc );
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetROP2 (GDI32.@)
|
* GetROP2 (GDI32.@)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -80,13 +80,13 @@ BOOL CDECL EMFDRV_SetTextJustification(PHYSDEV dev, INT nBreakExtra, INT nBreakC
|
||||||
return EMFDRV_WriteRecord(dev, &emr.emr);
|
return EMFDRV_WriteRecord(dev, &emr.emr);
|
||||||
}
|
}
|
||||||
|
|
||||||
INT CDECL EMFDRV_SetBkMode( PHYSDEV dev, INT mode )
|
BOOL EMFDC_SetBkMode( DC_ATTR *dc_attr, INT mode )
|
||||||
{
|
{
|
||||||
EMRSETBKMODE emr;
|
EMRSETBKMODE emr;
|
||||||
emr.emr.iType = EMR_SETBKMODE;
|
emr.emr.iType = EMR_SETBKMODE;
|
||||||
emr.emr.nSize = sizeof(emr);
|
emr.emr.nSize = sizeof(emr);
|
||||||
emr.iMode = mode;
|
emr.iMode = mode;
|
||||||
return EMFDRV_WriteRecord( dev, &emr.emr ) ? mode : 0;
|
return EMFDRV_WriteRecord( dc_attr->emf, &emr.emr );
|
||||||
}
|
}
|
||||||
|
|
||||||
COLORREF CDECL EMFDRV_SetBkColor( PHYSDEV dev, COLORREF color )
|
COLORREF CDECL EMFDRV_SetBkColor( PHYSDEV dev, COLORREF color )
|
||||||
|
|
|
@ -115,7 +115,6 @@ extern HPEN CDECL EMFDRV_SelectPen( PHYSDEV dev, HPEN handle, const struct b
|
||||||
extern HPALETTE CDECL EMFDRV_SelectPalette( PHYSDEV dev, HPALETTE hPal, BOOL force ) DECLSPEC_HIDDEN;
|
extern HPALETTE CDECL EMFDRV_SelectPalette( PHYSDEV dev, HPALETTE hPal, BOOL force ) DECLSPEC_HIDDEN;
|
||||||
extern INT CDECL EMFDRV_SetArcDirection( PHYSDEV dev, INT arcDirection ) DECLSPEC_HIDDEN;
|
extern INT CDECL EMFDRV_SetArcDirection( PHYSDEV dev, INT arcDirection ) DECLSPEC_HIDDEN;
|
||||||
extern COLORREF CDECL EMFDRV_SetBkColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
|
extern COLORREF CDECL EMFDRV_SetBkColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
|
||||||
extern INT CDECL EMFDRV_SetBkMode( PHYSDEV dev, INT mode ) DECLSPEC_HIDDEN;
|
|
||||||
extern COLORREF CDECL EMFDRV_SetDCBrushColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
|
extern COLORREF CDECL EMFDRV_SetDCBrushColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
|
||||||
extern COLORREF CDECL EMFDRV_SetDCPenColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
|
extern COLORREF CDECL EMFDRV_SetDCPenColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
|
||||||
extern INT CDECL EMFDRV_SetDIBitsToDevice( PHYSDEV dev, INT xDest, INT yDest, DWORD cx, DWORD cy, INT xSrc,
|
extern INT CDECL EMFDRV_SetDIBitsToDevice( PHYSDEV dev, INT xDest, INT yDest, DWORD cx, DWORD cy, INT xSrc,
|
||||||
|
|
|
@ -129,7 +129,7 @@ static const struct gdi_dc_funcs emfdrv_driver =
|
||||||
EMFDRV_SelectPen, /* pSelectPen */
|
EMFDRV_SelectPen, /* pSelectPen */
|
||||||
EMFDRV_SetArcDirection, /* pSetArcDirection */
|
EMFDRV_SetArcDirection, /* pSetArcDirection */
|
||||||
EMFDRV_SetBkColor, /* pSetBkColor */
|
EMFDRV_SetBkColor, /* pSetBkColor */
|
||||||
EMFDRV_SetBkMode, /* pSetBkMode */
|
NULL, /* pSetBkMode */
|
||||||
NULL, /* pSetBoundsRect */
|
NULL, /* pSetBoundsRect */
|
||||||
EMFDRV_SetDCBrushColor, /* pSetDCBrushColor*/
|
EMFDRV_SetDCBrushColor, /* pSetDCBrushColor*/
|
||||||
EMFDRV_SetDCPenColor, /* pSetDCPenColor*/
|
EMFDRV_SetDCPenColor, /* pSetDCPenColor*/
|
||||||
|
|
|
@ -66,6 +66,7 @@ extern BOOL METADC_Polyline( HDC hdc, const POINT *points,INT count) DECLSPEC_HI
|
||||||
extern BOOL METADC_Rectangle( HDC hdc, INT left, INT top, INT right, INT bottom) DECLSPEC_HIDDEN;
|
extern BOOL METADC_Rectangle( HDC hdc, INT left, INT top, INT right, INT bottom) DECLSPEC_HIDDEN;
|
||||||
extern BOOL METADC_RoundRect( HDC hdc, INT left, INT top, INT right, INT bottom,
|
extern BOOL METADC_RoundRect( HDC hdc, INT left, INT top, INT right, INT bottom,
|
||||||
INT ell_width, INT ell_height ) DECLSPEC_HIDDEN;
|
INT ell_width, INT ell_height ) DECLSPEC_HIDDEN;
|
||||||
|
extern BOOL METADC_SetBkMode( HDC hdc, INT mode ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL METADC_SetPixel( HDC hdc, INT x, INT y, COLORREF color ) DECLSPEC_HIDDEN;
|
extern BOOL METADC_SetPixel( HDC hdc, INT x, INT y, COLORREF color ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL METADC_SetTextAlign( HDC hdc, UINT align ) DECLSPEC_HIDDEN;
|
extern BOOL METADC_SetTextAlign( HDC hdc, UINT align ) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
@ -109,6 +110,7 @@ extern BOOL EMFDC_Rectangle( DC_ATTR *dc_attr, INT left, INT top, INT right,
|
||||||
INT bottom) DECLSPEC_HIDDEN;
|
INT bottom) DECLSPEC_HIDDEN;
|
||||||
extern BOOL EMFDC_RoundRect( DC_ATTR *dc_attr, INT left, INT top, INT right, INT bottom,
|
extern BOOL EMFDC_RoundRect( DC_ATTR *dc_attr, INT left, INT top, INT right, INT bottom,
|
||||||
INT ell_width, INT ell_height ) DECLSPEC_HIDDEN;
|
INT ell_width, INT ell_height ) DECLSPEC_HIDDEN;
|
||||||
|
extern BOOL EMFDC_SetBkMode( DC_ATTR *dc_attr, INT mode ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL EMFDC_SetPixel( DC_ATTR *dc_attr, INT x, INT y, COLORREF color ) DECLSPEC_HIDDEN;
|
extern BOOL EMFDC_SetPixel( DC_ATTR *dc_attr, INT x, INT y, COLORREF color ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL EMFDC_SetTextAlign( DC_ATTR *dc_attr, UINT align ) DECLSPEC_HIDDEN;
|
extern BOOL EMFDC_SetTextAlign( DC_ATTR *dc_attr, UINT align ) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,29 @@ INT WINAPI GetBkMode( HDC hdc )
|
||||||
return dc_attr ? dc_attr->background_mode : 0;
|
return dc_attr ? dc_attr->background_mode : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SetBkMode (GDI32.@)
|
||||||
|
*/
|
||||||
|
INT WINAPI SetBkMode( HDC hdc, INT mode )
|
||||||
|
{
|
||||||
|
DC_ATTR *dc_attr;
|
||||||
|
INT ret;
|
||||||
|
|
||||||
|
if (mode <= 0 || mode > BKMODE_LAST)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_meta_dc( hdc )) return METADC_SetBkMode( hdc, mode );
|
||||||
|
if (!(dc_attr = get_dc_attr( hdc ))) return 0;
|
||||||
|
if (dc_attr->emf && !EMFDC_SetBkMode( dc_attr, mode )) return 0;
|
||||||
|
|
||||||
|
ret = dc_attr->background_mode;
|
||||||
|
dc_attr->background_mode = mode;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetCurrentPositionEx (GDI32.@)
|
* GetCurrentPositionEx (GDI32.@)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -35,9 +35,9 @@ BOOL METADC_SetTextAlign( HDC hdc, UINT align )
|
||||||
return metadc_param2( hdc, META_SETTEXTALIGN, HIWORD(align), LOWORD(align) );
|
return metadc_param2( hdc, META_SETTEXTALIGN, HIWORD(align), LOWORD(align) );
|
||||||
}
|
}
|
||||||
|
|
||||||
INT CDECL MFDRV_SetBkMode( PHYSDEV dev, INT mode )
|
BOOL METADC_SetBkMode( HDC hdc, INT mode )
|
||||||
{
|
{
|
||||||
return MFDRV_MetaParam1( dev, META_SETBKMODE, (WORD)mode) ? mode : 0;
|
return metadc_param1( hdc, META_SETBKMODE, (WORD)mode );
|
||||||
}
|
}
|
||||||
|
|
||||||
COLORREF CDECL MFDRV_SetBkColor( PHYSDEV dev, COLORREF color )
|
COLORREF CDECL MFDRV_SetBkColor( PHYSDEV dev, COLORREF color )
|
||||||
|
|
|
@ -192,7 +192,7 @@ static const struct gdi_dc_funcs MFDRV_Funcs =
|
||||||
MFDRV_SelectPen, /* pSelectPen */
|
MFDRV_SelectPen, /* pSelectPen */
|
||||||
NULL, /* pSetArcDirection */
|
NULL, /* pSetArcDirection */
|
||||||
MFDRV_SetBkColor, /* pSetBkColor */
|
MFDRV_SetBkColor, /* pSetBkColor */
|
||||||
MFDRV_SetBkMode, /* pSetBkMode */
|
NULL, /* pSetBkMode */
|
||||||
MFDRV_SetBoundsRect, /* pSetBoundsRect */
|
MFDRV_SetBoundsRect, /* pSetBoundsRect */
|
||||||
MFDRV_SetDCBrushColor, /* pSetDCBrushColor*/
|
MFDRV_SetDCBrushColor, /* pSetDCBrushColor*/
|
||||||
MFDRV_SetDCPenColor, /* pSetDCPenColor*/
|
MFDRV_SetDCPenColor, /* pSetDCPenColor*/
|
||||||
|
@ -612,6 +612,14 @@ BOOL metadc_record( HDC hdc, METARECORD *mr, DWORD rlen )
|
||||||
return MFDRV_WriteRecord( &dev->dev, mr, rlen );
|
return MFDRV_WriteRecord( &dev->dev, mr, rlen );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL metadc_param1( HDC hdc, short func, short param )
|
||||||
|
{
|
||||||
|
METAFILEDRV_PDEVICE *dev;
|
||||||
|
|
||||||
|
if (!(dev = get_metadc_ptr( hdc ))) return FALSE;
|
||||||
|
return MFDRV_MetaParam1( &dev->dev, func, param );
|
||||||
|
}
|
||||||
|
|
||||||
BOOL metadc_param2( HDC hdc, short func, short param1, short param2 )
|
BOOL metadc_param2( HDC hdc, short func, short param1, short param2 )
|
||||||
{
|
{
|
||||||
METAFILEDRV_PDEVICE *dev;
|
METAFILEDRV_PDEVICE *dev;
|
||||||
|
|
|
@ -60,6 +60,7 @@ extern BOOL MFDRV_RemoveHandle( PHYSDEV dev, UINT index ) DECLSPEC_HIDDEN;
|
||||||
extern INT16 MFDRV_CreateBrushIndirect( PHYSDEV dev, HBRUSH hBrush ) DECLSPEC_HIDDEN;
|
extern INT16 MFDRV_CreateBrushIndirect( PHYSDEV dev, HBRUSH hBrush ) DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
extern METAFILEDRV_PDEVICE *get_metadc_ptr( HDC hdc ) DECLSPEC_HIDDEN;
|
extern METAFILEDRV_PDEVICE *get_metadc_ptr( HDC hdc ) DECLSPEC_HIDDEN;
|
||||||
|
extern BOOL metadc_param1( HDC hdc, short func, short param ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL metadc_param2( HDC hdc, short func, short param1, short param2 ) DECLSPEC_HIDDEN;
|
extern BOOL metadc_param2( HDC hdc, short func, short param1, short param2 ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL metadc_param4( HDC hdc, short func, short param1, short param2,
|
extern BOOL metadc_param4( HDC hdc, short func, short param1, short param2,
|
||||||
short param3, short param4 ) DECLSPEC_HIDDEN;
|
short param3, short param4 ) DECLSPEC_HIDDEN;
|
||||||
|
@ -105,7 +106,6 @@ extern HPEN CDECL MFDRV_SelectPen( PHYSDEV dev, HPEN handle, const struct brush
|
||||||
extern HPALETTE CDECL MFDRV_SelectPalette( PHYSDEV dev, HPALETTE hPalette, BOOL bForceBackground) DECLSPEC_HIDDEN;
|
extern HPALETTE CDECL MFDRV_SelectPalette( PHYSDEV dev, HPALETTE hPalette, BOOL bForceBackground) DECLSPEC_HIDDEN;
|
||||||
extern UINT CDECL MFDRV_RealizePalette(PHYSDEV dev, HPALETTE hPalette, BOOL primary) DECLSPEC_HIDDEN;
|
extern UINT CDECL MFDRV_RealizePalette(PHYSDEV dev, HPALETTE hPalette, BOOL primary) DECLSPEC_HIDDEN;
|
||||||
extern COLORREF CDECL MFDRV_SetBkColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
|
extern COLORREF CDECL MFDRV_SetBkColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
|
||||||
extern INT CDECL MFDRV_SetBkMode( PHYSDEV dev, INT mode ) DECLSPEC_HIDDEN;
|
|
||||||
extern COLORREF CDECL MFDRV_SetDCBrushColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
|
extern COLORREF CDECL MFDRV_SetDCBrushColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
|
||||||
extern COLORREF CDECL MFDRV_SetDCPenColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
|
extern COLORREF CDECL MFDRV_SetDCPenColor( PHYSDEV dev, COLORREF color ) DECLSPEC_HIDDEN;
|
||||||
extern DWORD CDECL MFDRV_SetLayout( PHYSDEV dev, DWORD layout ) DECLSPEC_HIDDEN;
|
extern DWORD CDECL MFDRV_SetLayout( PHYSDEV dev, DWORD layout ) DECLSPEC_HIDDEN;
|
||||||
|
|
|
@ -40,7 +40,7 @@ static void test_dc_values(void)
|
||||||
{
|
{
|
||||||
HDC hdc = CreateDCA("DISPLAY", NULL, NULL, NULL);
|
HDC hdc = CreateDCA("DISPLAY", NULL, NULL, NULL);
|
||||||
COLORREF color;
|
COLORREF color;
|
||||||
int extra;
|
int extra, attr;
|
||||||
|
|
||||||
ok( hdc != NULL, "CreateDC failed\n" );
|
ok( hdc != NULL, "CreateDC failed\n" );
|
||||||
color = SetBkColor( hdc, 0x12345678 );
|
color = SetBkColor( hdc, 0x12345678 );
|
||||||
|
@ -81,6 +81,11 @@ static void test_dc_values(void)
|
||||||
extra = GetTextCharacterExtra( hdc );
|
extra = GetTextCharacterExtra( hdc );
|
||||||
ok( extra == 123, "initial extra %d\n", extra );
|
ok( extra == 123, "initial extra %d\n", extra );
|
||||||
|
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
attr = SetBkMode(ULongToHandle(0xdeadbeef), OPAQUE);
|
||||||
|
ok(!attr, "attr = %x\n", attr);
|
||||||
|
ok(GetLastError() == ERROR_INVALID_HANDLE, "GetLastError() = %u\n", GetLastError());
|
||||||
|
|
||||||
DeleteDC( hdc );
|
DeleteDC( hdc );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3127,6 +3127,11 @@ static void test_mf_attrs(void)
|
||||||
attr = SetTextAlign(hdc, TA_TOP);
|
attr = SetTextAlign(hdc, TA_TOP);
|
||||||
ok(attr == TRUE, "attr = %x\n", attr);
|
ok(attr == TRUE, "attr = %x\n", attr);
|
||||||
|
|
||||||
|
attr = SetBkMode(hdc, TRANSPARENT);
|
||||||
|
ok(attr == TRUE, "attr = %x\n", attr);
|
||||||
|
attr = SetBkMode(hdc, OPAQUE);
|
||||||
|
ok(attr == TRUE, "attr = %x\n", attr);
|
||||||
|
|
||||||
mf = CloseMetaFile(hdc);
|
mf = CloseMetaFile(hdc);
|
||||||
ok(mf != 0, "CloseEnhMetaFile failed\n");
|
ok(mf != 0, "CloseEnhMetaFile failed\n");
|
||||||
DeleteMetaFile(mf);
|
DeleteMetaFile(mf);
|
||||||
|
@ -3280,6 +3285,11 @@ static void test_emf_attrs(void)
|
||||||
attr = SetTextAlign(hdc, TA_TOP);
|
attr = SetTextAlign(hdc, TA_TOP);
|
||||||
ok(attr == TA_BOTTOM, "attr = %x\n", attr);
|
ok(attr == TA_BOTTOM, "attr = %x\n", attr);
|
||||||
|
|
||||||
|
attr = SetBkMode(hdc, TRANSPARENT);
|
||||||
|
ok(attr == OPAQUE, "attr = %x\n", attr);
|
||||||
|
attr = SetBkMode(hdc, OPAQUE);
|
||||||
|
ok(attr == TRANSPARENT, "attr = %x\n", attr);
|
||||||
|
|
||||||
mf = CloseEnhMetaFile(hdc);
|
mf = CloseEnhMetaFile(hdc);
|
||||||
ok(mf != 0, "CloseEnhMetaFile failed\n");
|
ok(mf != 0, "CloseEnhMetaFile failed\n");
|
||||||
DeleteEnhMetaFile(mf);
|
DeleteEnhMetaFile(mf);
|
||||||
|
|
Loading…
Reference in New Issue