263 lines
7.5 KiB
C
263 lines
7.5 KiB
C
/*
|
|
* DC device-independent Get/SetXXX functions
|
|
*
|
|
* Copyright 1993 Alexandre Julliard
|
|
*
|
|
*/
|
|
|
|
#include "winbase.h"
|
|
#include "winerror.h"
|
|
#include "gdi.h"
|
|
|
|
#define COLORREF16 COLORREF /*hack*/
|
|
|
|
#define DC_GET_VAL_16( func_type, func_name, dc_field ) \
|
|
func_type WINAPI func_name( HDC16 hdc ) \
|
|
{ \
|
|
func_type ret = 0; \
|
|
DC * dc = DC_GetDCPtr( hdc ); \
|
|
if (dc) \
|
|
{ \
|
|
ret = dc->dc_field; \
|
|
GDI_ReleaseObj( hdc ); \
|
|
} \
|
|
return ret; \
|
|
}
|
|
|
|
#define DC_GET_VAL( func_type, func_name, dc_field ) \
|
|
func_type##16 WINAPI func_name##16( HDC16 hdc ) \
|
|
{ \
|
|
return func_name( hdc ); \
|
|
} \
|
|
\
|
|
func_type WINAPI func_name( HDC hdc ) \
|
|
{ \
|
|
func_type ret = 0; \
|
|
DC * dc = DC_GetDCPtr( hdc ); \
|
|
if (dc) \
|
|
{ \
|
|
ret = dc->dc_field; \
|
|
GDI_ReleaseObj( hdc ); \
|
|
} \
|
|
return ret; \
|
|
}
|
|
|
|
#define DC_GET_X_Y( func_type, func_name, ret_x, ret_y ) \
|
|
func_type WINAPI func_name( HDC16 hdc ) \
|
|
{ \
|
|
func_type ret = 0; \
|
|
DC * dc = DC_GetDCPtr( hdc ); \
|
|
if (dc) \
|
|
{ \
|
|
ret = MAKELONG( dc->ret_x, dc->ret_y ); \
|
|
GDI_ReleaseObj( hdc ); \
|
|
} \
|
|
return ret; \
|
|
}
|
|
|
|
/* DC_GET_VAL_EX is used to define functions returning a POINT or a SIZE. It is
|
|
* important that the function has the right signature, for the implementation
|
|
* we can do whatever we want.
|
|
*/
|
|
#define DC_GET_VAL_EX( func_name, ret_x, ret_y, type ) \
|
|
BOOL16 WINAPI func_name##16( HDC16 hdc, LP##type##16 pt ) \
|
|
{ \
|
|
DC * dc = DC_GetDCPtr( hdc ); \
|
|
if (!dc) return FALSE; \
|
|
((LPPOINT16)pt)->x = dc->ret_x; \
|
|
((LPPOINT16)pt)->y = dc->ret_y; \
|
|
GDI_ReleaseObj( hdc ); \
|
|
return TRUE; \
|
|
} \
|
|
\
|
|
BOOL WINAPI func_name( HDC hdc, LP##type pt ) \
|
|
{ \
|
|
DC * dc = DC_GetDCPtr( hdc ); \
|
|
if (!dc) return FALSE; \
|
|
((LPPOINT)pt)->x = dc->ret_x; \
|
|
((LPPOINT)pt)->y = dc->ret_y; \
|
|
GDI_ReleaseObj( hdc ); \
|
|
return TRUE; \
|
|
}
|
|
|
|
#define DC_SET_MODE( func_name, dc_field, min_val, max_val ) \
|
|
INT16 WINAPI func_name##16( HDC16 hdc, INT16 mode ) \
|
|
{ \
|
|
return func_name( hdc, mode ); \
|
|
} \
|
|
\
|
|
INT WINAPI func_name( HDC hdc, INT mode ) \
|
|
{ \
|
|
INT prevMode; \
|
|
DC *dc; \
|
|
if ((mode < min_val) || (mode > max_val)) { \
|
|
SetLastError(ERROR_INVALID_PARAMETER); \
|
|
return 0; \
|
|
} \
|
|
if (!(dc = DC_GetDCPtr( hdc ))) return 0; \
|
|
if (dc->funcs->p##func_name) { \
|
|
prevMode = dc->funcs->p##func_name( dc, mode ); \
|
|
} else { \
|
|
prevMode = dc->dc_field; \
|
|
dc->dc_field = mode; \
|
|
} \
|
|
GDI_ReleaseObj( hdc ); \
|
|
return prevMode; \
|
|
}
|
|
|
|
/***********************************************************************
|
|
* SetBkMode (GDI.2) (GDI32.@)
|
|
*
|
|
*/
|
|
DC_SET_MODE( SetBkMode, backgroundMode, TRANSPARENT, OPAQUE )
|
|
|
|
/***********************************************************************
|
|
* SetROP2 (GDI.4) (GDI32.@)
|
|
*/
|
|
DC_SET_MODE( SetROP2, ROPmode, R2_BLACK, R2_WHITE )
|
|
|
|
/***********************************************************************
|
|
* SetRelAbs (GDI.5) (GDI32.@)
|
|
*/
|
|
DC_SET_MODE( SetRelAbs, relAbsMode, ABSOLUTE, RELATIVE )
|
|
|
|
/***********************************************************************
|
|
* SetPolyFillMode (GDI.6) (GDI32.@)
|
|
*/
|
|
DC_SET_MODE( SetPolyFillMode, polyFillMode, ALTERNATE, WINDING )
|
|
|
|
/***********************************************************************
|
|
* SetStretchBltMode (GDI.7) (GDI32.@)
|
|
*/
|
|
DC_SET_MODE( SetStretchBltMode, stretchBltMode, BLACKONWHITE, HALFTONE )
|
|
|
|
/***********************************************************************
|
|
* GetBkColor (GDI.75) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL( COLORREF, GetBkColor, backgroundColor )
|
|
|
|
/***********************************************************************
|
|
* GetBkMode (GDI.76) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL( INT, GetBkMode, backgroundMode )
|
|
|
|
/***********************************************************************
|
|
* GetCurrentPosition (GDI.78)
|
|
*/
|
|
DC_GET_X_Y( DWORD, GetCurrentPosition16, CursPosX, CursPosY )
|
|
|
|
/***********************************************************************
|
|
* GetMapMode (GDI.81) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL( INT, GetMapMode, MapMode )
|
|
|
|
/***********************************************************************
|
|
* GetPolyFillMode (GDI.84) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL( INT, GetPolyFillMode, polyFillMode )
|
|
|
|
/***********************************************************************
|
|
* GetROP2 (GDI.85) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL( INT, GetROP2, ROPmode )
|
|
|
|
/***********************************************************************
|
|
* GetRelAbs (GDI.86)
|
|
*/
|
|
DC_GET_VAL_16( INT16, GetRelAbs16, relAbsMode )
|
|
|
|
/***********************************************************************
|
|
* GetStretchBltMode (GDI.88) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL( INT, GetStretchBltMode, stretchBltMode )
|
|
|
|
/***********************************************************************
|
|
* GetTextColor (GDI.90) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL( COLORREF, GetTextColor, textColor )
|
|
|
|
/***********************************************************************
|
|
* GetViewportExt (GDI.94)
|
|
*/
|
|
DC_GET_X_Y( DWORD, GetViewportExt16, vportExtX, vportExtY )
|
|
|
|
/***********************************************************************
|
|
* GetViewportOrg (GDI.95)
|
|
*/
|
|
DC_GET_X_Y( DWORD, GetViewportOrg16, vportOrgX, vportOrgY )
|
|
|
|
/***********************************************************************
|
|
* GetWindowExt (GDI.96)
|
|
*/
|
|
DC_GET_X_Y( DWORD, GetWindowExt16, wndExtX, wndExtY )
|
|
|
|
/***********************************************************************
|
|
* GetWindowOrg (GDI.97)
|
|
*/
|
|
DC_GET_X_Y( DWORD, GetWindowOrg16, wndOrgX, wndOrgY )
|
|
|
|
/***********************************************************************
|
|
* InquireVisRgn (GDI.131)
|
|
*/
|
|
DC_GET_VAL_16( HRGN16, InquireVisRgn16, hVisRgn )
|
|
|
|
/***********************************************************************
|
|
* GetClipRgn (GDI.173)
|
|
*/
|
|
DC_GET_VAL_16( HRGN16, GetClipRgn16, hClipRgn )
|
|
|
|
/***********************************************************************
|
|
* GetBrushOrg (GDI.149)
|
|
*/
|
|
DC_GET_X_Y( DWORD, GetBrushOrg16, brushOrgX, brushOrgY )
|
|
|
|
/***********************************************************************
|
|
* GetTextAlign (GDI.345) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL( UINT, GetTextAlign, textAlign )
|
|
|
|
/***********************************************************************
|
|
* GetCurLogFont (GDI.411)
|
|
*/
|
|
DC_GET_VAL_16( HFONT16, GetCurLogFont16, hFont )
|
|
|
|
/***********************************************************************
|
|
* GetArcDirection (GDI.524) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL( INT, GetArcDirection, ArcDirection )
|
|
|
|
/***********************************************************************
|
|
* GetGraphicsMode (GDI32.@)
|
|
*/
|
|
DC_GET_VAL( INT, GetGraphicsMode, GraphicsMode)
|
|
|
|
/***********************************************************************
|
|
* GetBrushOrgEx (GDI.469) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL_EX( GetBrushOrgEx, brushOrgX, brushOrgY, POINT ) /* */
|
|
|
|
/***********************************************************************
|
|
* GetCurrentPositionEx (GDI.470) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL_EX( GetCurrentPositionEx, CursPosX, CursPosY, POINT )
|
|
|
|
/***********************************************************************
|
|
* GetViewportExtEx (GDI.472) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL_EX( GetViewportExtEx, vportExtX, vportExtY, SIZE )
|
|
|
|
/***********************************************************************
|
|
* GetViewportOrgEx (GDI.473) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL_EX( GetViewportOrgEx, vportOrgX, vportOrgY, POINT )
|
|
|
|
/***********************************************************************
|
|
* GetWindowExtEx (GDI.474) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL_EX( GetWindowExtEx, wndExtX, wndExtY, SIZE )
|
|
|
|
/***********************************************************************
|
|
* GetWindowOrgEx (GDI.475) (GDI32.@)
|
|
*/
|
|
DC_GET_VAL_EX( GetWindowOrgEx, wndOrgX, wndOrgY, POINT )
|