2 * Window Maker window manager
4 * Copyright (c) 1997-2003 Alfredo K. Kojima
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
25 #include <X11/Xutil.h>
31 #include "WindowMaker.h"
35 *----------------------------------------------------------------------
36 * wPixmapCreateFromXPMData--
37 * Creates a WPixmap structure and initializes it with the supplied
41 * A WPixmap structure or NULL on failure.
44 * DEF_XPM_CLOSENESS specifies the XpmCloseness
45 *----------------------------------------------------------------------
47 WPixmap
*wPixmapCreateFromXPMData(WScreen
* scr
, char **data
)
52 image
= RGetImageFromXPMData(scr
->rcontext
, data
);
56 pix
= wmalloc(sizeof(WPixmap
));
57 memset(pix
, 0, sizeof(WPixmap
));
59 RConvertImageMask(scr
->rcontext
, image
, &pix
->image
, &pix
->mask
, 128);
61 pix
->width
= image
->width
;
62 pix
->height
= image
->height
;
63 pix
->depth
= scr
->w_depth
;
71 *----------------------------------------------------------------------
72 * wPixmapCreateFromXBMData--
73 * Creates a WPixmap structure and initializes it with the supplied
74 * XBM structure data, size and mask.
77 * A WPixmap structure or NULL on failure.
79 *----------------------------------------------------------------------
81 WPixmap
*wPixmapCreateFromXBMData(WScreen
* scr
, char *data
, char *mask
,
82 int width
, int height
, unsigned long fg
, unsigned long bg
)
86 pix
= wmalloc(sizeof(WPixmap
));
87 memset(pix
, 0, sizeof(WPixmap
));
88 pix
->image
= XCreatePixmapFromBitmapData(dpy
, scr
->w_win
, data
, width
, height
, fg
, bg
, scr
->w_depth
);
89 if (pix
->image
== None
) {
94 pix
->mask
= XCreateBitmapFromData(dpy
, scr
->w_win
, mask
, width
, height
);
100 pix
->depth
= scr
->w_depth
;
104 WPixmap
*wPixmapCreate(WScreen
* scr
, Pixmap image
, Pixmap mask
)
109 unsigned int width
, height
, depth
, baz
;
111 pix
= wmalloc(sizeof(WPixmap
));
112 memset(pix
, 0, sizeof(WPixmap
));
115 if (!XGetGeometry(dpy
, image
, &foo
, &bar
, &bar
, &width
, &height
, &baz
, &depth
)) {
116 wwarning("XGetGeometry() failed during wPixmapCreate()");
121 pix
->height
= height
;
127 *----------------------------------------------------------------------
129 * Destroys a WPixmap structure and the pixmap/mask it holds.
133 *----------------------------------------------------------------------
135 void wPixmapDestroy(WPixmap
* pix
)
138 if (pix
->mask
&& !pix
->client_owned_mask
) {
139 XFreePixmap(dpy
, pix
->mask
);
142 if (pix
->image
&& !pix
->client_owned
) {
143 XFreePixmap(dpy
, pix
->image
);