/*Tree related functions*/ void entropy_etk_layout_tree_cb(Etk_Object* obj, void* data) { entropy_gui_component_instance* instance = data; entropy_layout_gui* gui = instance->data; if (!etk_widget_is_visible(gui->tree)) { entropy_etk_layout_tree_show(gui,1); } else { entropy_etk_layout_tree_show(gui,0); } }
Ret etk_window_on_event(EtkWidget* thiz, EtkEvent* event){ EtkWindowClass *priv=(EtkWindowClass*)thiz->subclass; Ret ret; EtkEvent e; if(event==NULL) return; //dbg_printf("==etk_window_on_event\n"); switch(event->type){ case ETK_EVENT_UPDATE: etk_widget_paint_all(thiz); //etk_window_update(thiz,&event->u.rect); break; case ETK_EVENT_MOVE_RESIZE: //dbg_printf("ETK_EVENT_MOVE_RESIZE\n"); if(etk_widget_is_visible(thiz)){ etk_wnd_manager_update(etk_default_wnd_manager()); } break; case ETK_EVENT_SHOW: //printf("WINDOW ETK_EVENT_SHOW\n"); etk_widget_paint(thiz); etk_event_init(&e, ETK_EVENT_SHOW); e.widget = thiz; etk_wnd_manager_dispatch_event(etk_default_wnd_manager(),&e); break; case ETK_EVENT_HIDE: etk_event_init(&e, ETK_EVENT_HIDE); e.widget = thiz; etk_wnd_manager_dispatch_event(etk_default_wnd_manager(), &e); break; case ETK_EVENT_MOUSE_DOWN: case ETK_EVENT_MOUSE_UP: case ETK_EVENT_MOUSE_MOVE: case ETK_EVENT_MOUSE_LONG_PRESS:{ ret = etk_window_on_mouse_event(thiz,event); break; } case ETK_EVENT_KEY_DOWN: case ETK_EVENT_KEY_UP: case ETK_EVENT_KEY_LONG_PRESS:{ ret = etk_window_on_key_event(thiz,event); break; } default: break; } }
bool EtkWidget::isVisible() const { return etk_widget_is_visible( ETK_WIDGET(_o) ); }
/* Resizes the vbox to the allocated size */ static void _etk_vbox_size_allocate(Etk_Widget *widget, Etk_Geometry geometry) { Etk_VBox *vbox; Etk_Box *box; Etk_Container *container; Etk_Widget *child; Etk_Box_Cell *cell; Etk_Size requested_size; Etk_Size allocated_size; Etk_Geometry child_geometry; int num_children_to_expand = 0; int i, j; float start_offset, end_offset; float height; if (!(vbox = ETK_VBOX(widget))) return; box = ETK_BOX(vbox); container = ETK_CONTAINER(vbox); _etk_vbox_size_request(widget, &requested_size); requested_size.w -= 2 * container->border_width; requested_size.h -= 2 * container->border_width; allocated_size.w = geometry.w - 2 * container->border_width; allocated_size.h = geometry.h - 2 * container->border_width; start_offset = container->border_width; end_offset = container->border_width; if (allocated_size.h <= requested_size.h) { float ratio; ratio = (float)allocated_size.h / requested_size.h; for (i = 0; i < 2; i++) { j = (i == ETK_BOX_START) ? 0 : box->cells_count[i] - 1; cell = (i == ETK_BOX_START) ? box->first_cell[i] : box->last_cell[i]; while (cell) { child = cell->child; if (etk_widget_is_visible(child)) { height = box->request_sizes[i][j] * ratio; child_geometry.x = geometry.x + container->border_width; child_geometry.w = allocated_size.w; child_geometry.h = height; if (cell->group == ETK_BOX_START) { child_geometry.y = geometry.y + start_offset; start_offset += height + box->spacing; } else { child_geometry.y = geometry.y + geometry.h - end_offset - child_geometry.h; end_offset += height + box->spacing; } child_geometry.y += cell->padding; child_geometry.h -= 2 * cell->padding; etk_container_child_space_fill(child, &child_geometry, !(cell->fill_policy & ETK_BOX_SHRINK_OPPOSITE), cell->fill_policy & ETK_BOX_FILL, 0.5, 0.5); etk_widget_size_allocate(child, child_geometry); } cell = (i == ETK_BOX_START) ? cell->next : cell->prev; j = (i == ETK_BOX_START) ? (j + 1) : (j - 1); } } } else { float free_space; for (i = 0; i < 2; i++) { for (cell = box->first_cell[i]; cell; cell = cell->next) { child = cell->child; if (!etk_widget_is_visible(child)) continue; if (cell->fill_policy & ETK_BOX_EXPAND) num_children_to_expand++; } } if (num_children_to_expand <= 0) free_space = 0; else free_space = (float)(allocated_size.h - requested_size.h) / num_children_to_expand; for (i = 0; i < 2; i++) { j = (i == ETK_BOX_START) ? 0 : box->cells_count[i] - 1; cell = (i == ETK_BOX_START) ? box->first_cell[i] : box->last_cell[i]; while (cell) { child = cell->child; if (etk_widget_is_visible(child)) { height = box->request_sizes[i][j]; if (cell->fill_policy & ETK_BOX_EXPAND) height += free_space; child_geometry.x = geometry.x + container->border_width; child_geometry.w = allocated_size.w; child_geometry.h = height; if (cell->group == ETK_BOX_START) { child_geometry.y = geometry.y + start_offset; start_offset += height + box->spacing; } else { child_geometry.y = geometry.y + geometry.h - end_offset - child_geometry.h; end_offset += height + box->spacing; } child_geometry.y += cell->padding; child_geometry.h -= 2 * cell->padding; etk_container_child_space_fill(child, &child_geometry, !(cell->fill_policy & ETK_BOX_SHRINK_OPPOSITE), cell->fill_policy & ETK_BOX_FILL, 0.5, 0.5); etk_widget_size_allocate(child, child_geometry); } cell = (i == ETK_BOX_START) ? cell->next : cell->prev; j = (i == ETK_BOX_START) ? (j + 1) : (j - 1); } } } }
/* Calculates the ideal size of the vbox */ static void _etk_vbox_size_request(Etk_Widget *widget, Etk_Size *size) { Etk_VBox *vbox; Etk_Box *box; Etk_Container *container; Etk_Box_Cell *cell; Etk_Widget *child; Etk_Size child_size; int num_visible_children; int i, j; if (!(vbox = ETK_VBOX(widget)) || !size) return; box = ETK_BOX(vbox); container = ETK_CONTAINER(vbox); size->w = 0; size->h = 0; num_visible_children = 0; for (i = 0; i < 2; i++) { box->request_sizes[i] = realloc(box->request_sizes[i], box->cells_count[i] * sizeof(int)); for (cell = box->first_cell[i], j = 0; cell; cell = cell->next, j++) { child = cell->child; box->request_sizes[i][j] = 0; if (!etk_widget_is_visible(child)) continue; etk_widget_size_request(child, &child_size); if (box->homogeneous) { if (size->h < child_size.h + 2 * cell->padding) size->h = child_size.h + 2 * cell->padding; } else { box->request_sizes[i][j] = child_size.h + 2 * cell->padding; size->h += box->request_sizes[i][j]; } if (size->w < child_size.w) size->w = child_size.w; num_visible_children++; } } if (box->homogeneous) { for (i = 0; i < 2; i++) { for (j = 0; j < box->cells_count[i]; j++) box->request_sizes[i][j] = size->h; } size->h *= num_visible_children; } if (num_visible_children > 1) size->h += (num_visible_children - 1) * box->spacing; size->w += 2 * container->border_width; size->h += 2 * container->border_width; }
/* Called when a widget is added to the toolbar's box */ static Etk_Bool _etk_toolbar_child_added_cb(Etk_Object *object, Etk_Widget *child, void *data) { Etk_Toolbar *toolbar; if (!(toolbar = ETK_TOOLBAR(data)) || !child) return ETK_TRUE; /* Sets the style and the stock size if the new child is a tool-item */ if (ETK_IS_TOOL_ITEM(child)) { Etk_Button_Style button_style; switch (toolbar->style) { case ETK_TOOLBAR_ICON: button_style = ETK_BUTTON_ICON; break; case ETK_TOOLBAR_TEXT: button_style = ETK_BUTTON_TEXT; break; case ETK_TOOLBAR_BOTH_VERT: button_style = ETK_BUTTON_BOTH_VERT; break; case ETK_TOOLBAR_BOTH_HORIZ: button_style = ETK_BUTTON_BOTH_HORIZ; break; default: button_style = ETK_BUTTON_BOTH_VERT; break; } etk_button_style_set(ETK_BUTTON(child), button_style); etk_button_stock_size_set(ETK_BUTTON(child), toolbar->stock_size); } /* Reorientate the separators */ else if (toolbar->reorientating && (((toolbar->orientation == ETK_TOOLBAR_HORIZ) && ETK_IS_VSEPARATOR(child)) || ((toolbar->orientation == ETK_TOOLBAR_VERT) && ETK_IS_HSEPARATOR(child)))) { Etk_Bool visible; Etk_Box_Fill_Policy policy; Etk_Box_Group group; int pos, padding; visible = etk_widget_is_visible(child); etk_box_child_position_get(ETK_BOX(toolbar->box), child, &group, &pos); etk_box_child_packing_get(ETK_BOX(toolbar->box), child, &policy, &padding); etk_object_destroy(ETK_OBJECT(child)); if (toolbar->orientation == ETK_TOOLBAR_HORIZ) child = etk_vseparator_new(); else child = etk_hseparator_new(); etk_box_insert_at(ETK_BOX(toolbar->box), child, group, pos, policy, padding); if (visible) etk_widget_show(child); } if (etk_theme_group_exists(etk_widget_theme_file_get(ETK_WIDGET(toolbar)), etk_widget_theme_group_get(child), etk_widget_theme_group_get(ETK_WIDGET(toolbar)))) { etk_widget_theme_parent_set(child, ETK_WIDGET(toolbar)); } //etk_signal_emit(ETK_CONTAINER_CHILD_ADDED_SIGNAL, ETK_OBJECT(toolbar), child); return ETK_TRUE; }