Initial revision
[wmaker-crm.git] / WINGs / wpixmap.c
blob644caa00c313c3c20b70cfadff9facaea97e9391
2 #include "WINGsP.h"
4 #include <wraster.h>
7 WMPixmap*
8 WMRetainPixmap(WMPixmap *pixmap)
10 if (pixmap)
11 pixmap->refCount++;
13 return pixmap;
17 void
18 WMReleasePixmap(WMPixmap *pixmap)
20 pixmap->refCount--;
22 if (pixmap->refCount<1) {
23 XFreePixmap(pixmap->screen->display, pixmap->pixmap);
24 if (pixmap->mask)
25 XFreePixmap(pixmap->screen->display, pixmap->mask);
26 free(pixmap);
31 WMPixmap*
32 WMCreatePixmapFromXPixmaps(WMScreen *scrPtr, Pixmap pixmap, Pixmap mask,
33 int width, int height, int depth)
35 WMPixmap *pixPtr;
37 pixPtr = malloc(sizeof(WMPixmap));
38 if (!pixPtr) {
39 return NULL;
41 pixPtr->screen = scrPtr;
42 pixPtr->pixmap = pixmap;
43 pixPtr->mask = mask;
44 pixPtr->width = width;
45 pixPtr->height = height;
46 pixPtr->depth = depth;
47 pixPtr->refCount = 1;
49 return pixPtr;
55 WMPixmap*
56 WMCreatePixmapFromFile(WMScreen *scrPtr, char *fileName)
58 WMPixmap *pixPtr;
59 RImage *image;
61 image = RLoadImage(scrPtr->rcontext, fileName, 0);
62 if (!image)
63 return NULL;
65 pixPtr = WMCreatePixmapFromRImage(scrPtr, image, 127);
67 RDestroyImage(image);
69 return pixPtr;
73 WMPixmap*
74 WMCreatePixmapFromRImage(WMScreen *scrPtr, RImage *image, int threshold)
76 WMPixmap *pixPtr;
77 Pixmap pixmap, mask;
79 if (!RConvertImageMask(scrPtr->rcontext, image, &pixmap, &mask,
80 threshold)) {
81 return NULL;
84 pixPtr = malloc(sizeof(WMPixmap));
85 if (!pixPtr) {
86 return NULL;
88 pixPtr->screen = scrPtr;
89 pixPtr->pixmap = pixmap;
90 pixPtr->mask = mask;
91 pixPtr->width = image->width;
92 pixPtr->height = image->height;
93 pixPtr->depth = scrPtr->depth;
94 pixPtr->refCount = 1;
96 return pixPtr;
100 WMPixmap*
101 WMCreateBlendedPixmapFromFile(WMScreen *scrPtr, char *fileName, RColor *color)
103 WMPixmap *pixPtr;
104 RImage *image;
107 image = RLoadImage(scrPtr->rcontext, fileName, 0);
108 if (!image)
109 return NULL;
111 RCombineImageWithColor(image, color);
113 pixPtr = WMCreatePixmapFromRImage(scrPtr, image, 0);
115 RDestroyImage(image);
117 return pixPtr;
121 WMPixmap*
122 WMCreatePixmapFromXPMData(WMScreen *scrPtr, char **data)
124 WMPixmap *pixPtr;
125 RImage *image;
127 image = RGetImageFromXPMData(scrPtr->rcontext, data);
128 if (!image)
129 return NULL;
131 pixPtr = WMCreatePixmapFromRImage(scrPtr, image, 127);
133 RDestroyImage(image);
135 return pixPtr;
139 Pixmap
140 WMGetPixmapXID(WMPixmap *pixmap)
142 return pixmap->pixmap;
145 Pixmap
146 WMGetPixmapMaskXID(WMPixmap *pixmap)
148 return pixmap->mask;
152 WMSize
153 WMGetPixmapSize(WMPixmap *pixmap)
155 WMSize size;
157 size.width = pixmap->width;
158 size.height = pixmap->height;
160 return size;
164 WMPixmap*
165 WMGetSystemPixmap(WMScreen *scr, int image)
167 switch (image) {
168 case WSIReturnArrow:
169 return WMRetainPixmap(scr->buttonArrow);
171 case WSIHighlightedReturnArrow:
172 return WMRetainPixmap(scr->pushedButtonArrow);
174 case WSIScrollerDimple:
175 return WMRetainPixmap(scr->scrollerDimple);
177 case WSIArrowLeft:
178 return WMRetainPixmap(scr->leftArrow);
180 case WSIHighlightedArrowLeft:
181 return WMRetainPixmap(scr->hiLeftArrow);
183 case WSIArrowRight:
184 return WMRetainPixmap(scr->rightArrow);
186 case WSIHighlightedArrowRight:
187 return WMRetainPixmap(scr->hiRightArrow);
189 case WSIArrowUp:
190 return WMRetainPixmap(scr->upArrow);
192 case WSIHighlightedArrowUp:
193 return WMRetainPixmap(scr->hiUpArrow);
195 case WSIArrowDown:
196 return WMRetainPixmap(scr->downArrow);
198 case WSIHighlightedArrowDown:
199 return WMRetainPixmap(scr->hiDownArrow);
201 default:
202 return NULL;