Release 961215
[wine/multimedia.git] / windows / mapping.c
blobed8a1bb8d3e5b22f24bd1c759b8a25a6e097caee
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 );
51 points++;
53 return TRUE;
57 /***********************************************************************
58 * DPtoLP32 (GDI32.65)
60 BOOL32 DPtoLP32( HDC32 hdc, LPPOINT32 points, INT32 count )
62 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
63 if (!dc) return FALSE;
65 while (count--)
67 points->x = XDPTOLP( dc, points->x );
68 points->y = YDPTOLP( dc, points->y );
69 points++;
71 return TRUE;
75 /***********************************************************************
76 * LPtoDP16 (GDI.99)
78 BOOL16 LPtoDP16( HDC16 hdc, LPPOINT16 points, INT16 count )
80 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
81 if (!dc) return FALSE;
83 while (count--)
85 points->x = XLPTODP( dc, points->x );
86 points->y = YLPTODP( dc, points->y );
87 points++;
89 return TRUE;
93 /***********************************************************************
94 * LPtoDP32 (GDI32.247)
96 BOOL32 LPtoDP32( HDC32 hdc, LPPOINT32 points, INT32 count )
98 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
99 if (!dc) return FALSE;
101 while (count--)
103 points->x = XLPTODP( dc, points->x );
104 points->y = YLPTODP( dc, points->y );
105 points++;
107 return TRUE;
111 /***********************************************************************
112 * SetMapMode (GDI.3)
114 WORD SetMapMode( HDC16 hdc, WORD mode )
116 WORD prevMode;
117 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
118 if (!dc)
120 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
121 if (!dc) return 0;
122 MF_MetaParam1(dc, META_SETMAPMODE, mode);
123 return 1;
126 dprintf_gdi(stddeb, "SetMapMode: %04x %d\n", hdc, mode );
128 prevMode = dc->w.MapMode;
129 switch(mode)
131 case MM_TEXT:
132 dc->w.WndOrgX = dc->w.WndOrgY = 0;
133 dc->w.VportOrgX = dc->w.VportOrgY = 0;
134 dc->w.WndExtX = 1;
135 dc->w.WndExtY = 1;
136 dc->w.VportExtX = 1;
137 dc->w.VportExtY = 1;
138 break;
140 case MM_LOMETRIC:
141 case MM_ISOTROPIC:
142 dc->w.WndOrgX = dc->w.WndOrgY = 0;
143 dc->w.VportOrgX = dc->w.VportOrgY = 0;
144 dc->w.WndExtX = dc->w.devCaps->horzSize;
145 dc->w.WndExtY = dc->w.devCaps->vertSize;
146 dc->w.VportExtX = dc->w.devCaps->horzRes / 10;
147 dc->w.VportExtY = dc->w.devCaps->vertRes / -10;
148 break;
150 case MM_HIMETRIC:
151 dc->w.WndOrgX = dc->w.WndOrgY = 0;
152 dc->w.VportOrgX = dc->w.VportOrgY = 0;
153 dc->w.WndExtX = dc->w.devCaps->horzSize * 10;
154 dc->w.WndExtY = dc->w.devCaps->vertSize * 10;
155 dc->w.VportExtX = dc->w.devCaps->horzRes / 10;
156 dc->w.VportExtY = dc->w.devCaps->vertRes / -10;
157 break;
159 case MM_LOENGLISH:
160 dc->w.WndOrgX = dc->w.WndOrgY = 0;
161 dc->w.VportOrgX = dc->w.VportOrgY = 0;
162 dc->w.WndExtX = dc->w.devCaps->horzSize;
163 dc->w.WndExtY = dc->w.devCaps->vertSize;
164 dc->w.VportExtX = (short)(254L * dc->w.devCaps->horzRes / 1000);
165 dc->w.VportExtY = (short)(-254L * dc->w.devCaps->vertRes / 1000);
166 break;
168 case MM_HIENGLISH:
169 dc->w.WndOrgX = dc->w.WndOrgY = 0;
170 dc->w.VportOrgX = dc->w.VportOrgY = 0;
171 dc->w.WndExtX = dc->w.devCaps->horzSize * 10;
172 dc->w.WndExtY = dc->w.devCaps->vertSize * 10;
173 dc->w.VportExtX = (short)(254L * dc->w.devCaps->horzRes / 1000);
174 dc->w.VportExtY = (short)(-254L * dc->w.devCaps->vertRes / 1000);
175 break;
177 case MM_TWIPS:
178 dc->w.WndOrgX = dc->w.WndOrgY = 0;
179 dc->w.VportOrgX = dc->w.VportOrgY = 0;
180 dc->w.WndExtX = (short)(144L * dc->w.devCaps->horzSize / 10);
181 dc->w.WndExtY = (short)(144L * dc->w.devCaps->vertSize / 10);
182 dc->w.VportExtX = (short)(254L * dc->w.devCaps->horzRes / 1000);
183 dc->w.VportExtY = (short)(-254L * dc->w.devCaps->vertRes / 1000);
184 break;
186 case MM_ANISOTROPIC:
187 break;
189 default:
190 return prevMode;
192 dc->w.MapMode = mode;
193 return prevMode;
197 /***********************************************************************
198 * SetViewportExt (GDI.14)
200 DWORD SetViewportExt( HDC16 hdc, INT16 x, INT16 y )
202 SIZE16 size;
203 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
204 if (!dc)
206 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
207 if (!dc) return FALSE;
208 MF_MetaParam2(dc, META_SETVIEWPORTEXT, x, y);
209 return 0;
212 size.cx = dc->w.VportExtX;
213 size.cy = dc->w.VportExtY;
214 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
215 return MAKELONG( size.cx, size.cy );
216 if (!x || !y) return 0;
217 dc->w.VportExtX = x;
218 dc->w.VportExtY = y;
219 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
220 return MAKELONG( size.cx, size.cy );
224 /***********************************************************************
225 * SetViewportExtEx16 (GDI.479)
227 BOOL16 SetViewportExtEx16( HDC16 hdc, INT16 x, INT16 y, LPSIZE16 size )
229 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
230 if (!dc) return FALSE;
231 if (size)
233 size->cx = dc->w.VportExtX;
234 size->cy = dc->w.VportExtY;
236 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
237 return TRUE;
238 if (!x || !y) return FALSE;
239 dc->w.VportExtX = x;
240 dc->w.VportExtY = y;
241 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
242 return TRUE;
246 /***********************************************************************
247 * SetViewportExtEx32 (GDI32.340)
249 BOOL32 SetViewportExtEx32( HDC32 hdc, INT32 x, INT32 y, LPSIZE32 size )
251 SIZE16 size16;
252 BOOL16 ret = SetViewportExtEx16( (HDC16)hdc, (INT16)x, (INT16)y, &size16 );
253 if (size) CONV_SIZE16TO32( &size16, size );
254 return ret;
258 /***********************************************************************
259 * SetViewportOrg (GDI.13)
261 DWORD SetViewportOrg( HDC16 hdc, INT16 x, INT16 y )
263 POINT16 pt;
264 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
265 if (!dc)
267 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
268 if (!dc) return FALSE;
269 MF_MetaParam2(dc, META_SETVIEWPORTORG, x, y);
270 return 0;
273 pt.x = dc->w.VportOrgX;
274 pt.y = dc->w.VportOrgY;
275 dc->w.VportOrgX = x;
276 dc->w.VportOrgY = y;
277 return pt.x | (pt.y << 16);
281 /***********************************************************************
282 * SetViewportOrgEx16 (GDI.480)
284 BOOL16 SetViewportOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt )
286 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
287 if (!dc) return FALSE;
288 if (pt)
290 pt->x = dc->w.VportOrgX;
291 pt->y = dc->w.VportOrgY;
293 dc->w.VportOrgX = x;
294 dc->w.VportOrgY = y;
295 return TRUE;
299 /***********************************************************************
300 * SetViewportOrgEx32 (GDI32.341)
302 BOOL32 SetViewportOrgEx32( HDC32 hdc, INT32 x, INT32 y, LPPOINT32 pt )
304 POINT16 pt16;
305 BOOL16 ret = SetViewportOrgEx16( (HDC16)hdc, (INT16)x, (INT16)y, &pt16 );
306 if (pt) CONV_POINT16TO32( &pt16, pt );
307 return ret;
311 /***********************************************************************
312 * SetWindowExt (GDI.12)
314 DWORD SetWindowExt( HDC16 hdc, INT16 x, INT16 y )
316 SIZE16 size;
317 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
318 if (!dc)
320 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
321 if (!dc) return FALSE;
322 MF_MetaParam2(dc, META_SETWINDOWEXT, x, y);
323 return 0;
326 size.cx = dc->w.WndExtX;
327 size.cy = dc->w.WndExtY;
328 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
329 return MAKELONG( size.cx, size.cy );
330 if (!x || !y) return 0;
331 dc->w.WndExtX = x;
332 dc->w.WndExtY = y;
333 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
334 return MAKELONG( size.cx, size.cy );
338 /***********************************************************************
339 * SetWindowExtEx16 (GDI.481)
341 BOOL16 SetWindowExtEx16( HDC16 hdc, INT16 x, INT16 y, LPSIZE16 size )
343 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
344 if (!dc) return FALSE;
345 if (size)
347 size->cx = dc->w.WndExtX;
348 size->cy = dc->w.WndExtY;
350 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
351 return TRUE;
352 if (!x || !y) return FALSE;
353 dc->w.WndExtX = x;
354 dc->w.WndExtY = y;
355 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
356 return TRUE;
360 /***********************************************************************
361 * SetWindowExtEx32 (GDI32.344)
363 BOOL32 SetWindowExtEx32( HDC32 hdc, INT32 x, INT32 y, LPSIZE32 size )
365 SIZE16 size16;
366 BOOL16 ret = SetWindowExtEx16( (HDC16)hdc, (INT16)x, (INT16)y, &size16 );
367 if (size) CONV_SIZE16TO32( &size16, size );
368 return ret;
372 /***********************************************************************
373 * SetWindowOrg (GDI.11)
375 DWORD SetWindowOrg( HDC16 hdc, INT16 x, INT16 y )
377 POINT16 pt;
378 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
379 if (!dc)
381 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
382 if (!dc) return FALSE;
383 MF_MetaParam2(dc, META_SETWINDOWORG, x, y);
384 return 0;
387 pt.x = dc->w.WndOrgX;
388 pt.y = dc->w.WndOrgY;
389 dc->w.WndOrgX = x;
390 dc->w.WndOrgY = y;
391 return MAKELONG( pt.x, pt.y );
395 /***********************************************************************
396 * SetWindowOrgEx16 (GDI.482)
398 BOOL16 SetWindowOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt )
400 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
401 if (!dc) return FALSE;
402 if (pt)
404 pt->x = dc->w.WndOrgX;
405 pt->y = dc->w.WndOrgY;
407 dc->w.WndOrgX = x;
408 dc->w.WndOrgY = y;
409 return TRUE;
413 /***********************************************************************
414 * SetWindowOrgEx32 (GDI32.345)
416 BOOL32 SetWindowOrgEx32( HDC32 hdc, INT32 x, INT32 y, LPPOINT32 pt )
418 POINT16 pt16;
419 BOOL16 ret = SetWindowOrgEx16( (HDC16)hdc, (INT16)x, (INT16)y, &pt16 );
420 if (pt) CONV_POINT16TO32( &pt16, pt );
421 return ret;
425 /***********************************************************************
426 * OffsetViewportOrg (GDI.17)
428 DWORD OffsetViewportOrg( HDC16 hdc, INT16 x, INT16 y )
430 POINT16 pt;
431 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
432 if (!dc)
434 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
435 if (!dc) return FALSE;
436 MF_MetaParam2(dc, META_OFFSETVIEWPORTORG, x, y);
437 return 0;
440 pt.x = dc->w.VportOrgX;
441 pt.y = dc->w.VportOrgY;
442 dc->w.VportOrgX += x;
443 dc->w.VportOrgY += y;
444 return pt.x | (pt.y << 16);
448 /***********************************************************************
449 * OffsetViewportOrgEx16 (GDI.476)
451 BOOL16 OffsetViewportOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt )
453 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
454 if (!dc) return FALSE;
455 if (pt)
457 pt->x = dc->w.VportOrgX;
458 pt->y = dc->w.VportOrgY;
460 dc->w.VportOrgX += x;
461 dc->w.VportOrgY += y;
462 return TRUE;
466 /***********************************************************************
467 * OffsetViewportOrgEx32 (GDI32.257)
469 BOOL32 OffsetViewportOrgEx32( HDC32 hdc, INT32 x, INT32 y, LPPOINT32 pt )
471 POINT16 pt16;
472 BOOL16 ret = OffsetViewportOrgEx16( (HDC16)hdc, (INT16)x, (INT16)y, &pt16);
473 if (pt) CONV_POINT16TO32( &pt16, pt );
474 return ret;
478 /***********************************************************************
479 * OffsetWindowOrg (GDI.15)
481 DWORD OffsetWindowOrg( HDC16 hdc, INT16 x, INT16 y )
483 POINT16 pt;
484 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
485 if (!dc)
487 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
488 if (!dc) return FALSE;
489 MF_MetaParam2(dc, META_OFFSETWINDOWORG, x, y);
490 return 0;
493 pt.x = dc->w.WndOrgX;
494 pt.y = dc->w.WndOrgY;
495 dc->w.WndOrgX += x;
496 dc->w.WndOrgY += y;
497 return pt.x | (pt.y << 16);
501 /***********************************************************************
502 * OffsetWindowOrgEx16 (GDI.477)
504 BOOL16 OffsetWindowOrgEx16( HDC16 hdc, INT16 x, INT16 y, LPPOINT16 pt )
506 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
507 if (!dc) return FALSE;
508 if (pt)
510 pt->x = dc->w.WndOrgX;
511 pt->y = dc->w.WndOrgY;
513 dc->w.WndOrgX += x;
514 dc->w.WndOrgY += y;
515 return TRUE;
519 /***********************************************************************
520 * OffsetWindowOrgEx32 (GDI32.258)
522 BOOL32 OffsetWindowOrgEx32( HDC32 hdc, INT32 x, INT32 y, LPPOINT32 pt )
524 POINT16 pt16;
525 BOOL16 ret = OffsetWindowOrgEx16( (HDC16)hdc, (INT16)x, (INT16)y, &pt16 );
526 if (pt) CONV_POINT16TO32( &pt16, pt );
527 return ret;
531 /***********************************************************************
532 * ScaleViewportExt (GDI.18)
534 DWORD ScaleViewportExt( HDC16 hdc, INT16 xNum, INT16 xDenom,
535 INT16 yNum, INT16 yDenom )
537 SIZE16 size;
538 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
539 if (!dc)
541 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
542 if (!dc) return FALSE;
543 MF_MetaParam4(dc, META_SCALEVIEWPORTEXT, xNum, xDenom, yNum, yDenom);
544 return 0;
547 size.cx = dc->w.VportExtX;
548 size.cy = dc->w.VportExtY;
549 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
550 return size.cx | (size.cy << 16);
551 if (!xNum || !xDenom || !xNum || !yDenom) return 0;
552 dc->w.VportExtX = (dc->w.VportExtX * xNum) / xDenom;
553 dc->w.VportExtY = (dc->w.VportExtY * yNum) / yDenom;
554 if (dc->w.VportExtX == 0) dc->w.VportExtX = 1;
555 if (dc->w.VportExtY == 0) dc->w.VportExtY = 1;
556 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
557 return size.cx | (size.cy << 16);
561 /***********************************************************************
562 * ScaleViewportExtEx16 (GDI.484)
564 BOOL16 ScaleViewportExtEx16( HDC16 hdc, INT16 xNum, INT16 xDenom,
565 INT16 yNum, INT16 yDenom, LPSIZE16 size )
567 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
568 if (!dc) return FALSE;
569 if (size)
571 size->cx = dc->w.VportExtX;
572 size->cy = dc->w.VportExtY;
574 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
575 return TRUE;
576 if (!xNum || !xDenom || !xNum || !yDenom) return FALSE;
577 dc->w.VportExtX = (dc->w.VportExtX * xNum) / xDenom;
578 dc->w.VportExtY = (dc->w.VportExtY * yNum) / yDenom;
579 if (dc->w.VportExtX == 0) dc->w.VportExtX = 1;
580 if (dc->w.VportExtY == 0) dc->w.VportExtY = 1;
581 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
582 return TRUE;
586 /***********************************************************************
587 * ScaleViewportExtEx32 (GDI32.293)
589 BOOL32 ScaleViewportExtEx32( HDC32 hdc, INT32 xNum, INT32 xDenom,
590 INT32 yNum, INT32 yDenom, LPSIZE32 size )
592 SIZE16 size16;
593 BOOL16 ret = ScaleViewportExtEx16( (HDC16)hdc, (INT16)xNum, (INT16)xDenom,
594 (INT16)yNum, (INT16)yDenom, &size16 );
595 if (size) CONV_SIZE16TO32( &size16, size );
596 return ret;
600 /***********************************************************************
601 * ScaleWindowExt (GDI.16)
603 DWORD ScaleWindowExt( HDC16 hdc, INT16 xNum, INT16 xDenom,
604 INT16 yNum, INT16 yDenom )
606 SIZE16 size;
607 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
608 if (!dc)
610 dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
611 if (!dc) return FALSE;
612 MF_MetaParam4(dc, META_SCALEWINDOWEXT, xNum, xDenom, yNum, yDenom);
613 return 0;
616 size.cx = dc->w.WndExtX;
617 size.cy = dc->w.WndExtY;
618 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
619 return size.cx | (size.cy << 16);
620 if (!xNum || !xDenom || !xNum || !yDenom) return FALSE;
621 dc->w.WndExtX = (dc->w.WndExtX * xNum) / xDenom;
622 dc->w.WndExtY = (dc->w.WndExtY * yNum) / yDenom;
623 if (dc->w.WndExtX == 0) dc->w.WndExtX = 1;
624 if (dc->w.WndExtY == 0) dc->w.WndExtY = 1;
625 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
626 return size.cx | (size.cy << 16);
630 /***********************************************************************
631 * ScaleWindowExtEx16 (GDI.485)
633 BOOL16 ScaleWindowExtEx16( HDC16 hdc, INT16 xNum, INT16 xDenom,
634 INT16 yNum, INT16 yDenom, LPSIZE16 size )
636 DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
637 if (!dc) return FALSE;
638 if (size)
640 size->cx = dc->w.WndExtX;
641 size->cy = dc->w.WndExtY;
643 if ((dc->w.MapMode != MM_ISOTROPIC) && (dc->w.MapMode != MM_ANISOTROPIC))
644 return TRUE;
645 if (!xNum || !xDenom || !xNum || !yDenom) return FALSE;
646 dc->w.WndExtX = (dc->w.WndExtX * xNum) / xDenom;
647 dc->w.WndExtY = (dc->w.WndExtY * yNum) / yDenom;
648 if (dc->w.WndExtX == 0) dc->w.WndExtX = 1;
649 if (dc->w.WndExtY == 0) dc->w.WndExtY = 1;
650 if (dc->w.MapMode == MM_ISOTROPIC) MAPPING_FixIsotropic( dc );
651 return TRUE;
655 /***********************************************************************
656 * ScaleWindowExtEx32 (GDI32.294)
658 BOOL32 ScaleWindowExtEx32( HDC32 hdc, INT32 xNum, INT32 xDenom,
659 INT32 yNum, INT32 yDenom, LPSIZE32 size )
661 SIZE16 size16;
662 BOOL16 ret = ScaleWindowExtEx16( (HDC16)hdc, (INT16)xNum, (INT16)xDenom,
663 (INT16)yNum, (INT16)yDenom, &size16 );
664 if (size) CONV_SIZE16TO32( &size16, size );
665 return ret;