@@ -1,180 +0,0 @@ | |||||
#ifndef ICON_H | |||||
#define ICON_H | |||||
#include <Imlib2.h> | |||||
static DATA32 icon_invalid[] = { | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, | |||||
0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xffbbbbbb, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, 0xff444444, | |||||
0xff444444, 0xff444444, 0xff444444, 0xff444444 | |||||
}; | |||||
#endif /* ICON_H */ |
@@ -16,8 +16,9 @@ | |||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||||
*/ | */ | ||||
#include <unistd.h> | |||||
#include "config.h" | #include "config.h" | ||||
#include "icon.h" | |||||
#include "image.h" | #include "image.h" | ||||
#include "options.h" | #include "options.h" | ||||
#include "util.h" | #include "util.h" | ||||
@@ -26,15 +27,11 @@ int zl_cnt; | |||||
float zoom_min; | float zoom_min; | ||||
float zoom_max; | float zoom_max; | ||||
Imlib_Image *im_invalid; | |||||
void img_init(img_t *img, win_t *win) { | void img_init(img_t *img, win_t *win) { | ||||
zl_cnt = sizeof(zoom_levels) / sizeof(zoom_levels[0]); | zl_cnt = sizeof(zoom_levels) / sizeof(zoom_levels[0]); | ||||
zoom_min = zoom_levels[0] / 100.0; | zoom_min = zoom_levels[0] / 100.0; | ||||
zoom_max = zoom_levels[zl_cnt - 1] / 100.0; | zoom_max = zoom_levels[zl_cnt - 1] / 100.0; | ||||
im_invalid = imlib_create_image_using_data(32, 32, icon_invalid); | |||||
if (img) { | if (img) { | ||||
img->im = NULL; | img->im = NULL; | ||||
img->zoom = options->zoom; | img->zoom = options->zoom; | ||||
@@ -51,43 +48,20 @@ void img_init(img_t *img, win_t *win) { | |||||
} | } | ||||
} | } | ||||
void img_free(img_t* img) { | |||||
imlib_context_set_image(im_invalid); | |||||
imlib_free_image(); | |||||
} | |||||
int img_check(const char *filename) { | |||||
Imlib_Image *im; | |||||
if (!filename) | |||||
return 0; | |||||
if ((im = imlib_load_image(filename))) { | |||||
imlib_context_set_image(im); | |||||
imlib_image_set_changes_on_disk(); | |||||
imlib_free_image(); | |||||
return 1; | |||||
} else { | |||||
warn("invalid file: %s", filename); | |||||
return 0; | |||||
} | |||||
} | |||||
int img_load(img_t *img, const char *filename) { | int img_load(img_t *img, const char *filename) { | ||||
if (!img || !filename) | if (!img || !filename) | ||||
return 0; | return 0; | ||||
if ((img->im = imlib_load_image(filename))) { | |||||
imlib_context_set_image(img->im); | |||||
imlib_image_set_changes_on_disk(); | |||||
imlib_context_set_anti_alias(img->aa); | |||||
img->scalemode = options->scalemode; | |||||
} else { | |||||
warn("invalid file: %s", filename); | |||||
imlib_context_set_image(im_invalid); | |||||
imlib_context_set_anti_alias(0); | |||||
if (access(filename, R_OK) || !(img->im = imlib_load_image(filename))) { | |||||
warn("could not open image: %s", filename); | |||||
return 0; | |||||
} | } | ||||
imlib_context_set_image(img->im); | |||||
imlib_image_set_changes_on_disk(); | |||||
imlib_context_set_anti_alias(img->aa); | |||||
img->scalemode = options->scalemode; | |||||
img->re = 0; | img->re = 0; | ||||
img->checkpan = 0; | img->checkpan = 0; | ||||
@@ -151,12 +125,12 @@ void img_render(img_t *img, win_t *win) { | |||||
int sx, sy, sw, sh; | int sx, sy, sw, sh; | ||||
int dx, dy, dw, dh; | int dx, dy, dw, dh; | ||||
if (!img || !win) | |||||
if (!img || !img->im || !win) | |||||
return; | return; | ||||
if (!img->im || img->scalemode != SCALE_ZOOM) { | |||||
if (img->scalemode != SCALE_ZOOM) { | |||||
img_fit(img, win); | img_fit(img, win); | ||||
if ((!img->im || img->scalemode == SCALE_DOWN) && img->zoom > 1.0) | |||||
if (img->scalemode == SCALE_DOWN && img->zoom > 1.0) | |||||
img->zoom = 1.0; | img->zoom = 1.0; | ||||
} | } | ||||
@@ -204,10 +178,7 @@ void img_render(img_t *img, win_t *win) { | |||||
win_clear(win); | win_clear(win); | ||||
if (img->im) | |||||
imlib_context_set_image(img->im); | |||||
else | |||||
imlib_context_set_image(im_invalid); | |||||
imlib_context_set_image(img->im); | |||||
if (imlib_image_has_alpha() && !img->alpha) | if (imlib_image_has_alpha() && !img->alpha) | ||||
win_draw_rect(win, win->pm, dx, dy, dw, dh, True, 0, win->white); | win_draw_rect(win, win->pm, dx, dy, dw, dh, True, 0, win->white); | ||||
@@ -54,9 +54,7 @@ typedef struct { | |||||
} img_t; | } img_t; | ||||
void img_init(img_t*, win_t*); | void img_init(img_t*, win_t*); | ||||
void img_free(img_t*); | |||||
int img_check(const char*); | |||||
int img_load(img_t*, const char*); | int img_load(img_t*, const char*); | ||||
void img_close(img_t*, int); | void img_close(img_t*, int); | ||||
@@ -40,6 +40,14 @@ | |||||
#include "commands.h" | #include "commands.h" | ||||
#endif | #endif | ||||
#define FNAME_CNT 1024 | |||||
#define TITLE_LEN 256 | |||||
#define TO_WIN_RESIZE 75000 | |||||
#define TO_IMAGE_DRAG 1000 | |||||
#define TO_CURSOR_HIDE 1500000 | |||||
#define TO_THUMBS_LOAD 75000 | |||||
typedef enum { | typedef enum { | ||||
MODE_NORMAL = 0, | MODE_NORMAL = 0, | ||||
MODE_THUMBS | MODE_THUMBS | ||||
@@ -52,42 +60,74 @@ img_t img; | |||||
tns_t tns; | tns_t tns; | ||||
win_t win; | win_t win; | ||||
#define FNAME_CNT 1024 | |||||
const char **filenames; | const char **filenames; | ||||
int filecnt, fileidx; | int filecnt, fileidx; | ||||
size_t filesize; | size_t filesize; | ||||
#define TITLE_LEN 256 | |||||
char win_title[TITLE_LEN]; | char win_title[TITLE_LEN]; | ||||
int timo_cursor; | |||||
int timo_redraw; | |||||
unsigned char drag; | |||||
int mox, moy; | |||||
void cleanup() { | void cleanup() { | ||||
static int in = 0; | static int in = 0; | ||||
if (!in++) { | if (!in++) { | ||||
img_close(&img, 0); | img_close(&img, 0); | ||||
img_free(&img); | |||||
tns_free(&tns, &win); | |||||
tns_free(&tns); | |||||
win_close(&win); | win_close(&win); | ||||
} | } | ||||
} | } | ||||
void remove_file(int n, unsigned char silent) { | |||||
if (n < 0 || n >= filecnt) | |||||
return; | |||||
if (filecnt == 1) { | |||||
if (!silent) | |||||
fprintf(stderr, "sxiv: no more files to display\n"); | |||||
cleanup(); | |||||
exit(!silent); | |||||
} | |||||
if (n + 1 < filecnt) | |||||
memmove(filenames + n, filenames + n + 1, (filecnt - n - 1) * | |||||
sizeof(const char*)); | |||||
if (n + 1 < tns.cnt) { | |||||
memmove(tns.thumbs + n, tns.thumbs + n + 1, (tns.cnt - n - 1) * | |||||
sizeof(thumb_t)); | |||||
memset(tns.thumbs + tns.cnt - 1, 0, sizeof(thumb_t)); | |||||
} | |||||
--filecnt; | |||||
if (n < tns.cnt) | |||||
--tns.cnt; | |||||
} | |||||
int load_image(int new) { | int load_image(int new) { | ||||
int ret = 0; | |||||
struct stat fstats; | struct stat fstats; | ||||
if (new >= 0 && new < filecnt) { | if (new >= 0 && new < filecnt) { | ||||
win_set_cursor(&win, CURSOR_WATCH); | win_set_cursor(&win, CURSOR_WATCH); | ||||
img_close(&img, 0); | img_close(&img, 0); | ||||
while (!img_load(&img, filenames[new])) { | |||||
remove_file(new, 0); | |||||
if (new >= filecnt) | |||||
new = filecnt - 1; | |||||
} | |||||
fileidx = new; | fileidx = new; | ||||
if (!stat(filenames[fileidx], &fstats)) | |||||
if (!stat(filenames[new], &fstats)) | |||||
filesize = fstats.st_size; | filesize = fstats.st_size; | ||||
else | else | ||||
filesize = 0; | filesize = 0; | ||||
if (!(ret = img_load(&img, filenames[fileidx]))) | |||||
if (!timo_cursor) | |||||
win_set_cursor(&win, CURSOR_NONE); | win_set_cursor(&win, CURSOR_NONE); | ||||
} | } | ||||
return ret; | |||||
return 1; | |||||
} | } | ||||
void update_title() { | void update_title() { | ||||
@@ -100,16 +140,11 @@ void update_title() { | |||||
tns.cnt ? tns.sel + 1 : 0, tns.cnt, | tns.cnt ? tns.sel + 1 : 0, tns.cnt, | ||||
tns.cnt ? filenames[tns.sel] : ""); | tns.cnt ? filenames[tns.sel] : ""); | ||||
} else { | } else { | ||||
if (img.im) { | |||||
size = filesize; | |||||
size_readable(&size, &unit); | |||||
n = snprintf(win_title, TITLE_LEN, "sxiv: [%d/%d] <%d%%> (%.2f%s) %s", | |||||
fileidx + 1, filecnt, (int) (img.zoom * 100.0), size, unit, | |||||
filenames[fileidx]); | |||||
} else { | |||||
n = snprintf(win_title, TITLE_LEN, "sxiv: [%d/%d] invalid: %s", | |||||
fileidx + 1, filecnt, filenames[fileidx]); | |||||
} | |||||
size = filesize; | |||||
size_readable(&size, &unit); | |||||
n = snprintf(win_title, TITLE_LEN, "sxiv: [%d/%d] <%d%%> (%.2f%s) %s", | |||||
fileidx + 1, filecnt, (int) (img.zoom * 100.0), size, unit, | |||||
filenames[fileidx]); | |||||
} | } | ||||
if (n >= TITLE_LEN) { | if (n >= TITLE_LEN) { | ||||
@@ -128,7 +163,7 @@ int check_append(const char *filename) { | |||||
if (access(filename, R_OK)) { | if (access(filename, R_OK)) { | ||||
warn("could not open file: %s", filename); | warn("could not open file: %s", filename); | ||||
return 0; | return 0; | ||||
} else if (options->all || img_check(filename)) { | |||||
} else { | |||||
if (fileidx == filecnt) { | if (fileidx == filecnt) { | ||||
filecnt *= 2; | filecnt *= 2; | ||||
filenames = (const char**) s_realloc(filenames, | filenames = (const char**) s_realloc(filenames, | ||||
@@ -136,8 +171,6 @@ int check_append(const char *filename) { | |||||
} | } | ||||
filenames[fileidx++] = filename; | filenames[fileidx++] = filename; | ||||
return 1; | return 1; | ||||
} else { | |||||
return 0; | |||||
} | } | ||||
} | } | ||||
@@ -155,7 +188,7 @@ int main(int argc, char **argv) { | |||||
if (options->clean_cache) { | if (options->clean_cache) { | ||||
tns_init(&tns, 0); | tns_init(&tns, 0); | ||||
tns_clear_cache(&tns); | |||||
tns_clean_cache(&tns); | |||||
exit(0); | exit(0); | ||||
} | } | ||||
@@ -208,26 +241,27 @@ int main(int argc, char **argv) { | |||||
fileidx = 0; | fileidx = 0; | ||||
if (!filecnt) { | if (!filecnt) { | ||||
fprintf(stderr, "sxiv: no valid image filename given, aborting\n"); | |||||
fprintf(stderr, "sxiv: no valid image file given, aborting\n"); | |||||
exit(1); | exit(1); | ||||
} | } | ||||
win_open(&win); | |||||
win_init(&win); | |||||
img_init(&img, &win); | img_init(&img, &win); | ||||
if (options->thumbnails) { | if (options->thumbnails) { | ||||
mode = MODE_THUMBS; | mode = MODE_THUMBS; | ||||
tns_init(&tns, filecnt); | tns_init(&tns, filecnt); | ||||
win_clear(&win); | |||||
win_draw(&win); | |||||
while (!tns_load(&tns, 0, filenames[0], 0)) | |||||
remove_file(0, 0); | |||||
tns.cnt = 1; | |||||
} else { | } else { | ||||
mode = MODE_NORMAL; | mode = MODE_NORMAL; | ||||
tns.thumbs = NULL; | tns.thumbs = NULL; | ||||
load_image(fileidx); | load_image(fileidx); | ||||
img_render(&img, &win); | |||||
} | } | ||||
update_title(); | |||||
win_open(&win); | |||||
run(); | run(); | ||||
cleanup(); | cleanup(); | ||||
@@ -292,42 +326,9 @@ int run_command(const char *cline, Bool reload) { | |||||
} | } | ||||
#endif /* EXT_COMMANDS */ | #endif /* EXT_COMMANDS */ | ||||
void remove_file(int n) { | |||||
if (n < 0 || n >= filecnt) | |||||
return; | |||||
if (filecnt == 1) { | |||||
cleanup(); | |||||
exit(0); | |||||
} | |||||
if (n + 1 < filecnt) | |||||
memmove(filenames + n, filenames + n + 1, (filecnt - n - 1) * | |||||
sizeof(const char*)); | |||||
if (n + 1 < tns.cnt) { | |||||
memmove(tns.thumbs + n, tns.thumbs + n + 1, (tns.cnt - n - 1) * | |||||
sizeof(thumb_t)); | |||||
memset(tns.thumbs + tns.cnt - 1, 0, sizeof(thumb_t)); | |||||
} | |||||
--filecnt; | |||||
if (n < tns.cnt) | |||||
--tns.cnt; | |||||
} | |||||
/* event handling */ | /* event handling */ | ||||
#define TO_WIN_RESIZE 75000; | |||||
#define TO_IMAGE_DRAG 1000; | |||||
#define TO_CURSOR_HIDE 1500000; | |||||
#define TO_THUMBS_LOAD 75000; | |||||
int timo_cursor; | |||||
int timo_redraw; | |||||
unsigned char drag; | |||||
int mox, moy; | |||||
void redraw() { | void redraw() { | ||||
if (mode == MODE_NORMAL) { | if (mode == MODE_NORMAL) { | ||||
img_render(&img, &win); | img_render(&img, &win); | ||||
@@ -363,16 +364,24 @@ void on_keypress(XKeyEvent *kev) { | |||||
win_set_cursor(&win, CURSOR_WATCH); | win_set_cursor(&win, CURSOR_WATCH); | ||||
if (run_command(commands[x].cmdline, commands[x].reload)) { | if (run_command(commands[x].cmdline, commands[x].reload)) { | ||||
if (mode == MODE_NORMAL) { | if (mode == MODE_NORMAL) { | ||||
if (fileidx < tns.cnt) | |||||
tns_load(&tns, fileidx, filenames[fileidx], 1); | |||||
img_close(&img, 1); | img_close(&img, 1); | ||||
load_image(fileidx); | load_image(fileidx); | ||||
tns_load(&tns, &win, fileidx, filenames[fileidx]); | |||||
} else { | } else { | ||||
tns_load(&tns, &win, tns.sel, filenames[tns.sel]); | |||||
if (!tns_load(&tns, tns.sel, filenames[tns.sel], 0)) { | |||||
remove_file(tns.sel, 0); | |||||
tns.dirty = 1; | |||||
if (tns.sel >= tns.cnt) | |||||
tns.sel = tns.cnt - 1; | |||||
} | |||||
} | } | ||||
redraw(); | redraw(); | ||||
} | } | ||||
if (mode == MODE_THUMBS) | if (mode == MODE_THUMBS) | ||||
win_set_cursor(&win, CURSOR_ARROW); | win_set_cursor(&win, CURSOR_ARROW); | ||||
else if (!timo_cursor) | |||||
win_set_cursor(&win, CURSOR_NONE); | |||||
return; | return; | ||||
} | } | ||||
} | } | ||||
@@ -487,7 +496,7 @@ void on_keypress(XKeyEvent *kev) { | |||||
changed = 1; | changed = 1; | ||||
break; | break; | ||||
case XK_D: | case XK_D: | ||||
remove_file(fileidx); | |||||
remove_file(fileidx, 1); | |||||
changed = load_image(fileidx >= filecnt ? filecnt - 1 : fileidx); | changed = load_image(fileidx >= filecnt ? filecnt - 1 : fileidx); | ||||
break; | break; | ||||
case XK_r: | case XK_r: | ||||
@@ -532,11 +541,12 @@ void on_keypress(XKeyEvent *kev) { | |||||
tns.sel = tns.cnt - 1; | tns.sel = tns.cnt - 1; | ||||
changed = tns.dirty = 1; | changed = tns.dirty = 1; | ||||
} | } | ||||
break; | |||||
/* miscellaneous */ | /* miscellaneous */ | ||||
case XK_D: | case XK_D: | ||||
if (tns.sel < tns.cnt) { | if (tns.sel < tns.cnt) { | ||||
remove_file(tns.sel); | |||||
remove_file(tns.sel, 1); | |||||
changed = tns.dirty = 1; | changed = tns.dirty = 1; | ||||
if (tns.sel >= tns.cnt) | if (tns.sel >= tns.cnt) | ||||
tns.sel = tns.cnt - 1; | tns.sel = tns.cnt - 1; | ||||
@@ -663,17 +673,21 @@ void run() { | |||||
struct timeval tt, t0, t1; | struct timeval tt, t0, t1; | ||||
XEvent ev; | XEvent ev; | ||||
timo_cursor = timo_redraw = 0; | |||||
drag = 0; | drag = 0; | ||||
timo_cursor = mode == MODE_NORMAL ? TO_CURSOR_HIDE : 0; | |||||
redraw(); | |||||
while (1) { | while (1) { | ||||
if (mode == MODE_THUMBS && tns.cnt < filecnt) { | if (mode == MODE_THUMBS && tns.cnt < filecnt) { | ||||
win_set_cursor(&win, CURSOR_WATCH); | win_set_cursor(&win, CURSOR_WATCH); | ||||
gettimeofday(&t0, 0); | gettimeofday(&t0, 0); | ||||
while (!XPending(win.env.dpy) && tns.cnt < filecnt) { | |||||
/* tns.cnt is increased inside tns_load */ | |||||
tns_load(&tns, &win, tns.cnt, filenames[tns.cnt]); | |||||
while (tns.cnt < filecnt && !XPending(win.env.dpy)) { | |||||
if (tns_load(&tns, tns.cnt, filenames[tns.cnt], 0)) | |||||
++tns.cnt; | |||||
else | |||||
remove_file(tns.cnt, 0); | |||||
gettimeofday(&t1, 0); | gettimeofday(&t1, 0); | ||||
if (TV_TO_DOUBLE(t1) - TV_TO_DOUBLE(t0) >= 0.25) | if (TV_TO_DOUBLE(t1) - TV_TO_DOUBLE(t0) >= 0.25) | ||||
break; | break; | ||||
@@ -27,8 +27,6 @@ | |||||
#include "thumbs.h" | #include "thumbs.h" | ||||
#include "util.h" | #include "util.h" | ||||
extern Imlib_Image *im_invalid; | |||||
const int thumb_dim = THUMB_SIZE + 10; | const int thumb_dim = THUMB_SIZE + 10; | ||||
char *cache_dir = NULL; | char *cache_dir = NULL; | ||||
@@ -131,7 +129,7 @@ void tns_cache_write(thumb_t *t, Bool force) { | |||||
} | } | ||||
} | } | ||||
void tns_clear_cache(tns_t *tns) { | |||||
void tns_clean_cache(tns_t *tns) { | |||||
int dirlen, delete; | int dirlen, delete; | ||||
char *cfile, *filename, *tpos; | char *cfile, *filename, *tpos; | ||||
r_dir_t dir; | r_dir_t dir; | ||||
@@ -195,7 +193,7 @@ void tns_init(tns_t *tns, int cnt) { | |||||
} | } | ||||
} | } | ||||
void tns_free(tns_t *tns, win_t *win) { | |||||
void tns_free(tns_t *tns) { | |||||
int i; | int i; | ||||
if (!tns) | if (!tns) | ||||
@@ -218,22 +216,21 @@ void tns_free(tns_t *tns, win_t *win) { | |||||
} | } | ||||
} | } | ||||
void tns_load(tns_t *tns, win_t *win, int n, const char *filename) { | |||||
int tns_load(tns_t *tns, int n, const char *filename, unsigned char silent) { | |||||
int w, h; | int w, h; | ||||
int use_cache, cached = 0; | int use_cache, cached = 0; | ||||
float z, zw, zh; | float z, zw, zh; | ||||
thumb_t *t; | thumb_t *t; | ||||
Imlib_Image *im; | Imlib_Image *im; | ||||
if (!tns || !tns->thumbs || !win || !filename) | |||||
return; | |||||
if (!tns || !tns->thumbs || !filename) | |||||
return 0; | |||||
if (n >= tns->cap) | |||||
return; | |||||
else if (n >= tns->cnt) | |||||
tns->cnt = n + 1; | |||||
if (n < 0 || n >= tns->cap) | |||||
return 0; | |||||
t = &tns->thumbs[n]; | t = &tns->thumbs[n]; | ||||
t->filename = filename; | |||||
if (t->im) { | if (t->im) { | ||||
imlib_context_set_image(t->im); | imlib_context_set_image(t->im); | ||||
@@ -245,36 +242,35 @@ void tns_load(tns_t *tns, win_t *win, int n, const char *filename) { | |||||
cached = 1; | cached = 1; | ||||
} | } | ||||
if (cached || (im = imlib_load_image(filename))) | |||||
imlib_context_set_image(im); | |||||
else | |||||
imlib_context_set_image(im_invalid); | |||||
if (!cached && | |||||
(access(filename, R_OK) || !(im = imlib_load_image(filename)))) | |||||
{ | |||||
if (!silent) | |||||
warn("could not open image: %s", filename); | |||||
return 0; | |||||
} | |||||
imlib_context_set_image(im); | |||||
imlib_context_set_anti_alias(1); | |||||
w = imlib_image_get_width(); | w = imlib_image_get_width(); | ||||
h = imlib_image_get_height(); | h = imlib_image_get_height(); | ||||
if (im) { | |||||
t->filename = filename; | |||||
zw = (float) THUMB_SIZE / (float) w; | |||||
zh = (float) THUMB_SIZE / (float) h; | |||||
z = MIN(zw, zh); | |||||
} else { | |||||
t->filename = NULL; | |||||
z = 1.0; | |||||
} | |||||
zw = (float) THUMB_SIZE / (float) w; | |||||
zh = (float) THUMB_SIZE / (float) h; | |||||
z = MIN(zw, zh); | |||||
t->w = z * w; | t->w = z * w; | ||||
t->h = z * h; | t->h = z * h; | ||||
imlib_context_set_anti_alias(1); | |||||
if (!(t->im = imlib_create_cropped_scaled_image(0, 0, w, h, t->w, t->h))) | if (!(t->im = imlib_create_cropped_scaled_image(0, 0, w, h, t->w, t->h))) | ||||
die("could not allocate memory"); | die("could not allocate memory"); | ||||
if (im) | |||||
imlib_free_image_and_decache(); | |||||
imlib_free_image_and_decache(); | |||||
if (use_cache && !cached) | if (use_cache && !cached) | ||||
tns_cache_write(t, False); | tns_cache_write(t, False); | ||||
tns->dirty = 1; | tns->dirty = 1; | ||||
return 1; | |||||
} | } | ||||
void tns_check_view(tns_t *tns, Bool scrolled) { | void tns_check_view(tns_t *tns, Bool scrolled) { | ||||
@@ -52,12 +52,12 @@ typedef struct { | |||||
unsigned char dirty; | unsigned char dirty; | ||||
} tns_t; | } tns_t; | ||||
void tns_clear_cache(tns_t*); | |||||
void tns_clean_cache(tns_t*); | |||||
void tns_init(tns_t*, int); | void tns_init(tns_t*, int); | ||||
void tns_free(tns_t*, win_t*); | |||||
void tns_free(tns_t*); | |||||
void tns_load(tns_t*, win_t*, int, const char*); | |||||
int tns_load(tns_t*, int, const char*, unsigned char); | |||||
void tns_render(tns_t*, win_t*); | void tns_render(tns_t*, win_t*); | ||||
void tns_highlight(tns_t*, win_t*, int, Bool); | void tns_highlight(tns_t*, win_t*, int, Bool); | ||||
@@ -34,27 +34,9 @@ static GC gc; | |||||
Atom wm_delete_win; | Atom wm_delete_win; | ||||
void win_set_sizehints(win_t *win) { | |||||
XSizeHints sizehints; | |||||
if (!win) | |||||
return; | |||||
sizehints.flags = PMinSize | PMaxSize; | |||||
sizehints.min_width = win->w; | |||||
sizehints.max_width = win->w; | |||||
sizehints.min_height = win->h; | |||||
sizehints.max_height = win->h; | |||||
XSetWMNormalHints(win->env.dpy, win->xwin, &sizehints); | |||||
} | |||||
void win_open(win_t *win) { | |||||
void win_init(win_t *win) { | |||||
win_env_t *e; | win_env_t *e; | ||||
XClassHint classhint; | |||||
XColor col; | XColor col; | ||||
char none_data[] = {0, 0, 0, 0, 0, 0, 0, 0}; | |||||
Pixmap none; | |||||
int gmask; | |||||
if (!win) | if (!win) | ||||
return; | return; | ||||
@@ -75,18 +57,52 @@ void win_open(win_t *win) { | |||||
if (XAllocNamedColor(e->dpy, DefaultColormap(e->dpy, e->scr), BG_COLOR, | if (XAllocNamedColor(e->dpy, DefaultColormap(e->dpy, e->scr), BG_COLOR, | ||||
&col, &col)) | &col, &col)) | ||||
{ | |||||
win->bgcol = col.pixel; | win->bgcol = col.pixel; | ||||
else | |||||
} else { | |||||
die("could not allocate color: %s", BG_COLOR); | die("could not allocate color: %s", BG_COLOR); | ||||
} | |||||
if (XAllocNamedColor(e->dpy, DefaultColormap(e->dpy, e->scr), SEL_COLOR, | if (XAllocNamedColor(e->dpy, DefaultColormap(e->dpy, e->scr), SEL_COLOR, | ||||
&col, &col)) | &col, &col)) | ||||
{ | |||||
win->selcol = col.pixel; | win->selcol = col.pixel; | ||||
else | |||||
die("could not allocate color: %s", BG_COLOR); | |||||
} else { | |||||
die("could not allocate color: %s", SEL_COLOR); | |||||
} | |||||
win->xwin = 0; | |||||
win->pm = 0; | win->pm = 0; | ||||
win->fullscreen = 0; | win->fullscreen = 0; | ||||
} | |||||
void win_set_sizehints(win_t *win) { | |||||
XSizeHints sizehints; | |||||
if (!win || !win->xwin) | |||||
return; | |||||
sizehints.flags = PMinSize | PMaxSize; | |||||
sizehints.min_width = win->w; | |||||
sizehints.max_width = win->w; | |||||
sizehints.min_height = win->h; | |||||
sizehints.max_height = win->h; | |||||
XSetWMNormalHints(win->env.dpy, win->xwin, &sizehints); | |||||
} | |||||
void win_open(win_t *win) { | |||||
win_env_t *e; | |||||
XClassHint classhint; | |||||
XColor col; | |||||
char none_data[] = {0, 0, 0, 0, 0, 0, 0, 0}; | |||||
Pixmap none; | |||||
int gmask; | |||||
if (!win) | |||||
return; | |||||
e = &win->env; | |||||
/* determine window offsets, width & height */ | /* determine window offsets, width & height */ | ||||
if (!options->geometry) | if (!options->geometry) | ||||
gmask = 0; | gmask = 0; | ||||
@@ -125,7 +141,9 @@ void win_open(win_t *win) { | |||||
if (!XAllocNamedColor(e->dpy, DefaultColormap(e->dpy, e->scr), "black", | if (!XAllocNamedColor(e->dpy, DefaultColormap(e->dpy, e->scr), "black", | ||||
&col, &col)) | &col, &col)) | ||||
{ | |||||
die("could not allocate color: black"); | die("could not allocate color: black"); | ||||
} | |||||
none = XCreateBitmapFromData(e->dpy, win->xwin, none_data, 8, 8); | none = XCreateBitmapFromData(e->dpy, win->xwin, none_data, 8, 8); | ||||
cnone = XCreatePixmapCursor(e->dpy, none, none, &col, &col, 0, 0); | cnone = XCreatePixmapCursor(e->dpy, none, none, &col, &col, 0, 0); | ||||
@@ -151,7 +169,7 @@ void win_open(win_t *win) { | |||||
} | } | ||||
void win_close(win_t *win) { | void win_close(win_t *win) { | ||||
if (!win) | |||||
if (!win || !win->xwin) | |||||
return; | return; | ||||
XFreeCursor(win->env.dpy, carrow); | XFreeCursor(win->env.dpy, carrow); | ||||
@@ -183,7 +201,7 @@ int win_configure(win_t *win, XConfigureEvent *c) { | |||||
} | } | ||||
int win_moveresize(win_t *win, int x, int y, unsigned int w, unsigned int h) { | int win_moveresize(win_t *win, int x, int y, unsigned int w, unsigned int h) { | ||||
if (!win) | |||||
if (!win || !win->xwin) | |||||
return 0; | return 0; | ||||
x = MAX(0, x); | x = MAX(0, x); | ||||
@@ -211,7 +229,7 @@ void win_toggle_fullscreen(win_t *win) { | |||||
XEvent ev; | XEvent ev; | ||||
XClientMessageEvent *cm; | XClientMessageEvent *cm; | ||||
if (!win) | |||||
if (!win || !win->xwin) | |||||
return; | return; | ||||
win->fullscreen ^= 1; | win->fullscreen ^= 1; | ||||
@@ -236,7 +254,7 @@ void win_clear(win_t *win) { | |||||
win_env_t *e; | win_env_t *e; | ||||
XGCValues gcval; | XGCValues gcval; | ||||
if (!win) | |||||
if (!win || !win->xwin) | |||||
return; | return; | ||||
e = &win->env; | e = &win->env; | ||||
@@ -251,7 +269,7 @@ void win_clear(win_t *win) { | |||||
} | } | ||||
void win_draw(win_t *win) { | void win_draw(win_t *win) { | ||||
if (!win) | |||||
if (!win || !win->xwin) | |||||
return; | return; | ||||
XSetWindowBackgroundPixmap(win->env.dpy, win->xwin, win->pm); | XSetWindowBackgroundPixmap(win->env.dpy, win->xwin, win->pm); | ||||
@@ -276,7 +294,7 @@ void win_draw_rect(win_t *win, Pixmap pm, int x, int y, int w, int h, | |||||
} | } | ||||
void win_set_title(win_t *win, const char *title) { | void win_set_title(win_t *win, const char *title) { | ||||
if (!win) | |||||
if (!win || !win->xwin) | |||||
return; | return; | ||||
if (!title) | if (!title) | ||||
@@ -296,7 +314,7 @@ void win_set_title(win_t *win, const char *title) { | |||||
} | } | ||||
void win_set_cursor(win_t *win, win_cur_t cursor) { | void win_set_cursor(win_t *win, win_cur_t cursor) { | ||||
if (!win) | |||||
if (!win || !win->xwin) | |||||
return; | return; | ||||
switch (cursor) { | switch (cursor) { | ||||
@@ -60,6 +60,7 @@ typedef struct { | |||||
extern Atom wm_delete_win; | extern Atom wm_delete_win; | ||||
void win_init(win_t*); | |||||
void win_open(win_t*); | void win_open(win_t*); | ||||
void win_close(win_t*); | void win_close(win_t*); | ||||