Mapping mode functions should change dc settings when dc is an enhmf.
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)
{