/* * 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.306) * */ DC_SET_MODE( SetBkMode, backgroundMode, TRANSPARENT, OPAQUE ) /*********************************************************************** * SetROP2 (GDI.4) (GDI32.331) */ DC_SET_MODE( SetROP2, ROPmode, R2_BLACK, R2_WHITE ) /*********************************************************************** * SetRelAbs (GDI.5) (GDI32.333) */ DC_SET_MODE( SetRelAbs, relAbsMode, ABSOLUTE, RELATIVE ) /*********************************************************************** * SetPolyFillMode (GDI.6) (GDI32.330) */ DC_SET_MODE( SetPolyFillMode, polyFillMode, ALTERNATE, WINDING ) /*********************************************************************** * SetStretchBltMode (GDI.7) (GDI32.334) */ DC_SET_MODE( SetStretchBltMode, stretchBltMode, BLACKONWHITE, HALFTONE ) /*********************************************************************** * GetBkColor (GDI.75) (GDI32.145) */ DC_GET_VAL( COLORREF, GetBkColor, backgroundColor ) /*********************************************************************** * GetBkMode (GDI.76) (GDI32.146) */ DC_GET_VAL( INT, GetBkMode, backgroundMode ) /*********************************************************************** * GetCurrentPosition16 (GDI.78) */ DC_GET_X_Y( DWORD, GetCurrentPosition16, CursPosX, CursPosY ) /*********************************************************************** * GetMapMode (GDI.81) (GDI32.196) */ DC_GET_VAL( INT, GetMapMode, MapMode ) /*********************************************************************** * GetPolyFillMode (GDI.84) (GDI32.213) */ DC_GET_VAL( INT, GetPolyFillMode, polyFillMode ) /*********************************************************************** * GetROP2 (GDI.85) (GDI32.214) */ DC_GET_VAL( INT, GetROP2, ROPmode ) /*********************************************************************** * GetRelAbs16 (GDI.86) */ DC_GET_VAL_16( INT16, GetRelAbs16, relAbsMode ) /*********************************************************************** * GetStretchBltMode (GDI.88) (GDI32.221) */ DC_GET_VAL( INT, GetStretchBltMode, stretchBltMode ) /*********************************************************************** * GetTextColor (GDI.90) (GDI32.227) */ DC_GET_VAL( COLORREF, GetTextColor, textColor ) /*********************************************************************** * GetViewportExt16 (GDI.94) */ DC_GET_X_Y( DWORD, GetViewportExt16, vportExtX, vportExtY ) /*********************************************************************** * GetViewportOrg16 (GDI.95) */ DC_GET_X_Y( DWORD, GetViewportOrg16, vportOrgX, vportOrgY ) /*********************************************************************** * GetWindowExt16 (GDI.96) */ DC_GET_X_Y( DWORD, GetWindowExt16, wndExtX, wndExtY ) /*********************************************************************** * GetWindowOrg16 (GDI.97) */ DC_GET_X_Y( DWORD, GetWindowOrg16, wndOrgX, wndOrgY ) /*********************************************************************** * InquireVisRgn16 (GDI.131) */ DC_GET_VAL_16( HRGN16, InquireVisRgn16, hVisRgn ) /*********************************************************************** * GetClipRgn16 (GDI.173) */ DC_GET_VAL_16( HRGN16, GetClipRgn16, hClipRgn ) /*********************************************************************** * GetBrushOrg16 (GDI.149) */ DC_GET_X_Y( DWORD, GetBrushOrg16, brushOrgX, brushOrgY ) /*********************************************************************** * GetTextAlign (GDI.345) (GDI32,224) */ DC_GET_VAL( UINT, GetTextAlign, textAlign ) /*********************************************************************** * GetCurLogFont16 (GDI.411) */ DC_GET_VAL_16( HFONT16, GetCurLogFont16, hFont ) /*********************************************************************** * GetArcDirection (GDI.524) (GDI32.141) */ DC_GET_VAL( INT, GetArcDirection, ArcDirection ) /*********************************************************************** * GetGraphicsMode (GDI32.188) */ DC_GET_VAL( INT, GetGraphicsMode, GraphicsMode) /*********************************************************************** * GetBrushOrgEx (GDI.469) (GDI32.148) */ DC_GET_VAL_EX( GetBrushOrgEx, brushOrgX, brushOrgY, POINT ) /* */ /*********************************************************************** * GetCurrentPositionEx (GDI.470) (GDI32.167) */ DC_GET_VAL_EX( GetCurrentPositionEx, CursPosX, CursPosY, POINT ) /*********************************************************************** * GetViewportExtEx (GDI.472 GDI32.239) */ DC_GET_VAL_EX( GetViewportExtEx, vportExtX, vportExtY, SIZE ) /*********************************************************************** * GetViewportOrgEx (GDI.473) (GDI32.240) */ DC_GET_VAL_EX( GetViewportOrgEx, vportOrgX, vportOrgY, POINT ) /*********************************************************************** * GetWindowExtEx (GDI.474) (GDI32.242) */ DC_GET_VAL_EX( GetWindowExtEx, wndExtX, wndExtY, SIZE ) /*********************************************************************** * GetWindowOrgEx (GDI.475) (GDI32.243) */ DC_GET_VAL_EX( GetWindowOrgEx, wndOrgX, wndOrgY, POINT )