Release 960606
[wine.git] / windows / mapping.c
blob9ae2b69175c1ef6ae388e557d90be468153e1254
1 /*
2 * GDI mapping mode functions
4 * Copyright 1993 Alexandre Julliard
5 */
7 #include <math.h>
8 #include "gdi.h"
9 #include "metafile.h"
10 #include "stddebug.h"
11 /* #define DEBUG_GDI */
12 #include "debug.h"
15 /***********************************************************************
16 * MAPPING_FixIsotropic
18 * Fix viewport extensions for isotropic mode.
20 void MAPPING_FixIsotropic( DC * dc )
22 double xdim = (double)dc->w.VportExtX * dc->w.devCaps->horzSize /
23 (dc->w.devCaps->horzRes * dc->w.WndExtX);
24 double ydim = (double)dc->w.VportExtY * dc->w.devCaps->vertSize /
25 (dc->w.devCaps->vertRes * dc->w.WndExtY);
26 if (xdim > ydim)
28 dc->w.VportExtX = dc->w.VportExtX * fabs( ydim / xdim );
29 if (!dc->w.VportExtX) dc->w.VportExtX = 1;
31 else
33 dc->w.VportExtY = dc->w.VportExtY * fabs( xdim / ydim );
34 if (!dc->w.VportExtY) dc->w.VportExtY = 1;
39 /***********************************************************************
40 * DPtoLP16 (GDI.67)
42 BOOL16 DPtoLP16( HDC16 hdc, LPPOINT16 points, INT16 count )
44 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
45 if (!dc) return FALSE;
47 while (count--)
49 points->x = XDPTOLP( dc, points->x );
50 points->y = YDPTOLP( dc, points->y );
52 return TRUE;
56 /***********************************************************************
57 * DPtoLP32 (GDI32.65)
59 BOOL32 DPtoLP32( HDC32 hdc, LPPOINT32 points, INT32 count )
61 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
62 if (!dc) return FALSE;
64 while (count--)
66 points->x = XDPTOLP( dc, points->x );
67 points->y = YDPTOLP( dc, points->y );
69 return TRUE;
73 /***********************************************************************
74 * LPtoDP16 (GDI.99)
76 BOOL16 LPtoDP16( HDC16 hdc, LPPOINT16 points, INT16 count )
78 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
79 if (!dc) return FALSE;
81 while (count--)
83 points->x = XLPTODP( dc, points->x );
84 points->y = YLPTODP( dc, points->y );
86 return TRUE;
90 /***********************************************************************
91 * LPtoDP32 (GDI32.247)
93 BOOL32 LPtoDP32( HDC32 hdc, LPPOINT32 points, INT32 count )
95 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
96 if (!dc) return FALSE;
98 while (count--)
100 points->x = XLPTODP( dc, points->x );
101 points->y = YLPTODP( dc, points->y );
103 return TRUE;
107 /***********************************************************************
108 * SetMapMode (GDI.3)
110 WORD SetMapMode( HDC hdc, WORD mode )
112 WORD prevMode;
113 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
114 if (!dc)
116 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
117 if (!dc) return 0;
118 MF_MetaParam1(dc, META_SETMAPMODE, mode);
119 return 1;
122 dprintf_gdi(stddeb, "SetMapMode: %04x %d\n", hdc, mode );
124 prevMode = dc->w.MapMode;
125 switch(mode)
127 case MM_TEXT:
128 dc->w.WndOrgX = dc->w.WndOrgY = 0;
129 dc->w.VportOrgX = dc->w.VportOrgY = 0;
130 dc->w.WndExtX = 1;
131 dc->w.WndExtY = 1;
132 dc->w.VportExtX = 1;
133 dc->w.VportExtY = 1;
134 break;
136 case MM_LOMETRIC:
137 case MM_ISOTROPIC:
138 dc->w.WndOrgX = dc->w.WndOrgY = 0;
139 dc->w.VportOrgX = dc->w.VportOrgY = 0;
140 dc->w.WndExtX = dc->w.devCaps->horzSize;
141 dc->w.WndExtY = dc->w.devCaps->vertSize;
142 dc->w.VportExtX = dc->w.devCaps->horzRes / 10;
143 dc->w.VportExtY = dc->w.devCaps->vertRes / -10;
144 break;
146 case MM_HIMETRIC:
147 dc->w.WndOrgX = dc->w.WndOrgY = 0;
148 dc->w.VportOrgX = dc->w.VportOrgY = 0;
149 dc->w.WndExtX = dc->w.devCaps->horzSize * 10;
150 dc->w.WndExtY = dc->w.devCaps->vertSize * 10;
151 dc->w.VportExtX = dc->w.devCaps->horzRes / 10;
152 dc->w.VportExtY = dc->w.devCaps->vertRes / -10;
153 break;
155 case MM_LOENGLISH:
156 dc->w.WndOrgX = dc->w.WndOrgY = 0;
157 dc->w.VportOrgX = dc->w.VportOrgY = 0;
158 dc->w.WndExtX = dc->w.devCaps->horzSize;
159 dc->w.WndExtY = dc->w.devCaps->vertSize;
160 dc->w.VportExtX = (short)(254L * dc->w.devCaps->horzRes / 1000);
161 dc->w.VportExtY = (short)(-254L * dc->w.devCaps->vertRes / 1000);
162 break;
164 case MM_HIENGLISH:
165 dc->w.WndOrgX = dc->w.WndOrgY = 0;
166 dc->w.VportOrgX = dc->w.VportOrgY = 0;
167 dc->w.WndExtX = dc->w.devCaps->horzSize * 10;
168 dc->w.WndExtY = dc->w.devCaps->vertSize * 10;
169 dc->w.VportExtX = (short)(254L * dc->w.devCaps->horzRes / 1000);
170 dc->w.VportExtY = (short)(-254L * dc->w.devCaps->vertRes / 1000);
171 break;
173 case MM_TWIPS:
174 dc->w.WndOrgX = dc->w.WndOrgY = 0;
175 dc->w.VportOrgX = dc->w.VportOrgY = 0;
176 dc->w.WndExtX = (short)(144L * dc->w.devCaps->horzSize / 10);
177 dc->w.WndExtY = (short)(144L * dc->w.devCaps->vertSize / 10);
178 dc->w.VportExtX = (short)(254L * dc->w.devCaps->horzRes / 1000);
179 dc->w.VportExtY = (short)(-254L * dc->w.devCaps->vertRes / 1000);
180 break;
182 case MM_ANISOTROPIC:
183 break;
185 default:
186 return prevMode;
188 dc->w.MapMode = mode;
189 return prevMode;
193 /***********************************************************************
194 * SetViewportExt (GDI.14)
196 DWORD SetViewportExt( HDC16 hdc, INT16 x, INT16 y )
198 SIZE16 size;
199 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
200 if (!dc)
202 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
203 if (!dc) return FALSE;
204 MF_MetaParam2(dc, META_SETVIEWPORTEXT, x, y);
205 return 0;
208 size.cx = dc->w.VportExtX;
209 size.cy = dc->w.VportExtY;
210 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
211 return MAKELONG( size.cx, size.cy );
212 if (!x || !y) return 0;
213 dc->w.VportExtX = x;
214 dc->w.VportExtY = y;
215 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
216 return MAKELONG( size.cx, size.cy );
220 /***********************************************************************
221 * SetViewportExtEx16 (GDI.479)
223 BOOL16 SetViewportExtEx16( HDC16 hdc, INT16 x, INT16 y, LPSIZE16 size )
225 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
226 if (!dc) return FALSE;
227 if (size)
229 size->cx = dc->w.VportExtX;
230 size->cy = dc->w.VportExtY;
232 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
233 return TRUE;
234 if (!x || !y) return FALSE;
235 dc->w.VportExtX = x;
236 dc->w.VportExtY = y;
237 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
238 return TRUE;
242 /***********************************************************************
243 * SetViewportExtEx32 (GDI32.340)
245 BOOL32 SetViewportExtEx32( HDC32 hdc, INT32 x, INT32 y, LPSIZE32 size )
247 SIZE16 size16;
248 BOOL16 ret = SetViewportExtEx16( (HDC16)hdc, (INT16)x, (INT16)y, &size16 );
249 if (size) CONV_SIZE16TO32( &size16, size );
250 return ret;
254 /***********************************************************************
255 * SetViewportOrg (GDI.13)
257 DWORD SetViewportOrg( HDC16 hdc, INT16 x, INT16 y )
259 POINT16 pt;
260 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
261 if (!dc)
263 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
264 if (!dc) return FALSE;
265 MF_MetaParam2(dc, META_SETVIEWPORTORG, x, y);
266 return 0;
269 pt.x = dc->w.VportOrgX;
270 pt.y = dc->w.VportOrgY;
271 dc->w.VportOrgX = x;
272 dc->w.VportOrgY = y;
273 return pt.x | (pt.y << 16);
277 /***********************************************************************
278 * SetViewportOrgEx16 (GDI.480)
280 BOOL16 SetViewportOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt )
282 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
283 if (!dc) return FALSE;
284 if (pt)
286 pt->x = dc->w.VportOrgX;
287 pt->y = dc->w.VportOrgY;
289 dc->w.VportOrgX = x;
290 dc->w.VportOrgY = y;
291 return TRUE;
295 /***********************************************************************
296 * SetViewportOrgEx32 (GDI32.341)
298 BOOL32 SetViewportOrgEx32( HDC32 hdc, INT32 x, INT32 y, LPPOINT32 pt )
300 POINT16 pt16;
301 BOOL16 ret = SetViewportOrgEx16( (HDC16)hdc, (INT16)x, (INT16)y, &pt16 );
302 if (pt) CONV_POINT16TO32( &pt16, pt );
303 return ret;
307 /***********************************************************************
308 * SetWindowExt (GDI.12)
310 DWORD SetWindowExt( HDC16 hdc, INT16 x, INT16 y )
312 SIZE16 size;
313 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
314 if (!dc)
316 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
317 if (!dc) return FALSE;
318 MF_MetaParam2(dc, META_SETWINDOWEXT, x, y);
319 return 0;
322 size.cx = dc->w.WndExtX;
323 size.cy = dc->w.WndExtY;
324 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
325 return MAKELONG( size.cx, size.cy );
326 if (!x || !y) return 0;
327 dc->w.WndExtX = x;
328 dc->w.WndExtY = y;
329 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
330 return MAKELONG( size.cx, size.cy );
334 /***********************************************************************
335 * SetWindowExtEx16 (GDI.481)
337 BOOL16 SetWindowExtEx16( HDC16 hdc, INT16 x, INT16 y, LPSIZE16 size )
339 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
340 if (!dc) return FALSE;
341 if (size)
343 size->cx = dc->w.WndExtX;
344 size->cy = dc->w.WndExtY;
346 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
347 return TRUE;
348 if (!x || !y) return FALSE;
349 dc->w.WndExtX = x;
350 dc->w.WndExtY = y;
351 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
352 return TRUE;
356 /***********************************************************************
357 * SetWindowExtEx32 (GDI32.344)
359 BOOL32 SetWindowExtEx32( HDC32 hdc, INT32 x, INT32 y, LPSIZE32 size )
361 SIZE16 size16;
362 BOOL16 ret = SetWindowExtEx16( (HDC16)hdc, (INT16)x, (INT16)y, &size16 );
363 if (size) CONV_SIZE16TO32( &size16, size );
364 return ret;
368 /***********************************************************************
369 * SetWindowOrg (GDI.11)
371 DWORD SetWindowOrg( HDC16 hdc, INT16 x, INT16 y )
373 POINT16 pt;
374 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
375 if (!dc)
377 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
378 if (!dc) return FALSE;
379 MF_MetaParam2(dc, META_SETWINDOWORG, x, y);
380 return 0;
383 pt.x = dc->w.WndOrgX;
384 pt.y = dc->w.WndOrgY;
385 dc->w.WndOrgX = x;
386 dc->w.WndOrgY = y;
387 return MAKELONG( pt.x, pt.y );
391 /***********************************************************************
392 * SetWindowOrgEx16 (GDI.482)
394 BOOL16 SetWindowOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt )
396 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
397 if (!dc) return FALSE;
398 if (pt)
400 pt->x = dc->w.WndOrgX;
401 pt->y = dc->w.WndOrgY;
403 dc->w.WndOrgX = x;
404 dc->w.WndOrgY = y;
405 return TRUE;
409 /***********************************************************************
410 * SetWindowOrgEx32 (GDI32.345)
412 BOOL32 SetWindowOrgEx32( HDC32 hdc, INT32 x, INT32 y, LPPOINT32 pt )
414 POINT16 pt16;
415 BOOL16 ret = SetWindowOrgEx16( (HDC16)hdc, (INT16)x, (INT16)y, &pt16 );
416 if (pt) CONV_POINT16TO32( &pt16, pt );
417 return ret;
421 /***********************************************************************
422 * OffsetViewportOrg (GDI.17)
424 DWORD OffsetViewportOrg( HDC16 hdc, INT16 x, INT16 y )
426 POINT16 pt;
427 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
428 if (!dc)
430 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
431 if (!dc) return FALSE;
432 MF_MetaParam2(dc, META_OFFSETVIEWPORTORG, x, y);
433 return 0;
436 pt.x = dc->w.VportOrgX;
437 pt.y = dc->w.VportOrgY;
438 dc->w.VportOrgX += x;
439 dc->w.VportOrgY += y;
440 return pt.x | (pt.y << 16);
444 /***********************************************************************
445 * OffsetViewportOrgEx16 (GDI.476)
447 BOOL16 OffsetViewportOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt )
449 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
450 if (!dc) return FALSE;
451 if (pt)
453 pt->x = dc->w.VportOrgX;
454 pt->y = dc->w.VportOrgY;
456 dc->w.VportOrgX += x;
457 dc->w.VportOrgY += y;
458 return TRUE;
462 /***********************************************************************
463 * OffsetViewportOrgEx32 (GDI32.257)
465 BOOL32 OffsetViewportOrgEx32( HDC32 hdc, INT32 x, INT32 y, LPPOINT32 pt )
467 POINT16 pt16;
468 BOOL16 ret = OffsetViewportOrgEx16( (HDC16)hdc, (INT16)x, (INT16)y, &pt16);
469 if (pt) CONV_POINT16TO32( &pt16, pt );
470 return ret;
474 /***********************************************************************
475 * OffsetWindowOrg (GDI.15)
477 DWORD OffsetWindowOrg( HDC16 hdc, INT16 x, INT16 y )
479 POINT16 pt;
480 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
481 if (!dc)
483 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
484 if (!dc) return FALSE;
485 MF_MetaParam2(dc, META_OFFSETWINDOWORG, x, y);
486 return 0;
489 pt.x = dc->w.WndOrgX;
490 pt.y = dc->w.WndOrgY;
491 dc->w.WndOrgX += x;
492 dc->w.WndOrgY += y;
493 return pt.x | (pt.y << 16);
497 /***********************************************************************
498 * OffsetWindowOrgEx16 (GDI.477)
500 BOOL16 OffsetWindowOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt )
502 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
503 if (!dc) return FALSE;
504 if (pt)
506 pt->x = dc->w.WndOrgX;
507 pt->y = dc->w.WndOrgY;
509 dc->w.WndOrgX += x;
510 dc->w.WndOrgY += y;
511 return TRUE;
515 /***********************************************************************
516 * OffsetWindowOrgEx32 (GDI32.258)
518 BOOL32 OffsetWindowOrgEx32( HDC32 hdc, INT32 x, INT32 y, LPPOINT32 pt )
520 POINT16 pt16;
521 BOOL16 ret = OffsetWindowOrgEx16( (HDC16)hdc, (INT16)x, (INT16)y, &pt16 );
522 if (pt) CONV_POINT16TO32( &pt16, pt );
523 return ret;
527 /***********************************************************************
528 * ScaleViewportExt (GDI.18)
530 DWORD ScaleViewportExt( HDC16 hdc, INT16 xNum, INT16 xDenom,
531 INT16 yNum, INT16 yDenom )
533 SIZE16 size;
534 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
535 if (!dc)
537 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
538 if (!dc) return FALSE;
539 MF_MetaParam4(dc, META_SCALEVIEWPORTEXT, xNum, xDenom, yNum, yDenom);
540 return 0;
543 size.cx = dc->w.VportExtX;
544 size.cy = dc->w.VportExtY;
545 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
546 return size.cx | (size.cy << 16);
547 if (!xNum || !xDenom || !xNum || !yDenom) return 0;
548 dc->w.VportExtX = (dc->w.VportExtX * xNum) / xDenom;
549 dc->w.VportExtY = (dc->w.VportExtY * yNum) / yDenom;
550 if (dc->w.VportExtX == 0) dc->w.VportExtX = 1;
551 if (dc->w.VportExtY == 0) dc->w.VportExtY = 1;
552 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
553 return size.cx | (size.cy << 16);
557 /***********************************************************************
558 * ScaleViewportExtEx16 (GDI.484)
560 BOOL16 ScaleViewportExtEx16( HDC16 hdc, INT16 xNum, INT16 xDenom,
561 INT16 yNum, INT16 yDenom, LPSIZE16 size )
563 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
564 if (!dc) return FALSE;
565 if (size)
567 size->cx = dc->w.VportExtX;
568 size->cy = dc->w.VportExtY;
570 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
571 return TRUE;
572 if (!xNum || !xDenom || !xNum || !yDenom) return FALSE;
573 dc->w.VportExtX = (dc->w.VportExtX * xNum) / xDenom;
574 dc->w.VportExtY = (dc->w.VportExtY * yNum) / yDenom;
575 if (dc->w.VportExtX == 0) dc->w.VportExtX = 1;
576 if (dc->w.VportExtY == 0) dc->w.VportExtY = 1;
577 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
578 return TRUE;
582 /***********************************************************************
583 * ScaleViewportExtEx32 (GDI32.293)
585 BOOL32 ScaleViewportExtEx32( HDC32 hdc, INT32 xNum, INT32 xDenom,
586 INT32 yNum, INT32 yDenom, LPSIZE32 size )
588 SIZE16 size16;
589 BOOL16 ret = ScaleViewportExtEx16( (HDC16)hdc, (INT16)xNum, (INT16)xDenom,
590 (INT16)yNum, (INT16)yDenom, &size16 );
591 if (size) CONV_SIZE16TO32( &size16, size );
592 return ret;
596 /***********************************************************************
597 * ScaleWindowExt (GDI.16)
599 DWORD ScaleWindowExt( HDC16 hdc, INT16 xNum, INT16 xDenom,
600 INT16 yNum, INT16 yDenom )
602 SIZE16 size;
603 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
604 if (!dc)
606 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
607 if (!dc) return FALSE;
608 MF_MetaParam4(dc, META_SCALEWINDOWEXT, xNum, xDenom, yNum, yDenom);
609 return 0;
612 size.cx = dc->w.WndExtX;
613 size.cy = dc->w.WndExtY;
614 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
615 return size.cx | (size.cy << 16);
616 if (!xNum || !xDenom || !xNum || !yDenom) return FALSE;
617 dc->w.WndExtX = (dc->w.WndExtX * xNum) / xDenom;
618 dc->w.WndExtY = (dc->w.WndExtY * yNum) / yDenom;
619 if (dc->w.WndExtX == 0) dc->w.WndExtX = 1;
620 if (dc->w.WndExtY == 0) dc->w.WndExtY = 1;
621 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
622 return size.cx | (size.cy << 16);
626 /***********************************************************************
627 * ScaleWindowExtEx16 (GDI.485)
629 BOOL16 ScaleWindowExtEx16( HDC16 hdc, INT16 xNum, INT16 xDenom,
630 INT16 yNum, INT16 yDenom, LPSIZE16 size )
632 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
633 if (!dc) return FALSE;
634 if (size)
636 size->cx = dc->w.WndExtX;
637 size->cy = dc->w.WndExtY;
639 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
640 return TRUE;
641 if (!xNum || !xDenom || !xNum || !yDenom) return FALSE;
642 dc->w.WndExtX = (dc->w.WndExtX * xNum) / xDenom;
643 dc->w.WndExtY = (dc->w.WndExtY * yNum) / yDenom;
644 if (dc->w.WndExtX == 0) dc->w.WndExtX = 1;
645 if (dc->w.WndExtY == 0) dc->w.WndExtY = 1;
646 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
647 return TRUE;
651 /***********************************************************************
652 * ScaleWindowExtEx32 (GDI32.294)
654 BOOL32 ScaleWindowExtEx32( HDC32 hdc, INT32 xNum, INT32 xDenom,
655 INT32 yNum, INT32 yDenom, LPSIZE32 size )
657 SIZE16 size16;
658 BOOL16 ret = ScaleWindowExtEx16( (HDC16)hdc, (INT16)xNum, (INT16)xDenom,
659 (INT16)yNum, (INT16)yDenom, &size16 );
660 if (size) CONV_SIZE16TO32( &size16, size );
661 return ret;