|  | /* | 
|  | * DC device-independent Get/SetXXX functions | 
|  | * | 
|  | * Copyright 1993 Alexandre Julliard | 
|  | * | 
|  | */ | 
|  |  | 
|  | #include "gdi.h" | 
|  | #include "metafile.h" | 
|  |  | 
|  |  | 
|  | #define DC_GET_VAL_16( func_type, func_name, dc_field ) \ | 
|  | func_type WINAPI func_name( HDC16 hdc ) \ | 
|  | { \ | 
|  | DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \ | 
|  | if (!dc) return 0; \ | 
|  | return dc->dc_field; \ | 
|  | } | 
|  |  | 
|  | #define DC_GET_VAL_32( func_type, func_name, dc_field ) \ | 
|  | func_type WINAPI func_name( HDC32 hdc ) \ | 
|  | { \ | 
|  | DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \ | 
|  | if (!dc) return 0; \ | 
|  | return dc->dc_field; \ | 
|  | } | 
|  |  | 
|  | #define DC_GET_X_Y( func_type, func_name, ret_x, ret_y ) \ | 
|  | func_type WINAPI func_name( HDC16 hdc ) \ | 
|  | { \ | 
|  | DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \ | 
|  | if (!dc) return 0; \ | 
|  | return MAKELONG( dc->ret_x, dc->ret_y ); \ | 
|  | } | 
|  |  | 
|  | #define DC_GET_VAL_EX( func_name, ret_x, ret_y ) \ | 
|  | BOOL16 WINAPI func_name##16( HDC16 hdc, LPPOINT16 pt ) \ | 
|  | { \ | 
|  | DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \ | 
|  | if (!dc) return FALSE; \ | 
|  | pt->x = dc->ret_x; \ | 
|  | pt->y = dc->ret_y; \ | 
|  | return TRUE; \ | 
|  | } \ | 
|  | \ | 
|  | BOOL32 WINAPI func_name##32( HDC32 hdc, LPPOINT32 pt ) \ | 
|  | { \ | 
|  | DC * dc = (DC *) GDI_GetObjPtr( (HDC16)hdc, DC_MAGIC ); \ | 
|  | if (!dc) return FALSE; \ | 
|  | pt->x = dc->ret_x; \ | 
|  | pt->y = dc->ret_y; \ | 
|  | return TRUE; \ | 
|  | } | 
|  |  | 
|  | #define DC_SET_MODE_16( func_name, dc_field, min_val, max_val, meta_func ) \ | 
|  | INT16 WINAPI func_name( HDC16 hdc, INT16 mode ) \ | 
|  | { \ | 
|  | INT16 prevMode; \ | 
|  | DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \ | 
|  | if ((mode < min_val) || (mode > max_val)) return 0; \ | 
|  | if (!dc) { \ | 
|  | dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC); \ | 
|  | if (!dc) return 0; \ | 
|  | MF_MetaParam1(dc, meta_func, mode); \ | 
|  | return 1; \ | 
|  | } \ | 
|  | prevMode = dc->dc_field; \ | 
|  | dc->dc_field = mode; \ | 
|  | return prevMode; \ | 
|  | } | 
|  |  | 
|  | #define DC_SET_MODE_32( func_name, dc_field, min_val, max_val, meta_func ) \ | 
|  | INT32 WINAPI func_name( HDC32 hdc, INT32 mode ) \ | 
|  | { \ | 
|  | INT32 prevMode; \ | 
|  | DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ); \ | 
|  | if ((mode < min_val) || (mode > max_val)) return 0; \ | 
|  | if (!dc) { \ | 
|  | dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC); \ | 
|  | if (!dc) return 0; \ | 
|  | MF_MetaParam1(dc, meta_func, mode); \ | 
|  | return 1; \ | 
|  | } \ | 
|  | prevMode = dc->dc_field; \ | 
|  | dc->dc_field = mode; \ | 
|  | return prevMode; \ | 
|  | } | 
|  |  | 
|  |  | 
|  | DC_SET_MODE_16( SetBkMode16, w.backgroundMode, TRANSPARENT,     /* GDI.2     */ | 
|  | OPAQUE, META_SETBKMODE ) | 
|  | DC_SET_MODE_32( SetBkMode32, w.backgroundMode, TRANSPARENT,     /* GDI32.306 */ | 
|  | OPAQUE, META_SETBKMODE ) | 
|  | DC_SET_MODE_16( SetROP216, w.ROPmode, R2_BLACK, R2_WHITE,       /* GDI.4     */ | 
|  | META_SETROP2 ) | 
|  | DC_SET_MODE_32( SetROP232, w.ROPmode, R2_BLACK, R2_WHITE,       /* GDI32.331 */ | 
|  | META_SETROP2 ) | 
|  | DC_SET_MODE_16( SetRelAbs16, w.relAbsMode, ABSOLUTE, RELATIVE,  /* GDI.5     */ | 
|  | META_SETRELABS ) | 
|  | DC_SET_MODE_32( SetRelAbs32, w.relAbsMode, ABSOLUTE, RELATIVE,  /* GDI32.333 */ | 
|  | META_SETRELABS ) | 
|  | DC_SET_MODE_16( SetPolyFillMode16, w.polyFillMode,              /* GDI.6     */ | 
|  | ALTERNATE, WINDING, META_SETPOLYFILLMODE ) | 
|  | DC_SET_MODE_32( SetPolyFillMode32, w.polyFillMode,              /* GDI32.330 */ | 
|  | ALTERNATE, WINDING, META_SETPOLYFILLMODE ) | 
|  | DC_SET_MODE_16( SetStretchBltMode16, w.stretchBltMode,          /* GDI.7     */ | 
|  | BLACKONWHITE, COLORONCOLOR, META_SETSTRETCHBLTMODE ) | 
|  | DC_SET_MODE_32( SetStretchBltMode32, w.stretchBltMode,          /* GDI32.334 */ | 
|  | BLACKONWHITE, COLORONCOLOR, META_SETSTRETCHBLTMODE ) | 
|  | DC_GET_VAL_16( COLORREF, GetBkColor16, w.backgroundColor )      /* GDI.75    */ | 
|  | DC_GET_VAL_32( COLORREF, GetBkColor32, w.backgroundColor )      /* GDI32.145 */ | 
|  | DC_GET_VAL_16( INT16, GetBkMode16, w.backgroundMode )           /* GDI.76    */ | 
|  | DC_GET_VAL_32( INT32, GetBkMode32, w.backgroundMode )           /* GDI32.146 */ | 
|  | DC_GET_X_Y( DWORD, GetCurrentPosition, w.CursPosX, w.CursPosY ) /* GDI.78    */ | 
|  | DC_GET_VAL_16( INT16, GetMapMode16, w.MapMode )                 /* GDI.81    */ | 
|  | DC_GET_VAL_32( INT32, GetMapMode32, w.MapMode )                 /* GDI32.196 */ | 
|  | DC_GET_VAL_16( INT16, GetPolyFillMode16, w.polyFillMode )       /* GDI.84    */ | 
|  | DC_GET_VAL_32( INT32, GetPolyFillMode32, w.polyFillMode )       /* GDI32.213 */ | 
|  | DC_GET_VAL_16( INT16, GetROP216, w.ROPmode )                    /* GDI.85    */ | 
|  | DC_GET_VAL_32( INT32, GetROP232, w.ROPmode )                    /* GDI32.214 */ | 
|  | DC_GET_VAL_16( INT16, GetRelAbs16, w.relAbsMode )               /* GDI.86    */ | 
|  | DC_GET_VAL_32( INT32, GetRelAbs32, w.relAbsMode )               /* GDI32.218 */ | 
|  | DC_GET_VAL_16( INT16, GetStretchBltMode16, w.stretchBltMode )   /* GDI.88    */ | 
|  | DC_GET_VAL_32( INT32, GetStretchBltMode32, w.stretchBltMode )   /* GDI32.221 */ | 
|  | DC_GET_VAL_16( COLORREF, GetTextColor16, w.textColor )          /* GDI.90    */ | 
|  | DC_GET_VAL_32( COLORREF, GetTextColor32, w.textColor )          /* GDI32.227 */ | 
|  | DC_GET_X_Y( DWORD, GetViewportExt, vportExtX, vportExtY )       /* GDI.94    */ | 
|  | DC_GET_X_Y( DWORD, GetViewportOrg, vportOrgX, vportOrgY )       /* GDI.95    */ | 
|  | DC_GET_X_Y( DWORD, GetWindowExt, wndExtX, wndExtY )             /* GDI.96    */ | 
|  | DC_GET_X_Y( DWORD, GetWindowOrg, wndOrgX, wndOrgY )             /* GDI.97    */ | 
|  | DC_GET_VAL_16( HRGN16, InquireVisRgn, w.hVisRgn )               /* GDI.131   */ | 
|  | DC_GET_X_Y( DWORD, GetBrushOrg, w.brushOrgX, w.brushOrgY )      /* GDI.149   */ | 
|  | DC_GET_VAL_16( UINT16, GetTextAlign16, w.textAlign )            /* GDI.345   */ | 
|  | DC_GET_VAL_32( UINT32, GetTextAlign32, w.textAlign )            /* GDI32.224 */ | 
|  | DC_GET_VAL_16( HFONT16, GetCurLogFont, w.hFont )                /* GDI.411   */ | 
|  | DC_GET_VAL_EX( GetBrushOrgEx, w.brushOrgX, w.brushOrgY )/* GDI.469 GDI32.148 */ | 
|  | DC_GET_VAL_EX( GetCurrentPositionEx, w.CursPosX,        /* GDI.470 GDI32.167 */ | 
|  | w.CursPosY ) | 
|  | DC_GET_VAL_EX( GetViewportExtEx, vportExtX, vportExtY ) /* GDI.472 GDI32.239 */ | 
|  | DC_GET_VAL_EX( GetViewportOrgEx, vportOrgX, vportOrgY ) /* GDI.473 GDI32.240 */ | 
|  | DC_GET_VAL_EX( GetWindowExtEx, wndExtX, wndExtY )       /* GDI.474 GDI32.242 */ | 
|  | DC_GET_VAL_EX( GetWindowOrgEx, wndOrgX, wndOrgY )       /* GDI.475 GDI32.243 */ | 
|  |  | 
|  | /* this one is wrong - Windows returns region that | 
|  | is relative to the device and not to the DC origin */ | 
|  |  | 
|  | DC_GET_VAL_16( HRGN16, GetClipRgn16, w.hClipRgn )              /* GDI.173    */ | 
|  |  |