Imported Upstream version 1.15.1
[deb_xorg-server.git] / hw / xwin / wingc.c
CommitLineData
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
41static void
42 winChangeGCNativeGDI(GCPtr pGC, unsigned long ulChanges);
43#endif
44
45static void
46
47winValidateGCNativeGDI(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable);
48
49#if 0
50static void
51 winCopyGCNativeGDI(GCPtr pGCsrc, unsigned long ulMask, GCPtr pGCdst);
52#endif
53
54static void
55 winDestroyGCNativeGDI(GCPtr pGC);
56
57#if 0
58static void
59 winChangeClipNativeGDI(GCPtr pGC, int nType, pointer pValue, int nRects);
60
61static void
62 winDestroyClipNativeGDI(GCPtr pGC);
63
64static void
65 winCopyClipNativeGDI(GCPtr pGCdst, GCPtr pGCsrc);
66#endif
67
68#if 0
69/* GC Handling Routines */
70const GCFuncs winGCFuncs = {
71 winValidateGCNativeGDI,
72 winChangeGCNativeGDI,
73 winCopyGCNativeGDI,
74 winDestroyGCNativeGDI,
75 winChangeClipNativeGDI,
76 winDestroyClipNativeGDI,
77 winCopyClipNativeGDI,
78};
79#else
80const GCFuncs winGCFuncs = {
81 winValidateGCNativeGDI,
82 miChangeGC,
83 miCopyGC,
84 winDestroyGCNativeGDI,
85 miChangeClip,
86 miDestroyClip,
87 miCopyClip,
88};
89#endif
90
91/* Drawing Primitives */
92const 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 */
123Bool
124winCreateGCNativeGDI(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 */
158static void
159winChangeGCNativeGDI(GCPtr pGC, unsigned long ulChanges)
160{
161#if 0
162 ErrorF("winChangeGCNativeGDI () - Doing nothing\n");
163#endif
164}
165#endif
166
167static void
168winValidateGCNativeGDI(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 */
181static void
182winCopyGCNativeGDI(GCPtr pGCsrc, unsigned long ulMask, GCPtr pGCdst)
183{
184
185}
186#endif
187
188/* See Porting Layer Definition - p. 46 */
189static void
190winDestroyGCNativeGDI(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 */
216static void
217winChangeClipNativeGDI(GCPtr pGC, int nType, pointer pValue, int nRects)
218{
219
220}
221
222/* See Porting Layer Definition - p. 47 */
223static void
224winDestroyClipNativeGDI(GCPtr pGC)
225{
226
227}
228
229/* See Porting Layer Definition - p. 47 */
230static void
231winCopyClipNativeGDI(GCPtr pGCdst, GCPtr pGCsrc)
232{
233
234}
235#endif