|
|
|
|
@ -1,4 +1,4 @@
|
|
|
|
|
/* $Id: gui.c,v 1.22 2013/03/29 00:14:55 steffen Exp $ */
|
|
|
|
|
/* $Id: gui.c,v 1.23 2013/04/03 21:52:27 steffen Exp $ */
|
|
|
|
|
/***************************************************************************
|
|
|
|
|
* gui.c
|
|
|
|
|
*
|
|
|
|
|
@ -164,93 +164,35 @@ void gui_draw () {
|
|
|
|
|
* return 0 for nothing done.. or 1 for eventhandling done
|
|
|
|
|
*/
|
|
|
|
|
int gui_event (GUIEvent event) {
|
|
|
|
|
int i;
|
|
|
|
|
iPoint winpos = { 0 };
|
|
|
|
|
static int event_called = 0;
|
|
|
|
|
GUIItem *item = NULL;
|
|
|
|
|
|
|
|
|
|
if (event_called) return 1;
|
|
|
|
|
event_called = 1;
|
|
|
|
|
|
|
|
|
|
if (currentwin) {
|
|
|
|
|
winpos.x = event.mousepos.x - currentwin->x;
|
|
|
|
|
winpos.y = event.mousepos.y - currentwin->y;
|
|
|
|
|
|
|
|
|
|
item = currentwin->focus;
|
|
|
|
|
|
|
|
|
|
/* check if softkeyb if opened */
|
|
|
|
|
if ((softkeyb && softkeyb->enabled && softkeyb->screen)
|
|
|
|
|
&& (event.event == EGUI_MOUSERELEASED || event.event == EGUI_MOUSEPRESSED)) {
|
|
|
|
|
int x1 = (gfx_screensize.x-softkeyb->screen->width)/2,
|
|
|
|
|
x2 = gfx_screensize.x-(gfx_screensize.x-softkeyb->screen->width)/2,
|
|
|
|
|
y1 = gfx_screensize.y-softkeyb->screen->height,
|
|
|
|
|
y2 = gfx_screensize.y;
|
|
|
|
|
|
|
|
|
|
if ( x1 <= event.mousepos.x && x2 >= event.mousepos.x
|
|
|
|
|
&& y1 <= event.mousepos.y && y2 >= event.mousepos.y) {
|
|
|
|
|
gui_softkeyb_event (event);
|
|
|
|
|
event_called = 0;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < GUI_MAX_ITEM; i++) if (currentwin->items[i] != NULL)
|
|
|
|
|
if (GUI_ITEM_IS_INSIDE (currentwin->items[i], winpos))
|
|
|
|
|
item = currentwin->items[i];
|
|
|
|
|
|
|
|
|
|
if (item) switch (item->type) {
|
|
|
|
|
case (GUI_BUTTON):
|
|
|
|
|
event.mousepos = winpos;
|
|
|
|
|
gui_button_event (item, &event);
|
|
|
|
|
event_called = 0;
|
|
|
|
|
return 1;
|
|
|
|
|
break;
|
|
|
|
|
case (GUI_ENTRY):
|
|
|
|
|
event.mousepos = winpos;
|
|
|
|
|
gui_entry_event (item, &event);
|
|
|
|
|
event_called = 0;
|
|
|
|
|
return 1;
|
|
|
|
|
break;
|
|
|
|
|
case (GUI_LIST):
|
|
|
|
|
event.mousepos = winpos;
|
|
|
|
|
gui_list_event (item, &event);
|
|
|
|
|
event_called = 0;
|
|
|
|
|
return 1;
|
|
|
|
|
break;
|
|
|
|
|
case (GUI_CHECKBOX):
|
|
|
|
|
gui_checkbox_event (item, &event);
|
|
|
|
|
event_called = 0;
|
|
|
|
|
return 1;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
event.guiwin_mpos.x = event.scr_mpos.x - currentwin->x;
|
|
|
|
|
event.guiwin_mpos.y = event.scr_mpos.y - currentwin->y;
|
|
|
|
|
if (gui_window_event (currentwin, &event)) return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* no gui active nor any window is responsible.. */
|
|
|
|
|
// d_printf ("no event..");
|
|
|
|
|
switch (event.event) {
|
|
|
|
|
case (EGUI_MOUSERELEASED):
|
|
|
|
|
draw_mousebtnup (event.mousepos.x, event.mousepos.y, event.mousebtn);
|
|
|
|
|
draw_mousebtnup (event.scr_mpos.x, event.scr_mpos.y, event.mousebtn);
|
|
|
|
|
break;
|
|
|
|
|
case (EGUI_MOUSEPRESSED):
|
|
|
|
|
draw_mousebtndown (event.mousepos.x, event.mousepos.y, event.mousebtn);
|
|
|
|
|
draw_mousebtndown (event.scr_mpos.x, event.scr_mpos.y, event.mousebtn);
|
|
|
|
|
break;
|
|
|
|
|
case (EGUI_MOUSEMOVE):
|
|
|
|
|
draw_mousemove (event.mousepos.x, event.mousepos.y, 0);
|
|
|
|
|
draw_mousemove (event.scr_mpos.x, event.scr_mpos.y, 0);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
event_called = 0;
|
|
|
|
|
return 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void gui_event_addmousepos (GUIEvent *event, iPoint pos, int neg) {
|
|
|
|
|
event->mousepos.x += neg ? pos.x : -pos.x;
|
|
|
|
|
event->mousepos.y += neg ? pos.y : -pos.y;
|
|
|
|
|
event->scr_mpos.x += neg ? pos.x : -pos.x;
|
|
|
|
|
event->scr_mpos.y += neg ? pos.y : -pos.y;
|
|
|
|
|
return;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|