diff options
Diffstat (limited to 'libX11/src/CrPFBData.c')
-rw-r--r-- | libX11/src/CrPFBData.c | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/libX11/src/CrPFBData.c b/libX11/src/CrPFBData.c new file mode 100644 index 000000000..e08b65c2b --- /dev/null +++ b/libX11/src/CrPFBData.c @@ -0,0 +1,88 @@ +/* $Xorg: CrPFBData.c,v 1.4 2001/02/09 02:03:32 xorgcvs Exp $ */ +/* + +Copyright 1987, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + +*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#include "Xlib.h" +#include <stdio.h> + +/* + * XCreatePixmapFromBitmapData: Routine to make a pixmap from user supplied bitmap data. + * D is any drawable on the same screen that the pixmap will be used in. + * Data is a pointer to the bit data, and + * width & height give the size in bits of the pixmap. + * Fg and Bg are the pixel values to use for the two colors. + * Depth is the depth of the pixmap to create. + * + * The following format is assumed for data: + * + * format=XYPixmap + * bit_order=LSBFirst + * byte_order=LSBFirst + * padding=8 + * bitmap_unit=8 + * xoffset=0 + * no extra bytes per line + */ +Pixmap XCreatePixmapFromBitmapData( + Display *display, + Drawable d, + char *data, + unsigned int width, + unsigned int height, + unsigned long fg, + unsigned long bg, + unsigned int depth) +{ + XImage ximage; + GC gc; + XGCValues gcv; + Pixmap pix; + + pix = XCreatePixmap(display, d, width, height, depth); + gcv.foreground = fg; + gcv.background = bg; + if (! (gc = XCreateGC(display, pix, GCForeground|GCBackground, &gcv))) + return (Pixmap) NULL; + ximage.height = height; + ximage.width = width; + ximage.depth = 1; + ximage.bits_per_pixel = 1; + ximage.xoffset = 0; + ximage.format = XYBitmap; + ximage.data = data; + ximage.byte_order = LSBFirst; + ximage.bitmap_unit = 8; + ximage.bitmap_bit_order = LSBFirst; + ximage.bitmap_pad = 8; + ximage.bytes_per_line = (width+7)/8; + + XPutImage(display, pix, gc, &ximage, 0, 0, 0, 0, width, height); + XFreeGC(display, gc); + return(pix); +} |