gdi32: Use NtGdiFrameRgn for FrameRgn implementation.
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
a3a5c7048f
commit
a4a27e5846
|
@ -856,15 +856,16 @@ BOOL CDECL EMFDRV_FillRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush )
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* EMFDRV_FrameRgn
|
* EMFDC_FrameRgn
|
||||||
*/
|
*/
|
||||||
BOOL CDECL EMFDRV_FrameRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush, INT width, INT height )
|
BOOL EMFDC_FrameRgn( DC_ATTR *dc_attr, HRGN hrgn, HBRUSH hbrush, INT width, INT height )
|
||||||
{
|
{
|
||||||
|
EMFDRV_PDEVICE *emf = dc_attr->emf;
|
||||||
EMRFRAMERGN *emr;
|
EMRFRAMERGN *emr;
|
||||||
DWORD size, rgnsize, index;
|
DWORD size, rgnsize, index;
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
|
|
||||||
index = EMFDRV_CreateBrushIndirect( dev, hbrush );
|
index = EMFDRV_CreateBrushIndirect( &emf->dev, hbrush );
|
||||||
if(!index) return FALSE;
|
if(!index) return FALSE;
|
||||||
|
|
||||||
rgnsize = NtGdiGetRegionData( hrgn, 0, NULL );
|
rgnsize = NtGdiGetRegionData( hrgn, 0, NULL );
|
||||||
|
@ -884,13 +885,22 @@ BOOL CDECL EMFDRV_FrameRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush, INT width, IN
|
||||||
emr->szlStroke.cx = width;
|
emr->szlStroke.cx = width;
|
||||||
emr->szlStroke.cy = height;
|
emr->szlStroke.cy = height;
|
||||||
|
|
||||||
ret = EMFDRV_WriteRecord( dev, &emr->emr );
|
ret = EMFDRV_WriteRecord( &emf->dev, &emr->emr );
|
||||||
if(ret)
|
if(ret)
|
||||||
EMFDRV_UpdateBBox( dev, &emr->rclBounds );
|
EMFDRV_UpdateBBox( &emf->dev, &emr->rclBounds );
|
||||||
HeapFree( GetProcessHeap(), 0, emr );
|
HeapFree( GetProcessHeap(), 0, emr );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* EMFDRV_FrameRgn
|
||||||
|
*/
|
||||||
|
BOOL CDECL EMFDRV_FrameRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush, INT width, INT height )
|
||||||
|
{
|
||||||
|
/* FIXME: update bounding rect */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* EMFDRV_PaintInvertRgn
|
* EMFDRV_PaintInvertRgn
|
||||||
*
|
*
|
||||||
|
|
|
@ -50,6 +50,7 @@ extern BOOL METADC_Ellipse( HDC hdc, INT left, INT top, INT right, INT bottom )
|
||||||
extern BOOL METADC_ExtTextOut( HDC hdc, INT x, INT y, UINT flags, const RECT *rect,
|
extern BOOL METADC_ExtTextOut( HDC hdc, INT x, INT y, UINT flags, const RECT *rect,
|
||||||
const WCHAR *str, UINT count, const INT *dx ) DECLSPEC_HIDDEN;
|
const WCHAR *str, UINT count, const INT *dx ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL METADC_FillRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush ) DECLSPEC_HIDDEN;
|
extern BOOL METADC_FillRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush ) DECLSPEC_HIDDEN;
|
||||||
|
extern BOOL METADC_FrameRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush, INT x, INT y ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL METADC_LineTo( HDC hdc, INT x, INT y ) DECLSPEC_HIDDEN;
|
extern BOOL METADC_LineTo( HDC hdc, INT x, INT y ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL METADC_MoveTo( HDC hdc, INT x, INT y ) DECLSPEC_HIDDEN;
|
extern BOOL METADC_MoveTo( HDC hdc, INT x, INT y ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL METADC_PaintRgn( HDC hdc, HRGN hrgn ) DECLSPEC_HIDDEN;
|
extern BOOL METADC_PaintRgn( HDC hdc, HRGN hrgn ) DECLSPEC_HIDDEN;
|
||||||
|
@ -79,6 +80,8 @@ extern BOOL EMFDC_EndPath( DC_ATTR *dc_attr ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL EMFDC_ExtTextOut( DC_ATTR *dc_attr, INT x, INT y, UINT flags, const RECT *rect,
|
extern BOOL EMFDC_ExtTextOut( DC_ATTR *dc_attr, INT x, INT y, UINT flags, const RECT *rect,
|
||||||
const WCHAR *str, UINT count, const INT *dx ) DECLSPEC_HIDDEN;
|
const WCHAR *str, UINT count, const INT *dx ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL EMFDC_FillRgn( DC_ATTR *dc_attr, HRGN hrgn, HBRUSH hbrush ) DECLSPEC_HIDDEN;
|
extern BOOL EMFDC_FillRgn( DC_ATTR *dc_attr, HRGN hrgn, HBRUSH hbrush ) DECLSPEC_HIDDEN;
|
||||||
|
extern BOOL EMFDC_FrameRgn( DC_ATTR *dc_attr, HRGN hrgn, HBRUSH hbrush, INT width,
|
||||||
|
INT height ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL EMFDC_LineTo( DC_ATTR *dc_attr, INT x, INT y ) DECLSPEC_HIDDEN;
|
extern BOOL EMFDC_LineTo( DC_ATTR *dc_attr, INT x, INT y ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL EMFDC_MoveTo( DC_ATTR *dc_attr, INT x, INT y ) DECLSPEC_HIDDEN;
|
extern BOOL EMFDC_MoveTo( DC_ATTR *dc_attr, INT x, INT y ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL EMFDC_PaintRgn( DC_ATTR *dc_attr, HRGN hrgn ) DECLSPEC_HIDDEN;
|
extern BOOL EMFDC_PaintRgn( DC_ATTR *dc_attr, HRGN hrgn ) DECLSPEC_HIDDEN;
|
||||||
|
|
|
@ -412,6 +412,22 @@ BOOL WINAPI PaintRgn( HDC hdc, HRGN hrgn )
|
||||||
return NtGdiFillRgn( hdc, hrgn, GetCurrentObject( hdc, OBJ_BRUSH ));
|
return NtGdiFillRgn( hdc, hrgn, GetCurrentObject( hdc, OBJ_BRUSH ));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* FrameRgn (GDI32.@)
|
||||||
|
*/
|
||||||
|
BOOL WINAPI FrameRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush, INT width, INT height )
|
||||||
|
{
|
||||||
|
DC_ATTR *dc_attr;
|
||||||
|
|
||||||
|
TRACE( "%p, %p, %p, %dx%d\n", hdc, hrgn, hbrush, width, height );
|
||||||
|
|
||||||
|
if (is_meta_dc( hdc )) return METADC_FrameRgn( hdc, hrgn, hbrush, width, height );
|
||||||
|
if (!(dc_attr = get_dc_attr( hdc ))) return FALSE;
|
||||||
|
if (dc_attr->emf && !EMFDC_FrameRgn( dc_attr, hrgn, hbrush, width, height ))
|
||||||
|
return FALSE;
|
||||||
|
return NtGdiFrameRgn( hdc, hrgn, hbrush, width, height );
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ExtTextOutW (GDI32.@)
|
* ExtTextOutW (GDI32.@)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -409,18 +409,21 @@ BOOL CDECL MFDRV_FillRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush )
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* MFDRV_FrameRgn
|
* METADC_FrameRgn
|
||||||
*/
|
*/
|
||||||
BOOL CDECL MFDRV_FrameRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush, INT x, INT y )
|
BOOL METADC_FrameRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush, INT x, INT y )
|
||||||
{
|
{
|
||||||
|
METAFILEDRV_PDEVICE *mf;
|
||||||
INT16 iRgn, iBrush;
|
INT16 iRgn, iBrush;
|
||||||
iRgn = MFDRV_CreateRegion( dev, hrgn );
|
|
||||||
|
if (!(mf = get_metadc_ptr( hdc ))) return FALSE;
|
||||||
|
iRgn = MFDRV_CreateRegion( &mf->dev, hrgn );
|
||||||
if(iRgn == -1)
|
if(iRgn == -1)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
iBrush = MFDRV_CreateBrushIndirect( dev, hbrush );
|
iBrush = MFDRV_CreateBrushIndirect( &mf->dev, hbrush );
|
||||||
if(!iBrush)
|
if(!iBrush)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
return MFDRV_MetaParam4( dev, META_FRAMEREGION, iRgn, iBrush, x, y );
|
return MFDRV_MetaParam4( &mf->dev, META_FRAMEREGION, iRgn, iBrush, x, y );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -130,7 +130,7 @@ static const struct gdi_dc_funcs MFDRV_Funcs =
|
||||||
MFDRV_FillRgn, /* pFillRgn */
|
MFDRV_FillRgn, /* pFillRgn */
|
||||||
MFDRV_FlattenPath, /* pFlattenPath */
|
MFDRV_FlattenPath, /* pFlattenPath */
|
||||||
NULL, /* pFontIsLinked */
|
NULL, /* pFontIsLinked */
|
||||||
MFDRV_FrameRgn, /* pFrameRgn */
|
NULL, /* pFrameRgn */
|
||||||
NULL, /* pGdiComment */
|
NULL, /* pGdiComment */
|
||||||
MFDRV_GetBoundsRect, /* pGetBoundsRect */
|
MFDRV_GetBoundsRect, /* pGetBoundsRect */
|
||||||
NULL, /* pGetCharABCWidths */
|
NULL, /* pGetCharABCWidths */
|
||||||
|
|
|
@ -85,7 +85,6 @@ extern INT CDECL MFDRV_ExtSelectClipRgn( PHYSDEV dev, HRGN hrgn, INT mode ) DEC
|
||||||
extern BOOL CDECL MFDRV_FillPath( PHYSDEV dev ) DECLSPEC_HIDDEN;
|
extern BOOL CDECL MFDRV_FillPath( PHYSDEV dev ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL CDECL MFDRV_FillRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush ) DECLSPEC_HIDDEN;
|
extern BOOL CDECL MFDRV_FillRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL CDECL MFDRV_FlattenPath( PHYSDEV dev ) DECLSPEC_HIDDEN;
|
extern BOOL CDECL MFDRV_FlattenPath( PHYSDEV dev ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL CDECL MFDRV_FrameRgn( PHYSDEV dev, HRGN hrgn, HBRUSH hbrush, INT x, INT y ) DECLSPEC_HIDDEN;
|
|
||||||
extern INT CDECL MFDRV_IntersectClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN;
|
extern INT CDECL MFDRV_IntersectClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom ) DECLSPEC_HIDDEN;
|
||||||
extern BOOL CDECL MFDRV_InvertRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN;
|
extern BOOL CDECL MFDRV_InvertRgn( PHYSDEV dev, HRGN hrgn ) DECLSPEC_HIDDEN;
|
||||||
extern INT CDECL MFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN;
|
extern INT CDECL MFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y ) DECLSPEC_HIDDEN;
|
||||||
|
|
|
@ -491,21 +491,18 @@ BOOL WINAPI NtGdiFillRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush )
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* FrameRgn (GDI32.@)
|
* NtGdiFrameRgn (win32u.@)
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI FrameRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush,
|
BOOL WINAPI NtGdiFrameRgn( HDC hdc, HRGN hrgn, HBRUSH hbrush, INT width, INT height )
|
||||||
INT nWidth, INT nHeight )
|
|
||||||
{
|
{
|
||||||
PHYSDEV physdev;
|
PHYSDEV physdev;
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
DC *dc = get_dc_ptr( hdc );
|
DC *dc = get_dc_ptr( hdc );
|
||||||
|
|
||||||
TRACE( "%p, %p, %p, %dx%d\n", hdc, hrgn, hbrush, nWidth, nHeight );
|
|
||||||
|
|
||||||
if (!dc) return FALSE;
|
if (!dc) return FALSE;
|
||||||
update_dc( dc );
|
update_dc( dc );
|
||||||
physdev = GET_DC_PHYSDEV( dc, pFrameRgn );
|
physdev = GET_DC_PHYSDEV( dc, pFrameRgn );
|
||||||
ret = physdev->funcs->pFrameRgn( physdev, hrgn, hbrush, nWidth, nHeight );
|
ret = physdev->funcs->pFrameRgn( physdev, hrgn, hbrush, width, height );
|
||||||
release_dc_ptr( dc );
|
release_dc_ptr( dc );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue