2 * Definitions for Wine GDI drivers
4 * Copyright 2011 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_WINE_GDI_DRIVER_H
22 #define __WINE_WINE_GDI_DRIVER_H
26 typedef struct gdi_physdev
28 const struct gdi_dc_funcs
*funcs
;
29 struct gdi_physdev
*next
;
35 int log_x
; /* original position and size, in logical coords */
39 int x
; /* mapped position and size, in device coords */
43 RECT visrect
; /* rectangle clipped to the visible part, in device coords */
44 DWORD layout
; /* DC layout */
49 void *ptr
; /* pointer to the bits */
50 BOOL is_copy
; /* whether this is a copy of the bits that can be modified */
51 void (*free
)(struct gdi_image_bits
*); /* callback for freeing the bits */
52 void *param
; /* extra parameter for callback private use */
57 INT (*pAbortDoc
)(PHYSDEV
);
58 BOOL (*pAbortPath
)(PHYSDEV
);
59 BOOL (*pAlphaBlend
)(PHYSDEV
,struct bitblt_coords
*,PHYSDEV
,struct bitblt_coords
*,BLENDFUNCTION
);
60 BOOL (*pAngleArc
)(PHYSDEV
,INT
,INT
,DWORD
,FLOAT
,FLOAT
);
61 BOOL (*pArc
)(PHYSDEV
,INT
,INT
,INT
,INT
,INT
,INT
,INT
,INT
);
62 BOOL (*pArcTo
)(PHYSDEV
,INT
,INT
,INT
,INT
,INT
,INT
,INT
,INT
);
63 BOOL (*pBeginPath
)(PHYSDEV
);
64 DWORD (*pBlendImage
)(PHYSDEV
,BITMAPINFO
*,const struct gdi_image_bits
*,struct bitblt_coords
*,struct bitblt_coords
*,BLENDFUNCTION
);
65 INT (*pChoosePixelFormat
)(PHYSDEV
,const PIXELFORMATDESCRIPTOR
*);
66 BOOL (*pChord
)(PHYSDEV
,INT
,INT
,INT
,INT
,INT
,INT
,INT
,INT
);
67 BOOL (*pCloseFigure
)(PHYSDEV
);
68 BOOL (*pCreateBitmap
)(PHYSDEV
,HBITMAP
);
69 BOOL (*pCreateCompatibleDC
)(PHYSDEV
,PHYSDEV
*);
70 BOOL (*pCreateDC
)(PHYSDEV
*,LPCWSTR
,LPCWSTR
,LPCWSTR
,const DEVMODEW
*);
71 HBITMAP (*pCreateDIBSection
)(PHYSDEV
,HBITMAP
,BITMAPINFO
*,UINT
);
72 BOOL (*pDeleteBitmap
)(HBITMAP
);
73 BOOL (*pDeleteDC
)(PHYSDEV
);
74 BOOL (*pDeleteObject
)(PHYSDEV
,HGDIOBJ
);
75 INT (*pDescribePixelFormat
)(PHYSDEV
,INT
,UINT
,PIXELFORMATDESCRIPTOR
*);
76 DWORD (*pDeviceCapabilities
)(LPSTR
,LPCSTR
,LPCSTR
,WORD
,LPSTR
,LPDEVMODEA
);
77 BOOL (*pEllipse
)(PHYSDEV
,INT
,INT
,INT
,INT
);
78 INT (*pEndDoc
)(PHYSDEV
);
79 INT (*pEndPage
)(PHYSDEV
);
80 BOOL (*pEndPath
)(PHYSDEV
);
81 BOOL (*pEnumDeviceFonts
)(PHYSDEV
,LPLOGFONTW
,FONTENUMPROCW
,LPARAM
);
82 INT (*pEnumICMProfiles
)(PHYSDEV
,ICMENUMPROCW
,LPARAM
);
83 INT (*pExcludeClipRect
)(PHYSDEV
,INT
,INT
,INT
,INT
);
84 INT (*pExtDeviceMode
)(LPSTR
,HWND
,LPDEVMODEA
,LPSTR
,LPSTR
,LPDEVMODEA
,LPSTR
,DWORD
);
85 INT (*pExtEscape
)(PHYSDEV
,INT
,INT
,LPCVOID
,INT
,LPVOID
);
86 BOOL (*pExtFloodFill
)(PHYSDEV
,INT
,INT
,COLORREF
,UINT
);
87 INT (*pExtSelectClipRgn
)(PHYSDEV
,HRGN
,INT
);
88 BOOL (*pExtTextOut
)(PHYSDEV
,INT
,INT
,UINT
,const RECT
*,LPCWSTR
,UINT
,const INT
*);
89 BOOL (*pFillPath
)(PHYSDEV
);
90 BOOL (*pFillRgn
)(PHYSDEV
,HRGN
,HBRUSH
);
91 BOOL (*pFlattenPath
)(PHYSDEV
);
92 BOOL (*pFrameRgn
)(PHYSDEV
,HRGN
,HBRUSH
,INT
,INT
);
93 BOOL (*pGdiComment
)(PHYSDEV
,UINT
,CONST BYTE
*);
94 BOOL (*pGetCharWidth
)(PHYSDEV
,UINT
,UINT
,LPINT
);
95 INT (*pGetDeviceCaps
)(PHYSDEV
,INT
);
96 BOOL (*pGetDeviceGammaRamp
)(PHYSDEV
,LPVOID
);
97 BOOL (*pGetICMProfile
)(PHYSDEV
,LPDWORD
,LPWSTR
);
98 DWORD (*pGetImage
)(PHYSDEV
,HBITMAP
,BITMAPINFO
*,struct gdi_image_bits
*,struct bitblt_coords
*);
99 COLORREF (*pGetNearestColor
)(PHYSDEV
,COLORREF
);
100 COLORREF (*pGetPixel
)(PHYSDEV
,INT
,INT
);
101 INT (*pGetPixelFormat
)(PHYSDEV
);
102 UINT (*pGetSystemPaletteEntries
)(PHYSDEV
,UINT
,UINT
,LPPALETTEENTRY
);
103 BOOL (*pGetTextExtentExPoint
)(PHYSDEV
,LPCWSTR
,INT
,INT
,LPINT
,LPINT
,LPSIZE
);
104 BOOL (*pGetTextMetrics
)(PHYSDEV
,TEXTMETRICW
*);
105 INT (*pIntersectClipRect
)(PHYSDEV
,INT
,INT
,INT
,INT
);
106 BOOL (*pInvertRgn
)(PHYSDEV
,HRGN
);
107 BOOL (*pLineTo
)(PHYSDEV
,INT
,INT
);
108 BOOL (*pModifyWorldTransform
)(PHYSDEV
,const XFORM
*,DWORD
);
109 BOOL (*pMoveTo
)(PHYSDEV
,INT
,INT
);
110 INT (*pOffsetClipRgn
)(PHYSDEV
,INT
,INT
);
111 BOOL (*pOffsetViewportOrgEx
)(PHYSDEV
,INT
,INT
,POINT
*);
112 BOOL (*pOffsetWindowOrgEx
)(PHYSDEV
,INT
,INT
,POINT
*);
113 BOOL (*pPaintRgn
)(PHYSDEV
,HRGN
);
114 BOOL (*pPatBlt
)(PHYSDEV
,struct bitblt_coords
*,DWORD
);
115 BOOL (*pPie
)(PHYSDEV
,INT
,INT
,INT
,INT
,INT
,INT
,INT
,INT
);
116 BOOL (*pPolyBezier
)(PHYSDEV
,const POINT
*,DWORD
);
117 BOOL (*pPolyBezierTo
)(PHYSDEV
,const POINT
*,DWORD
);
118 BOOL (*pPolyDraw
)(PHYSDEV
,const POINT
*,const BYTE
*,DWORD
);
119 BOOL (*pPolyPolygon
)(PHYSDEV
,const POINT
*,const INT
*,UINT
);
120 BOOL (*pPolyPolyline
)(PHYSDEV
,const POINT
*,const DWORD
*,DWORD
);
121 BOOL (*pPolygon
)(PHYSDEV
,const POINT
*,INT
);
122 BOOL (*pPolyline
)(PHYSDEV
,const POINT
*,INT
);
123 BOOL (*pPolylineTo
)(PHYSDEV
,const POINT
*,INT
);
124 DWORD (*pPutImage
)(PHYSDEV
,HBITMAP
,HRGN
,BITMAPINFO
*,const struct gdi_image_bits
*,struct bitblt_coords
*,struct bitblt_coords
*,DWORD
);
125 UINT (*pRealizeDefaultPalette
)(PHYSDEV
);
126 UINT (*pRealizePalette
)(PHYSDEV
,HPALETTE
,BOOL
);
127 BOOL (*pRectangle
)(PHYSDEV
,INT
,INT
,INT
,INT
);
128 HDC (*pResetDC
)(PHYSDEV
,const DEVMODEW
*);
129 BOOL (*pRestoreDC
)(PHYSDEV
,INT
);
130 BOOL (*pRoundRect
)(PHYSDEV
,INT
,INT
,INT
,INT
,INT
,INT
);
131 INT (*pSaveDC
)(PHYSDEV
);
132 BOOL (*pScaleViewportExtEx
)(PHYSDEV
,INT
,INT
,INT
,INT
,SIZE
*);
133 BOOL (*pScaleWindowExtEx
)(PHYSDEV
,INT
,INT
,INT
,INT
,SIZE
*);
134 HBITMAP (*pSelectBitmap
)(PHYSDEV
,HBITMAP
);
135 HBRUSH (*pSelectBrush
)(PHYSDEV
,HBRUSH
);
136 BOOL (*pSelectClipPath
)(PHYSDEV
,INT
);
137 HFONT (*pSelectFont
)(PHYSDEV
,HFONT
);
138 HPALETTE (*pSelectPalette
)(PHYSDEV
,HPALETTE
,BOOL
);
139 HPEN (*pSelectPen
)(PHYSDEV
,HPEN
);
140 INT (*pSetArcDirection
)(PHYSDEV
,INT
);
141 COLORREF (*pSetBkColor
)(PHYSDEV
,COLORREF
);
142 INT (*pSetBkMode
)(PHYSDEV
,INT
);
143 COLORREF (*pSetDCBrushColor
)(PHYSDEV
, COLORREF
);
144 COLORREF (*pSetDCPenColor
)(PHYSDEV
, COLORREF
);
145 UINT (*pSetDIBColorTable
)(PHYSDEV
,UINT
,UINT
,const RGBQUAD
*);
146 INT (*pSetDIBitsToDevice
)(PHYSDEV
,INT
,INT
,DWORD
,DWORD
,INT
,INT
,UINT
,UINT
,LPCVOID
,BITMAPINFO
*,UINT
);
147 VOID (*pSetDeviceClipping
)(PHYSDEV
,HRGN
,HRGN
);
148 BOOL (*pSetDeviceGammaRamp
)(PHYSDEV
,LPVOID
);
149 DWORD (*pSetLayout
)(PHYSDEV
,DWORD
);
150 INT (*pSetMapMode
)(PHYSDEV
,INT
);
151 DWORD (*pSetMapperFlags
)(PHYSDEV
,DWORD
);
152 COLORREF (*pSetPixel
)(PHYSDEV
,INT
,INT
,COLORREF
);
153 BOOL (*pSetPixelFormat
)(PHYSDEV
,INT
,const PIXELFORMATDESCRIPTOR
*);
154 INT (*pSetPolyFillMode
)(PHYSDEV
,INT
);
155 INT (*pSetROP2
)(PHYSDEV
,INT
);
156 INT (*pSetRelAbs
)(PHYSDEV
,INT
);
157 INT (*pSetStretchBltMode
)(PHYSDEV
,INT
);
158 UINT (*pSetTextAlign
)(PHYSDEV
,UINT
);
159 INT (*pSetTextCharacterExtra
)(PHYSDEV
,INT
);
160 COLORREF (*pSetTextColor
)(PHYSDEV
,COLORREF
);
161 BOOL (*pSetTextJustification
)(PHYSDEV
,INT
,INT
);
162 BOOL (*pSetViewportExtEx
)(PHYSDEV
,INT
,INT
,SIZE
*);
163 BOOL (*pSetViewportOrgEx
)(PHYSDEV
,INT
,INT
,POINT
*);
164 BOOL (*pSetWindowExtEx
)(PHYSDEV
,INT
,INT
,SIZE
*);
165 BOOL (*pSetWindowOrgEx
)(PHYSDEV
,INT
,INT
,POINT
*);
166 BOOL (*pSetWorldTransform
)(PHYSDEV
,const XFORM
*);
167 INT (*pStartDoc
)(PHYSDEV
,const DOCINFOW
*);
168 INT (*pStartPage
)(PHYSDEV
);
169 BOOL (*pStretchBlt
)(PHYSDEV
,struct bitblt_coords
*,PHYSDEV
,struct bitblt_coords
*,DWORD
);
170 INT (*pStretchDIBits
)(PHYSDEV
,INT
,INT
,INT
,INT
,INT
,INT
,INT
,INT
,const void*,BITMAPINFO
*,UINT
,DWORD
);
171 BOOL (*pStrokeAndFillPath
)(PHYSDEV
);
172 BOOL (*pStrokePath
)(PHYSDEV
);
173 BOOL (*pSwapBuffers
)(PHYSDEV
);
174 BOOL (*pUnrealizePalette
)(HPALETTE
);
175 BOOL (*pWidenPath
)(PHYSDEV
);
178 BOOL (*pwglCopyContext
)(HGLRC
,HGLRC
,UINT
);
179 HGLRC (*pwglCreateContext
)(PHYSDEV
);
180 HGLRC (*pwglCreateContextAttribsARB
)(PHYSDEV
,HGLRC
,const int*);
181 BOOL (*pwglDeleteContext
)(HGLRC
);
182 HDC (*pwglGetPbufferDCARB
)(PHYSDEV
,void*);
183 PROC (*pwglGetProcAddress
)(LPCSTR
);
184 BOOL (*pwglMakeContextCurrentARB
)(PHYSDEV
,PHYSDEV
,HGLRC
);
185 BOOL (*pwglMakeCurrent
)(PHYSDEV
,HGLRC
);
186 BOOL (*pwglSetPixelFormatWINE
)(PHYSDEV
,INT
,const PIXELFORMATDESCRIPTOR
*);
187 BOOL (*pwglShareLists
)(HGLRC
,HGLRC
);
188 BOOL (*pwglUseFontBitmapsA
)(PHYSDEV
,DWORD
,DWORD
,DWORD
);
189 BOOL (*pwglUseFontBitmapsW
)(PHYSDEV
,DWORD
,DWORD
,DWORD
);
192 /* increment this when you change the DC function table */
193 #define WINE_GDI_DRIVER_VERSION 15
195 static inline PHYSDEV
get_physdev_entry_point( PHYSDEV dev
, size_t offset
)
197 while (!((void **)dev
->funcs
)[offset
/ sizeof(void *)]) dev
= dev
->next
;
201 #define GET_NEXT_PHYSDEV(dev,func) \
202 get_physdev_entry_point( (dev)->next, FIELD_OFFSET(struct gdi_dc_funcs,func))
204 static inline void push_dc_driver( PHYSDEV
*dev
, PHYSDEV physdev
, const struct gdi_dc_funcs
*funcs
)
206 physdev
->funcs
= funcs
;
207 physdev
->next
= *dev
;
208 physdev
->hdc
= (*dev
)->hdc
;
212 static inline PHYSDEV
pop_dc_driver( PHYSDEV
*dev
)
219 #endif /* __WINE_WINE_GDI_DRIVER_H */