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>
37 winPushPixels (GCPtr pGC
, PixmapPtr pBitMap
, DrawablePtr pDrawable
, int dx
, int dy
, int xOrg
, int yOrg
);
46 winChangeGCNativeGDI (GCPtr pGC
, unsigned long ulChanges
);
50 winValidateGCNativeGDI (GCPtr pGC
,
51 unsigned long changes
,
52 DrawablePtr pDrawable
);
56 winCopyGCNativeGDI (GCPtr pGCsrc
, unsigned long ulMask
, GCPtr pGCdst
);
60 winDestroyGCNativeGDI (GCPtr pGC
);
64 winChangeClipNativeGDI (GCPtr pGC
, int nType
, pointer pValue
, int nRects
);
67 winDestroyClipNativeGDI (GCPtr pGC
);
70 winCopyClipNativeGDI (GCPtr pGCdst
, GCPtr pGCsrc
);
74 /* GC Handling Routines */
75 const GCFuncs winGCFuncs
= {
76 winValidateGCNativeGDI
,
79 winDestroyGCNativeGDI
,
80 winChangeClipNativeGDI
,
81 winDestroyClipNativeGDI
,
85 const GCFuncs winGCFuncs
= {
86 winValidateGCNativeGDI
,
89 winDestroyGCNativeGDI
,
96 /* Drawing Primitives */
97 const GCOps winGCOps
= {
98 winFillSpansNativeGDI
,
104 winPolyLineNativeGDI
,
116 winImageGlyphBltNativeGDI
,
117 winPolyGlyphBltNativeGDI
,
126 /* See Porting Layer Definition - p. 45 */
127 /* See mfb/mfbgc.c - mfbCreateGC() */
128 /* See Strategies for Porting - pp. 15, 16 */
130 winCreateGCNativeGDI (GCPtr pGC
)
132 winPrivGCPtr pGCPriv
= NULL
;
133 winPrivScreenPtr pScreenPriv
= NULL
;
136 ErrorF ("winCreateGCNativeGDI - depth: %d\n",
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
);
155 ErrorF ("winCreateGCNativeGDI () - Privates pointer was NULL\n");
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
);
171 /* See Porting Layer Definition - p. 45 */
173 winChangeGCNativeGDI (GCPtr pGC
, unsigned long ulChanges
)
176 ErrorF ("winChangeGCNativeGDI () - Doing nothing\n");
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
);
196 /* See Porting Layer Definition - p. 46 */
198 winCopyGCNativeGDI (GCPtr pGCsrc
, unsigned long ulMask
, GCPtr pGCdst
)
205 /* See Porting Layer Definition - p. 46 */
207 winDestroyGCNativeGDI (GCPtr 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
);
229 /* Invalidate the GC privates pointer */
230 winSetGCPriv (pGC
, NULL
);
234 /* See Porting Layer Definition - p. 46 */
236 winChangeClipNativeGDI (GCPtr pGC
, int nType
, pointer pValue
, int nRects
)
242 /* See Porting Layer Definition - p. 47 */
244 winDestroyClipNativeGDI (GCPtr pGC
)
250 /* See Porting Layer Definition - p. 47 */
252 winCopyClipNativeGDI (GCPtr pGCdst
, GCPtr pGCsrc
)