/* * 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 #include "windef.h" #include "winbase.h" #include "winerror.h" #include "wownt32.h" #include "gdi.h" #include "gdi_private.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; }