Imported Upstream version 1.15.1
[deb_xorg-server.git] / hw / xwin / winpixmap.c
CommitLineData
a09e091a
JB
1/*
2 *Copyright (C) 1994-2000 The XFree86 Project, Inc. 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 THE XFREE86 PROJECT 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 the XFree86 Project
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 the XFree86 Project.
27 *
28 * Authors: drewry, september 1986
29 * Harold L Hunt II
30 */
31
32#ifdef HAVE_XWIN_CONFIG_H
33#include <xwin-config.h>
34#endif
35#include "win.h"
36
37/*
38 * Local prototypes
39 */
40
41#if 0
42static void
43 winXRotatePixmapNativeGDI(PixmapPtr pPix, int rw);
44
45static void
46 winYRotatePixmapNativeGDI(PixmapPtr pPix, int rh);
47
48static void
49
50winCopyRotatePixmapNativeGDI(PixmapPtr psrcPix, PixmapPtr *ppdstPix,
51 int xrot, int yrot);
52#endif
53
54/* See Porting Layer Definition - p. 34 */
55/* See mfb/mfbpixmap.c - mfbCreatePixmap() */
56PixmapPtr
57winCreatePixmapNativeGDI(ScreenPtr pScreen,
58 int iWidth, int iHeight,
59 int iDepth, unsigned usage_hint)
60{
61 winPrivPixmapPtr pPixmapPriv = NULL;
62 PixmapPtr pPixmap = NULL;
63
64 /* Allocate pixmap memory */
65 pPixmap = AllocatePixmap(pScreen, 0);
66 if (!pPixmap) {
67 ErrorF("winCreatePixmapNativeGDI () - Couldn't allocate a pixmap\n");
68 return NullPixmap;
69 }
70
71#if CYGDEBUG
72 winDebug("winCreatePixmap () - w %d h %d d %d uh %d bw %d\n",
73 iWidth, iHeight, iDepth, usage_hint,
74 PixmapBytePad(iWidth, iDepth));
75#endif
76
77 /* Setup pixmap values */
78 pPixmap->drawable.type = DRAWABLE_PIXMAP;
79 pPixmap->drawable.class = 0;
80 pPixmap->drawable.pScreen = pScreen;
81 pPixmap->drawable.depth = iDepth;
82 pPixmap->drawable.bitsPerPixel = BitsPerPixel(iDepth);
83 pPixmap->drawable.id = 0;
84 pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
85 pPixmap->drawable.x = 0;
86 pPixmap->drawable.y = 0;
87 pPixmap->drawable.width = iWidth;
88 pPixmap->drawable.height = iHeight;
89 pPixmap->devKind = 0;
90 pPixmap->refcnt = 1;
91 pPixmap->devPrivate.ptr = NULL;
92 pPixmap->usage_hint = usage_hint;
93
94 /* Pixmap privates are allocated by AllocatePixmap */
95 pPixmapPriv = winGetPixmapPriv(pPixmap);
96
97 /* Initialize pixmap privates */
98 pPixmapPriv->hBitmap = NULL;
99 pPixmapPriv->hdcSelected = NULL;
100 pPixmapPriv->pbBits = NULL;
101 pPixmapPriv->dwScanlineBytes = PixmapBytePad(iWidth, iDepth);
102
103 /* Check for zero width or height pixmaps */
104 if (iWidth == 0 || iHeight == 0) {
105 /* Don't allocate a real pixmap, just set fields and return */
106 return pPixmap;
107 }
108
109 /* Create a DIB for the pixmap */
110 pPixmapPriv->hBitmap = winCreateDIBNativeGDI(iWidth, iHeight, iDepth,
111 &pPixmapPriv->pbBits,
112 (BITMAPINFO **) &pPixmapPriv->
113 pbmih);
114
115#if CYGDEBUG
116 winDebug("winCreatePixmap () - Created a pixmap %08x, %dx%dx%d, for "
117 "screen: %08x\n",
118 pPixmapPriv->hBitmap, iWidth, iHeight, iDepth, pScreen);
119#endif
120
121 return pPixmap;
122}
123
124/*
125 * See Porting Layer Definition - p. 35
126 *
127 * See mfb/mfbpixmap.c - mfbDestroyPixmap()
128 */
129
130Bool
131winDestroyPixmapNativeGDI(PixmapPtr pPixmap)
132{
133 winPrivPixmapPtr pPixmapPriv = NULL;
134
135#if CYGDEBUG
136 winDebug("winDestroyPixmapNativeGDI ()\n");
137#endif
138
139 /* Bail early if there is not a pixmap to destroy */
140 if (pPixmap == NULL) {
141 ErrorF("winDestroyPixmapNativeGDI () - No pixmap to destroy\n");
142 return TRUE;
143 }
144
145 /* Get a handle to the pixmap privates */
146 pPixmapPriv = winGetPixmapPriv(pPixmap);
147
148#if CYGDEBUG
149 winDebug("winDestroyPixmapNativeGDI - pPixmapPriv->hBitmap: %08x\n",
150 pPixmapPriv->hBitmap);
151#endif
152
153 /* Decrement reference count, return if nonzero */
154 --pPixmap->refcnt;
155 if (pPixmap->refcnt != 0)
156 return TRUE;
157
158 /* Free GDI bitmap */
159 if (pPixmapPriv->hBitmap)
160 DeleteObject(pPixmapPriv->hBitmap);
161
162 /* Free the bitmap info header memory */
163 free(pPixmapPriv->pbmih);
164 pPixmapPriv->pbmih = NULL;
165
166 /* Free the pixmap memory */
167 free(pPixmap);
168 pPixmap = NULL;
169
170 return TRUE;
171}
172
173/*
174 * Not used yet
175 */
176
177Bool
178winModifyPixmapHeaderNativeGDI(PixmapPtr pPixmap,
179 int iWidth, int iHeight,
180 int iDepth,
181 int iBitsPerPixel, int devKind, pointer pPixData)
182{
183 FatalError("winModifyPixmapHeaderNativeGDI ()\n");
184 return TRUE;
185}
186
187#if 0
188/*
189 * Not used yet.
190 * See cfb/cfbpixmap.c
191 */
192
193static void
194winXRotatePixmapNativeGDI(PixmapPtr pPix, int rw)
195{
196 ErrorF("winXRotatePixmap()\n");
197 /* fill in this function, look at CFB */
198}
199
200/*
201 * Not used yet.
202 * See cfb/cfbpixmap.c
203 */
204static void
205winYRotatePixmapNativeGDI(PixmapPtr pPix, int rh)
206{
207 ErrorF("winYRotatePixmap()\n");
208 /* fill in this function, look at CFB */
209}
210
211/*
212 * Not used yet.
213 * See cfb/cfbpixmap.c
214 */
215
216static void
217winCopyRotatePixmapNativeGDI(PixmapPtr psrcPix, PixmapPtr *ppdstPix,
218 int xrot, int yrot)
219{
220 ErrorF("winCopyRotatePixmap()\n");
221 /* fill in this function, look at CFB */
222}
223#endif