ReactOS  0.4.14-dev-317-g96040ec
graphics.c
Go to the documentation of this file.
1 /*
2  * Metafile driver graphics functions
3  *
4  * Copyright 1993, 1994 Alexandre Julliard
5  *
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.
10  *
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.
15  *
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
19  */
20 
21 #include <stdarg.h>
22 #include <stdlib.h>
23 #include <string.h>
24 
25 #include "windef.h"
26 #include "winbase.h"
27 #include "wingdi.h"
28 #include "mfdrv/metafiledrv.h"
29 #include "wine/debug.h"
30 
32 
33 /**********************************************************************
34  * MFDRV_MoveTo
35  */
37 {
39 }
40 
41 /***********************************************************************
42  * MFDRV_LineTo
43  */
45 {
46  return MFDRV_MetaParam2(dev, META_LINETO, x, y);
47 }
48 
49 
50 /***********************************************************************
51  * MFDRV_Arc
52  */
54  INT xstart, INT ystart, INT xend, INT yend )
55 {
57  xstart, ystart, xend, yend);
58 }
59 
60 
61 /***********************************************************************
62  * MFDRV_Pie
63  */
65  INT xstart, INT ystart, INT xend, INT yend )
66 {
68  xstart, ystart, xend, yend);
69 }
70 
71 
72 /***********************************************************************
73  * MFDRV_Chord
74  */
76  INT xstart, INT ystart, INT xend, INT yend )
77 {
79  xstart, ystart, xend, yend);
80 }
81 
82 /***********************************************************************
83  * MFDRV_Ellipse
84  */
86 {
88 }
89 
90 /***********************************************************************
91  * MFDRV_Rectangle
92  */
94 {
96 }
97 
98 /***********************************************************************
99  * MFDRV_RoundRect
100  */
102  INT bottom, INT ell_width, INT ell_height )
103 {
105  ell_width, ell_height);
106 }
107 
108 /***********************************************************************
109  * MFDRV_SetPixel
110  */
112 {
114  LOWORD(color));
115 }
116 
117 
118 /******************************************************************
119  * MFDRV_MetaPoly - implements Polygon and Polyline
120  */
121 static BOOL MFDRV_MetaPoly(PHYSDEV dev, short func, POINTS *pt, short count)
122 {
123  BOOL ret;
124  DWORD len;
125  METARECORD *mr;
126 
127  len = sizeof(METARECORD) + (count * 4);
128  if (!(mr = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, len )))
129  return FALSE;
130 
131  mr->rdSize = len / 2;
132  mr->rdFunction = func;
133  *(mr->rdParm) = count;
134  memcpy(mr->rdParm + 1, pt, count * 4);
135  ret = MFDRV_WriteRecord( dev, mr, mr->rdSize * 2);
136  HeapFree( GetProcessHeap(), 0, mr);
137  return ret;
138 }
139 
140 
141 /**********************************************************************
142  * MFDRV_Polyline
143  */
145 {
146  int i;
147  POINTS *pts;
148  BOOL ret;
149 
150  pts = HeapAlloc( GetProcessHeap(), 0, sizeof(POINTS)*count );
151  if(!pts) return FALSE;
152  for (i=count;i--;)
153  {
154  pts[i].x = pt[i].x;
155  pts[i].y = pt[i].y;
156  }
158 
159  HeapFree( GetProcessHeap(), 0, pts );
160  return ret;
161 }
162 
163 
164 /**********************************************************************
165  * MFDRV_Polygon
166  */
168 {
169  int i;
170  POINTS *pts;
171  BOOL ret;
172 
173  pts = HeapAlloc( GetProcessHeap(), 0, sizeof(POINTS)*count );
174  if(!pts) return FALSE;
175  for (i=count;i--;)
176  {
177  pts[i].x = pt[i].x;
178  pts[i].y = pt[i].y;
179  }
181 
182  HeapFree( GetProcessHeap(), 0, pts );
183  return ret;
184 }
185 
186 
187 /**********************************************************************
188  * MFDRV_PolyPolygon
189  */
190 BOOL MFDRV_PolyPolygon( PHYSDEV dev, const POINT* pt, const INT* counts, UINT polygons)
191 {
192  BOOL ret;
193  DWORD len;
194  METARECORD *mr;
195  unsigned int i,j;
196  POINTS *pts;
197  INT16 totalpoint16 = 0;
198  INT16 * pointcounts;
199 
200  for (i=0;i<polygons;i++) {
201  totalpoint16 += counts[i];
202  }
203 
204  /* allocate space for all points */
205  pts=HeapAlloc( GetProcessHeap(), 0, sizeof(POINTS) * totalpoint16 );
206  pointcounts = HeapAlloc( GetProcessHeap(), 0, sizeof(INT16) * totalpoint16 );
207 
208  /* copy point counts */
209  for (i=0;i<polygons;i++) {
210  pointcounts[i] = counts[i];
211  }
212 
213  /* convert all points */
214  for (j = totalpoint16; j--;){
215  pts[j].x = pt[j].x;
216  pts[j].y = pt[j].y;
217  }
218 
219  len = sizeof(METARECORD) + sizeof(WORD) + polygons*sizeof(INT16) + totalpoint16*sizeof(*pts);
220 
221  if (!(mr = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, len ))) {
222  HeapFree( GetProcessHeap(), 0, pts );
223  HeapFree( GetProcessHeap(), 0, pointcounts );
224  return FALSE;
225  }
226 
227  mr->rdSize = len /2;
229  *(mr->rdParm) = polygons;
230  memcpy(mr->rdParm + 1, pointcounts, polygons*sizeof(INT16));
231  memcpy(mr->rdParm + 1+polygons, pts , totalpoint16*sizeof(*pts));
232  ret = MFDRV_WriteRecord( dev, mr, mr->rdSize * 2);
233 
234  HeapFree( GetProcessHeap(), 0, pts );
235  HeapFree( GetProcessHeap(), 0, pointcounts );
236  HeapFree( GetProcessHeap(), 0, mr);
237  return ret;
238 }
239 
240 
241 /**********************************************************************
242  * MFDRV_ExtFloodFill
243  */
245 {
247  LOWORD(color));
248 }
249 
250 
251 /******************************************************************
252  * MFDRV_CreateRegion
253  *
254  * For explanation of the format of the record see MF_Play_MetaCreateRegion in
255  * objects/metafile.c
256  */
258 {
259  DWORD len;
260  METARECORD *mr;
261  RGNDATA *rgndata;
262  RECT *pCurRect, *pEndRect;
263  WORD Bands = 0, MaxBands = 0;
264  WORD *Param, *StartBand;
265  BOOL ret;
266 
267  if (!(len = GetRegionData( hrgn, 0, NULL ))) return -1;
268  if( !(rgndata = HeapAlloc( GetProcessHeap(), 0, len )) ) {
269  WARN("Can't alloc rgndata buffer\n");
270  return -1;
271  }
272  GetRegionData( hrgn, len, rgndata );
273 
274  /* Overestimate of length:
275  * Assume every rect is a separate band -> 6 WORDs per rect
276  */
277  len = sizeof(METARECORD) + 20 + (rgndata->rdh.nCount * 12);
278  if( !(mr = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, len )) ) {
279  WARN("Can't alloc METARECORD buffer\n");
280  HeapFree( GetProcessHeap(), 0, rgndata );
281  return -1;
282  }
283 
284  Param = mr->rdParm + 11;
285  StartBand = NULL;
286 
287  pEndRect = (RECT *)rgndata->Buffer + rgndata->rdh.nCount;
288  for(pCurRect = (RECT *)rgndata->Buffer; pCurRect < pEndRect; pCurRect++)
289  {
290  if( StartBand && pCurRect->top == *(StartBand + 1) )
291  {
292  *Param++ = pCurRect->left;
293  *Param++ = pCurRect->right;
294  }
295  else
296  {
297  if(StartBand)
298  {
299  *StartBand = Param - StartBand - 3;
300  *Param++ = *StartBand;
301  if(*StartBand > MaxBands)
302  MaxBands = *StartBand;
303  Bands++;
304  }
305  StartBand = Param++;
306  *Param++ = pCurRect->top;
307  *Param++ = pCurRect->bottom;
308  *Param++ = pCurRect->left;
309  *Param++ = pCurRect->right;
310  }
311  }
312 
313  if (StartBand)
314  {
315  *StartBand = Param - StartBand - 3;
316  *Param++ = *StartBand;
317  if(*StartBand > MaxBands)
318  MaxBands = *StartBand;
319  Bands++;
320  }
321 
322  mr->rdParm[0] = 0;
323  mr->rdParm[1] = 6;
324  mr->rdParm[2] = 0x2f6;
325  mr->rdParm[3] = 0;
326  mr->rdParm[4] = (Param - &mr->rdFunction) * sizeof(WORD);
327  mr->rdParm[5] = Bands;
328  mr->rdParm[6] = MaxBands;
329  mr->rdParm[7] = rgndata->rdh.rcBound.left;
330  mr->rdParm[8] = rgndata->rdh.rcBound.top;
331  mr->rdParm[9] = rgndata->rdh.rcBound.right;
332  mr->rdParm[10] = rgndata->rdh.rcBound.bottom;
334  mr->rdSize = Param - (WORD *)mr;
335  ret = MFDRV_WriteRecord( dev, mr, mr->rdSize * 2 );
336  HeapFree( GetProcessHeap(), 0, mr );
337  HeapFree( GetProcessHeap(), 0, rgndata );
338  if(!ret)
339  {
340  WARN("MFDRV_WriteRecord failed\n");
341  return -1;
342  }
343  return MFDRV_AddHandle( dev, hrgn );
344 }
345 
346 
347 /**********************************************************************
348  * MFDRV_PaintRgn
349  */
351 {
352  INT16 index;
354  if(index == -1)
355  return FALSE;
357 }
358 
359 
360 /**********************************************************************
361  * MFDRV_InvertRgn
362  */
364 {
365  INT16 index;
367  if(index == -1)
368  return FALSE;
370 }
371 
372 
373 /**********************************************************************
374  * MFDRV_FillRgn
375  */
377 {
378  INT16 iRgn, iBrush;
379  iRgn = MFDRV_CreateRegion( dev, hrgn );
380  if(iRgn == -1)
381  return FALSE;
382  iBrush = MFDRV_CreateBrushIndirect( dev, hbrush );
383  if(!iBrush)
384  return FALSE;
385  return MFDRV_MetaParam2( dev, META_FILLREGION, iRgn, iBrush );
386 }
387 
388 /**********************************************************************
389  * MFDRV_FrameRgn
390  */
392 {
393  INT16 iRgn, iBrush;
394  iRgn = MFDRV_CreateRegion( dev, hrgn );
395  if(iRgn == -1)
396  return FALSE;
397  iBrush = MFDRV_CreateBrushIndirect( dev, hbrush );
398  if(!iBrush)
399  return FALSE;
400  return MFDRV_MetaParam4( dev, META_FRAMEREGION, iRgn, iBrush, x, y );
401 }
402 
403 
404 /**********************************************************************
405  * MFDRV_ExtSelectClipRgn
406  */
408 {
409  INT16 iRgn;
410  INT ret;
411 
412  if (mode != RGN_COPY) return ERROR;
413  if (!hrgn) return NULLREGION;
414  iRgn = MFDRV_CreateRegion( dev, hrgn );
415  if(iRgn == -1) return ERROR;
418  MFDRV_RemoveHandle( dev, iRgn );
419  return ret;
420 }
421 
422 
423 /**********************************************************************
424  * MFDRV_PolyBezier
425  * Since MetaFiles don't record Beziers and they don't even record
426  * approximations to them using lines, we need this stub function.
427  */
429 {
430  return FALSE;
431 }
432 
433 /**********************************************************************
434  * MFDRV_PolyBezierTo
435  * Since MetaFiles don't record Beziers and they don't even record
436  * approximations to them using lines, we need this stub function.
437  */
439 {
440  return FALSE;
441 }
BOOL MFDRV_MoveTo(PHYSDEV dev, INT x, INT y)
Definition: graphics.c:36
GLenum func
Definition: glext.h:6028
static INT16 MFDRV_CreateRegion(PHYSDEV dev, HRGN hrgn)
Definition: graphics.c:257
BOOL MFDRV_FrameRgn(PHYSDEV dev, HRGN hrgn, HBRUSH hbrush, INT x, INT y)
Definition: graphics.c:391
static HBRUSH hbrush
BOOL MFDRV_PolyBezier(PHYSDEV dev, const POINT *pts, DWORD count)
Definition: graphics.c:428
BOOL MFDRV_RoundRect(PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT ell_width, INT ell_height)
Definition: graphics.c:101
UINT MFDRV_AddHandle(PHYSDEV dev, HGDIOBJ obj) DECLSPEC_HIDDEN
Definition: objects.c:39
#define pt(x, y)
Definition: drawing.c:79
#define ERROR(name)
Definition: error_private.h:53
GLuint GLuint GLsizei count
Definition: gl.h:1545
BOOL MFDRV_PolyBezierTo(PHYSDEV dev, const POINT *pts, DWORD count)
Definition: graphics.c:438
#define WARN(fmt,...)
Definition: debug.h:111
#define NULLREGION
Definition: wingdi.h:360
LONG top
Definition: windef.h:292
char Buffer[1]
Definition: axextend.idl:395
WORD rdFunction
Definition: wingdi.h:2341
#define META_FLOODFILL
Definition: wingdi.h:234
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
BOOL MFDRV_PolyPolygon(PHYSDEV dev, const POINT *pt, const INT *counts, UINT polygons)
Definition: graphics.c:190
WINE_DEFAULT_DEBUG_CHANNEL(gdiplus)
LONG left
Definition: windef.h:291
#define META_INVERTREGION
Definition: wingdi.h:251
BOOL MFDRV_MetaParam8(PHYSDEV dev, short func, short param1, short param2, short param3, short param4, short param5, short param6, short param7, short param8)
Definition: init.c:609
struct tagMETARECORD METARECORD
LONG right
Definition: windef.h:293
int32_t INT
Definition: typedefs.h:56
DWORD rdSize
Definition: wingdi.h:2340
INT16 MFDRV_CreateBrushIndirect(PHYSDEV dev, HBRUSH hBrush) DECLSPEC_HIDDEN
Definition: objects.c:149
static const unsigned char metafile[]
Definition: olepicture.c:138
#define META_RECTANGLE
Definition: wingdi.h:236
#define META_LINETO
Definition: wingdi.h:228
BOOL MFDRV_ExtFloodFill(PHYSDEV dev, INT x, INT y, COLORREF color, UINT fillType)
Definition: graphics.c:244
#define META_PAINTREGION
Definition: wingdi.h:252
#define META_CREATEREGION
Definition: wingdi.h:277
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
BOOL MFDRV_Polygon(PHYSDEV dev, const POINT *pt, INT count)
Definition: graphics.c:167
unsigned int BOOL
Definition: ntddk_ex.h:94
BOOL MFDRV_MetaParam1(PHYSDEV dev, short func, short param1)
Definition: init.c:532
BOOL MFDRV_RemoveHandle(PHYSDEV dev, UINT index) DECLSPEC_HIDDEN
Definition: objects.c:64
GLuint color
Definition: glext.h:6243
#define META_FRAMEREGION
Definition: wingdi.h:250
INT MFDRV_ExtSelectClipRgn(PHYSDEV dev, HRGN hrgn, INT mode)
Definition: graphics.c:407
smooth NULL
Definition: ftsmooth.c:416
#define META_SETPIXEL
Definition: wingdi.h:240
#define META_MOVETO
Definition: wingdi.h:229
BOOL MFDRV_Arc(PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend)
Definition: graphics.c:53
GLint GLint bottom
Definition: glext.h:7726
SHORT x
Definition: windef.h:327
GLuint index
Definition: glext.h:6031
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define META_POLYGON
Definition: wingdi.h:245
BOOL MFDRV_MetaParam6(PHYSDEV dev, short func, short param1, short param2, short param3, short param4, short param5, short param6)
Definition: init.c:587
BOOL MFDRV_LineTo(PHYSDEV dev, INT x, INT y)
Definition: graphics.c:44
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
DWORD COLORREF
Definition: windef.h:285
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint left
Definition: glext.h:7726
#define META_POLYLINE
Definition: wingdi.h:246
GLdouble GLdouble right
Definition: glext.h:10859
BOOL MFDRV_Chord(PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend)
Definition: graphics.c:75
BOOL MFDRV_Pie(PHYSDEV dev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend)
Definition: graphics.c:64
BOOL MFDRV_FillRgn(PHYSDEV dev, HRGN hrgn, HBRUSH hbrush)
Definition: graphics.c:376
#define META_FILLREGION
Definition: wingdi.h:249
int ret
#define index(s, c)
Definition: various.h:29
#define META_POLYPOLYGON
Definition: wingdi.h:264
static HRGN hrgn
Definition: win.c:55
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
#define META_PIE
Definition: wingdi.h:235
GLenum mode
Definition: glext.h:6217
WORD rdParm[1]
Definition: wingdi.h:2342
#define RGN_COPY
Definition: wingdi.h:356
BOOL MFDRV_MetaParam2(PHYSDEV dev, short func, short param1, short param2)
Definition: init.c:548
#define META_DELETEOBJECT
Definition: wingdi.h:271
SHORT y
Definition: windef.h:328
#define META_ROUNDRECT
Definition: wingdi.h:237
#define META_SELECTOBJECT
Definition: wingdi.h:254
#define META_ARC
Definition: wingdi.h:232
#define META_ELLIPSE
Definition: wingdi.h:233
unsigned int UINT
Definition: ndis.h:50
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
RGNDATAHEADER rdh
Definition: axextend.idl:394
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
BOOL MFDRV_InvertRgn(PHYSDEV dev, HRGN hrgn)
Definition: graphics.c:363
BOOL MFDRV_PaintRgn(PHYSDEV dev, HRGN hrgn)
Definition: graphics.c:350
static BOOL MFDRV_MetaPoly(PHYSDEV dev, short func, POINTS *pt, short count)
Definition: graphics.c:121
BOOL MFDRV_Polyline(PHYSDEV dev, const POINT *pt, INT count)
Definition: graphics.c:144
#define HIWORD(l)
Definition: typedefs.h:246
BOOL MFDRV_WriteRecord(PHYSDEV dev, METARECORD *mr, DWORD rlen)
Definition: init.c:475
LONG bottom
Definition: windef.h:294
GLdouble GLdouble GLdouble GLdouble top
Definition: glext.h:10859
BOOL MFDRV_MetaParam4(PHYSDEV dev, short func, short param1, short param2, short param3, short param4)
Definition: init.c:566
#define META_CHORD
Definition: wingdi.h:256
COLORREF MFDRV_SetPixel(PHYSDEV dev, INT x, INT y, COLORREF color)
Definition: graphics.c:111
DWORD WINAPI GetRegionData(_In_ HRGN hrgn, _In_ DWORD nCount, _Out_writes_bytes_to_opt_(nCount, return) LPRGNDATA lpRgnData)
#define LOWORD(l)
Definition: pedump.c:82
#define HeapFree(x, y, z)
Definition: compat.h:394
BOOL MFDRV_Ellipse(PHYSDEV dev, INT left, INT top, INT right, INT bottom)
Definition: graphics.c:85
BOOL MFDRV_Rectangle(PHYSDEV dev, INT left, INT top, INT right, INT bottom)
Definition: graphics.c:93
signed short INT16