Commit | Line | Data |
---|---|---|
a09e091a JB |
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 |