Commit 582a2f51 authored by Alexandre Julliard's avatar Alexandre Julliard

gdi32: Add a GetBoundsRect driver entry point.

parent b1ccff1a
...@@ -222,6 +222,22 @@ void update_dc( DC *dc ) ...@@ -222,6 +222,22 @@ void update_dc( DC *dc )
/*********************************************************************** /***********************************************************************
* fetch_device_bounds
*
* Fetch and clear the device-specific bounds, and add them to the DC if necessary.
*/
static BOOL fetch_device_bounds( DC *dc )
{
RECT rect;
PHYSDEV physdev = GET_DC_PHYSDEV( dc, pGetBoundsRect );
UINT ret = physdev->funcs->pGetBoundsRect( physdev, &rect, DCB_RESET );
if (dc->bounds_enabled && ret == DCB_SET) add_bounds_rect( &dc->bounds, &rect );
return ret;
}
/***********************************************************************
* DC_DeleteObject * DC_DeleteObject
*/ */
static BOOL DC_DeleteObject( HGDIOBJ handle ) static BOOL DC_DeleteObject( HGDIOBJ handle )
...@@ -1316,6 +1332,12 @@ UINT WINAPI GetBoundsRect(HDC hdc, LPRECT rect, UINT flags) ...@@ -1316,6 +1332,12 @@ UINT WINAPI GetBoundsRect(HDC hdc, LPRECT rect, UINT flags)
if ( !dc ) return 0; if ( !dc ) return 0;
if (!fetch_device_bounds( dc ))
{
release_dc_ptr( dc );
return 0;
}
if (rect) if (rect)
{ {
if (is_rect_empty( &dc->bounds )) if (is_rect_empty( &dc->bounds ))
...@@ -1351,6 +1373,12 @@ UINT WINAPI SetBoundsRect(HDC hdc, const RECT* rect, UINT flags) ...@@ -1351,6 +1373,12 @@ UINT WINAPI SetBoundsRect(HDC hdc, const RECT* rect, UINT flags)
if ((flags & DCB_ENABLE) && (flags & DCB_DISABLE)) return 0; if ((flags & DCB_ENABLE) && (flags & DCB_DISABLE)) return 0;
if (!(dc = get_dc_ptr( hdc ))) return 0; if (!(dc = get_dc_ptr( hdc ))) return 0;
if (!fetch_device_bounds( dc ))
{
release_dc_ptr( dc );
return 0;
}
ret = (dc->bounds_enabled ? DCB_ENABLE : DCB_DISABLE) | ret = (dc->bounds_enabled ? DCB_ENABLE : DCB_DISABLE) |
(is_rect_empty( &dc->bounds ) ? DCB_RESET : DCB_SET); (is_rect_empty( &dc->bounds ) ? DCB_RESET : DCB_SET);
......
...@@ -599,6 +599,7 @@ const struct gdi_dc_funcs dib_driver = ...@@ -599,6 +599,7 @@ const struct gdi_dc_funcs dib_driver =
NULL, /* pFrameRgn */ NULL, /* pFrameRgn */
NULL, /* pGdiComment */ NULL, /* pGdiComment */
NULL, /* pGdiRealizationInfo */ NULL, /* pGdiRealizationInfo */
NULL, /* pGetBoundsRect */
NULL, /* pGetCharABCWidths */ NULL, /* pGetCharABCWidths */
NULL, /* pGetCharABCWidthsI */ NULL, /* pGetCharABCWidthsI */
NULL, /* pGetCharWidth */ NULL, /* pGetCharWidth */
......
...@@ -311,6 +311,11 @@ static BOOL nulldrv_GdiRealizationInfo( PHYSDEV dev, void *info ) ...@@ -311,6 +311,11 @@ static BOOL nulldrv_GdiRealizationInfo( PHYSDEV dev, void *info )
return FALSE; return FALSE;
} }
static UINT nulldrv_GetBoundsRect( PHYSDEV dev, RECT *rect, UINT flags )
{
return DCB_RESET;
}
static BOOL nulldrv_GetCharABCWidths( PHYSDEV dev, UINT first, UINT last, LPABC abc ) static BOOL nulldrv_GetCharABCWidths( PHYSDEV dev, UINT first, UINT last, LPABC abc )
{ {
return FALSE; return FALSE;
...@@ -758,6 +763,7 @@ const struct gdi_dc_funcs null_driver = ...@@ -758,6 +763,7 @@ const struct gdi_dc_funcs null_driver =
nulldrv_FrameRgn, /* pFrameRgn */ nulldrv_FrameRgn, /* pFrameRgn */
nulldrv_GdiComment, /* pGdiComment */ nulldrv_GdiComment, /* pGdiComment */
nulldrv_GdiRealizationInfo, /* pGdiRealizationInfo */ nulldrv_GdiRealizationInfo, /* pGdiRealizationInfo */
nulldrv_GetBoundsRect, /* pGetBoundsRect */
nulldrv_GetCharABCWidths, /* pGetCharABCWidths */ nulldrv_GetCharABCWidths, /* pGetCharABCWidths */
nulldrv_GetCharABCWidthsI, /* pGetCharABCWidthsI */ nulldrv_GetCharABCWidthsI, /* pGetCharABCWidthsI */
nulldrv_GetCharWidth, /* pGetCharWidth */ nulldrv_GetCharWidth, /* pGetCharWidth */
......
...@@ -75,6 +75,7 @@ static const struct gdi_dc_funcs EMFDRV_Funcs = ...@@ -75,6 +75,7 @@ static const struct gdi_dc_funcs EMFDRV_Funcs =
EMFDRV_FrameRgn, /* pFrameRgn */ EMFDRV_FrameRgn, /* pFrameRgn */
EMFDRV_GdiComment, /* pGdiComment */ EMFDRV_GdiComment, /* pGdiComment */
NULL, /* pGdiRealizationInfo */ NULL, /* pGdiRealizationInfo */
NULL, /* pGetBoundsRect */
NULL, /* pGetCharABCWidths */ NULL, /* pGetCharABCWidths */
NULL, /* pGetCharABCWidthsI */ NULL, /* pGetCharABCWidthsI */
NULL, /* pGetCharWidth */ NULL, /* pGetCharWidth */
......
...@@ -7772,6 +7772,7 @@ static const struct gdi_dc_funcs freetype_funcs = ...@@ -7772,6 +7772,7 @@ static const struct gdi_dc_funcs freetype_funcs =
NULL, /* pFrameRgn */ NULL, /* pFrameRgn */
NULL, /* pGdiComment */ NULL, /* pGdiComment */
freetype_GdiRealizationInfo, /* pGdiRealizationInfo */ freetype_GdiRealizationInfo, /* pGdiRealizationInfo */
NULL, /* pGetBoundsRect */
freetype_GetCharABCWidths, /* pGetCharABCWidths */ freetype_GetCharABCWidths, /* pGetCharABCWidths */
freetype_GetCharABCWidthsI, /* pGetCharABCWidthsI */ freetype_GetCharABCWidthsI, /* pGetCharABCWidthsI */
freetype_GetCharWidth, /* pGetCharWidth */ freetype_GetCharWidth, /* pGetCharWidth */
......
...@@ -60,6 +60,15 @@ static INT MFDRV_ExtEscape( PHYSDEV dev, INT nEscape, INT cbInput, LPCVOID in_da ...@@ -60,6 +60,15 @@ static INT MFDRV_ExtEscape( PHYSDEV dev, INT nEscape, INT cbInput, LPCVOID in_da
/****************************************************************** /******************************************************************
* MFDRV_GetBoundsRect
*/
static UINT MFDRV_GetBoundsRect( PHYSDEV dev, RECT *rect, UINT flags )
{
return 0;
}
/******************************************************************
* MFDRV_GetDeviceCaps * MFDRV_GetDeviceCaps
* *
*A very simple implementation that returns DT_METAFILE *A very simple implementation that returns DT_METAFILE
...@@ -120,6 +129,7 @@ static const struct gdi_dc_funcs MFDRV_Funcs = ...@@ -120,6 +129,7 @@ static const struct gdi_dc_funcs MFDRV_Funcs =
MFDRV_FrameRgn, /* pFrameRgn */ MFDRV_FrameRgn, /* pFrameRgn */
NULL, /* pGdiComment */ NULL, /* pGdiComment */
NULL, /* pGdiRealizationInfo */ NULL, /* pGdiRealizationInfo */
MFDRV_GetBoundsRect, /* pGetBoundsRect */
NULL, /* pGetCharABCWidths */ NULL, /* pGetCharABCWidths */
NULL, /* pGetCharABCWidthsI */ NULL, /* pGetCharABCWidthsI */
NULL, /* pGetCharWidth */ NULL, /* pGetCharWidth */
......
...@@ -2274,6 +2274,7 @@ const struct gdi_dc_funcs path_driver = ...@@ -2274,6 +2274,7 @@ const struct gdi_dc_funcs path_driver =
NULL, /* pFrameRgn */ NULL, /* pFrameRgn */
NULL, /* pGdiComment */ NULL, /* pGdiComment */
NULL, /* pGdiRealizationInfo */ NULL, /* pGdiRealizationInfo */
NULL, /* pGetBoundsRect */
NULL, /* pGetCharABCWidths */ NULL, /* pGetCharABCWidths */
NULL, /* pGetCharABCWidthsI */ NULL, /* pGetCharABCWidthsI */
NULL, /* pGetCharWidth */ NULL, /* pGetCharWidth */
......
...@@ -367,7 +367,6 @@ static void test_device_caps( HDC hdc, HDC ref_dc, const char *descr ) ...@@ -367,7 +367,6 @@ static void test_device_caps( HDC hdc, HDC ref_dc, const char *descr )
SetMapMode( hdc, MM_TEXT ); SetMapMode( hdc, MM_TEXT );
Rectangle( hdc, 2, 2, 5, 5 ); Rectangle( hdc, 2, 2, 5, 5 );
type = GetBoundsRect( hdc, &rect, DCB_RESET ); type = GetBoundsRect( hdc, &rect, DCB_RESET );
todo_wine
ok( !type, "GetBoundsRect succeeded on %s\n", descr ); ok( !type, "GetBoundsRect succeeded on %s\n", descr );
} }
else else
......
...@@ -857,6 +857,7 @@ static const struct gdi_dc_funcs psdrv_funcs = ...@@ -857,6 +857,7 @@ static const struct gdi_dc_funcs psdrv_funcs =
NULL, /* pFrameRgn */ NULL, /* pFrameRgn */
NULL, /* pGdiComment */ NULL, /* pGdiComment */
NULL, /* pGdiRealizationInfo */ NULL, /* pGdiRealizationInfo */
NULL, /* pGetBoundsRect */
NULL, /* pGetCharABCWidths */ NULL, /* pGetCharABCWidths */
NULL, /* pGetCharABCWidthsI */ NULL, /* pGetCharABCWidthsI */
PSDRV_GetCharWidth, /* pGetCharWidth */ PSDRV_GetCharWidth, /* pGetCharWidth */
......
...@@ -491,6 +491,7 @@ static const struct gdi_dc_funcs x11drv_funcs = ...@@ -491,6 +491,7 @@ static const struct gdi_dc_funcs x11drv_funcs =
NULL, /* pFrameRgn */ NULL, /* pFrameRgn */
NULL, /* pGdiComment */ NULL, /* pGdiComment */
NULL, /* pGdiRealizationInfo */ NULL, /* pGdiRealizationInfo */
NULL, /* pGetBoundsRect */
NULL, /* pGetCharABCWidths */ NULL, /* pGetCharABCWidths */
NULL, /* pGetCharABCWidthsI */ NULL, /* pGetCharABCWidthsI */
X11DRV_GetCharWidth, /* pGetCharWidth */ X11DRV_GetCharWidth, /* pGetCharWidth */
......
...@@ -2684,6 +2684,7 @@ static const struct gdi_dc_funcs xrender_funcs = ...@@ -2684,6 +2684,7 @@ static const struct gdi_dc_funcs xrender_funcs =
NULL, /* pFrameRgn */ NULL, /* pFrameRgn */
NULL, /* pGdiComment */ NULL, /* pGdiComment */
NULL, /* pGdiRealizationInfo */ NULL, /* pGdiRealizationInfo */
NULL, /* pGetBoundsRect */
NULL, /* pGetCharABCWidths */ NULL, /* pGetCharABCWidths */
NULL, /* pGetCharABCWidthsI */ NULL, /* pGetCharABCWidthsI */
NULL, /* pGetCharWidth */ NULL, /* pGetCharWidth */
......
...@@ -101,6 +101,7 @@ struct gdi_dc_funcs ...@@ -101,6 +101,7 @@ struct gdi_dc_funcs
BOOL (*pFrameRgn)(PHYSDEV,HRGN,HBRUSH,INT,INT); BOOL (*pFrameRgn)(PHYSDEV,HRGN,HBRUSH,INT,INT);
BOOL (*pGdiComment)(PHYSDEV,UINT,CONST BYTE*); BOOL (*pGdiComment)(PHYSDEV,UINT,CONST BYTE*);
BOOL (*pGdiRealizationInfo)(PHYSDEV,void*); BOOL (*pGdiRealizationInfo)(PHYSDEV,void*);
UINT (*pGetBoundsRect)(PHYSDEV,RECT*,UINT);
BOOL (*pGetCharABCWidths)(PHYSDEV,UINT,UINT,LPABC); BOOL (*pGetCharABCWidths)(PHYSDEV,UINT,UINT,LPABC);
BOOL (*pGetCharABCWidthsI)(PHYSDEV,UINT,UINT,WORD*,LPABC); BOOL (*pGetCharABCWidthsI)(PHYSDEV,UINT,UINT,WORD*,LPABC);
BOOL (*pGetCharWidth)(PHYSDEV,UINT,UINT,LPINT); BOOL (*pGetCharWidth)(PHYSDEV,UINT,UINT,LPINT);
...@@ -211,7 +212,7 @@ struct gdi_dc_funcs ...@@ -211,7 +212,7 @@ struct gdi_dc_funcs
}; };
/* increment this when you change the DC function table */ /* increment this when you change the DC function table */
#define WINE_GDI_DRIVER_VERSION 24 #define WINE_GDI_DRIVER_VERSION 25
static inline PHYSDEV get_physdev_entry_point( PHYSDEV dev, size_t offset ) static inline PHYSDEV get_physdev_entry_point( PHYSDEV dev, size_t offset )
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment