435 lines
9.3 KiB
C
435 lines
9.3 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 <stdarg.h>
|
|
|
|
#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;
|
|
}
|