First import
[xorg_rtime.git] / xorg-server-1.4 / hw / xwin / wingc.c
blob107d87aef473cf642e8549796a808e82b8074281
1 /*
2 *Copyright (C) 2001-2004 Harold L Hunt II All Rights Reserved.
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:
12 *The above copyright notice and this permission notice shall be
13 *included in all copies or substantial portions of the Software.
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.
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.
28 * Authors: Harold L Hunt II
31 #ifdef HAVE_XWIN_CONFIG_H
32 #include <xwin-config.h>
33 #endif
34 #include "win.h"
36 void
37 winPushPixels (GCPtr pGC, PixmapPtr pBitMap, DrawablePtr pDrawable, int dx, int dy, int xOrg, int yOrg);
41 * Local prototypes
44 #if 0
45 static void
46 winChangeGCNativeGDI (GCPtr pGC, unsigned long ulChanges);
47 #endif
49 static void
50 winValidateGCNativeGDI (GCPtr pGC,
51 unsigned long changes,
52 DrawablePtr pDrawable);
54 #if 0
55 static void
56 winCopyGCNativeGDI (GCPtr pGCsrc, unsigned long ulMask, GCPtr pGCdst);
57 #endif
59 static void
60 winDestroyGCNativeGDI (GCPtr pGC);
62 #if 0
63 static void
64 winChangeClipNativeGDI (GCPtr pGC, int nType, pointer pValue, int nRects);
66 static void
67 winDestroyClipNativeGDI (GCPtr pGC);
69 static void
70 winCopyClipNativeGDI (GCPtr pGCdst, GCPtr pGCsrc);
71 #endif
73 #if 0
74 /* GC Handling Routines */
75 const GCFuncs winGCFuncs = {
76 winValidateGCNativeGDI,
77 winChangeGCNativeGDI,
78 winCopyGCNativeGDI,
79 winDestroyGCNativeGDI,
80 winChangeClipNativeGDI,
81 winDestroyClipNativeGDI,
82 winCopyClipNativeGDI,
84 #else
85 const GCFuncs winGCFuncs = {
86 winValidateGCNativeGDI,
87 miChangeGC,
88 miCopyGC,
89 winDestroyGCNativeGDI,
90 miChangeClip,
91 miDestroyClip,
92 miCopyClip,
94 #endif
96 /* Drawing Primitives */
97 const GCOps winGCOps = {
98 winFillSpansNativeGDI,
99 winSetSpansNativeGDI,
100 miPutImage,
101 miCopyArea,
102 miCopyPlane,
103 miPolyPoint,
104 winPolyLineNativeGDI,
105 miPolySegment,
106 miPolyRectangle,
107 miPolyArc,
108 miFillPolygon,
109 miPolyFillRect,
110 miPolyFillArc,
111 miPolyText8,
112 miPolyText16,
113 miImageText8,
114 miImageText16,
115 #if 0
116 winImageGlyphBltNativeGDI,
117 winPolyGlyphBltNativeGDI,
118 #else
119 miImageGlyphBlt,
120 miPolyGlyphBlt,
121 #endif
122 winPushPixels
126 /* See Porting Layer Definition - p. 45 */
127 /* See mfb/mfbgc.c - mfbCreateGC() */
128 /* See Strategies for Porting - pp. 15, 16 */
129 Bool
130 winCreateGCNativeGDI (GCPtr pGC)
132 winPrivGCPtr pGCPriv = NULL;
133 winPrivScreenPtr pScreenPriv = NULL;
135 #if 0
136 ErrorF ("winCreateGCNativeGDI - depth: %d\n",
137 pGC->depth);
138 #endif
140 pGC->clientClip = NULL;
141 pGC->clientClipType = CT_NONE;
142 pGC->freeCompClip = FALSE;
143 pGC->pCompositeClip = 0;
145 pGC->ops = (GCOps *) &winGCOps;
146 pGC->funcs = (GCFuncs *) &winGCFuncs;
148 /* We want all coordinates passed to spans functions to be screen relative */
149 pGC->miTranslate = TRUE;
151 /* Allocate privates for this GC */
152 pGCPriv = winGetGCPriv (pGC);
153 if (pGCPriv == NULL)
155 ErrorF ("winCreateGCNativeGDI () - Privates pointer was NULL\n");
156 return FALSE;
159 /* Create a new screen DC for the display window */
160 pScreenPriv = winGetScreenPriv (pGC->pScreen);
161 pGCPriv->hdc = GetDC (pScreenPriv->hwndScreen);
163 /* Allocate a memory DC for the GC */
164 pGCPriv->hdcMem = CreateCompatibleDC (pGCPriv->hdc);
166 return TRUE;
170 #if 0
171 /* See Porting Layer Definition - p. 45 */
172 static void
173 winChangeGCNativeGDI (GCPtr pGC, unsigned long ulChanges)
175 #if 0
176 ErrorF ("winChangeGCNativeGDI () - Doing nothing\n");
177 #endif
179 #endif
182 static void
183 winValidateGCNativeGDI (GCPtr pGC,
184 unsigned long ulChanges,
185 DrawablePtr pDrawable)
187 if ((ulChanges & (GCClipXOrigin | GCClipYOrigin | GCClipMask | GCSubwindowMode))
188 || (pDrawable->serialNumber != (pGC->serialNumber & DRAWABLE_SERIAL_BITS)))
190 miComputeCompositeClip (pGC, pDrawable);
195 #if 0
196 /* See Porting Layer Definition - p. 46 */
197 static void
198 winCopyGCNativeGDI (GCPtr pGCsrc, unsigned long ulMask, GCPtr pGCdst)
202 #endif
205 /* See Porting Layer Definition - p. 46 */
206 static void
207 winDestroyGCNativeGDI (GCPtr pGC)
209 winGCPriv(pGC);
210 winScreenPriv(pGC->pScreen);
212 if (pGC->freeCompClip)
213 REGION_DESTROY (pGC->pScreen, pGC->pCompositeClip);
215 /* Free the memory DC */
216 if (pGCPriv->hdcMem != NULL)
218 DeleteDC (pGCPriv->hdcMem);
219 pGCPriv->hdcMem = NULL;
222 /* Release the screen DC for the display window */
223 if (pGCPriv->hdc != NULL)
225 ReleaseDC (pScreenPriv->hwndScreen, pGCPriv->hdc);
226 pGCPriv->hdc = NULL;
229 /* Invalidate the GC privates pointer */
230 winSetGCPriv (pGC, NULL);
233 #if 0
234 /* See Porting Layer Definition - p. 46 */
235 static void
236 winChangeClipNativeGDI (GCPtr pGC, int nType, pointer pValue, int nRects)
242 /* See Porting Layer Definition - p. 47 */
243 static void
244 winDestroyClipNativeGDI (GCPtr pGC)
250 /* See Porting Layer Definition - p. 47 */
251 static void
252 winCopyClipNativeGDI (GCPtr pGCdst, GCPtr pGCsrc)
256 #endif