dockapps/fookb/images.c

183 lines
3.3 KiB
C

/*
* images.c
*
* (c) 1998-2004 Alexey Vyskubov <alexey@mawhrin.net>
*/
#include <stdio.h> /* puts() */
#include <stdlib.h>
#include <string.h>
/* Xpm fun */
#include <X11/xpm.h>
//#include "fookb.h"
#include "params.h"
#include "images.h"
/* Let us make lint happy! */
#define lputs(x) (void)(puts(x))
static int w = 0;
static int h = 0;
static XImage *stupid_picture[5]; /* Icons for fookb */
int get_width() {
return w;
}
int get_height() {
return h;
}
static int get_one_image(char *name, int index, Display *dpy)
{
int foo;
foo = XpmReadFileToImage(dpy, name, &stupid_picture[index],
NULL, NULL);
if (0 == w) {
w = stupid_picture[index]->width;
if (0 == w) {
lputs("FATAL: Icon1 has zero width!");
exit(EXIT_FAILURE);
}
#ifdef WMAKER
if (w > 64) {
lputs("Warning: Icon width is more than 64. Strange things may happen.");
}
#endif
}
if (0 == h) {
h = stupid_picture[index]->height;
if (0 == h) {
lputs("FATAL: Icon1 had zero height!");
exit(EXIT_FAILURE);
}
#ifdef WMAKER
if (h > 64) {
lputs("Warning: Icon height is more than 64. Strange things may happen.");
}
#endif
}
if (w != stupid_picture[index]->width) {
lputs("FATAL: Not all icons are of the same width!");
exit(EXIT_FAILURE);
}
if (h != stupid_picture[index]->height) {
lputs("FATAL: Not all iconse are of the same height!");
exit(EXIT_FAILURE);
}
return (foo);
}
void read_images(Display *dpy)
{
int i;
int res;
int status = 0;
for (i = 0; i < 5; i++) {
switch (i) {
case 0:
res = get_one_image(read_param("Icon1"), 0, dpy);
break;
case 1:
res = get_one_image(read_param("Icon2"), 1, dpy);
break;
case 2:
res = get_one_image(read_param("Icon3"), 2, dpy);
break;
case 3:
res = get_one_image(read_param("Icon4"), 3, dpy);
break;
default:
res = get_one_image(read_param("IconBoom"), 4, dpy);
break;
}
switch (res) {
case XpmOpenFailed:
lputs("Xpm file open failed:");
status = 1 << 5;
break;
case XpmFileInvalid:
lputs("Xpm file is invalid:");
status = 1 << 6;
break;
case XpmNoMemory:
lputs("No memory for open xpm file:");
status = 1 << 7;
break;
default:
break;
}
if (!(status == 0)) {
status += 1 << i;
switch (i) {
case 0:
lputs(read_param("Icon1"));
break;
case 1:
lputs(read_param("Icon2"));
break;
case 2:
lputs(read_param("Icon3"));
break;
case 3:
lputs(read_param("Icon4"));
break;
case 4:
lputs(read_param("IconBoom"));
break;
default:
lputs("UNKNOWN ERROR! PLEASE REPORT!!!");
exit(-2);
}
exit(status);
}
}
}
void update_window(Window win, GC gc, unsigned int whattodo, Display *dpy)
{
int err;
err = XPutImage(dpy, win, gc, stupid_picture[whattodo],
0, 0, 0, 0, w, h);
if (0 == err) return;
switch (err) {
case BadDrawable:
lputs("Fatal error, XPutImage returns BadDrawable. "
"Please report!");
break;
case BadGC:
lputs("Fatal error, XPutImage returns BadGC. "
"Please report!");
break;
case BadMatch:
lputs("Fatal error, XPutImage returns BadMatch. "
"Please report!");
break;
case BadValue:
lputs("Fatal error, XPutImage returns BadValue. "
"Please report!");
break;
default:
lputs("Fatal error, XPutImage returns unknown error. "
"Please report, but probably "
"it is a bug in X.");
break;
}
}