/* Gadcon Api Functions */ static E_Gadcon_Client * _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style) { E_AppMenu_Instance *inst; E_AppMenu_Context *ctxt; EINA_SAFETY_ON_NULL_RETURN_VAL(appmenu_module, NULL); inst = calloc(1, sizeof(E_AppMenu_Instance)); EINA_SAFETY_ON_NULL_RETURN_VAL(inst, NULL); ctxt = appmenu_module->data; ctxt->instances = eina_list_append(ctxt->instances, inst); inst->evas = gc->evas; inst->ctx = ctxt; inst->box = evas_object_box_add(inst->evas); evas_object_show(inst->box); inst->gcc = e_gadcon_client_new(gc, name, id, style, inst->box); if (!inst->gcc) { evas_object_del(inst->box); ctxt->instances = eina_list_remove(ctxt->instances, inst); free(inst); return NULL; } inst->gcc->data = inst; _gc_orient(inst->gcc, inst->gcc->gadcon->orient); if (!ctxt->iface) appmenu_dbus_registrar_server_init(ctxt); return inst->gcc; }
static void gui_list_show_error(const char *errstr, va_list ap) { static Evas_Object *etext; char buf[128]; if (!etext) { Evas_Object *ebox = evas_object_box_add(evas); evas_object_box_align_set(ebox, 0.5, 0.5); evas_object_box_padding_set(ebox, 10, 10); evas_object_move(ebox, 0, SCREEN_HEIGHT - LIST_LOGO_HEIGHT); evas_object_resize(ebox, SCREEN_WIDTH, LIST_LOGO_HEIGHT); etext = evas_object_text_add(evas); evas_object_text_font_set(etext, FONT, FONT_SIZE); evas_object_color_set(etext, LIST_FONT_COLOR, 255); evas_object_box_append(ebox, etext); evas_object_show(ebox); } vsnprintf(buf, sizeof buf, errstr, ap); evas_object_text_text_set(etext, buf); evas_object_show(etext); }
static void gui_list_draw_item(const char *text, const char *logo, void(*callback)(void*, Evas*, Evas_Object*, void *), void *data, int x, int y) { Evas_Object *ebox, *elogo, *etext, *erect; elogo = evas_object_image_add(evas); evas_object_image_file_set(elogo, logo, NULL); evas_object_image_fill_set(elogo, 0, 0, LIST_LOGO_WIDTH, LIST_LOGO_HEIGHT); evas_object_resize(elogo, LIST_LOGO_WIDTH, LIST_LOGO_HEIGHT); evas_object_show(elogo); etext = evas_object_text_add(evas); evas_object_text_font_set(etext, FONT, FONT_SIZE); evas_object_text_text_set(etext, text); evas_object_color_set(etext, LIST_FONT_COLOR, 255); evas_object_show(etext); ebox = evas_object_box_add(evas); evas_object_box_align_set(ebox, 0, 0.5); evas_object_box_padding_set(ebox, 10, 10); evas_object_move(ebox, x, y); evas_object_resize(ebox, SCREEN_WIDTH, LIST_LOGO_HEIGHT); evas_object_box_append(ebox, elogo); evas_object_box_append(ebox, etext); /* this is just an invisible rect to catch all mouse down events in the area */ erect = evas_object_rectangle_add(evas); evas_object_move(erect, x, y); evas_object_resize(erect, SCREEN_WIDTH, LIST_LOGO_HEIGHT); evas_object_color_set(erect, 0, 0, 0, 0); evas_object_event_callback_add(erect, EVAS_CALLBACK_MOUSE_DOWN, callback, data); evas_object_data_set(erect, "text", etext); evas_object_show(erect); evas_object_show(ebox); }
int _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *group, const char *parent, Eina_List *group_path) { Edje *ed; Evas *tev; Edje_Real_Part *rp; Eina_List *textblocks = NULL; Eina_List *sources = NULL; Eina_List *externals = NULL; Eina_List *old_swallows; unsigned int n; Eina_List *parts = NULL; int group_path_started = 0; ed = _edje_fetch(obj); if (!ed) return 0; if (!file) file = ""; if (!group) group = ""; if (((ed->path) && (!strcmp(file, ed->path))) && (ed->group) && (!strcmp(group, ed->group))) return 1; tev = evas_object_evas_get(obj); evas_event_freeze(tev); old_swallows = _edje_swallows_collect(ed); if (_edje_script_only(ed)) _edje_script_only_shutdown(ed); if (_edje_lua_script_only(ed)) _edje_lua_script_only_shutdown(ed); _edje_file_del(ed); eina_stringshare_replace(&ed->path, file); eina_stringshare_replace(&ed->group, group); ed->parent = eina_stringshare_add(parent); ed->load_error = EDJE_LOAD_ERROR_NONE; _edje_file_add(ed); ed->block_break = 0; if (ed->file && ed->file->external_dir) { unsigned int i; for (i = 0; i < ed->file->external_dir->entries_count; ++i) edje_module_load(ed->file->external_dir->entries[i].entry); } _edje_textblock_styles_add(ed); _edje_textblock_style_all_update(ed); ed->has_entries = EINA_FALSE; if (ed->collection) { if (ed->collection->prop.orientation != EDJE_ORIENTATION_AUTO) ed->is_rtl = (ed->collection->prop.orientation == EDJE_ORIENTATION_RTL); if (ed->collection->script_only) { ed->load_error = EDJE_LOAD_ERROR_NONE; _edje_script_only_init(ed); } else if (ed->collection->lua_script_only) { ed->load_error = EDJE_LOAD_ERROR_NONE; _edje_lua_script_only_init(ed); } else { unsigned int i; /* colorclass stuff */ for (i = 0; i < ed->collection->parts_count; ++i) { Edje_Part *ep; unsigned int k; ep = ed->collection->parts[i]; /* Register any color classes in this parts descriptions. */ if ((ep->default_desc) && (ep->default_desc->color_class)) _edje_color_class_member_add(ed, ep->default_desc->color_class); for (k = 0; k < ep->other.desc_count; k++) { Edje_Part_Description_Common *desc; desc = ep->other.desc[k]; if (desc->color_class) _edje_color_class_member_add(ed, desc->color_class); } } /* build real parts */ for (n = 0; n < ed->collection->parts_count; n++) { Edje_Part *ep; ep = ed->collection->parts[n]; rp = eina_mempool_malloc(_edje_real_part_mp, sizeof(Edje_Real_Part)); if (!rp) { /* FIXME: destroy all allocated ressource, need to have a common exit point */ ed->load_error = EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; evas_event_thaw(tev); evas_event_thaw_eval(tev); return 0; } memset(rp, 0, sizeof (Edje_Real_Part)); if ((ep->dragable.x != 0) || (ep->dragable.y != 0)) { rp->drag = calloc(1, sizeof (Edje_Real_Part_Drag)); if (!rp->drag) { ed->load_error = EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED; eina_mempool_free(_edje_real_part_mp, rp); evas_event_thaw(tev); evas_event_thaw_eval(tev); return 0; } rp->drag->step.x = FROM_INT(ep->dragable.step_x); rp->drag->step.y = FROM_INT(ep->dragable.step_y); } rp->edje = ed; _edje_ref(rp->edje); rp->part = ep; parts = eina_list_append(parts, rp); rp->param1.description = _edje_part_description_find(ed, rp, "default", 0.0); rp->chosen_description = rp->param1.description; if (!rp->param1.description) ERR("no default part description!"); switch (ep->type) { case EDJE_PART_TYPE_RECTANGLE: rp->object = evas_object_rectangle_add(ed->base.evas); break; case EDJE_PART_TYPE_PROXY: case EDJE_PART_TYPE_IMAGE: rp->object = evas_object_image_add(ed->base.evas); break; case EDJE_PART_TYPE_TEXT: _edje_text_part_on_add(ed, rp); rp->object = evas_object_text_add(ed->base.evas); evas_object_text_font_source_set(rp->object, ed->path); break; case EDJE_PART_TYPE_GROUP: sources = eina_list_append(sources, rp); case EDJE_PART_TYPE_SWALLOW: case EDJE_PART_TYPE_EXTERNAL: if (ep->type == EDJE_PART_TYPE_EXTERNAL) externals = eina_list_append(externals, rp); rp->object = evas_object_rectangle_add(ed->base.evas); evas_object_color_set(rp->object, 0, 0, 0, 0); evas_object_pass_events_set(rp->object, 1); evas_object_pointer_mode_set(rp->object, EVAS_OBJECT_POINTER_MODE_NOGRAB); _edje_callbacks_focus_add(rp->object, ed, rp); break; case EDJE_PART_TYPE_TEXTBLOCK: textblocks = eina_list_append(textblocks, rp); rp->object = evas_object_textblock_add(ed->base.evas); break; case EDJE_PART_TYPE_BOX: sources = eina_list_append(sources, rp); rp->object = evas_object_box_add(ed->base.evas); rp->anim = _edje_box_layout_anim_new(rp->object); break; case EDJE_PART_TYPE_TABLE: sources = eina_list_append(sources, rp); rp->object = evas_object_table_add(ed->base.evas); break; case EDJE_PART_TYPE_GRADIENT: ERR("SPANK ! SPANK ! SPANK ! YOU ARE USING GRADIENT IN PART %s FROM GROUP %s INSIDE FILE %s !! THEY ARE NOW REMOVED !", ep->name, group, file); default: ERR("wrong part type %i!", ep->type); break; } if (rp->object) { evas_object_smart_member_add(rp->object, ed->obj); // evas_object_layer_set(rp->object, evas_object_layer_get(ed->obj)); if (ep->type != EDJE_PART_TYPE_SWALLOW && ep->type != EDJE_PART_TYPE_GROUP && ep->type != EDJE_PART_TYPE_EXTERNAL) { if (ep->mouse_events) { _edje_callbacks_add(rp->object, ed, rp); if (ep->repeat_events) evas_object_repeat_events_set(rp->object, 1); if (ep->pointer_mode != EVAS_OBJECT_POINTER_MODE_AUTOGRAB) evas_object_pointer_mode_set(rp->object, ep->pointer_mode); } else { evas_object_pass_events_set(rp->object, 1); evas_object_pointer_mode_set(rp->object, EVAS_OBJECT_POINTER_MODE_NOGRAB); } if (ep->precise_is_inside) evas_object_precise_is_inside_set(rp->object, 1); } if (rp->part->clip_to_id < 0) evas_object_clip_set(rp->object, ed->base.clipper); } } if (n > 0) { Eina_List *l; ed->table_parts = malloc(sizeof(Edje_Real_Part *) * n); ed->table_parts_size = n; /* FIXME: check malloc return */ n = 0; EINA_LIST_FOREACH(parts, l, rp) { ed->table_parts[n] = rp; n++; } eina_list_free(parts); for (i = 0; i < ed->table_parts_size; i++) { rp = ed->table_parts[i]; if (rp->param1.description) /* FIXME: prevent rel to gone radient part to go wrong. You may be able to remove this when all theme are correctly rewritten. */ { if (rp->param1.description->rel1.id_x >= 0) rp->param1.rel1_to_x = ed->table_parts[rp->param1.description->rel1.id_x % ed->table_parts_size]; if (rp->param1.description->rel1.id_y >= 0) rp->param1.rel1_to_y = ed->table_parts[rp->param1.description->rel1.id_y % ed->table_parts_size]; if (rp->param1.description->rel2.id_x >= 0) rp->param1.rel2_to_x = ed->table_parts[rp->param1.description->rel2.id_x % ed->table_parts_size]; if (rp->param1.description->rel2.id_y >= 0) rp->param1.rel2_to_y = ed->table_parts[rp->param1.description->rel2.id_y % ed->table_parts_size]; } if (rp->part->clip_to_id >= 0) { rp->clip_to = ed->table_parts[rp->part->clip_to_id % ed->table_parts_size]; if (rp->clip_to) { evas_object_pass_events_set(rp->clip_to->object, 1); evas_object_pointer_mode_set(rp->clip_to->object, EVAS_OBJECT_POINTER_MODE_NOGRAB); evas_object_clip_set(rp->object, rp->clip_to->object); } } if (rp->drag) { if (rp->part->dragable.confine_id >= 0) rp->drag->confine_to = ed->table_parts[rp->part->dragable.confine_id % ed->table_parts_size]; } /* replay events for dragable */ if (rp->part->dragable.event_id >= 0) { rp->events_to = ed->table_parts[rp->part->dragable.event_id % ed->table_parts_size]; /* events_to may be used only with dragable */ if (!rp->events_to->part->dragable.x && !rp->events_to->part->dragable.y) rp->events_to = NULL; } rp->swallow_params.min.w = 0; rp->swallow_params.min.h = 0; rp->swallow_params.max.w = -1; rp->swallow_params.max.h = -1; if (rp->part->type == EDJE_PART_TYPE_TEXT || rp->part->type == EDJE_PART_TYPE_TEXTBLOCK) { Edje_Part_Description_Text *text; text = (Edje_Part_Description_Text *) rp->param1.description; if (ed->file->feature_ver < 1) { text->text.id_source = -1; text->text.id_text_source = -1; } if (text->text.id_source >= 0) rp->text.source = ed->table_parts[text->text.id_source % ed->table_parts_size]; if (text->text.id_text_source >= 0) rp->text.text_source = ed->table_parts[text->text.id_text_source % ed->table_parts_size]; if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) { _edje_entry_real_part_init(rp); if (!ed->has_entries) ed->has_entries = EINA_TRUE; } } } } _edje_programs_patterns_init(ed); n = ed->collection->programs.fnmatch_count + ed->collection->programs.strcmp_count + ed->collection->programs.strncmp_count + ed->collection->programs.strrncmp_count + ed->collection->programs.nocmp_count; if (n > 0) { Edje_Program *pr; ed->table_programs = malloc(sizeof(Edje_Program *) * n); if (ed->table_programs) { ed->table_programs_size = n; #define EDJE_LOAD_BUILD_TABLE(Array, Ed, It, Tmp) \ for (It = 0; It < Ed->collection->programs.Array##_count; ++It) \ { \ Tmp = Ed->collection->programs.Array[It]; \ Ed->table_programs[Tmp->id] = Tmp; \ } EDJE_LOAD_BUILD_TABLE(fnmatch, ed, i, pr); EDJE_LOAD_BUILD_TABLE(strcmp, ed, i, pr); EDJE_LOAD_BUILD_TABLE(strncmp, ed, i, pr); EDJE_LOAD_BUILD_TABLE(strrncmp, ed, i, pr); EDJE_LOAD_BUILD_TABLE(nocmp, ed, i, pr); } } _edje_ref(ed); _edje_block(ed); _edje_freeze(ed); // if (ed->collection->script) _edje_embryo_script_init(ed); _edje_var_init(ed); for (i = 0; i < ed->table_parts_size; i++) { rp = ed->table_parts[i]; evas_object_show(rp->object); if (_edje_block_break(ed)) break; if (rp->drag) { if (rp->part->dragable.x < 0) rp->drag->val.x = FROM_DOUBLE(1.0); if (rp->part->dragable.y < 0) rp->drag->val.x = FROM_DOUBLE(1.0); _edje_dragable_pos_set(ed, rp, rp->drag->val.x, rp->drag->val.y); } } ed->recalc_call = 1; ed->dirty = 1; #ifdef EDJE_CALC_CACHE ed->all_part_change = 1; #endif if ((evas_object_clipees_get(ed->base.clipper)) && (evas_object_visible_get(obj))) evas_object_show(ed->base.clipper); /* instantiate 'internal swallows' */ EINA_LIST_FREE(externals, rp) { Edje_Part_Description_External *external; Evas_Object *child_obj; external = (Edje_Part_Description_External *) rp->part->default_desc; child_obj = _edje_external_type_add(rp->part->source, evas_object_evas_get(ed->obj), ed->obj, external->external_params, rp->part->name); if (child_obj) { _edje_real_part_swallow(rp, child_obj, EINA_TRUE); rp->param1.external_params = _edje_external_params_parse(child_obj, external->external_params); _edje_external_recalc_apply(ed, rp, NULL, rp->chosen_description); } }