Imported Upstream version 1.15.1
[deb_xorg-server.git] / hw / xwin / wingc.c
1 /*
2 *Copyright (C) 2001-2004 Harold L Hunt II All Rights Reserved.
3 *
4 *Permission is hereby granted, free of charge, to any person obtaining
5 * a copy of this software and associated documentation files (the
6 *"Software"), to deal in the Software without restriction, including
7 *without limitation the rights to use, copy, modify, merge, publish,
8 *distribute, sublicense, and/or sell copies of the Software, and to
9 *permit persons to whom the Software is furnished to do so, subject to
10 *the following conditions:
11 *
12 *The above copyright notice and this permission notice shall be
13 *included in all copies or substantial portions of the Software.
14 *
15 *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 *EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 *MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 *NONINFRINGEMENT. IN NO EVENT SHALL HAROLD L HUNT II BE LIABLE FOR
19 *ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
20 *CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 *WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 *
23 *Except as contained in this notice, the name of Harold L Hunt II
24 *shall not be used in advertising or otherwise to promote the sale, use
25 *or other dealings in this Software without prior written authorization
26 *from Harold L Hunt II.
27 *
28 * Authors: Harold L Hunt II
29 */
30
31 #ifdef HAVE_XWIN_CONFIG_H
32 #include <xwin-config.h>
33 #endif
34 #include "win.h"
35
36 /*
37 * Local prototypes
38 */
39
40 #if 0
41 static void
42 winChangeGCNativeGDI(GCPtr pGC, unsigned long ulChanges);
43 #endif
44
45 static void
46
47 winValidateGCNativeGDI(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable);
48
49 #if 0
50 static void
51 winCopyGCNativeGDI(GCPtr pGCsrc, unsigned long ulMask, GCPtr pGCdst);
52 #endif
53
54 static void
55 winDestroyGCNativeGDI(GCPtr pGC);
56
57 #if 0
58 static void
59 winChangeClipNativeGDI(GCPtr pGC, int nType, pointer pValue, int nRects);
60
61 static void
62 winDestroyClipNativeGDI(GCPtr pGC);
63
64 static void
65 winCopyClipNativeGDI(GCPtr pGCdst, GCPtr pGCsrc);
66 #endif
67
68 #if 0
69 /* GC Handling Routines */
70 const GCFuncs winGCFuncs = {
71 winValidateGCNativeGDI,
72 winChangeGCNativeGDI,
73 winCopyGCNativeGDI,
74 winDestroyGCNativeGDI,
75 winChangeClipNativeGDI,
76 winDestroyClipNativeGDI,
77 winCopyClipNativeGDI,
78 };
79 #else
80 const GCFuncs winGCFuncs = {
81 winValidateGCNativeGDI,
82 miChangeGC,
83 miCopyGC,
84 winDestroyGCNativeGDI,
85 miChangeClip,
86 miDestroyClip,
87 miCopyClip,
88 };
89 #endif
90
91 /* Drawing Primitives */
92 const GCOps winGCOps = {
93 winFillSpansNativeGDI,
94 winSetSpansNativeGDI,
95 miPutImage,
96 miCopyArea,
97 miCopyPlane,
98 miPolyPoint,
99 winPolyLineNativeGDI,
100 miPolySegment,
101 miPolyRectangle,
102 miPolyArc,
103 miFillPolygon,
104 miPolyFillRect,
105 miPolyFillArc,
106 miPolyText8,
107 miPolyText16,
108 miImageText8,
109 miImageText16,
110 #if 0
111 winImageGlyphBltNativeGDI,
112 winPolyGlyphBltNativeGDI,
113 #else
114 miImageGlyphBlt,
115 miPolyGlyphBlt,
116 #endif
117 miPushPixels,
118 };
119
120 /* See Porting Layer Definition - p. 45 */
121 /* See mfb/mfbgc.c - mfbCreateGC() */
122 /* See Strategies for Porting - pp. 15, 16 */
123 Bool
124 winCreateGCNativeGDI(GCPtr pGC)
125 {
126 winPrivGCPtr pGCPriv = NULL;
127 winPrivScreenPtr pScreenPriv = NULL;
128
129 #if 0
130 ErrorF("winCreateGCNativeGDI - depth: %d\n", pGC->depth);
131 #endif
132
133 pGC->ops = (GCOps *) &winGCOps;
134 pGC->funcs = (GCFuncs *) &winGCFuncs;
135
136 /* We want all coordinates passed to spans functions to be screen relative */
137 pGC->miTranslate = TRUE;
138
139 /* Allocate privates for this GC */
140 pGCPriv = winGetGCPriv(pGC);
141 if (pGCPriv == NULL) {
142 ErrorF("winCreateGCNativeGDI () - Privates pointer was NULL\n");
143 return FALSE;
144 }
145
146 /* Create a new screen DC for the display window */
147 pScreenPriv = winGetScreenPriv(pGC->pScreen);
148 pGCPriv->hdc = GetDC(pScreenPriv->hwndScreen);
149
150 /* Allocate a memory DC for the GC */
151 pGCPriv->hdcMem = CreateCompatibleDC(pGCPriv->hdc);
152
153 return TRUE;
154 }
155
156 #if 0
157 /* See Porting Layer Definition - p. 45 */
158 static void
159 winChangeGCNativeGDI(GCPtr pGC, unsigned long ulChanges)
160 {
161 #if 0
162 ErrorF("winChangeGCNativeGDI () - Doing nothing\n");
163 #endif
164 }
165 #endif
166
167 static void
168 winValidateGCNativeGDI(GCPtr pGC,
169 unsigned long ulChanges, DrawablePtr pDrawable)
170 {
171 if ((ulChanges &
172 (GCClipXOrigin | GCClipYOrigin | GCClipMask | GCSubwindowMode))
173 || (pDrawable->serialNumber !=
174 (pGC->serialNumber & DRAWABLE_SERIAL_BITS))) {
175 miComputeCompositeClip(pGC, pDrawable);
176 }
177 }
178
179 #if 0
180 /* See Porting Layer Definition - p. 46 */
181 static void
182 winCopyGCNativeGDI(GCPtr pGCsrc, unsigned long ulMask, GCPtr pGCdst)
183 {
184
185 }
186 #endif
187
188 /* See Porting Layer Definition - p. 46 */
189 static void
190 winDestroyGCNativeGDI(GCPtr pGC)
191 {
192 winGCPriv(pGC);
193 winScreenPriv(pGC->pScreen);
194
195 if (pGC->freeCompClip)
196 RegionDestroy(pGC->pCompositeClip);
197
198 /* Free the memory DC */
199 if (pGCPriv->hdcMem != NULL) {
200 DeleteDC(pGCPriv->hdcMem);
201 pGCPriv->hdcMem = NULL;
202 }
203
204 /* Release the screen DC for the display window */
205 if (pGCPriv->hdc != NULL) {
206 ReleaseDC(pScreenPriv->hwndScreen, pGCPriv->hdc);
207 pGCPriv->hdc = NULL;
208 }
209
210 /* Invalidate the GC privates pointer */
211 winSetGCPriv(pGC, NULL);
212 }
213
214 #if 0
215 /* See Porting Layer Definition - p. 46 */
216 static void
217 winChangeClipNativeGDI(GCPtr pGC, int nType, pointer pValue, int nRects)
218 {
219
220 }
221
222 /* See Porting Layer Definition - p. 47 */
223 static void
224 winDestroyClipNativeGDI(GCPtr pGC)
225 {
226
227 }
228
229 /* See Porting Layer Definition - p. 47 */
230 static void
231 winCopyClipNativeGDI(GCPtr pGCdst, GCPtr pGCsrc)
232 {
233
234 }
235 #endif