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>
42 winChangeGCNativeGDI(GCPtr pGC
, unsigned long ulChanges
);
47 winValidateGCNativeGDI(GCPtr pGC
, unsigned long changes
, DrawablePtr pDrawable
);
51 winCopyGCNativeGDI(GCPtr pGCsrc
, unsigned long ulMask
, GCPtr pGCdst
);
55 winDestroyGCNativeGDI(GCPtr pGC
);
59 winChangeClipNativeGDI(GCPtr pGC
, int nType
, pointer pValue
, int nRects
);
62 winDestroyClipNativeGDI(GCPtr pGC
);
65 winCopyClipNativeGDI(GCPtr pGCdst
, GCPtr pGCsrc
);
69 /* GC Handling Routines */
70 const GCFuncs winGCFuncs
= {
71 winValidateGCNativeGDI
,
74 winDestroyGCNativeGDI
,
75 winChangeClipNativeGDI
,
76 winDestroyClipNativeGDI
,
80 const GCFuncs winGCFuncs
= {
81 winValidateGCNativeGDI
,
84 winDestroyGCNativeGDI
,
91 /* Drawing Primitives */
92 const GCOps winGCOps
= {
93 winFillSpansNativeGDI
,
111 winImageGlyphBltNativeGDI
,
112 winPolyGlyphBltNativeGDI
,
120 /* See Porting Layer Definition - p. 45 */
121 /* See mfb/mfbgc.c - mfbCreateGC() */
122 /* See Strategies for Porting - pp. 15, 16 */
124 winCreateGCNativeGDI(GCPtr pGC
)
126 winPrivGCPtr pGCPriv
= NULL
;
127 winPrivScreenPtr pScreenPriv
= NULL
;
130 ErrorF("winCreateGCNativeGDI - depth: %d\n", pGC
->depth
);
133 pGC
->ops
= (GCOps
*) &winGCOps
;
134 pGC
->funcs
= (GCFuncs
*) &winGCFuncs
;
136 /* We want all coordinates passed to spans functions to be screen relative */
137 pGC
->miTranslate
= TRUE
;
139 /* Allocate privates for this GC */
140 pGCPriv
= winGetGCPriv(pGC
);
141 if (pGCPriv
== NULL
) {
142 ErrorF("winCreateGCNativeGDI () - Privates pointer was NULL\n");
146 /* Create a new screen DC for the display window */
147 pScreenPriv
= winGetScreenPriv(pGC
->pScreen
);
148 pGCPriv
->hdc
= GetDC(pScreenPriv
->hwndScreen
);
150 /* Allocate a memory DC for the GC */
151 pGCPriv
->hdcMem
= CreateCompatibleDC(pGCPriv
->hdc
);
157 /* See Porting Layer Definition - p. 45 */
159 winChangeGCNativeGDI(GCPtr pGC
, unsigned long ulChanges
)
162 ErrorF("winChangeGCNativeGDI () - Doing nothing\n");
168 winValidateGCNativeGDI(GCPtr pGC
,
169 unsigned long ulChanges
, DrawablePtr pDrawable
)
172 (GCClipXOrigin
| GCClipYOrigin
| GCClipMask
| GCSubwindowMode
))
173 || (pDrawable
->serialNumber
!=
174 (pGC
->serialNumber
& DRAWABLE_SERIAL_BITS
))) {
175 miComputeCompositeClip(pGC
, pDrawable
);
180 /* See Porting Layer Definition - p. 46 */
182 winCopyGCNativeGDI(GCPtr pGCsrc
, unsigned long ulMask
, GCPtr pGCdst
)
188 /* See Porting Layer Definition - p. 46 */
190 winDestroyGCNativeGDI(GCPtr pGC
)
193 winScreenPriv(pGC
->pScreen
);
195 if (pGC
->freeCompClip
)
196 RegionDestroy(pGC
->pCompositeClip
);
198 /* Free the memory DC */
199 if (pGCPriv
->hdcMem
!= NULL
) {
200 DeleteDC(pGCPriv
->hdcMem
);
201 pGCPriv
->hdcMem
= NULL
;
204 /* Release the screen DC for the display window */
205 if (pGCPriv
->hdc
!= NULL
) {
206 ReleaseDC(pScreenPriv
->hwndScreen
, pGCPriv
->hdc
);
210 /* Invalidate the GC privates pointer */
211 winSetGCPriv(pGC
, NULL
);
215 /* See Porting Layer Definition - p. 46 */
217 winChangeClipNativeGDI(GCPtr pGC
, int nType
, pointer pValue
, int nRects
)
222 /* See Porting Layer Definition - p. 47 */
224 winDestroyClipNativeGDI(GCPtr pGC
)
229 /* See Porting Layer Definition - p. 47 */
231 winCopyClipNativeGDI(GCPtr pGCdst
, GCPtr pGCsrc
)