Mapping mode functions should change dc settings when dc is an enhmf.
diff --git a/dlls/gdi/enhmfdrv/dc.c b/dlls/gdi/enhmfdrv/dc.c
index 55dcbfa..322c2cc 100644
--- a/dlls/gdi/enhmfdrv/dc.c
+++ b/dlls/gdi/enhmfdrv/dc.c
@@ -85,15 +85,6 @@
return EMFDRV_WriteRecord( dev, &emr.emr );
}
-INT EMFDRV_SetMapMode( PHYSDEV dev, INT mode )
-{
- EMRSETMAPMODE emr;
- emr.emr.iType = EMR_SETMAPMODE;
- emr.emr.nSize = sizeof(emr);
- emr.iMode = mode;
- return EMFDRV_WriteRecord( dev, &emr.emr );
-}
-
INT EMFDRV_ExcludeClipRect( PHYSDEV dev, INT left, INT top, INT right, INT bottom )
{
EMREXCLUDECLIPRECT emr;
diff --git a/dlls/gdi/enhmfdrv/enhmetafiledrv.h b/dlls/gdi/enhmfdrv/enhmetafiledrv.h
index 7219a7e..a703790 100644
--- a/dlls/gdi/enhmfdrv/enhmetafiledrv.h
+++ b/dlls/gdi/enhmfdrv/enhmetafiledrv.h
@@ -80,8 +80,8 @@
extern BOOL EMFDRV_LineTo( PHYSDEV dev, INT x, INT y );
extern BOOL EMFDRV_MoveTo( PHYSDEV dev, INT x, INT y );
extern INT EMFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y );
-extern BOOL EMFDRV_OffsetViewportOrg( PHYSDEV dev, INT x, INT y );
-extern BOOL EMFDRV_OffsetWindowOrg( PHYSDEV dev, INT x, INT y );
+extern INT EMFDRV_OffsetViewportOrg( PHYSDEV dev, INT x, INT y );
+extern INT EMFDRV_OffsetWindowOrg( PHYSDEV dev, INT x, INT y );
extern BOOL EMFDRV_PaintRgn( PHYSDEV dev, HRGN hrgn );
extern BOOL EMFDRV_PatBlt( PHYSDEV dev, INT left, INT top,
INT width, INT height, DWORD rop );
@@ -101,9 +101,9 @@
INT right, INT bottom, INT ell_width,
INT ell_height );
extern INT EMFDRV_SaveDC( PHYSDEV dev );
-extern BOOL EMFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum,
+extern INT EMFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum,
INT xDenom, INT yNum, INT yDenom );
-extern BOOL EMFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom,
+extern INT EMFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom,
INT yNum, INT yDenom );
extern HBITMAP EMFDRV_SelectBitmap( PHYSDEV dev, HBITMAP handle );
extern HBRUSH EMFDRV_SelectBrush( PHYSDEV dev, HBRUSH handle );
@@ -125,10 +125,10 @@
extern INT EMFDRV_SetStretchBltMode( PHYSDEV dev, INT mode );
extern UINT EMFDRV_SetTextAlign( PHYSDEV dev, UINT align );
extern COLORREF EMFDRV_SetTextColor( PHYSDEV dev, COLORREF color );
-extern BOOL EMFDRV_SetViewportExt( PHYSDEV dev, INT x, INT y );
-extern BOOL EMFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y );
-extern BOOL EMFDRV_SetWindowExt( PHYSDEV dev, INT x, INT y );
-extern BOOL EMFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y );
+extern INT EMFDRV_SetViewportExt( PHYSDEV dev, INT x, INT y );
+extern INT EMFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y );
+extern INT EMFDRV_SetWindowExt( PHYSDEV dev, INT x, INT y );
+extern INT EMFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y );
extern BOOL EMFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst,
INT widthDst, INT heightDst,
PHYSDEV devSrc, INT xSrc, INT ySrc,
diff --git a/dlls/gdi/enhmfdrv/mapping.c b/dlls/gdi/enhmfdrv/mapping.c
index d0fa5b0..1d68b32 100644
--- a/dlls/gdi/enhmfdrv/mapping.c
+++ b/dlls/gdi/enhmfdrv/mapping.c
@@ -20,7 +20,17 @@
#include "enhmfdrv/enhmetafiledrv.h"
-BOOL EMFDRV_SetViewportExt( PHYSDEV dev, INT cx, INT cy )
+INT EMFDRV_SetMapMode( PHYSDEV dev, INT mode )
+{
+ EMRSETMAPMODE emr;
+ emr.emr.iType = EMR_SETMAPMODE;
+ emr.emr.nSize = sizeof(emr);
+ emr.iMode = mode;
+
+ return EMFDRV_WriteRecord( dev, &emr.emr );
+}
+
+INT EMFDRV_SetViewportExt( PHYSDEV dev, INT cx, INT cy )
{
EMRSETVIEWPORTEXTEX emr;
@@ -32,7 +42,7 @@
return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_SetWindowExt( PHYSDEV dev, INT cx, INT cy )
+INT EMFDRV_SetWindowExt( PHYSDEV dev, INT cx, INT cy )
{
EMRSETWINDOWEXTEX emr;
@@ -44,7 +54,7 @@
return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y )
+INT EMFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y )
{
EMRSETVIEWPORTORGEX emr;
@@ -56,7 +66,7 @@
return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y )
+INT EMFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y )
{
EMRSETWINDOWORGEX emr;
@@ -68,8 +78,8 @@
return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
- INT yDenom )
+INT EMFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
+ INT yDenom )
{
EMRSCALEVIEWPORTEXTEX emr;
@@ -83,8 +93,8 @@
return EMFDRV_WriteRecord( dev, &emr.emr );
}
-BOOL EMFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
- INT yDenom )
+INT EMFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
+ INT yDenom )
{
EMRSCALEWINDOWEXTEX emr;
@@ -97,5 +107,3 @@
return EMFDRV_WriteRecord( dev, &emr.emr );
}
-
-
diff --git a/dlls/gdi/mfdrv/mapping.c b/dlls/gdi/mfdrv/mapping.c
index bcd1794..5ce953f 100644
--- a/dlls/gdi/mfdrv/mapping.c
+++ b/dlls/gdi/mfdrv/mapping.c
@@ -27,89 +27,95 @@
*/
INT MFDRV_SetMapMode( PHYSDEV dev, INT mode )
{
- METAFILEDRV_PDEVICE *physDev = (METAFILEDRV_PDEVICE *)dev;
- INT prevMode = GetMapMode( physDev->hdc );
- MFDRV_MetaParam1( dev, META_SETMAPMODE, mode );
- return prevMode;
+ if(!MFDRV_MetaParam1( dev, META_SETMAPMODE, mode ))
+ return FALSE;
+ return GDI_NO_MORE_WORK;
}
/***********************************************************************
* MFDRV_SetViewportExt
*/
-BOOL MFDRV_SetViewportExt( PHYSDEV dev, INT x, INT y )
+INT MFDRV_SetViewportExt( PHYSDEV dev, INT x, INT y )
{
- MFDRV_MetaParam2( dev, META_SETVIEWPORTEXT, x, y );
- return TRUE;
+ if(!MFDRV_MetaParam2( dev, META_SETVIEWPORTEXT, x, y ))
+ return FALSE;
+ return GDI_NO_MORE_WORK;
}
/***********************************************************************
* MFDRV_SetViewportOrg
*/
-BOOL MFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y )
+INT MFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y )
{
- MFDRV_MetaParam2( dev, META_SETVIEWPORTORG, x, y );
- return TRUE;
+ if(!MFDRV_MetaParam2( dev, META_SETVIEWPORTORG, x, y ))
+ return FALSE;
+ return GDI_NO_MORE_WORK;
}
/***********************************************************************
* MFDRV_SetWindowExt
*/
-BOOL MFDRV_SetWindowExt( PHYSDEV dev, INT x, INT y )
+INT MFDRV_SetWindowExt( PHYSDEV dev, INT x, INT y )
{
- MFDRV_MetaParam2( dev, META_SETWINDOWEXT, x, y );
- return TRUE;
+ if(!MFDRV_MetaParam2( dev, META_SETWINDOWEXT, x, y ))
+ return FALSE;
+ return GDI_NO_MORE_WORK;
}
/***********************************************************************
* MFDRV_SetWindowOrg
*/
-BOOL MFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y )
+INT MFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y )
{
- MFDRV_MetaParam2( dev, META_SETWINDOWORG, x, y );
- return TRUE;
+ if(!MFDRV_MetaParam2( dev, META_SETWINDOWORG, x, y ))
+ return FALSE;
+ return GDI_NO_MORE_WORK;
}
/***********************************************************************
* MFDRV_OffsetViewportOrg
*/
-BOOL MFDRV_OffsetViewportOrg( PHYSDEV dev, INT x, INT y )
+INT MFDRV_OffsetViewportOrg( PHYSDEV dev, INT x, INT y )
{
- MFDRV_MetaParam2( dev, META_OFFSETVIEWPORTORG, x, y );
- return TRUE;
+ if(!MFDRV_MetaParam2( dev, META_OFFSETVIEWPORTORG, x, y ))
+ return FALSE;
+ return GDI_NO_MORE_WORK;
}
/***********************************************************************
* MFDRV_OffsetWindowOrg
*/
-BOOL MFDRV_OffsetWindowOrg( PHYSDEV dev, INT x, INT y )
+INT MFDRV_OffsetWindowOrg( PHYSDEV dev, INT x, INT y )
{
- MFDRV_MetaParam2( dev, META_OFFSETWINDOWORG, x, y );
- return TRUE;
+ if(!MFDRV_MetaParam2( dev, META_OFFSETWINDOWORG, x, y ))
+ return FALSE;
+ return GDI_NO_MORE_WORK;
}
/***********************************************************************
* MFDRV_ScaleViewportExt
*/
-BOOL MFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom )
+INT MFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom )
{
- MFDRV_MetaParam4( dev, META_SCALEVIEWPORTEXT, xNum, xDenom, yNum, yDenom );
- return TRUE;
+ if(!MFDRV_MetaParam4( dev, META_SCALEVIEWPORTEXT, xNum, xDenom, yNum, yDenom ))
+ return FALSE;
+ return GDI_NO_MORE_WORK;
}
/***********************************************************************
* MFDRV_ScaleWindowExt
*/
-BOOL MFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom )
+INT MFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum, INT yDenom )
{
- MFDRV_MetaParam4( dev, META_SCALEWINDOWEXT, xNum, xDenom, yNum, yDenom );
- return TRUE;
+ if(!MFDRV_MetaParam4( dev, META_SCALEWINDOWEXT, xNum, xDenom, yNum, yDenom ))
+ return FALSE;
+ return GDI_NO_MORE_WORK;
}
-
diff --git a/dlls/gdi/mfdrv/metafiledrv.h b/dlls/gdi/mfdrv/metafiledrv.h
index 7cc904e..ea25a0d 100644
--- a/dlls/gdi/mfdrv/metafiledrv.h
+++ b/dlls/gdi/mfdrv/metafiledrv.h
@@ -86,9 +86,9 @@
extern BOOL MFDRV_InvertRgn( PHYSDEV dev, HRGN hrgn );
extern BOOL MFDRV_LineTo( PHYSDEV dev, INT x, INT y );
extern BOOL MFDRV_MoveTo( PHYSDEV dev, INT x, INT y );
-extern INT MFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y );
-extern BOOL MFDRV_OffsetViewportOrg( PHYSDEV dev, INT x, INT y );
-extern BOOL MFDRV_OffsetWindowOrg( PHYSDEV dev, INT x, INT y );
+extern INT MFDRV_OffsetClipRgn( PHYSDEV dev, INT x, INT y );
+extern INT MFDRV_OffsetViewportOrg( PHYSDEV dev, INT x, INT y );
+extern INT MFDRV_OffsetWindowOrg( PHYSDEV dev, INT x, INT y );
extern BOOL MFDRV_PaintRgn( PHYSDEV dev, HRGN hrgn );
extern BOOL MFDRV_PatBlt( PHYSDEV dev, INT left, INT top, INT width, INT height,
DWORD rop );
@@ -108,10 +108,10 @@
INT right, INT bottom, INT ell_width,
INT ell_height );
extern INT MFDRV_SaveDC( PHYSDEV dev );
-extern BOOL MFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
- INT yDenom );
-extern BOOL MFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
- INT yDenom );
+extern INT MFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
+ INT yDenom );
+extern INT MFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
+ INT yDenom );
extern HBITMAP MFDRV_SelectBitmap( PHYSDEV dev, HBITMAP handle );
extern HBRUSH MFDRV_SelectBrush( PHYSDEV dev, HBRUSH handle );
extern BOOL MFDRV_SelectClipPath( PHYSDEV dev, INT iMode );
@@ -130,10 +130,10 @@
extern INT MFDRV_SetTextCharacterExtra( PHYSDEV dev, INT extra );
extern COLORREF MFDRV_SetTextColor( PHYSDEV dev, COLORREF color );
extern INT MFDRV_SetTextJustification( PHYSDEV dev, INT extra, INT breaks );
-extern BOOL MFDRV_SetViewportExt( PHYSDEV dev, INT x, INT y );
-extern BOOL MFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y );
-extern BOOL MFDRV_SetWindowExt( PHYSDEV dev, INT x, INT y );
-extern BOOL MFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y );
+extern INT MFDRV_SetViewportExt( PHYSDEV dev, INT x, INT y );
+extern INT MFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y );
+extern INT MFDRV_SetWindowExt( PHYSDEV dev, INT x, INT y );
+extern INT MFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y );
extern BOOL MFDRV_StretchBlt( PHYSDEV devDst, INT xDst, INT yDst, INT widthDst,
INT heightDst, PHYSDEV devSrc, INT xSrc, INT ySrc,
INT widthSrc, INT heightSrc, DWORD rop );
diff --git a/graphics/mapping.c b/graphics/mapping.c
index 874a06d..3b2f44a 100644
--- a/graphics/mapping.c
+++ b/graphics/mapping.c
@@ -144,20 +144,24 @@
*/
INT WINAPI SetMapMode( HDC hdc, INT mode )
{
- INT prevMode;
+ INT ret;
INT horzSize, vertSize, horzRes, vertRes;
DC * dc = DC_GetDCPtr( hdc );
if (!dc) return 0;
if (dc->funcs->pSetMapMode)
{
- prevMode = dc->funcs->pSetMapMode( dc->physDev, mode );
- goto done;
+ if((ret = dc->funcs->pSetMapMode( dc->physDev, mode )) != TRUE)
+ {
+ if(ret == GDI_NO_MORE_WORK)
+ ret = TRUE;
+ goto done;
+ }
}
TRACE("%04x %d\n", hdc, mode );
- prevMode = dc->MapMode;
+ ret = dc->MapMode;
horzSize = GetDeviceCaps( hdc, HORZSIZE );
vertSize = GetDeviceCaps( hdc, VERTSIZE );
horzRes = GetDeviceCaps( hdc, HORZRES );
@@ -210,7 +214,7 @@
DC_UpdateXforms( dc );
done:
GDI_ReleaseObj( hdc );
- return prevMode;
+ return ret;
}
@@ -219,13 +223,17 @@
*/
BOOL WINAPI SetViewportExtEx( HDC hdc, INT x, INT y, LPSIZE size )
{
- BOOL ret = TRUE;
+ INT ret = TRUE;
DC * dc = DC_GetDCPtr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pSetViewportExt)
{
- ret = dc->funcs->pSetViewportExt( dc->physDev, x, y );
- goto done;
+ if((ret = dc->funcs->pSetViewportExt( dc->physDev, x, y )) != TRUE)
+ {
+ if(ret == GDI_NO_MORE_WORK)
+ ret = TRUE;
+ goto done;
+ }
}
if (size)
{
@@ -254,22 +262,28 @@
*/
BOOL WINAPI SetViewportOrgEx( HDC hdc, INT x, INT y, LPPOINT pt )
{
- BOOL ret = TRUE;
+ INT ret = TRUE;
DC * dc = DC_GetDCPtr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pSetViewportOrg)
- ret = dc->funcs->pSetViewportOrg( dc->physDev, x, y );
- else
{
- if (pt)
- {
- pt->x = dc->vportOrgX;
- pt->y = dc->vportOrgY;
- }
- dc->vportOrgX = x;
- dc->vportOrgY = y;
- DC_UpdateXforms( dc );
+ if((ret = dc->funcs->pSetViewportOrg( dc->physDev, x, y )) != TRUE)
+ {
+ if(ret == GDI_NO_MORE_WORK)
+ ret = TRUE;
+ goto done;
+ }
}
+ if (pt)
+ {
+ pt->x = dc->vportOrgX;
+ pt->y = dc->vportOrgY;
+ }
+ dc->vportOrgX = x;
+ dc->vportOrgY = y;
+ DC_UpdateXforms( dc );
+
+ done:
GDI_ReleaseObj( hdc );
return ret;
}
@@ -280,13 +294,17 @@
*/
BOOL WINAPI SetWindowExtEx( HDC hdc, INT x, INT y, LPSIZE size )
{
- BOOL ret = TRUE;
+ INT ret = TRUE;
DC * dc = DC_GetDCPtr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pSetWindowExt)
{
- ret = dc->funcs->pSetWindowExt( dc->physDev, x, y );
- goto done;
+ if((ret = dc->funcs->pSetWindowExt( dc->physDev, x, y )) != TRUE)
+ {
+ if(ret == GDI_NO_MORE_WORK)
+ ret = TRUE;
+ goto done;
+ }
}
if (size)
{
@@ -315,21 +333,27 @@
*/
BOOL WINAPI SetWindowOrgEx( HDC hdc, INT x, INT y, LPPOINT pt )
{
- BOOL ret = TRUE;
+ INT ret = TRUE;
DC * dc = DC_GetDCPtr( hdc );
if (!dc) return FALSE;
- if (dc->funcs->pSetWindowOrg) ret = dc->funcs->pSetWindowOrg( dc->physDev, x, y );
- else
+ if (dc->funcs->pSetWindowOrg)
{
- if (pt)
- {
- pt->x = dc->wndOrgX;
- pt->y = dc->wndOrgY;
- }
- dc->wndOrgX = x;
- dc->wndOrgY = y;
- DC_UpdateXforms( dc );
+ if((ret = dc->funcs->pSetWindowOrg( dc->physDev, x, y )) != TRUE)
+ {
+ if(ret == GDI_NO_MORE_WORK)
+ ret = TRUE;
+ goto done;
+ }
}
+ if (pt)
+ {
+ pt->x = dc->wndOrgX;
+ pt->y = dc->wndOrgY;
+ }
+ dc->wndOrgX = x;
+ dc->wndOrgY = y;
+ DC_UpdateXforms( dc );
+ done:
GDI_ReleaseObj( hdc );
return ret;
}
@@ -340,22 +364,27 @@
*/
BOOL WINAPI OffsetViewportOrgEx( HDC hdc, INT x, INT y, LPPOINT pt)
{
- BOOL ret = TRUE;
+ INT ret = TRUE;
DC * dc = DC_GetDCPtr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pOffsetViewportOrg)
- ret = dc->funcs->pOffsetViewportOrg( dc->physDev, x, y );
- else
{
- if (pt)
- {
- pt->x = dc->vportOrgX;
- pt->y = dc->vportOrgY;
- }
- dc->vportOrgX += x;
- dc->vportOrgY += y;
- DC_UpdateXforms( dc );
+ if((ret = dc->funcs->pOffsetViewportOrg( dc->physDev, x, y )) != TRUE)
+ {
+ if(ret == GDI_NO_MORE_WORK)
+ ret = TRUE;
+ goto done;
+ }
}
+ if (pt)
+ {
+ pt->x = dc->vportOrgX;
+ pt->y = dc->vportOrgY;
+ }
+ dc->vportOrgX += x;
+ dc->vportOrgY += y;
+ DC_UpdateXforms( dc );
+ done:
GDI_ReleaseObj( hdc );
return ret;
}
@@ -366,22 +395,27 @@
*/
BOOL WINAPI OffsetWindowOrgEx( HDC hdc, INT x, INT y, LPPOINT pt )
{
- BOOL ret = TRUE;
+ INT ret = TRUE;
DC * dc = DC_GetDCPtr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pOffsetWindowOrg)
- ret = dc->funcs->pOffsetWindowOrg( dc->physDev, x, y );
- else
{
- if (pt)
- {
- pt->x = dc->wndOrgX;
- pt->y = dc->wndOrgY;
- }
- dc->wndOrgX += x;
- dc->wndOrgY += y;
- DC_UpdateXforms( dc );
+ if((ret = dc->funcs->pOffsetWindowOrg( dc->physDev, x, y )) != TRUE)
+ {
+ if(ret == GDI_NO_MORE_WORK)
+ ret = TRUE;
+ goto done;
+ }
}
+ if (pt)
+ {
+ pt->x = dc->wndOrgX;
+ pt->y = dc->wndOrgY;
+ }
+ dc->wndOrgX += x;
+ dc->wndOrgY += y;
+ DC_UpdateXforms( dc );
+ done:
GDI_ReleaseObj( hdc );
return ret;
}
@@ -393,13 +427,17 @@
BOOL WINAPI ScaleViewportExtEx( HDC hdc, INT xNum, INT xDenom,
INT yNum, INT yDenom, LPSIZE size )
{
- BOOL ret = TRUE;
+ INT ret = TRUE;
DC * dc = DC_GetDCPtr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pScaleViewportExt)
{
- ret = dc->funcs->pScaleViewportExt( dc->physDev, xNum, xDenom, yNum, yDenom );
- goto done;
+ if((ret = dc->funcs->pScaleViewportExt( dc->physDev, xNum, xDenom, yNum, yDenom )) != TRUE)
+ {
+ if(ret == GDI_NO_MORE_WORK)
+ ret = TRUE;
+ goto done;
+ }
}
if (size)
{
@@ -431,13 +469,17 @@
BOOL WINAPI ScaleWindowExtEx( HDC hdc, INT xNum, INT xDenom,
INT yNum, INT yDenom, LPSIZE size )
{
- BOOL ret = TRUE;
+ INT ret = TRUE;
DC * dc = DC_GetDCPtr( hdc );
if (!dc) return FALSE;
if (dc->funcs->pScaleWindowExt)
{
- ret = dc->funcs->pScaleWindowExt( dc->physDev, xNum, xDenom, yNum, yDenom );
- goto done;
+ if((ret = dc->funcs->pScaleWindowExt( dc->physDev, xNum, xDenom, yNum, yDenom )) != TRUE)
+ {
+ if(ret == GDI_NO_MORE_WORK)
+ ret = TRUE;
+ goto done;
+ }
}
if (size)
{
diff --git a/include/gdi.h b/include/gdi.h
index 5b45dd0..42dbda5 100644
--- a/include/gdi.h
+++ b/include/gdi.h
@@ -199,8 +199,8 @@
BOOL (*pLineTo)(PHYSDEV,INT,INT);
BOOL (*pMoveTo)(PHYSDEV,INT,INT);
INT (*pOffsetClipRgn)(PHYSDEV,INT,INT);
- BOOL (*pOffsetViewportOrg)(PHYSDEV,INT,INT);
- BOOL (*pOffsetWindowOrg)(PHYSDEV,INT,INT);
+ INT (*pOffsetViewportOrg)(PHYSDEV,INT,INT);
+ INT (*pOffsetWindowOrg)(PHYSDEV,INT,INT);
BOOL (*pPaintRgn)(PHYSDEV,HRGN);
BOOL (*pPatBlt)(PHYSDEV,INT,INT,INT,INT,DWORD);
BOOL (*pPie)(PHYSDEV,INT,INT,INT,INT,INT,INT,INT,INT);
@@ -219,8 +219,8 @@
BOOL (*pRestoreDC)(PHYSDEV,INT);
BOOL (*pRoundRect)(PHYSDEV,INT,INT,INT,INT,INT,INT);
INT (*pSaveDC)(PHYSDEV);
- BOOL (*pScaleViewportExt)(PHYSDEV,INT,INT,INT,INT);
- BOOL (*pScaleWindowExt)(PHYSDEV,INT,INT,INT,INT);
+ INT (*pScaleViewportExt)(PHYSDEV,INT,INT,INT,INT);
+ INT (*pScaleWindowExt)(PHYSDEV,INT,INT,INT,INT);
HBITMAP (*pSelectBitmap)(PHYSDEV,HBITMAP);
HBRUSH (*pSelectBrush)(PHYSDEV,HBRUSH);
BOOL (*pSelectClipPath)(PHYSDEV,INT);
@@ -249,10 +249,10 @@
INT (*pSetTextCharacterExtra)(PHYSDEV,INT);
DWORD (*pSetTextColor)(PHYSDEV,DWORD);
INT (*pSetTextJustification)(PHYSDEV,INT,INT);
- BOOL (*pSetViewportExt)(PHYSDEV,INT,INT);
- BOOL (*pSetViewportOrg)(PHYSDEV,INT,INT);
- BOOL (*pSetWindowExt)(PHYSDEV,INT,INT);
- BOOL (*pSetWindowOrg)(PHYSDEV,INT,INT);
+ INT (*pSetViewportExt)(PHYSDEV,INT,INT);
+ INT (*pSetViewportOrg)(PHYSDEV,INT,INT);
+ INT (*pSetWindowExt)(PHYSDEV,INT,INT);
+ INT (*pSetWindowOrg)(PHYSDEV,INT,INT);
INT (*pStartDoc)(PHYSDEV,const DOCINFOA*);
INT (*pStartPage)(PHYSDEV);
BOOL (*pStretchBlt)(PHYSDEV,INT,INT,INT,INT,PHYSDEV,INT,INT,INT,INT,DWORD);
@@ -264,6 +264,10 @@
BOOL (*pWidenPath)(PHYSDEV);
} DC_FUNCTIONS;
+/* Certain functions will do no further processing if the driver returns this.
+ Used by mfdrv for example. */
+#define GDI_NO_MORE_WORK 2
+
/* DC hook codes */
#define DCHC_INVALIDVISRGN 0x0001
#define DCHC_DELETEDC 0x0002