| /* | |
| * 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 ) | |
| /*********************************************************************** | |
| * GetCurrentPosition16 (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 ) | |
| /*********************************************************************** | |
| * GetRelAbs16 (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 ) | |
| /*********************************************************************** | |
| * 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.@) | |
| */ | |
| DC_GET_VAL( UINT, GetTextAlign, textAlign ) | |
| /*********************************************************************** | |
| * GetCurLogFont16 (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 ) |