|  | /* | 
|  | * DC device-independent Get/SetXXX functions | 
|  | * | 
|  | * Copyright 1993 Alexandre Julliard | 
|  | * | 
|  | * This library is free software; you can redistribute it and/or | 
|  | * modify it under the terms of the GNU Lesser General Public | 
|  | * License as published by the Free Software Foundation; either | 
|  | * version 2.1 of the License, or (at your option) any later version. | 
|  | * | 
|  | * This library is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | * Lesser General Public License for more details. | 
|  | * | 
|  | * You should have received a copy of the GNU Lesser General Public | 
|  | * License along with this library; if not, write to the Free Software | 
|  | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
|  | */ | 
|  |  | 
|  | #include "config.h" | 
|  |  | 
|  | #include "winbase.h" | 
|  | #include "winerror.h" | 
|  | #include "wownt32.h" | 
|  |  | 
|  | #include "gdi.h" | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		SetBkMode (GDI32.@) | 
|  | */ | 
|  | INT WINAPI SetBkMode( HDC hdc, INT mode ) | 
|  | { | 
|  | INT ret; | 
|  | DC *dc; | 
|  | if ((mode <= 0) || (mode > BKMODE_LAST)) | 
|  | { | 
|  | SetLastError(ERROR_INVALID_PARAMETER); | 
|  | return 0; | 
|  | } | 
|  | if (!(dc = DC_GetDCPtr( hdc ))) return 0; | 
|  | if (dc->funcs->pSetBkMode) | 
|  | ret = dc->funcs->pSetBkMode( dc->physDev, mode ); | 
|  | else | 
|  | { | 
|  | ret = dc->backgroundMode; | 
|  | dc->backgroundMode = mode; | 
|  | } | 
|  | GDI_ReleaseObj( hdc ); | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		SetROP2 (GDI32.@) | 
|  | */ | 
|  | INT WINAPI SetROP2( HDC hdc, INT mode ) | 
|  | { | 
|  | INT ret; | 
|  | DC *dc; | 
|  | if ((mode < R2_BLACK) || (mode > R2_WHITE)) | 
|  | { | 
|  | SetLastError(ERROR_INVALID_PARAMETER); | 
|  | return 0; | 
|  | } | 
|  | if (!(dc = DC_GetDCPtr( hdc ))) return 0; | 
|  | if (dc->funcs->pSetROP2) | 
|  | ret = dc->funcs->pSetROP2( dc->physDev, mode ); | 
|  | else | 
|  | { | 
|  | ret = dc->ROPmode; | 
|  | dc->ROPmode = mode; | 
|  | } | 
|  | GDI_ReleaseObj( hdc ); | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		SetRelAbs (GDI32.@) | 
|  | */ | 
|  | INT WINAPI SetRelAbs( HDC hdc, INT mode ) | 
|  | { | 
|  | INT ret; | 
|  | DC *dc; | 
|  | if ((mode != ABSOLUTE) && (mode != RELATIVE)) | 
|  | { | 
|  | SetLastError(ERROR_INVALID_PARAMETER); | 
|  | return 0; | 
|  | } | 
|  | if (!(dc = DC_GetDCPtr( hdc ))) return 0; | 
|  | if (dc->funcs->pSetRelAbs) | 
|  | ret = dc->funcs->pSetRelAbs( dc->physDev, mode ); | 
|  | else | 
|  | { | 
|  | ret = dc->relAbsMode; | 
|  | dc->relAbsMode = mode; | 
|  | } | 
|  | GDI_ReleaseObj( hdc ); | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		SetPolyFillMode (GDI32.@) | 
|  | */ | 
|  | INT WINAPI SetPolyFillMode( HDC hdc, INT mode ) | 
|  | { | 
|  | INT ret; | 
|  | DC *dc; | 
|  | if ((mode <= 0) || (mode > POLYFILL_LAST)) | 
|  | { | 
|  | SetLastError(ERROR_INVALID_PARAMETER); | 
|  | return 0; | 
|  | } | 
|  | if (!(dc = DC_GetDCPtr( hdc ))) return 0; | 
|  | if (dc->funcs->pSetPolyFillMode) | 
|  | ret = dc->funcs->pSetPolyFillMode( dc->physDev, mode ); | 
|  | else | 
|  | { | 
|  | ret = dc->polyFillMode; | 
|  | dc->polyFillMode = mode; | 
|  | } | 
|  | GDI_ReleaseObj( hdc ); | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		SetStretchBltMode (GDI32.@) | 
|  | */ | 
|  | INT WINAPI SetStretchBltMode( HDC hdc, INT mode ) | 
|  | { | 
|  | INT ret; | 
|  | DC *dc; | 
|  | if ((mode <= 0) || (mode > MAXSTRETCHBLTMODE)) | 
|  | { | 
|  | SetLastError(ERROR_INVALID_PARAMETER); | 
|  | return 0; | 
|  | } | 
|  | if (!(dc = DC_GetDCPtr( hdc ))) return 0; | 
|  | if (dc->funcs->pSetStretchBltMode) | 
|  | ret = dc->funcs->pSetStretchBltMode( dc->physDev, mode ); | 
|  | else | 
|  | { | 
|  | ret = dc->stretchBltMode; | 
|  | dc->stretchBltMode = mode; | 
|  | } | 
|  | GDI_ReleaseObj( hdc ); | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetBkColor (GDI32.@) | 
|  | */ | 
|  | COLORREF WINAPI GetBkColor( HDC hdc ) | 
|  | { | 
|  | COLORREF ret = 0; | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (dc) | 
|  | { | 
|  | ret = dc->backgroundColor; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | } | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetBkMode (GDI32.@) | 
|  | */ | 
|  | INT WINAPI GetBkMode( HDC hdc ) | 
|  | { | 
|  | INT ret = 0; | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (dc) | 
|  | { | 
|  | ret = dc->backgroundMode; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | } | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetMapMode (GDI32.@) | 
|  | */ | 
|  | INT WINAPI GetMapMode( HDC hdc ) | 
|  | { | 
|  | INT ret = 0; | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (dc) | 
|  | { | 
|  | ret = dc->MapMode; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | } | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetPolyFillMode (GDI32.@) | 
|  | */ | 
|  | INT WINAPI GetPolyFillMode( HDC hdc ) | 
|  | { | 
|  | INT ret = 0; | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (dc) | 
|  | { | 
|  | ret = dc->polyFillMode; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | } | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetROP2 (GDI32.@) | 
|  | */ | 
|  | INT WINAPI GetROP2( HDC hdc ) | 
|  | { | 
|  | INT ret = 0; | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (dc) | 
|  | { | 
|  | ret = dc->ROPmode; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | } | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetStretchBltMode (GDI32.@) | 
|  | */ | 
|  | INT WINAPI GetStretchBltMode( HDC hdc ) | 
|  | { | 
|  | INT ret = 0; | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (dc) | 
|  | { | 
|  | ret = dc->stretchBltMode; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | } | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetTextColor (GDI32.@) | 
|  | */ | 
|  | COLORREF WINAPI GetTextColor( HDC hdc ) | 
|  | { | 
|  | COLORREF ret = 0; | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (dc) | 
|  | { | 
|  | ret = dc->textColor; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | } | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetTextAlign (GDI32.@) | 
|  | */ | 
|  | UINT WINAPI GetTextAlign( HDC hdc ) | 
|  | { | 
|  | UINT ret = 0; | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (dc) | 
|  | { | 
|  | ret = dc->textAlign; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | } | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetArcDirection (GDI32.@) | 
|  | */ | 
|  | INT WINAPI GetArcDirection( HDC hdc ) | 
|  | { | 
|  | INT ret = 0; | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (dc) | 
|  | { | 
|  | ret = dc->ArcDirection; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | } | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetGraphicsMode (GDI32.@) | 
|  | */ | 
|  | INT WINAPI GetGraphicsMode( HDC hdc ) | 
|  | { | 
|  | INT ret = 0; | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (dc) | 
|  | { | 
|  | ret = dc->GraphicsMode; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | } | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetBrushOrgEx (GDI32.@) | 
|  | */ | 
|  | BOOL WINAPI GetBrushOrgEx( HDC hdc, LPPOINT pt ) | 
|  | { | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (!dc) return FALSE; | 
|  | pt->x = dc->brushOrgX; | 
|  | pt->y = dc->brushOrgY; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | return TRUE; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetCurrentPositionEx (GDI32.@) | 
|  | */ | 
|  | BOOL WINAPI GetCurrentPositionEx( HDC hdc, LPPOINT pt ) | 
|  | { | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (!dc) return FALSE; | 
|  | pt->x = dc->CursPosX; | 
|  | pt->y = dc->CursPosY; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | return TRUE; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetViewportExtEx (GDI32.@) | 
|  | */ | 
|  | BOOL WINAPI GetViewportExtEx( HDC hdc, LPSIZE size ) | 
|  | { | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (!dc) return FALSE; | 
|  | size->cx = dc->vportExtX; | 
|  | size->cy = dc->vportExtY; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | return TRUE; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetViewportOrgEx (GDI32.@) | 
|  | */ | 
|  | BOOL WINAPI GetViewportOrgEx( HDC hdc, LPPOINT pt ) | 
|  | { | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (!dc) return FALSE; | 
|  | pt->x = dc->vportOrgX; | 
|  | pt->y = dc->vportOrgY; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | return TRUE; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetWindowExtEx (GDI32.@) | 
|  | */ | 
|  | BOOL WINAPI GetWindowExtEx( HDC hdc, LPSIZE size ) | 
|  | { | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (!dc) return FALSE; | 
|  | size->cx = dc->wndExtX; | 
|  | size->cy = dc->wndExtY; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | return TRUE; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetWindowOrgEx (GDI32.@) | 
|  | */ | 
|  | BOOL WINAPI GetWindowOrgEx( HDC hdc, LPPOINT pt ) | 
|  | { | 
|  | DC * dc = DC_GetDCPtr( hdc ); | 
|  | if (!dc) return FALSE; | 
|  | pt->x = dc->wndOrgX; | 
|  | pt->y = dc->wndOrgY; | 
|  | GDI_ReleaseObj( hdc ); | 
|  | return TRUE; | 
|  | } | 
|  |  | 
|  |  | 
|  | /**** 16-bit functions ***/ | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		InquireVisRgn   (GDI.131) | 
|  | */ | 
|  | HRGN16 WINAPI InquireVisRgn16( HDC16 hdc ) | 
|  | { | 
|  | HRGN16 ret = 0; | 
|  | DC * dc = DC_GetDCPtr( HDC_32(hdc) ); | 
|  | if (dc) | 
|  | { | 
|  | ret = HRGN_16(dc->hVisRgn); | 
|  | GDI_ReleaseObj( HDC_32(hdc) ); | 
|  | } | 
|  | return ret; | 
|  | } | 
|  |  | 
|  |  | 
|  | /*********************************************************************** | 
|  | *		GetClipRgn (GDI.173) | 
|  | */ | 
|  | HRGN16 WINAPI GetClipRgn16( HDC16 hdc ) | 
|  | { | 
|  | HRGN16 ret = 0; | 
|  | DC * dc = DC_GetDCPtr( HDC_32(hdc) ); | 
|  | if (dc) | 
|  | { | 
|  | ret = HRGN_16(dc->hClipRgn); | 
|  | GDI_ReleaseObj( HDC_32(hdc) ); | 
|  | } | 
|  | return ret; | 
|  | } |