diff options
Diffstat (limited to 'src/widget/widget_buttonimage.c')
| -rw-r--r-- | src/widget/widget_buttonimage.c | 55 |
1 files changed, 44 insertions, 11 deletions
diff --git a/src/widget/widget_buttonimage.c b/src/widget/widget_buttonimage.c index 6dfbe66..27e94a3 100644 --- a/src/widget/widget_buttonimage.c +++ b/src/widget/widget_buttonimage.c @@ -1,37 +1,61 @@ #include <stdlib.h> +#include <assert.h> + #include "main.h" #include "interface.h" #include "font.h" #include "image.h" + +#include "widget.h" #include "widget_buttonimage.h" -widget_buttonimage_t* newWidgetButtonimage(image_t *image, int x, int y, void (*fce_event)(void *)) +widget_t* newWidgetButtonimage(image_t *image, int x, int y, void (*fce_event)(void *)) { widget_buttonimage_t *new; new = malloc( sizeof(widget_buttonimage_t) ); new->image = image; - new->x = x; - new->y = y; new->w = image->w/2; new->h = image->h; new->active = 0; new->fce_event = fce_event; - return new; + return newWidget(WIDGET_TYPE_BUTTONIMAGE, x, y, new->w, new->h, new); } -void drawWidgetButtonimage(widget_buttonimage_t *p) +void setWidgetButtonimageActive(widget_t *widget, bool_t active) { - drawImage(p->image, p->x, p->y, p->active*p->w, 0, p->w, p->h); + widget_buttonimage_t *p; + + assert( widget != NULL ); + assert( widget->type == WIDGET_TYPE_BUTTONIMAGE ); + + p = (widget_buttonimage_t *)widget->private_data; + p->active = active; } -void eventWidgetButtonimage(widget_buttonimage_t *p) +void drawWidgetButtonimage(widget_t *widget) { + widget_buttonimage_t *p; + + assert( widget != NULL ); + assert( widget->type == WIDGET_TYPE_BUTTONIMAGE ); + + p = (widget_buttonimage_t *)widget->private_data; + drawImage(p->image, widget->x, widget->y, p->active*p->w, 0, p->w, p->h); +} + +void eventWidgetButtonimage(widget_t *widget) +{ + widget_buttonimage_t *p; static int time = 0; int x, y; + assert( widget != NULL ); + assert( widget->type == WIDGET_TYPE_BUTTONIMAGE ); + + p = (widget_buttonimage_t *) widget->private_data; if( time > 0) { time--; @@ -40,16 +64,25 @@ void eventWidgetButtonimage(widget_buttonimage_t *p) getMousePosition(&x, &y); - if( x >= p->x && x <= p->x+p->w && - y >= p->y && y <= p->y+p->h && + if( x >= widget->x && x <= widget->x+p->w && + y >= widget->y && y <= widget->y+p->h && isMouseClicked() ) { time = WIDGET_BUTTONIMAGE_TIME; - p->fce_event(p); + p->active = 1; + p->fce_event(widget); } } -void destroyWidgetButtonimage(widget_buttonimage_t *p) +void destroyWidgetButtonimage(widget_t *widget) { + widget_buttonimage_t *p; + + assert( widget != NULL ); + assert( widget->type == WIDGET_TYPE_BUTTONIMAGE ); + + p = (widget_buttonimage_t *) widget->private_data; + free(p); + destroyWidget(widget); } |