eolBool eol_component_button_update(eolComponent *component) { eolVec2D v; eolInt x,y; if (!component)return eolFalse; component->oldState = component->state; eol_mouse_get_position(&x,&y); v.x = x; v.y = y; if (eol_vec_in_rect(v,component->bounds)) { component->state = eolButtonHighlight; if (eol_mouse_input_held(eolMouseLeft)) { component->state = eolButtonPressed; return eolFalse; } if (eol_mouse_input_pressed(eolMouseLeft)) { component->state = eolButtonPressed; return eolFalse; } else if (eol_mouse_input_released(eolMouseLeft)) { component->state = eolButtonIdle; return eolTrue; } } else { component->state = eolButtonIdle; } return eolFalse; }
eolBool editor_tile_panel_update(eolWindow *win,GList *updates) { eolUint id; GList *c,*l; editorTileData*tileData; eolComponent *comp = NULL,*listItem = NULL; if (win == NULL)return eolFalse; tileData = editor_tile_get_data(win); if (!tileData)return eolFalse; for (c = updates;c != NULL;c = c->next) { if (c->data == NULL)continue; comp = (eolComponent *)c->data; if (eol_line_cmp(comp->name,"mode_button")==0) { tileData->editingMode = (tileData->editingMode + 1)%TEM_MODES; switch(tileData->editingMode) { case TEM_Paint: eol_button_set_text(comp,"Tile Paint Mode"); break; case TEM_Select: eol_button_set_text(comp,"Tile Modify Mode"); break; case TEM_Type: eol_button_set_text(comp,"Archetype Modify Mode"); break; } return eolTrue; } else if (eol_line_cmp(comp->name,"tile_type_list")==0) { if (eol_component_list_get_selected_id(&id,comp)) { tileData->selectedTileType = editor_workspace_get_tile_by_id(tileData->workspace,id); return eolTrue; } } else if (eol_line_cmp(comp->name,"tile_actions") == 0) { /*something in the list of buttons*/ for (l = eol_list_get_updates(comp);l != NULL; l = l->next) { if (l->data == NULL)continue; listItem = (eolComponent *)l->data; if (eol_line_cmp(listItem->name,"new_tile_type")==0) { return eolTrue; } } } } if (eol_mouse_input_released(eolMouseLeft)) { if (editor_workspace_mouse_click(tileData->workspace)) { switch(tileData->editingMode) { case TEM_Paint: if (!tileData->selectedTileType) { eol_logger_message(EOL_LOG_ERROR,"No tile to add"); break; } editor_workspace_add_mouse_tile(tileData->workspace,tileData->selectedTileType->id); return eolTrue; default: eol_logger_message(EOL_LOG_ERROR,"not in paint mode"); } } } return eolFalse; }
eolBool eol_component_list_update(eolComponent *component) { GList *it = NULL,*c = NULL; eolVec2D scaleArea; eolFloat slide = 0; eolComponentList *list; eolComponentListItem *item = NULL; eolBool updated = eolFalse; list = eol_component_get_list_data(component); if (list == NULL)return eolFalse; if (list->updatedItems != NULL) { g_list_free(list->updatedItems); list->updatedItems = NULL; } /*Update Sliders if visible*/ scaleArea = eol_component_list_scaleable_area(list); if ((list->showVSlider) && (fabs(scaleArea.y) > 1)) { if (eol_component_update(list->vSlider)) { updated = eolTrue; slide = eol_slider_get_position(list->vSlider); list->topOffset.y = (scaleArea.y * slide); } slide = eol_slider_get_position(list->vSlider); list->topOffset.y = (scaleArea.y * slide); } slide = 0; if ((list->showHSlider) && (fabs(scaleArea.x) > 1)) { if (eol_component_update(list->hSlider) || updated) { updated = eolTrue; } slide = eol_slider_get_position(list->hSlider); list->topOffset.x = (scaleArea.x * slide); } /*iterate through glist and update elements*/ for (c = list->itemList;c != NULL; c= c->next) { if (c->data != NULL) { item = (eolComponentListItem*)c->data; if (eol_component_update(item->item)) { list->updatedItems = g_list_append(list->updatedItems ,item->item); } } } if (list->updatedItems) { updated = eolTrue; } /*check for selection:*/ if (list->allowSelection) { for (it = list->itemList;it != NULL;it = it->next) { if (!it->data)continue; item = (eolComponentListItem*)it->data; if ((eol_mouse_in_rect(item->item->bounds)) && (eol_list_item_bound_check(list,item->item->bounds))) { item->highlight = eolTrue; if (eol_mouse_input_released(eolMouseLeft)) { eol_component_list_select_item(component,item); list->selection = it; updated = eolTrue; } } else item->highlight = eolFalse; } } return updated; }