unsigned char *bitmap = Icon->bitmap + YRES * Icon->curmap;
int layer, row, col;
int x, y;
-
+ int visible;
+
layer = W->layer;
row = YRES * W->row;
col = XRES * W->col;
/* maybe grow layout framebuffer */
drv_generic_graphic_resizeFB(row + YRES, col + XRES);
+ /* Icon visible? */
+ visible = P2N(&Icon->visible) > 0;
+
/* render icon */
for (y = 0; y < YRES; y++) {
int mask = 1 << XRES;
for (x = 0; x < XRES; x++) {
int i = (row + y) * LCOLS + col + x;
mask >>= 1;
- if (Icon->visible) {
+ if (visible) {
if (bitmap[y] & mask)
drv_generic_graphic_FB[layer][i] = fg;
else
}
}
}
-
+
/* flush area */
drv_generic_graphic_blit(row, col, YRES, XRES);
-
+
return 0;
}
static int icon_counter = 0;
WIDGET_ICON *Icon = W->data;
int row, col;
+ int visible;
int invalidate = 0;
unsigned char ascii;
Icon->ascii = CHAR0 + CHARS - icon_counter;
}
+ /* Icon visible? */
+ visible = P2N(&Icon->visible) > 0;
+
/* maybe redefine icon */
- if (Icon->curmap != Icon->prvmap && Icon->visible) {
+ if (Icon->curmap != Icon->prvmap && visible) {
Icon->prvmap = Icon->curmap;
if (drv_generic_text_real_defchar)
drv_generic_text_real_defchar(Icon->ascii, Icon->bitmap + YRES * Icon->curmap);
}
/* use blank if invisible */
- ascii = Icon->visible ? Icon->ascii : ' ';
+ ascii = visible ? Icon->ascii : ' ';
/* transfer icon into layout buffer */
LayoutFB[row * LCOLS + col] = ascii;
#include "debug.h"
#include "cfg.h"
#include "qprintf.h"
-#include "evaluator.h"
+#include "property.h"
#include "timer.h"
#include "widget.h"
#include "widget_icon.h"
{
WIDGET *W = (WIDGET *) Self;
WIDGET_ICON *Icon = W->data;
- RESULT result = { 0, 0, 0, NULL };
/* process the parent only */
if (W->parent == NULL) {
- /* evaluate expressions */
- Icon->speed = 100;
- if (Icon->speed_tree != NULL) {
- Eval(Icon->speed_tree, &result);
- Icon->speed = R2N(&result);
- if (Icon->speed <= 0)
- Icon->speed = 0;
- else if (Icon->speed < 10)
- Icon->speed = 10;
- DelResult(&result);
- }
-
- Icon->visible = 1;
- if (Icon->visible_tree != NULL) {
- Eval(Icon->visible_tree, &result);
- Icon->visible = R2N(&result);
- if (Icon->visible < 0)
- Icon->visible = 0;
- DelResult(&result);
- }
+ /* evaluate properties */
+ property_eval(&Icon->speed);
+ property_eval(&Icon->visible);
/* rotate icon bitmap */
Icon->curmap++;
W->class->draw(W);
/* add a new one-shot timer */
- if (Icon->speed > 0) {
- timer_add(widget_icon_update, Self, Icon->speed, 1);
+ if (P2N(&Icon->speed) > 0) {
+ timer_add(widget_icon_update, Self, P2N(&Icon->speed), 1);
}
}
Icon = malloc(sizeof(WIDGET_ICON));
memset(Icon, 0, sizeof(WIDGET_ICON));
- /* get raw expressions (we evaluate them ourselves) */
- Icon->speed_expr = cfg_get_raw(section, "speed", NULL);
- Icon->visible_expr = cfg_get_raw(section, "visible", NULL);
-
- /* sanity check */
- if (Icon->speed_expr == NULL || *Icon->speed_expr == '\0') {
- error("Icon %s has no speed, using '100'", Self->name);
- Icon->speed_expr = "100";
- }
-
- /* compile'em */
- Compile(Icon->speed_expr, &Icon->speed_tree);
- Compile(Icon->visible_expr, &Icon->visible_tree);
+ /* load properties */
+ property_load(section, "speed", "100", &Icon->speed);
+ property_load(section, "visible", "1", &Icon->visible);
/* read bitmap */
widget_icon_read_bitmap(section, Icon);
if (Self->parent == NULL) {
if (Self->data) {
WIDGET_ICON *Icon = Self->data;
- DelTree(Icon->speed_tree);
- DelTree(Icon->visible_tree);
+ property_free(&Icon->speed);
+ property_free(&Icon->visible);
if (Icon->bitmap)
free(Icon->bitmap);
free(Self->data);
#ifndef _WIDGET_ICON_H_
#define _WIDGET_ICON_H_
+
+#include "property.h"
+
+
typedef struct WIDGET_ICON {
- char *speed_expr; /* expression for update interval */
- void *speed_tree; /* pre-compiled expression for update interval */
- int speed; /* update interval (msec) */
- char *visible_expr; /* expression for visibility */
- void *visible_tree; /* pre-compiled expression for visibility */
- int visible; /* icon visible? */
+ PROPERTY speed; /* update interval (msec) */
+ PROPERTY visible; /* icon visible? */
int ascii; /* ascii code of icon (depends on the driver) */
int curmap; /* current bitmap sequence */
int prvmap; /* previous bitmap sequence */
unsigned char *bitmap; /* bitmaps of (animated) icon */
} WIDGET_ICON;
+
extern WIDGET_CLASS Widget_Icon;
#endif