
Example F-8. The Bitmap.c module (continued)
WIN_NOTIFY_IMMEDIATE_EVENT_PROC, bitmap_redraw,
NULL);
return XV_OK;
}
/* bitmap_set() -- the function called to set attributes in a bitmap
* object. This function is called when a bitmap is created after
* the init routine as well as when the programmer calls xv_set.
*/
static Xv_opaque
bitmap_set(bitmap_public, avlist)
Bitmap_public *bitmap_public;
Attr_avlist avlist;
{
Bitmap_private *bitmap_private = BITMAP_PRIVATE(bitmap_public);
Attr_attribute *attrs;
for (attrs = avlist; *attrs; attrs = attr_next(attrs))
switch ((int) attrs[0 ]) {
case BITMAP_FILE : {
int val, x, y;
Display *dpy =
(Display *)xv_get(bitmap_public, XV_DISPLAY);
Window window =
(Window)xv_get(bitmap_public, XV_XID);
Pixmap old = bitmap_private->bitmap;
if (XReadBitmapFile(dpy, window, attrs[1],
&bitmap_private->width, &bitmap_private->height,
&bitmap_private->bitmap, &x, &y) != BitmapSuccess)
{
xv_error(bitmap_public,
ERROR_STRING, "Unable to load bitmap file",
ERROR_PKG, BITMAP,
NULL);
bitmap_private->bitmap = old;
}
break;
}
case BITMAP_PIXMAP :
xv_error(bitmap_public,
ERROR_CANNOT_SET, attrs[0 ],
ERROR_PKG, BITMAP,
NULL);
break;
case XV_END_CREATE : {
/* this stuff *must* be here rather than in the "init"
* routine because the CMS is not loaded into the
* window object until the "set" routines are called.
*/
Cms cms = xv_get(bitmap_public, WIN_CMS);
XGCValues gcvalues;
Display *dpy =
(Display *)xv_get(bitma