wined3d: Add missing GL locking to ffp_blit_set() and ffp_blit_unset().
[wine] / dlls / gdi32 / enhmfdrv / mapping.c
1 /*
2  * Enhanced MetaFile driver mapping functions
3  *
4  * Copyright 1999 Huw D M Davies
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 "enhmfdrv/enhmetafiledrv.h"
22
23 INT CDECL EMFDRV_SetMapMode( PHYSDEV dev, INT mode )
24 {
25     EMRSETMAPMODE emr;
26     emr.emr.iType = EMR_SETMAPMODE;
27     emr.emr.nSize = sizeof(emr);
28     emr.iMode = mode;
29
30     return EMFDRV_WriteRecord( dev, &emr.emr );
31 }
32
33 INT CDECL EMFDRV_SetViewportExt( PHYSDEV dev, INT cx, INT cy )
34 {
35     EMRSETVIEWPORTEXTEX emr;
36
37     emr.emr.iType = EMR_SETVIEWPORTEXTEX;
38     emr.emr.nSize = sizeof(emr);
39     emr.szlExtent.cx = cx;
40     emr.szlExtent.cy = cy;
41
42     return EMFDRV_WriteRecord( dev, &emr.emr );
43 }
44
45 INT CDECL EMFDRV_SetWindowExt( PHYSDEV dev, INT cx, INT cy )
46 {
47     EMRSETWINDOWEXTEX emr;
48
49     emr.emr.iType = EMR_SETWINDOWEXTEX;
50     emr.emr.nSize = sizeof(emr);
51     emr.szlExtent.cx = cx;
52     emr.szlExtent.cy = cy;
53
54     return EMFDRV_WriteRecord( dev, &emr.emr );
55 }
56
57 INT CDECL EMFDRV_SetViewportOrg( PHYSDEV dev, INT x, INT y )
58 {
59     EMRSETVIEWPORTORGEX emr;
60
61     emr.emr.iType = EMR_SETVIEWPORTORGEX;
62     emr.emr.nSize = sizeof(emr);
63     emr.ptlOrigin.x = x;
64     emr.ptlOrigin.y = y;
65
66     return EMFDRV_WriteRecord( dev, &emr.emr );
67 }
68
69 INT CDECL EMFDRV_SetWindowOrg( PHYSDEV dev, INT x, INT y )
70 {
71     EMRSETWINDOWORGEX emr;
72
73     emr.emr.iType = EMR_SETWINDOWORGEX;
74     emr.emr.nSize = sizeof(emr);
75     emr.ptlOrigin.x = x;
76     emr.ptlOrigin.y = y;
77
78     return EMFDRV_WriteRecord( dev, &emr.emr );
79 }
80
81 INT CDECL EMFDRV_ScaleViewportExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
82                                    INT yDenom )
83 {
84     EMRSCALEVIEWPORTEXTEX emr;
85
86     emr.emr.iType = EMR_SCALEVIEWPORTEXTEX;
87     emr.emr.nSize = sizeof(emr);
88     emr.xNum      = xNum;
89     emr.xDenom    = xDenom;
90     emr.yNum      = yNum;
91     emr.yDenom    = yDenom;
92
93     return EMFDRV_WriteRecord( dev, &emr.emr );
94 }
95
96 INT CDECL EMFDRV_ScaleWindowExt( PHYSDEV dev, INT xNum, INT xDenom, INT yNum,
97                                  INT yDenom )
98 {
99     EMRSCALEWINDOWEXTEX emr;
100
101     emr.emr.iType = EMR_SCALEWINDOWEXTEX;
102     emr.emr.nSize = sizeof(emr);
103     emr.xNum      = xNum;
104     emr.xDenom    = xDenom;
105     emr.yNum      = yNum;
106     emr.yDenom    = yDenom;
107
108     return EMFDRV_WriteRecord( dev, &emr.emr );
109 }
110
111 BOOL CDECL EMFDRV_SetWorldTransform( PHYSDEV dev, const XFORM *xform)
112 {
113     EMRSETWORLDTRANSFORM emr;
114
115     emr.emr.iType = EMR_SETWORLDTRANSFORM;
116     emr.emr.nSize = sizeof(emr);
117     emr.xform = *xform;
118
119     return EMFDRV_WriteRecord( dev, &emr.emr );
120 }
121
122 BOOL CDECL EMFDRV_ModifyWorldTransform( PHYSDEV dev, const XFORM *xform, INT mode)
123 {
124     EMRMODIFYWORLDTRANSFORM emr;
125
126     emr.emr.iType = EMR_MODIFYWORLDTRANSFORM;
127     emr.emr.nSize = sizeof(emr);
128     emr.xform = *xform;
129     emr.iMode = mode;
130
131     return EMFDRV_WriteRecord( dev, &emr.emr );
132 }
133
134 INT CDECL EMFDRV_OffsetViewportOrg( PHYSDEV dev, INT x, INT y )
135 {
136     POINT pt;
137     EMRSETVIEWPORTORGEX emr;
138     EMFDRV_PDEVICE* physDev = (EMFDRV_PDEVICE*)dev;
139
140     GetViewportOrgEx(physDev->hdc, &pt);
141
142     emr.emr.iType = EMR_SETVIEWPORTORGEX;
143     emr.emr.nSize = sizeof(emr);
144     emr.ptlOrigin.x = pt.x + x;
145     emr.ptlOrigin.y = pt.y + y;
146
147     return EMFDRV_WriteRecord( dev, &emr.emr );
148 }
149
150 INT CDECL EMFDRV_OffsetWindowOrg( PHYSDEV dev, INT x, INT y )
151 {
152     POINT pt;
153     EMRSETWINDOWORGEX emr;
154     EMFDRV_PDEVICE* physDev = (EMFDRV_PDEVICE*)dev;
155
156     GetWindowOrgEx(physDev->hdc, &pt);
157
158     emr.emr.iType = EMR_SETWINDOWORGEX;
159     emr.emr.nSize = sizeof(emr);
160     emr.ptlOrigin.x = pt.x + x;
161     emr.ptlOrigin.y = pt.y + y;
162
163     return EMFDRV_WriteRecord( dev, &emr.emr );
164 }