4 * Copyright 1993 Alexandre Julliard
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #ifndef __WINE_GDI_PRIVATE_H
22 #define __WINE_GDI_PRIVATE_H
29 #include <wine/gdi_driver.h>
31 /* Metafile defines */
32 #define META_EOF 0x0000
33 /* values of mtType in METAHEADER. Note however that the disk image of a disk
34 based metafile has mtType == 1 */
35 #define METAFILE_MEMORY 1
36 #define METAFILE_DISK 2
37 #define MFHEADERSIZE (sizeof(METAHEADER))
38 #define MFVERSION 0x300
44 } EMRSETTEXTJUSTIFICATION
, *PEMRSETTEXTJUSTIFICATION
;
48 HGDIOBJ (*pSelectObject
)( HGDIOBJ handle
, HDC hdc
);
49 INT (*pGetObjectA
)( HGDIOBJ handle
, INT count
, LPVOID buffer
);
50 INT (*pGetObjectW
)( HGDIOBJ handle
, INT count
, LPVOID buffer
);
51 BOOL (*pUnrealizeObject
)( HGDIOBJ handle
);
52 BOOL (*pDeleteObject
)( HGDIOBJ handle
);
55 typedef struct tagWINEDC
58 struct gdi_physdev NullPhysDev
;
59 PHYSDEV physDev
; /* current top of the physdev stack */
60 LONG refcount
; /* thread refcount */
68 WINEDC
* get_physdev_dc( PHYSDEV dev
);
71 extern BOOL
get_brush_bitmap_info( HBRUSH handle
, BITMAPINFO
*info
, void **bits
, UINT
*usage
) DECLSPEC_HIDDEN
;
74 extern DC
*alloc_dc_ptr( WORD magic
) DECLSPEC_HIDDEN
;
75 extern void free_dc_ptr( DC
*dc
) DECLSPEC_HIDDEN
;
76 extern DC
*get_dc_ptr( HDC hdc
) DECLSPEC_HIDDEN
;
77 extern void release_dc_ptr( DC
*dc
) DECLSPEC_HIDDEN
;
80 extern int bitmap_info_size( const BITMAPINFO
* info
, WORD coloruse
) DECLSPEC_HIDDEN
;
83 extern HENHMETAFILE
EMF_Create_HENHMETAFILE(ENHMETAHEADER
*emh
, BOOL on_disk
) DECLSPEC_HIDDEN
;
86 extern HGDIOBJ
alloc_gdi_handle( void *obj
, WORD type
, const struct gdi_obj_funcs
*funcs
) DECLSPEC_HIDDEN
;
87 extern void *free_gdi_handle( HGDIOBJ handle
) DECLSPEC_HIDDEN
;
88 extern HGDIOBJ
get_full_gdi_handle( HGDIOBJ handle
) DECLSPEC_HIDDEN
;
89 extern void *GDI_GetObjPtr( HGDIOBJ
, WORD
) DECLSPEC_HIDDEN
;
90 extern void GDI_ReleaseObj( HGDIOBJ
) DECLSPEC_HIDDEN
;
91 extern void GDI_hdc_using_object(HGDIOBJ obj
, HDC hdc
) DECLSPEC_HIDDEN
;
92 extern void GDI_hdc_not_using_object(HGDIOBJ obj
, HDC hdc
) DECLSPEC_HIDDEN
;
95 extern HMETAFILE
MF_Create_HMETAFILE(METAHEADER
*mh
) DECLSPEC_HIDDEN
;
96 extern METAHEADER
*MF_CreateMetaHeaderDisk(METAHEADER
*mr
, LPCVOID filename
, BOOL unicode
) DECLSPEC_HIDDEN
;
98 /* Format of comment record added by GetWinMetaFileBits */
102 DWORD magic
; /* WMFC */
111 DWORD remaining_size
;
114 } emf_in_wmf_comment
;
117 #define WMFC_MAGIC 0x43464d57
119 extern HPALETTE WINAPI
GDISelectPalette( HDC hdc
, HPALETTE hpal
, WORD wBkg
) DECLSPEC_HIDDEN
;
120 extern UINT WINAPI
GDIRealizePalette( HDC hdc
) DECLSPEC_HIDDEN
;
122 #define EMR_SETLINKEDUFI 119
124 #define GET_DC_PHYSDEV(dc,func) \
125 get_physdev_entry_point( (dc)->physDev, FIELD_OFFSET(struct gdi_dc_funcs,func))
127 static inline PHYSDEV
pop_dc_driver( DC
*dc
, const struct gdi_dc_funcs
*funcs
)
129 PHYSDEV dev
, *pdev
= &dc
->physDev
;
130 while (*pdev
&& (*pdev
)->funcs
!= funcs
) pdev
= &(*pdev
)->next
;
131 if (!*pdev
) return NULL
;
137 static inline PHYSDEV
find_dc_driver( DC
*dc
, const struct gdi_dc_funcs
*funcs
)
141 for (dev
= dc
->physDev
; dev
; dev
= dev
->next
) if (dev
->funcs
== funcs
) return dev
;
145 /* Undocumented value for DIB's iUsage: Indicates a mono DIB w/o pal entries */
146 #define DIB_PAL_MONO 2
148 BOOL WINAPI
SetVirtualResolution(HDC hdc
, DWORD horz_res
, DWORD vert_res
, DWORD horz_size
, DWORD vert_size
);
150 static inline int get_dib_stride( int width
, int bpp
)
152 return ((width
* bpp
+ 31) >> 3) & ~3;
155 static inline int get_dib_image_size( const BITMAPINFO
*info
)
157 return get_dib_stride( info
->bmiHeader
.biWidth
, info
->bmiHeader
.biBitCount
)
158 * abs( info
->bmiHeader
.biHeight
);
161 /* only for use on sanitized BITMAPINFO structures */
162 static inline int get_dib_info_size( const BITMAPINFO
*info
, UINT coloruse
)
164 if (info
->bmiHeader
.biCompression
== BI_BITFIELDS
)
165 return sizeof(BITMAPINFOHEADER
) + 3 * sizeof(DWORD
);
166 if (coloruse
== DIB_PAL_COLORS
)
167 return sizeof(BITMAPINFOHEADER
) + info
->bmiHeader
.biClrUsed
* sizeof(WORD
);
168 return FIELD_OFFSET( BITMAPINFO
, bmiColors
[info
->bmiHeader
.biClrUsed
] );
171 #define GdiWorldSpaceToDeviceSpace 0x204
172 BOOL APIENTRY
NtGdiGetTransform( _In_ HDC hdc
, _In_ DWORD iXform
, _Out_ LPXFORM pxf
);
174 /* Special sauce for reactos */
175 #define GDIRealizePalette RealizePalette
176 #define GDISelectPalette SelectPalette
178 HGDIOBJ WINAPI
GdiFixUpHandle(HGDIOBJ hGdiObj
);
179 #define get_full_gdi_handle GdiFixUpHandle
181 extern void push_dc_driver_ros(PHYSDEV
*dev
, PHYSDEV physdev
, const struct gdi_dc_funcs
*funcs
);
182 #define push_dc_driver push_dc_driver_ros
184 BOOL WINAPI
SetWorldTransformForMetafile(HDC hdc
, const XFORM
*pxform
);
185 #define SetWorldTransform SetWorldTransformForMetafile
188 #define DbgRaiseAssertionFailure() __emit(0xdefc)
190 #define DbgRaiseAssertionFailure() __int2c()
194 #define ASSERT(x) if (!(x)) DbgRaiseAssertionFailure()
196 #endif /* __WINE_GDI_PRIVATE_H */