wine/objects/dcvalues.c
Alexandre Julliard e21c15e39d Changed the GDI driver interface to pass an opaque PHYSDEV pointer
instead of a DC structure.
Removed some direct accesses to the DC structure from the drivers.
Got rid the bitmap driver.
2002-03-28 22:22:05 +00:00

697 lines
15 KiB
C

/*
* 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 "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 ****/
/***********************************************************************
* SetBkMode (GDI.2)
*/
INT16 WINAPI SetBkMode16( HDC16 hdc, INT16 mode )
{
return SetBkMode( hdc, mode );
}
/***********************************************************************
* SetROP2 (GDI.4)
*/
INT16 WINAPI SetROP216( HDC16 hdc, INT16 mode )
{
return SetROP2( hdc, mode );
}
/***********************************************************************
* SetRelAbs (GDI.5)
*/
INT16 WINAPI SetRelAbs16( HDC16 hdc, INT16 mode )
{
return SetRelAbs( hdc, mode );
}
/***********************************************************************
* SetPolyFillMode (GDI.6)
*/
INT16 WINAPI SetPolyFillMode16( HDC16 hdc, INT16 mode )
{
return SetPolyFillMode( hdc, mode );
}
/***********************************************************************
* SetStretchBltMode (GDI.7)
*/
INT16 WINAPI SetStretchBltMode16( HDC16 hdc, INT16 mode )
{
return SetStretchBltMode( hdc, mode );
}
/***********************************************************************
* GetBkColor (GDI.75)
*/
COLORREF WINAPI GetBkColor16( HDC16 hdc )
{
return GetBkColor( hdc );
}
/***********************************************************************
* GetBkMode (GDI.76)
*/
INT16 WINAPI GetBkMode16( HDC16 hdc )
{
return GetBkMode( hdc );
}
/***********************************************************************
* GetCurrentPosition (GDI.78)
*/
DWORD WINAPI GetCurrentPosition16( HDC16 hdc )
{
POINT pt32;
if (!GetCurrentPositionEx( hdc, &pt32 )) return 0;
return MAKELONG( pt32.x, pt32.y );
}
/***********************************************************************
* GetMapMode (GDI.81)
*/
INT16 WINAPI GetMapMode16( HDC16 hdc )
{
return GetMapMode( hdc );
}
/***********************************************************************
* GetPolyFillMode (GDI.84)
*/
INT16 WINAPI GetPolyFillMode16( HDC16 hdc )
{
return GetPolyFillMode( hdc );
}
/***********************************************************************
* GetROP2 (GDI.85)
*/
INT16 WINAPI GetROP216( HDC16 hdc )
{
return GetROP2( hdc );
}
/***********************************************************************
* GetRelAbs (GDI.86)
*/
INT16 WINAPI GetRelAbs16( HDC16 hdc )
{
return GetRelAbs( hdc, 0 );
}
/***********************************************************************
* GetStretchBltMode (GDI.88)
*/
INT16 WINAPI GetStretchBltMode16( HDC16 hdc )
{
return GetStretchBltMode( hdc );
}
/***********************************************************************
* GetTextColor (GDI.90)
*/
COLORREF WINAPI GetTextColor16( HDC16 hdc )
{
return GetTextColor( hdc );
}
/***********************************************************************
* GetViewportExt (GDI.94)
*/
DWORD WINAPI GetViewportExt16( HDC16 hdc )
{
SIZE size;
if (!GetViewportExtEx( hdc, &size )) return 0;
return MAKELONG( size.cx, size.cy );
}
/***********************************************************************
* GetViewportOrg (GDI.95)
*/
DWORD WINAPI GetViewportOrg16( HDC16 hdc )
{
POINT pt;
if (!GetViewportOrgEx( hdc, &pt )) return 0;
return MAKELONG( pt.x, pt.y );
}
/***********************************************************************
* GetWindowExt (GDI.96)
*/
DWORD WINAPI GetWindowExt16( HDC16 hdc )
{
SIZE size;
if (!GetWindowExtEx( hdc, &size )) return 0;
return MAKELONG( size.cx, size.cy );
}
/***********************************************************************
* GetWindowOrg (GDI.97)
*/
DWORD WINAPI GetWindowOrg16( HDC16 hdc )
{
POINT pt;
if (!GetWindowOrgEx( hdc, &pt )) return 0;
return MAKELONG( pt.x, pt.y );
}
/***********************************************************************
* InquireVisRgn (GDI.131)
*/
HRGN16 WINAPI InquireVisRgn16( HDC16 hdc )
{
HRGN16 ret = 0;
DC * dc = DC_GetDCPtr( hdc );
if (dc)
{
ret = dc->hVisRgn;
GDI_ReleaseObj( hdc );
}
return ret;
}
/***********************************************************************
* GetBrushOrg (GDI.149)
*/
DWORD WINAPI GetBrushOrg16( HDC16 hdc )
{
POINT pt;
if (!GetBrushOrgEx( hdc, &pt )) return 0;
return MAKELONG( pt.x, pt.y );
}
/***********************************************************************
* GetClipRgn (GDI.173)
*/
HRGN16 WINAPI GetClipRgn16( HDC16 hdc )
{
HRGN16 ret = 0;
DC * dc = DC_GetDCPtr( hdc );
if (dc)
{
ret = dc->hClipRgn;
GDI_ReleaseObj( hdc );
}
return ret;
}
/***********************************************************************
* GetTextAlign (GDI.345)
*/
UINT16 WINAPI GetTextAlign16( HDC16 hdc )
{
return GetTextAlign( hdc );
}
/***********************************************************************
* GetCurLogFont (GDI.411)
*/
HFONT16 WINAPI GetCurLogFont16( HDC16 hdc )
{
HFONT16 ret = 0;
DC * dc = DC_GetDCPtr( hdc );
if (dc)
{
ret = dc->hFont;
GDI_ReleaseObj( hdc );
}
return ret;
}
/***********************************************************************
* GetBrushOrgEx (GDI.469)
*/
BOOL16 WINAPI GetBrushOrgEx16( HDC16 hdc, LPPOINT16 pt )
{
POINT pt32;
if (!GetBrushOrgEx( hdc, &pt32 )) return FALSE;
pt->x = pt32.x;
pt->y = pt32.y;
return TRUE;
}
/***********************************************************************
* GetCurrentPositionEx (GDI.470)
*/
BOOL16 WINAPI GetCurrentPositionEx16( HDC16 hdc, LPPOINT16 pt )
{
POINT pt32;
if (!GetCurrentPositionEx( hdc, &pt32 )) return FALSE;
pt->x = pt32.x;
pt->y = pt32.y;
return TRUE;
}
/***********************************************************************
* GetViewportExtEx (GDI.472)
*/
BOOL16 WINAPI GetViewportExtEx16( HDC16 hdc, LPSIZE16 size )
{
SIZE size32;
if (!GetViewportExtEx( hdc, &size32 )) return FALSE;
size->cx = size32.cx;
size->cy = size32.cy;
return TRUE;
}
/***********************************************************************
* GetViewportOrgEx (GDI.473)
*/
BOOL16 WINAPI GetViewportOrgEx16( HDC16 hdc, LPPOINT16 pt )
{
POINT pt32;
if (!GetViewportOrgEx( hdc, &pt32 )) return FALSE;
pt->x = pt32.x;
pt->y = pt32.y;
return TRUE;
}
/***********************************************************************
* GetWindowExtEx (GDI.474)
*/
BOOL16 WINAPI GetWindowExtEx16( HDC16 hdc, LPSIZE16 size )
{
SIZE size32;
if (!GetWindowExtEx( hdc, &size32 )) return FALSE;
size->cx = size32.cx;
size->cy = size32.cy;
return TRUE;
}
/***********************************************************************
* GetWindowOrgEx (GDI.475)
*/
BOOL16 WINAPI GetWindowOrgEx16( HDC16 hdc, LPPOINT16 pt )
{
POINT pt32;
if (!GetWindowOrgEx( hdc, &pt32 )) return FALSE;
pt->x = pt32.x;
pt->y = pt32.y;
return TRUE;
}
/***********************************************************************
* GetArcDirection (GDI.524)
*/
INT16 WINAPI GetArcDirection16( HDC16 hdc )
{
return GetArcDirection( hdc );
}