Add routine to load XBM from file

This commit is contained in:
Sasha Koshka 2023-11-03 21:34:13 -04:00
parent 1478edecd0
commit 347904a380
3 changed files with 32 additions and 7 deletions

View File

@ -12,3 +12,26 @@ Pixmap _XmdLoadBitmapIcon (Widget widget, unsigned char *bits, int width, int he
(char *)(bits), width, height,
fg, bg, DefaultDepthOfScreen(XtScreen(widget)));
}
Pixmap XmdReadBitmapFile (Widget widget, const char *filename) {
Pixel fg, bg;
XtVaGetValues (widget,
XmNforeground, &fg,
XmNbackground, &bg,
NULL);
unsigned int width, height;
unsigned char *data;
int garbage;
XReadBitmapFileData (
filename,
&width, &height,
&data,
&garbage, &garbage);
Pixmap result = XCreatePixmapFromBitmapData (
XtDisplay (widget),
RootWindowOfScreen(XtScreen(widget)),
(char *)(data), width, height,
fg, bg, DefaultDepthOfScreen(XtScreen(widget)));
XFree(data);
return result;
}

View File

@ -5,9 +5,14 @@
#include <X11/Intrinsic.h>
#include <Xm/Xm.h>
/* XmdLoadBitmapIcon is a macro that loads an icon with the specified name. That Icon must
be #include'd in your code somewhere. The name parameter must be a token, not a string. */
#define XmdLoadBitmapIcon(widget, name) _XmdLoadBitmapIcon(widget, name##_bits, name##_width, name##_height)
/* XmdLoadBitmapIcon is a macro that loads an icon with the specified name. That
Icon must be #include'd in your code somewhere. The name parameter must be a
token, not a string. */
#define XmdLoadBitmapIcon(widget, name)\
_XmdLoadBitmapIcon(widget, name##_bits, name##_width, name##_height)
Pixmap _XmdLoadBitmapIcon (Widget widget, unsigned char *bits, int width, int height);
/* XmdReadXBM reads an XBM bitmap file, and returns a Pixmap. */
Pixmap XmdReadBitmapFileData (Widget, widget, const char *filename);
#endif

View File

@ -5,9 +5,6 @@
#include <X11/Intrinsic.h>
#include <Xm/Xm.h>
typedef struct {
Pixmap icon;
const char *command;
} XmdLauncher;
/* TODO */
#endif