From: Enlightenment S. <no-...@en...> - 2010-01-15 09:32:51
|
Log: 1. fix list theme adapting - simply never got callbac ks to handle iot, that's why! 2. make cmd-line tool to set scale, theme, finger size (more later) - used this to test this and fix it. 3. cmd-line tool... also uses elm - and... as a result... also has a dialog sayint its doing something - and... it can get a gui config later too! Author: raster Date: 2010-01-15 01:32:43 -0800 (Fri, 15 Jan 2010) New Revision: 45175 Added: trunk/TMP/st/elementary/src/bin/config.c Modified: trunk/TMP/st/elementary/src/bin/Makefile.am trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_button.c trunk/TMP/st/elementary/src/lib/elm_list.c trunk/TMP/st/elementary/src/lib/elm_main.c trunk/TMP/st/elementary/src/lib/elm_theme.c Modified: trunk/TMP/st/elementary/src/bin/Makefile.am =================================================================== --- trunk/TMP/st/elementary/src/bin/Makefile.am 2010-01-15 08:20:30 UTC (rev 45174) +++ trunk/TMP/st/elementary/src/bin/Makefile.am 2010-01-15 09:32:43 UTC (rev 45175) @@ -21,7 +21,7 @@ AM_CPPFLAGS += -DELEMENTARY_BUILD endif -bin_PROGRAMS = elementary_test +bin_PROGRAMS = elementary_test elementary_config if BUILD_QUICKLAUNCH bin_PROGRAMS += elementary_quicklaunch elementary_run elementary_testql endif @@ -75,6 +75,12 @@ elementary_test_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@ elementary_test_LDFLAGS = +elementary_config_SOURCES = \ +config.c + +elementary_config_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@ +elementary_config_LDFLAGS = + if BUILD_QUICKLAUNCH elementary_quicklaunch_SOURCES = quicklaunch.c elementary_quicklaunch_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@ Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-01-15 08:20:30 UTC (rev 45174) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-01-15 09:32:43 UTC (rev 45175) @@ -222,9 +222,11 @@ EAPI double elm_scale_get(void); EAPI void elm_scale_set(double scale); + EAPI void elm_scale_all_set(double scale); EAPI Evas_Coord elm_finger_size_get(void); EAPI void elm_finger_size_set(Evas_Coord size); - + EAPI void elm_finger_size_all_set(Evas_Coord size); + EAPI void elm_object_focus(Evas_Object *obj); EAPI void elm_object_unfocus(Evas_Object *obj); EAPI void elm_object_focus_allow_set(Evas_Object *obj, Eina_Bool enable); @@ -242,7 +244,8 @@ EAPI void elm_theme_extension_add(const char *item); EAPI void elm_theme_extension_del(const char *item); EAPI void elm_theme_flush(void); - + EAPI void elm_theme_all_set(const char *theme); + EAPI Evas_Object *elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type); EAPI void elm_win_resize_object_add(Evas_Object *obj, Evas_Object *subobj); EAPI void elm_win_resize_object_del(Evas_Object *obj, Evas_Object *subobj); Modified: trunk/TMP/st/elementary/src/lib/elm_button.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_button.c 2010-01-15 08:20:30 UTC (rev 45174) +++ trunk/TMP/st/elementary/src/lib/elm_button.c 2010-01-15 09:32:43 UTC (rev 45175) @@ -163,7 +163,7 @@ elm_widget_del_hook_set(obj, _del_hook); elm_widget_theme_hook_set(obj, _theme_hook); elm_widget_disable_hook_set(obj, _disable_hook); - elm_widget_can_focus_set( obj, 1 ); + elm_widget_can_focus_set(obj, 1 ); wd->btn = edje_object_add(e); _elm_theme_set(wd->btn, "button", "base", "default"); Modified: trunk/TMP/st/elementary/src/lib/elm_list.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_list.c 2010-01-15 08:20:30 UTC (rev 45174) +++ trunk/TMP/st/elementary/src/lib/elm_list.c 2010-01-15 09:32:43 UTC (rev 45175) @@ -39,6 +39,7 @@ }; static void _del_hook(Evas_Object *obj); +static void _theme_hook(Evas_Object *obj); static void _sizing_eval(Evas_Object *obj); static void _on_focus_hook(void *data, Evas_Object *obj); static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info); @@ -192,6 +193,23 @@ } static void +_theme_hook(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + Elm_List_Item *it; + Eina_List *n; + + elm_smart_scroller_theme_set(wd->scr, "scroller", "base", elm_widget_style_get(obj)); + edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale); + EINA_LIST_FOREACH(wd->items, n, it) + { + it->fixed = 0; + } + _fix_items(obj); + _sizing_eval(obj); +} + +static void _on_focus_hook(void *data, Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); @@ -670,6 +688,7 @@ elm_widget_on_focus_hook_set(obj, _on_focus_hook, NULL); elm_widget_data_set(obj, wd); elm_widget_del_hook_set(obj, _del_hook); + elm_widget_theme_hook_set(obj, _theme_hook); elm_widget_can_focus_set(obj, 1); wd->scr = elm_scroller_add(parent); Modified: trunk/TMP/st/elementary/src/lib/elm_main.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_main.c 2010-01-15 08:20:30 UTC (rev 45174) +++ trunk/TMP/st/elementary/src/lib/elm_main.c 2010-01-15 09:32:43 UTC (rev 45175) @@ -1320,6 +1320,27 @@ } /** + * Set the global scaling factor for all applications on the display + * + * This sets the globally configured scaling factor that is applied to all + * objects for all applications. + * @param scale The scaling factor to set + * @ingroup Scaling + */ +EAPI void +elm_scale_all_set(double scale) +{ +#ifdef HAVE_ELEMENTARY_X + static Ecore_X_Atom atom = 0; + int scale_i = (int)(scale * 1000.0); + + if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_SCALE"); + ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(), + atom, &scale_i, 1); +#endif +} + +/** * @defgroup Fingers Fingers * * Elementary is designed to be finger-friendly for touchscreens, and so in @@ -1358,6 +1379,28 @@ } /** + * Set the configured finger size for all applications on the display + * + * This sets the globally configured finger size in pixels for all applications + * on the display + * + * @param size The finger size + * @ingroup Fingers + */ +EAPI void +elm_finger_size_all_set(Evas_Coord size) +{ +#ifdef HAVE_ELEMENTARY_X + static Ecore_X_Atom atom = 0; + int size_i = (int)size; + + if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_FINGER_SIZE"); + ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(), + atom, &size_i, 1); +#endif +} + +/** * Adjust size of an element for finger usage * * This takes width and height sizes (in pixels) as input and a size multiple Modified: trunk/TMP/st/elementary/src/lib/elm_theme.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_theme.c 2010-01-15 08:20:30 UTC (rev 45174) +++ trunk/TMP/st/elementary/src/lib/elm_theme.c 2010-01-15 09:32:43 UTC (rev 45175) @@ -140,6 +140,18 @@ _elm_win_rescale(); } +EAPI void +elm_theme_all_set(const char *theme) +{ +#ifdef HAVE_ELEMENTARY_X + static Ecore_X_Atom atom = 0; + + if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_THEME"); + ecore_x_window_prop_string_set(ecore_x_window_root_first_get(), + atom, theme); +#endif +} + int _elm_theme_set(Evas_Object *o, const char *clas, const char *group, const char *style) { |
From: Enlightenment S. <no-...@en...> - 2010-01-16 13:14:53
|
Log: fix build break! Author: raster Date: 2010-01-16 04:35:31 -0800 (Sat, 16 Jan 2010) New Revision: 45214 Modified: trunk/TMP/st/elementary/src/bin/test_panel.c trunk/TMP/st/elementary/src/lib/elc_fileselector.c trunk/TMP/st/elementary/src/lib/elm_genlist.c Modified: trunk/TMP/st/elementary/src/bin/test_panel.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_panel.c 2010-01-16 12:20:56 UTC (rev 45213) +++ trunk/TMP/st/elementary/src/bin/test_panel.c 2010-01-16 12:35:31 UTC (rev 45214) @@ -117,7 +117,7 @@ } closedir(d); - dirs = eina_list_sort(dirs, ECORE_SORT_MIN, ECORE_COMPARE_CB(strcoll)); + dirs = eina_list_sort(dirs, EINA_SORT_MIN, EINA_COMPARE_CB(strcoll)); EINA_LIST_FOREACH(dirs, l, real) { Modified: trunk/TMP/st/elementary/src/lib/elc_fileselector.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elc_fileselector.c 2010-01-16 12:20:56 UTC (rev 45213) +++ trunk/TMP/st/elementary/src/lib/elc_fileselector.c 2010-01-16 12:35:31 UTC (rev 45214) @@ -298,8 +298,8 @@ } closedir(dir); - files = eina_list_sort(files, ECORE_SORT_MIN, ECORE_COMPARE_CB(strcoll)); - dirs = eina_list_sort(dirs, ECORE_SORT_MIN, ECORE_COMPARE_CB(strcoll)); + files = eina_list_sort(files, EINA_SORT_MIN, EINA_COMPARE_CB(strcoll)); + dirs = eina_list_sort(dirs, EINA_SORT_MIN, EINA_COMPARE_CB(strcoll)); EINA_LIST_FOREACH(dirs, l, real) { Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2010-01-16 12:20:56 UTC (rev 45213) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2010-01-16 12:35:31 UTC (rev 45214) @@ -905,19 +905,21 @@ { const Eina_List *l; Elm_Genlist_Item *it; - Evas_Coord y = 0, ox, oy, ow, oh; + Evas_Coord y = 0, ox, oy, ow, oh, cvx, cvy, cvw, cvh; int vis; evas_object_geometry_get(itb->wd->pan_smart, &ox, &oy, &ow, &oh); + evas_output_viewport_get(evas_object_evas_get(itb->wd->obj), &cvx, &cvy, &cvw, &cvh); EINA_LIST_FOREACH(itb->items, l, it) { if (it->delete_me) continue; it->x = 0; it->y = y; it->w = itb->w; - vis = (ELM_RECTS_INTERSECT(itb->x + it->x - itb->wd->pan_x, - itb->y + it->y - itb->wd->pan_y, - it->w, it->h, 0, 0, ow, oh)); + vis = (ELM_RECTS_INTERSECT(itb->x - it->wd->pan_x + ox, + itb->y - it->wd->pan_y + oy, + itb->w, itb->h, + cvx, cvy, cvw, cvh)); if ((itb->realized) && (!it->realized)) { if (vis) @@ -1192,17 +1194,18 @@ { Pan *sd = evas_object_smart_data_get(obj); Item_Block *itb; - Evas_Coord ow, oh; + Evas_Coord ox, oy, ow, oh, cvx, cvy, cvw, cvh; int in = 0; - evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); + evas_object_geometry_get(obj, &ox, &oy, &ow, &oh); + evas_output_viewport_get(evas_object_evas_get(obj), &cvx, &cvy, &cvw, &cvh); EINA_INLIST_FOREACH(sd->wd->blocks, itb) { itb->w = sd->wd->minw; - if (ELM_RECTS_INTERSECT(itb->x - sd->wd->pan_x, - itb->y - sd->wd->pan_y, + if (ELM_RECTS_INTERSECT(itb->x - sd->wd->pan_x + ox, + itb->y - sd->wd->pan_y + oy, itb->w, itb->h, - 0, 0, ow, oh)) + cvx, cvy, cvw, cvh)) { if ((!itb->realized) || (itb->changed)) _item_block_realize(itb, in, 0); |
From: Enlightenment S. <no-...@en...> - 2010-01-25 03:53:43
|
Log: add test for floating objects (they can slide in etc. andnot be already packed inside the view) and... fix issues with pan based objects clipping to vieport etc. etc. Author: raster Date: 2010-01-24 19:53:36 -0800 (Sun, 24 Jan 2010) New Revision: 45542 Added: trunk/TMP/st/elementary/src/bin/test_floating.c Modified: trunk/TMP/st/elementary/src/bin/Makefile.am trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/elm_genlist.c trunk/TMP/st/elementary/src/lib/elm_map.c trunk/TMP/st/elementary/src/lib/elm_photocam.c Modified: trunk/TMP/st/elementary/src/bin/Makefile.am =================================================================== --- trunk/TMP/st/elementary/src/bin/Makefile.am 2010-01-25 02:51:57 UTC (rev 45541) +++ trunk/TMP/st/elementary/src/bin/Makefile.am 2010-01-25 03:53:36 UTC (rev 45542) @@ -71,7 +71,8 @@ test_flip.c \ test_label.c \ test_conform.c \ -test_multi.c +test_multi.c \ +test_floating.c elementary_test_LDADD = $(top_builddir)/src/lib/libelementary.la @ELEMENTARY_EWEATHER_LIBS@ elementary_test_LDFLAGS = Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2010-01-25 02:51:57 UTC (rev 45541) +++ trunk/TMP/st/elementary/src/bin/test.c 2010-01-25 03:53:36 UTC (rev 45542) @@ -60,6 +60,7 @@ void test_label(void *data, Evas_Object *obj, void *event_info); void test_conformant(void *data, Evas_Object *obj, void *event_info); void test_multi(void *data, Evas_Object *obj, void *event_info); +void test_floating(void *data, Evas_Object *obj, void *event_info); static void my_win_del(void *data, Evas_Object *obj, void *event_info) @@ -202,6 +203,7 @@ elm_list_item_append(li, "Label", NULL, NULL, test_label, NULL); elm_list_item_append(li, "Conformant", NULL, NULL, test_conformant, NULL); elm_list_item_append(li, "Multi Touch", NULL, NULL, test_multi, NULL); + elm_list_item_append(li, "Floating Objects", NULL, NULL, test_floating, NULL); elm_list_go(li); Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2010-01-25 02:51:57 UTC (rev 45541) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2010-01-25 03:53:36 UTC (rev 45542) @@ -1279,6 +1279,15 @@ } static void +_pan_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + Pan *sd = evas_object_smart_data_get(obj); + + if (sd->wd->calc_job) ecore_job_del(sd->wd->calc_job); + sd->wd->calc_job = ecore_job_add(_calc_job, sd->wd); +} + +static void _hold_on(void *data, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(obj); @@ -1366,6 +1375,7 @@ sc.add = _pan_add; sc.del = _pan_del; sc.resize = _pan_resize; + sc.move = _pan_move; sc.calculate = _pan_calculate; smart = evas_smart_class_new(&sc); } Modified: trunk/TMP/st/elementary/src/lib/elm_map.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_map.c 2010-01-25 02:51:57 UTC (rev 45541) +++ trunk/TMP/st/elementary/src/lib/elm_map.c 2010-01-25 03:53:36 UTC (rev 45542) @@ -1271,6 +1271,15 @@ } static void +_pan_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + Pan *sd = evas_object_smart_data_get(obj); + + if (sd->wd->calc_job) ecore_job_del(sd->wd->calc_job); + sd->wd->calc_job = ecore_job_add(_calc_job, sd->wd); +} + +static void _hold_on(void *data, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(obj); @@ -1689,6 +1698,7 @@ sc.add = _pan_add; sc.del = _pan_del; sc.resize = _pan_resize; + sc.move = _pan_move; sc.calculate = _pan_calculate; smart = evas_smart_class_new(&sc); } Modified: trunk/TMP/st/elementary/src/lib/elm_photocam.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_photocam.c 2010-01-25 02:51:57 UTC (rev 45541) +++ trunk/TMP/st/elementary/src/lib/elm_photocam.c 2010-01-25 03:53:36 UTC (rev 45542) @@ -855,6 +855,15 @@ } static void +_pan_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + Pan *sd = evas_object_smart_data_get(obj); + + if (sd->wd->calc_job) ecore_job_del(sd->wd->calc_job); + sd->wd->calc_job = ecore_job_add(_calc_job, sd->wd); +} + +static void _hold_on(void *data, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(obj); @@ -975,6 +984,7 @@ sc.add = _pan_add; sc.del = _pan_del; sc.resize = _pan_resize; + sc.move = _pan_move; sc.calculate = _pan_calculate; smart = evas_smart_class_new(&sc); } |
From: Enlightenment S. <no-...@en...> - 2010-01-26 08:42:44
|
Log: label preferred line wrap width set thing. Author: raster Date: 2010-01-26 00:42:37 -0800 (Tue, 26 Jan 2010) New Revision: 45576 Modified: trunk/TMP/st/elementary/src/bin/test_launcher.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_label.c Modified: trunk/TMP/st/elementary/src/bin/test_launcher.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_launcher.c 2010-01-26 08:17:26 UTC (rev 45575) +++ trunk/TMP/st/elementary/src/bin/test_launcher.c 2010-01-26 08:42:37 UTC (rev 45576) @@ -135,7 +135,6 @@ evas_object_show(mb); elm_scroller_page_relative_set(sc, 1.0, 1.0); - // elm_scroller_page_size_set(sc, 200, 200); evas_object_show(sc); tb2 = elm_table_add(win); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-01-26 08:17:26 UTC (rev 45575) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-01-26 08:42:37 UTC (rev 45576) @@ -430,7 +430,10 @@ EAPI void elm_label_label_set(Evas_Object *obj, const char *label); EAPI const char *elm_label_label_get(Evas_Object *obj); EAPI void elm_label_line_wrap_set(Evas_Object *obj, Eina_Bool wrap); - /* available styles: + EAPI Eina_Bool elm_label_line_wrap_get(const Evas_Object *obj); + EAPI void elm_label_wrap_width_set(Evas_Object *obj, Evas_Coord w); + EAPI Evas_Coord elm_label_wrap_width_get(const Evas_Object *obj); +/* available styles: * default * marker */ Modified: trunk/TMP/st/elementary/src/lib/elm_label.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_label.c 2010-01-26 08:17:26 UTC (rev 45575) +++ trunk/TMP/st/elementary/src/lib/elm_label.c 2010-01-26 08:42:37 UTC (rev 45576) @@ -16,6 +16,7 @@ const char *label; Evas_Coord lastw; Ecore_Job *deferred_recalc_job; + Evas_Coord wrap_w; Eina_Bool linewrap : 1; Eina_Bool changed : 1; }; @@ -37,6 +38,8 @@ minminw = 0; edje_object_size_min_restricted_calc(wd->lbl, &minw, &minh, 0, 0); minminw = minw; + if (wd->wrap_w > minminw) minminw = wd->wrap_w; + if (wd->wrap_w > resw) resw = wd->wrap_w; edje_object_size_min_restricted_calc(wd->lbl, &minw, &minh, resw, 0); evas_object_size_hint_min_set(data, minminw, minh); maxh = minh; @@ -169,10 +172,10 @@ * Get the label used on the label object * * @param obj The label object - * + * @return The string inside the label * @ingroup Label */ -EAPI const char* +EAPI const char * elm_label_label_get(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); @@ -181,6 +184,13 @@ return wd->label; } +/** + * Set the wrapping behavior of the label + * + * @param obj The label object + * @param wrap To wrap text or not + * @ingroup Label + */ EAPI void elm_label_line_wrap_set(Evas_Object *obj, Eina_Bool wrap) { @@ -198,3 +208,47 @@ wd->changed = 1; _sizing_eval(obj); } + +/** + * Get the wrapping behavior of the label + * + * @param obj The label object + * @return To wrap text or not + * @ingroup Label + */ +EAPI Eina_Bool +elm_label_line_wrap_get(const Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + return wd->linewrap; +} + +/** + * Set wrap width of the label + * + * @param obj The label object + * @param w The wrap width in pixels at a minimum where words need to wrap + * @ingroup Label + */ +EAPI void +elm_label_wrap_width_set(Evas_Object *obj, Evas_Coord w) +{ + Widget_Data *wd = elm_widget_data_get(obj); + if (wd->wrap_w == w) return; + wd->wrap_w = w; + _sizing_eval(obj); +} + +/** + * get wrap width of the label + * + * @param obj The label object + * @return The wrap width in pixels at a minimum where words need to wrap + * @ingroup Label + */ +EAPI Evas_Coord +elm_label_wrap_width_get(const Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + return wd->wrap_w; +} |
From: Enlightenment S. <no-...@en...> - 2010-01-26 10:59:34
|
Log: 4 not 4 screens for launcher test Author: raster Date: 2010-01-26 02:59:26 -0800 (Tue, 26 Jan 2010) New Revision: 45581 Modified: trunk/TMP/st/elementary/src/bin/test_launcher.c trunk/TMP/st/elementary/src/lib/elm_conform.c Modified: trunk/TMP/st/elementary/src/bin/test_launcher.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_launcher.c 2010-01-26 10:50:51 UTC (rev 45580) +++ trunk/TMP/st/elementary/src/bin/test_launcher.c 2010-01-26 10:59:26 UTC (rev 45581) @@ -70,7 +70,7 @@ evas_object_size_hint_weight_set(tb, 0.0, 0.0); evas_object_size_hint_align_set(tb, 0.5, 0.5); n = 0; m = 0; - for (k = 0 ; k < 5; k++) + for (k = 0 ; k < 4; k++) { pad = evas_object_rectangle_add(evas_object_evas_get(win)); evas_object_size_hint_min_set(pad, 470, 4); Modified: trunk/TMP/st/elementary/src/lib/elm_conform.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_conform.c 2010-01-26 10:50:51 UTC (rev 45580) +++ trunk/TMP/st/elementary/src/lib/elm_conform.c 2010-01-26 10:59:26 UTC (rev 45581) @@ -65,32 +65,28 @@ _elm_theme_set(wd->base, "conformant", "base", "default"); elm_widget_resize_object_set(obj, wd->base); - // FIXME: broken. doesnt handle property changes, keyboard popup or not - // etc. doesnt gettop helf geometry either. #ifdef HAVE_ELEMENTARY_X int sh = -1; ecore_x_e_illume_top_shelf_geometry_get(ecore_x_window_root_first_get(), NULL, NULL, NULL, &sh); - printf("sh0: %i\n", sh); - if (sh < 1) sh = 1; + if (sh < 0) sh = 32; wd->shelf = evas_object_rectangle_add(evas); evas_object_color_set(wd->shelf, 0, 0, 0, 0); - evas_object_size_hint_min_set(wd->shelf, 0, sh); - evas_object_size_hint_max_set(wd->shelf, -1, -1); + evas_object_size_hint_min_set(wd->shelf, -1, sh); + evas_object_size_hint_max_set(wd->shelf, -1, sh); edje_object_part_swallow(wd->base, "elm.swallow.shelf", wd->shelf); sh = -1; ecore_x_e_illume_bottom_panel_geometry_get(ecore_x_window_root_first_get(), NULL, NULL, NULL, &sh); - printf("sh1: %i\n", sh); - if (sh < 1) sh = 1; + if (sh < 0) sh = 32; wd->panel = evas_object_rectangle_add(evas); evas_object_color_set(wd->panel, 0, 0, 0, 0); - evas_object_size_hint_min_set(wd->panel, 0, sh); - evas_object_size_hint_max_set(wd->panel, -1, -1); + evas_object_size_hint_min_set(wd->panel, -1, sh); + evas_object_size_hint_max_set(wd->panel, -1, sh); edje_object_part_swallow(wd->base, "elm.swallow.panel", wd->panel); #endif |
From: Enlightenment S. <no-...@en...> - 2010-02-04 09:08:10
|
Log: 1. fix conforman stuff to actually respect min size of content. it never did. 2. more comprehensive test. Author: raster Date: 2010-02-04 01:08:02 -0800 (Thu, 04 Feb 2010) New Revision: 45863 Modified: trunk/TMP/st/elementary/src/bin/test_conform.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_conform.c Modified: trunk/TMP/st/elementary/src/bin/test_conform.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_conform.c 2010-02-04 08:06:41 UTC (rev 45862) +++ trunk/TMP/st/elementary/src/bin/test_conform.c 2010-02-04 09:08:02 UTC (rev 45863) @@ -4,7 +4,7 @@ void test_conformant(void *data, Evas_Object *obj, void *event) { - Evas_Object *win, *bg, *conform, *btn; + Evas_Object *win, *bg, *conform, *btn, *bx, *sc, *en; win = elm_win_add(NULL, "conformant", ELM_WIN_BASIC); elm_win_title_set(win, "Conformant"); @@ -21,13 +21,90 @@ evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(conform); + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + + sc = elm_scroller_add(win); + elm_scroller_content_min_limit(sc, 0, 1); + elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_scroller_bounce_set(sc, 1, 0); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, sc); + + en = elm_entry_add(win); + elm_entry_single_line_set(en, 1); + elm_entry_entry_set(en, "This is the top entry here"); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_scroller_content_set(sc, en); + evas_object_show(en); + + evas_object_show(sc); + btn = elm_button_add(win); elm_button_label_set(btn, "Test Conformant"); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, btn); evas_object_show(btn); - elm_conformant_content_set(conform, btn); + sc = elm_scroller_add(win); + elm_scroller_content_min_limit(sc, 0, 1); + elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_scroller_bounce_set(sc, 1, 0); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, sc); - evas_object_resize(win, 200, 200); + en = elm_entry_add(win); + elm_entry_single_line_set(en, 1); + elm_entry_entry_set(en, "This is the middle entry here"); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, 0.5); + elm_scroller_content_set(sc, en); + evas_object_show(en); + + evas_object_show(sc); + + btn = elm_button_add(win); + elm_button_label_set(btn, "Test Conformant"); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, btn); + evas_object_show(btn); + + sc = elm_scroller_add(win); + elm_scroller_content_min_limit(sc, 0, 0); + elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); + elm_scroller_bounce_set(sc, 0, 1); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, sc); + + en = elm_entry_add(win); + elm_entry_entry_set(en, + "This is a multi-line entry at the bottom<br>" + "This can contain more than 1 line of text and be " + "scrolled around to allow for entering of lots of " + "content. It is also to test to see that autoscroll " + "moves to the right part of a larger multi-line " + "text entry that is inside of a scroller than can be " + "scrolled around, thus changing the expected position " + "as well as cursor changes updating auto-scroll when " + "it is enabled."); + evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_scroller_content_set(sc, en); + evas_object_show(en); + + evas_object_show(sc); + + elm_conformant_content_set(conform, bx); + evas_object_show(bx); + + evas_object_resize(win, 240, 240); evas_object_show(win); } Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-02-04 08:06:41 UTC (rev 45862) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-02-04 09:08:02 UTC (rev 45863) @@ -473,8 +473,6 @@ EAPI void elm_table_homogenous_set(Evas_Object *obj, Eina_Bool homogenous); EAPI void elm_table_pack(Evas_Object *obj, Evas_Object *subobj, int x, int y, int w, int h); EAPI void elm_table_padding_set(Evas_Object *obj, Evas_Coord horizontal, Evas_Coord vertical); - /* smart callbacks called: - */ EAPI Evas_Object *elm_clock_add(Evas_Object *parent); EAPI void elm_clock_time_set(Evas_Object *obj, int hrs, int min, int sec); @@ -491,8 +489,8 @@ EAPI Eina_Bool elm_layout_theme_set(Evas_Object *obj, const char *clas, const char *group, const char *style); EAPI void elm_layout_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content); EAPI Evas_Object *elm_layout_edje_get(const Evas_Object *obj); - EAPI void elm_layout_sizing_eval(Evas_Object *obj); - /* smart callbacks called: + EAPI void elm_layout_sizing_eval(Evas_Object *obj); + /* smart callbacks called: */ typedef enum _Elm_Notify_Orient @@ -516,6 +514,7 @@ EAPI void elm_notify_repeat_events_set(Evas_Object *obj, Eina_Bool repeat); /* smart callbacks called: */ + typedef enum _Elm_Hover_Axis { ELM_HOVER_AXIS_NONE, @@ -587,7 +586,6 @@ EAPI Eina_Bool elm_entry_context_menu_disabled_get(Evas_Object *obj); EAPI char *elm_entry_markup_to_utf8(const char *s); EAPI char *elm_entry_utf8_to_markup(const char *s); - /* smart callbacks called: * "changed" - the text content changed * "selection,start" - the user started selecting text @@ -607,7 +605,6 @@ /* composite widgets - these basically put together basic widgets above * in convenient packages that do more than basic stuff */ - typedef enum _Elm_Text_Format { ELM_TEXT_FORMAT_PLAIN_UTF8, @@ -795,7 +792,6 @@ EAPI Elm_List_Item *elm_list_item_next(const Elm_List_Item *it); EAPI void elm_list_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce); EAPI void elm_list_scroller_policy_set(Evas_Object *obj, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v); - /* smart callbacks called: * "clicked" - when the user double-clicked an item * "selected" - when the user selected an item @@ -827,12 +823,6 @@ EAPI void elm_slider_value_set(Evas_Object *obj, double val); EAPI double elm_slider_value_get(const Evas_Object *obj); EAPI void elm_slider_inverted_set(Evas_Object *obj, Eina_Bool inverted); - /* smart callbacks called: - * "changed" - when the slider value changes - * "delay,changed" - when the slider value changed, but a small time after a change (use this if you only want to respond to a change once the slider is held still for a short while). - * "slider,drag,start" - dragging the slider indicator around has started - * "slider,drag,stop" - dragging the slider indicator around has stopped - */ typedef enum _Elm_Genlist_Item_Flags { Modified: trunk/TMP/st/elementary/src/lib/elm_conform.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_conform.c 2010-02-04 08:06:41 UTC (rev 45862) +++ trunk/TMP/st/elementary/src/lib/elm_conform.c 2010-02-04 09:08:02 UTC (rev 45863) @@ -48,6 +48,28 @@ evas_object_size_hint_max_set(obj, -1, -1); } +static void +_changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Widget_Data *wd = elm_widget_data_get(data); + _sizing_eval(data); +} + +static void +_sub_del(void *data, Evas_Object *obj, void *event_info) +{ + Widget_Data *wd = elm_widget_data_get(obj); + Evas_Object *sub = event_info; + + if (sub == wd->content) + { + evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, + _changed_size_hints, obj); + wd->content = NULL; + _sizing_eval(obj); + } +} + static int _prop_change(void *data, int type, void *event) { @@ -131,7 +153,9 @@ wd->prop_hdl = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, _prop_change, obj); #endif - + + evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); + _sizing_eval(obj); return obj; } @@ -147,6 +171,9 @@ if (content) { elm_widget_sub_object_add(obj, content); + evas_object_event_callback_add(content, + EVAS_CALLBACK_CHANGED_SIZE_HINTS, + _changed_size_hints, obj); edje_object_part_swallow(wd->base, "elm.swallow.content", content); _sizing_eval(obj); } |
From: Enlightenment S. <no-...@en...> - 2010-02-10 14:38:31
|
Log: From: ?\236?\157?\180?\236?\131?\129?\236?\167?\132 <ls...@sa...> Patch for rotate with resize (some formatting fixed too like ecore patch) Author: raster Date: 2010-02-10 06:38:08 -0800 (Wed, 10 Feb 2010) New Revision: 46047 Modified: trunk/TMP/st/elementary/src/bin/test_win_state.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_win.c Modified: trunk/TMP/st/elementary/src/bin/test_win_state.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_win_state.c 2010-02-10 14:35:07 UTC (rev 46046) +++ trunk/TMP/st/elementary/src/bin/test_win_state.c 2010-02-10 14:38:08 UTC (rev 46047) @@ -6,6 +6,8 @@ int mode, onoff; } Testitem; +static int rotate_with_resize = 0; + static void my_bt_38_alpha_on(void *data, Evas_Object *obj, void *event_info) { @@ -25,11 +27,21 @@ } static void +my_ck_38_resize(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win = data; + rotate_with_resize = elm_check_state_get(obj); +} + +static void my_bt_38_rot_0(void *data, Evas_Object *obj, void *event_info) { Evas_Object *win = data; Evas_Object *bg = evas_object_data_get(win, "bg"); - elm_win_rotation_set(win, 0); + if (rotate_with_resize) + elm_win_rotation_with_resize_set(win, 0); + else + elm_win_rotation_set(win, 0); } static void @@ -37,7 +49,10 @@ { Evas_Object *win = data; Evas_Object *bg = evas_object_data_get(win, "bg"); - elm_win_rotation_set(win, 90); + if (rotate_with_resize) + elm_win_rotation_with_resize_set(win, 90); + else + elm_win_rotation_set(win, 90); } static void @@ -45,7 +60,10 @@ { Evas_Object *win = data; Evas_Object *bg = evas_object_data_get(win, "bg"); - elm_win_rotation_set(win, 180); + if (rotate_with_resize) + elm_win_rotation_with_resize_set(win, 180); + else + elm_win_rotation_set(win, 180); } static void @@ -53,7 +71,10 @@ { Evas_Object *win = data; Evas_Object *bg = evas_object_data_get(win, "bg"); - elm_win_rotation_set(win, 270); + if (rotate_with_resize) + elm_win_rotation_with_resize_set(win, 270); + else + elm_win_rotation_set(win, 270); } static void @@ -87,7 +108,7 @@ void test_win_state(void *data, Evas_Object *obj, void *event_info) { - Evas_Object *win, *bg, *sl, *bx, *bx2, *bt; + Evas_Object *win, *bg, *sl, *bx, *bx2, *bt, *ck; static Testitem tit[3]; int i; @@ -156,6 +177,15 @@ elm_box_pack_end(bx, bx2); evas_object_show(bx2); + ck = elm_check_add(win); + elm_check_label_set(ck, "resize"); + elm_check_state_set(ck, rotate_with_resize); + evas_object_smart_callback_add(ck, "changed", my_ck_38_resize, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.02, 0.99); + evas_object_show(ck); + elm_box_pack_end(bx, ck); + bx2 = elm_box_add(win); elm_box_horizontal_set(bx2, 1); elm_box_homogenous_set(bx2, 1); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-02-10 14:35:07 UTC (rev 46046) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-02-10 14:38:08 UTC (rev 46047) @@ -269,6 +269,7 @@ EAPI void elm_win_layer_set(Evas_Object *obj, int layer); EAPI int elm_win_layer_get(Evas_Object *obj); EAPI void elm_win_rotation_set(Evas_Object *obj, int rotation); + EAPI void elm_win_rotation_with_resize_set(Evas_Object *obj, int rotation); EAPI int elm_win_rotation_get(Evas_Object *obj); EAPI void elm_win_sticky_set(Evas_Object *obj, Eina_Bool sticky); EAPI Eina_Bool elm_win_sticky_get(Evas_Object *obj); Modified: trunk/TMP/st/elementary/src/lib/elm_win.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_win.c 2010-02-10 14:35:07 UTC (rev 46046) +++ trunk/TMP/st/elementary/src/lib/elm_win.c 2010-02-10 14:38:08 UTC (rev 46047) @@ -775,6 +775,22 @@ _elm_win_xwin_update(win); } +EAPI void +elm_win_rotation_with_resize_set(Evas_Object *obj, int rotation) +{ + Elm_Win *win; + if (strcmp(elm_widget_type_get(obj), "win")) return; + win = elm_widget_data_get(obj); + if (!win) return; + if (win->rot == rotation) return; + win->rot = rotation; + ecore_evas_rotation_with_resize_set(win->ee, rotation); + evas_object_size_hint_min_set(obj, -1, -1); + evas_object_size_hint_max_set(obj, -1, -1); + _elm_win_eval_subobjs(obj); + _elm_win_xwin_update(win); +} + EAPI int elm_win_rotation_get(Evas_Object *obj) { |
From: Enlightenment S. <no-...@en...> - 2010-02-26 06:30:24
|
Log: slight change in drag events vs scrolling on_hold to fix small "distance race" issue. Author: raster Date: 2010-02-25 22:30:17 -0800 (Thu, 25 Feb 2010) New Revision: 46505 Modified: trunk/TMP/st/elementary/src/bin/test_genlist.c trunk/TMP/st/elementary/src/lib/elm_genlist.c trunk/TMP/st/elementary/src/lib/elm_list.c Modified: trunk/TMP/st/elementary/src/bin/test_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_genlist.c 2010-02-26 06:01:09 UTC (rev 46504) +++ trunk/TMP/st/elementary/src/bin/test_genlist.c 2010-02-26 06:30:17 UTC (rev 46505) @@ -872,6 +872,12 @@ printf("drag stop\n"); } +static void +item_longpress(void *data, Evas_Object *obj, void *event_info) +{ + printf("longpress\n"); +} + void test_genlist5(void *data, Evas_Object *obj, void *event_info) { @@ -926,6 +932,7 @@ evas_object_smart_callback_add(gl, "drag,start,right", item_drag_right, NULL); evas_object_smart_callback_add(gl, "drag", item_drag, NULL); evas_object_smart_callback_add(gl, "drag,stop", item_drag_stop, NULL); + evas_object_smart_callback_add(gl, "longpressed", item_longpress, NULL); bx2 = elm_box_add(win); elm_box_horizontal_set(bx2, 1); Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2010-02-26 06:01:09 UTC (rev 46504) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2010-02-26 06:30:17 UTC (rev 46505) @@ -477,23 +477,23 @@ _item_unselect(it); } } - if ((!it->down) || (it->wd->on_hold) || (it->wd->longpressed)) + if ((it->dragging) && (it->down)) { if (it->long_timer) { ecore_timer_del(it->long_timer); it->long_timer = NULL; } + evas_object_smart_callback_call(it->wd->obj, "drag", it); return; } - if (it->dragging) + if ((!it->down)/* || (it->wd->on_hold)*/ || (it->wd->longpressed)) { if (it->long_timer) { ecore_timer_del(it->long_timer); it->long_timer = NULL; } - evas_object_smart_callback_call(it->wd->obj, "drag", it); return; } if (!it->display_only) @@ -577,6 +577,7 @@ evas_object_geometry_get(obj, &x, &y, NULL, NULL); it->dx = ev->canvas.x - x; it->dy = ev->canvas.y - y; + it->wd->longpressed = EINA_FALSE; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) it->wd->on_hold = EINA_TRUE; else it->wd->on_hold = EINA_FALSE; it->wd->wasselected = it->selected; @@ -599,6 +600,7 @@ it->down = 0; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) it->wd->on_hold = EINA_TRUE; else it->wd->on_hold = EINA_FALSE; + it->wd->longpressed = EINA_FALSE; if (it->long_timer) { ecore_timer_del(it->long_timer); @@ -612,7 +614,6 @@ } if (it->wd->on_hold) { - it->wd->longpressed = EINA_FALSE; it->wd->on_hold = EINA_FALSE; return; } Modified: trunk/TMP/st/elementary/src/lib/elm_list.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_list.c 2010-02-26 06:01:09 UTC (rev 46504) +++ trunk/TMP/st/elementary/src/lib/elm_list.c 2010-02-26 06:30:17 UTC (rev 46505) @@ -398,6 +398,7 @@ if (ev->button != 1) return; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) wd->on_hold = EINA_TRUE; else wd->on_hold = EINA_FALSE; + wd->longpressed = EINA_FALSE; if (it->long_timer) { ecore_timer_del(it->long_timer); @@ -410,7 +411,6 @@ } if (wd->longpressed) { - wd->longpressed = EINA_FALSE; if (!wd->wasselected) _item_unselect(it); wd->wasselected = 0; return; |
From: Enlightenment S. <no-...@en...> - 2010-03-09 04:00:16
|
Log: more comprehensive flip test with multiple children etc. Author: raster Date: 2010-03-08 20:00:08 -0800 (Mon, 08 Mar 2010) New Revision: 47072 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/bin/test_flip.c trunk/TMP/st/elementary/src/lib/elm_flip.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2010-03-09 02:55:47 UTC (rev 47071) +++ trunk/TMP/st/elementary/src/bin/test.c 2010-03-09 04:00:08 UTC (rev 47072) @@ -57,6 +57,7 @@ void test_map(void *data, Evas_Object *obj, void *event_info); void test_weather(void *data, Evas_Object *obj, void *event_info); void test_flip(void *data, Evas_Object *obj, void *event_info); +void test_flip2(void *data, Evas_Object *obj, void *event_info); void test_label(void *data, Evas_Object *obj, void *event_info); void test_conformant(void *data, Evas_Object *obj, void *event_info); void test_multi(void *data, Evas_Object *obj, void *event_info); @@ -202,6 +203,7 @@ elm_list_item_append(li, "Map", NULL, NULL, test_map, NULL); elm_list_item_append(li, "Weather", NULL, NULL, test_weather, NULL); elm_list_item_append(li, "Flip", NULL, NULL, test_flip, NULL); + elm_list_item_append(li, "Flip 2", NULL, NULL, test_flip2, NULL); elm_list_item_append(li, "Label", NULL, NULL, test_label, NULL); elm_list_item_append(li, "Conformant", NULL, NULL, test_conformant, NULL); elm_list_item_append(li, "Multi Touch", NULL, NULL, test_multi, NULL); Modified: trunk/TMP/st/elementary/src/bin/test_flip.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_flip.c 2010-03-09 02:55:47 UTC (rev 47071) +++ trunk/TMP/st/elementary/src/bin/test_flip.c 2010-03-09 04:00:08 UTC (rev 47072) @@ -49,8 +49,6 @@ elm_win_resize_object_add(win, bx); evas_object_show(bx); -#if 1 // working on it - fl = elm_flip_add(win); evas_object_size_hint_align_set(fl, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(fl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -128,9 +126,149 @@ elm_box_pack_end(bx, bx2); evas_object_show(bx2); -#endif evas_object_resize(win, 320, 480); evas_object_show(win); } + +void +test_flip2(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *bx, *bx2, *fl, *o, *bt, *tb, *ic, *li; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "flip2", ELM_WIN_BASIC); + elm_win_title_set(win, "Flip 2"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, "sky_01.jpg"); + elm_bg_file_set(bg, buf, NULL); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + fl = elm_flip_add(win); + evas_object_size_hint_align_set(fl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(fl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx, fl); + + o = elm_box_add(win); + evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + tb = elm_toolbar_add(win); + elm_toolbar_homogenous_set(tb, 0); + evas_object_size_hint_weight_set(tb, 0.0, 0.0); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic, buf, NULL); + elm_toolbar_item_add(tb, ic, "Hello", NULL, NULL); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic, buf, NULL); + elm_toolbar_item_add(tb, ic, "Out", NULL, NULL); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic, buf, NULL); + elm_toolbar_item_add(tb, ic, "There", NULL, NULL); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic, buf, NULL); + elm_toolbar_item_add(tb, ic, "World", NULL, NULL); + + elm_box_pack_end(o, tb); + evas_object_show(tb); + + li = elm_list_add(win); + evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + elm_list_item_append(li, "This is a list", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Second item", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "3rd", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Fourth", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Number five is alive!", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "The quick brown fox jumps over the lazy dog", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Booyah", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "And another item", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "More of them", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Get with it", NULL, NULL, NULL, NULL); + + elm_list_go(li); + + elm_box_pack_end(o, li); + evas_object_show(li); + + elm_flip_content_front_set(fl, o); + evas_object_show(o); + + li = elm_list_add(win); + evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + elm_list_item_append(li, "This is a list", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Second item", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "3rd", NULL, NULL, NULL, NULL); + + elm_list_go(li); + + elm_flip_content_back_set(fl, li); + evas_object_show(li); + + evas_object_show(fl); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, 1); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + + bt = elm_button_add(win); + elm_button_label_set(bt, "1"); + evas_object_smart_callback_add(bt, "clicked", my_fl_1, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "2"); + evas_object_smart_callback_add(bt, "clicked", my_fl_2, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "3"); + evas_object_smart_callback_add(bt, "clicked", my_fl_3, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "4"); + evas_object_smart_callback_add(bt, "clicked", my_fl_4, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} #endif Modified: trunk/TMP/st/elementary/src/lib/elm_flip.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_flip.c 2010-03-09 02:55:47 UTC (rev 47071) +++ trunk/TMP/st/elementary/src/lib/elm_flip.c 2010-03-09 04:00:08 UTC (rev 47072) @@ -16,7 +16,7 @@ double start, len; Elm_Flip_Mode mode; struct { - Evas_Object *content; + Evas_Object *content, *clip; } front, back; Eina_Bool state : 1; }; @@ -87,6 +87,7 @@ evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); wd->front.content = NULL; + evas_object_hide(wd->front.clip); _sizing_eval(obj); } else if (sub == wd->back.content) @@ -94,6 +95,7 @@ evas_object_event_callback_del_full(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); wd->back.content = NULL; + evas_object_hide(wd->back.clip); _sizing_eval(obj); } } @@ -187,8 +189,8 @@ evas_map_util_3d_perspective(mf, px, py, 0, foc); evas_object_map_set(wd->front.content, mf); evas_object_map_enable_set(wd->front.content, 1); - if (evas_map_util_clockwise_get(mf)) evas_object_show(wd->front.content); - else evas_object_hide(wd->front.content); + if (evas_map_util_clockwise_get(mf)) evas_object_show(wd->front.clip); + else evas_object_hide(wd->front.clip); } if (wd->back.content) @@ -197,8 +199,8 @@ evas_map_util_3d_perspective(mb, px, py, 0, foc); evas_object_map_set(wd->back.content, mb); evas_object_map_enable_set(wd->back.content, 1); - if (evas_map_util_clockwise_get(mb)) evas_object_show(wd->back.content); - else evas_object_hide(wd->back.content); + if (evas_map_util_clockwise_get(mb)) evas_object_show(wd->back.clip); + else evas_object_hide(wd->back.clip); } evas_map_free(mf); @@ -280,6 +282,20 @@ elm_widget_del_hook_set(obj, _del_hook); elm_widget_theme_hook_set(obj, _theme_hook); + wd->front.clip = evas_object_rectangle_add(e); + evas_object_color_set(wd->front.clip, 255, 255, 255, 255); + evas_object_move(wd->front.clip, -49999, -49999); + evas_object_resize(wd->front.clip, 99999, 99999); + elm_widget_sub_object_add(wd->front.clip, obj); + evas_object_smart_member_add(wd->front.clip, obj); + + wd->back.clip = evas_object_rectangle_add(e); + evas_object_color_set(wd->back.clip, 255, 255, 255, 255); + evas_object_move(wd->back.clip, -49999, -49999); + evas_object_resize(wd->back.clip, 99999, 99999); + elm_widget_sub_object_add(wd->back.clip, obj); + evas_object_smart_member_add(wd->back.clip, obj); + evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _move, NULL); evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize, NULL); @@ -306,6 +322,7 @@ if (wd->front.content == content) return; if ((wd->front.content != content) && (wd->front.content)) { + evas_object_clip_set(wd->front.content, NULL); elm_widget_sub_object_del(obj, wd->front.content); evas_object_smart_member_del(wd->front.content); } @@ -314,13 +331,16 @@ { elm_widget_sub_object_add(content, obj); evas_object_smart_member_add(content, obj); + evas_object_clip_set(content, wd->front.clip); evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); _sizing_eval(obj); + if (!elm_flip_front_get(obj)) evas_object_hide(wd->front.clip); + else evas_object_show(wd->front.clip); } - //XXX use clips - if (!elm_flip_front_get(obj)) evas_object_hide(wd->front.content); + else + evas_object_hide(wd->front.clip); _configure(obj); } @@ -340,6 +360,7 @@ if (wd->back.content == content) return; if ((wd->back.content != content) && (wd->back.content)) { + evas_object_clip_set(wd->back.content, NULL); elm_widget_sub_object_del(obj, wd->back.content); evas_object_smart_member_del(wd->back.content); } @@ -348,13 +369,16 @@ { elm_widget_sub_object_add(content, obj); evas_object_smart_member_add(content, obj); + evas_object_clip_set(content, wd->back.clip); evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); _sizing_eval(obj); + if (elm_flip_front_get(obj)) evas_object_hide(wd->back.clip); + else evas_object_show(wd->back.clip); } - //XXX use clips - if (elm_flip_front_get(obj)) evas_object_hide(wd->back.content); + else + evas_object_hide(wd->back.clip); _configure(obj); } |
From: Enlightenment S. <no-...@en...> - 2010-03-11 06:35:13
|
Log: and make entry api's acutally work - and be tested. Author: raster Date: 2010-03-10 22:35:07 -0800 (Wed, 10 Mar 2010) New Revision: 47127 Modified: trunk/TMP/st/elementary/src/bin/test_entry.c trunk/TMP/st/elementary/src/lib/elm_entry.c Modified: trunk/TMP/st/elementary/src/bin/test_entry.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_entry.c 2010-03-11 06:34:20 UTC (rev 47126) +++ trunk/TMP/st/elementary/src/bin/test_entry.c 2010-03-11 06:35:07 UTC (rev 47127) @@ -442,7 +442,6 @@ my_ent_bt_sbe(void *data, Evas_Object *obj, void *event_info) { Evas_Object *en = data; - // broken elm_scrolled_entry_cursor_selection_begin(en); } @@ -450,7 +449,6 @@ my_ent_bt_sen(void *data, Evas_Object *obj, void *event_info) { Evas_Object *en = data; - // broken elm_scrolled_entry_cursor_selection_end(en); } Modified: trunk/TMP/st/elementary/src/lib/elm_entry.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_entry.c 2010-03-11 06:34:20 UTC (rev 47126) +++ trunk/TMP/st/elementary/src/lib/elm_entry.c 2010-03-11 06:35:07 UTC (rev 47127) @@ -1446,9 +1446,7 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - edje_object_part_text_select_all(wd->ent, "elm.text"); - edje_object_part_text_cursor_copy(wd->ent, "elm.text", EDJE_CURSOR_MAIN, EDJE_CURSOR_SELECTION_BEGIN); - edje_object_part_text_cursor_copy(wd->ent, "elm.text", EDJE_CURSOR_MAIN, EDJE_CURSOR_SELECTION_END); + edje_object_part_text_select_begin(wd->ent, "elm.text"); } EAPI void @@ -1457,7 +1455,7 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - edje_object_part_text_cursor_copy(wd->ent, "elm.text", EDJE_CURSOR_MAIN, EDJE_CURSOR_SELECTION_END); + edje_object_part_text_select_extend(wd->ent, "elm.text"); } EAPI Eina_Bool |
From: Enlightenment S. <no-...@en...> - 2010-03-14 03:48:29
|
Log: fix more runtime wornings... added ELM_ERROR_ABORT! :) Author: raster Date: 2010-03-13 19:48:22 -0800 (Sat, 13 Mar 2010) New Revision: 47195 Modified: trunk/TMP/st/elementary/src/bin/test_flip.c trunk/TMP/st/elementary/src/lib/elm_conform.c trunk/TMP/st/elementary/src/lib/elm_genlist.c trunk/TMP/st/elementary/src/lib/elm_list.c trunk/TMP/st/elementary/src/lib/elm_priv.h trunk/TMP/st/elementary/src/lib/elm_scroller.c trunk/TMP/st/elementary/src/lib/elm_slideshow.c trunk/TMP/st/elementary/src/lib/elm_widget.c Modified: trunk/TMP/st/elementary/src/bin/test_flip.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_flip.c 2010-03-14 01:07:20 UTC (rev 47194) +++ trunk/TMP/st/elementary/src/bin/test_flip.c 2010-03-14 03:48:22 UTC (rev 47195) @@ -68,7 +68,7 @@ evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_flip_content_back_set(fl, ly); -// evas_object_show(ly); + evas_object_show(ly); bt = elm_button_add(win); elm_button_label_set(bt, "Button 1"); Modified: trunk/TMP/st/elementary/src/lib/elm_conform.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_conform.c 2010-03-14 01:07:20 UTC (rev 47194) +++ trunk/TMP/st/elementary/src/lib/elm_conform.c 2010-03-14 03:48:22 UTC (rev 47195) @@ -220,7 +220,7 @@ evas = evas_object_evas_get(parent); obj = elm_widget_add(evas); - ELM_SET_WIDTYPE(widtype, "conform"); + ELM_SET_WIDTYPE(widtype, "conformant"); elm_widget_type_set(obj, "conformant"); elm_widget_sub_object_add(parent, obj); elm_widget_data_set(obj, wd); Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2010-03-14 01:07:20 UTC (rev 47194) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2010-03-14 03:48:22 UTC (rev 47195) @@ -860,7 +860,7 @@ const Eina_List *l; const char *key; - it->labels = _stringlist_get(edje_object_data_get(it->base, "labels")); + it->labels = _elm_stringlist_get(edje_object_data_get(it->base, "labels")); EINA_LIST_FOREACH(it->labels, l, key) { char *s = it->itc->func.label_get(it->data, it->wd->obj, l->data); @@ -877,7 +877,7 @@ const Eina_List *l; const char *key; - it->icons = _stringlist_get(edje_object_data_get(it->base, "icons")); + it->icons = _elm_stringlist_get(edje_object_data_get(it->base, "icons")); EINA_LIST_FOREACH(it->icons, l, key) { Evas_Object *ic = it->itc->func.icon_get(it->data, it->wd->obj, l->data); @@ -896,7 +896,7 @@ const Eina_List *l; const char *key; - it->states = _stringlist_get(edje_object_data_get(it->base, "states")); + it->states = _elm_stringlist_get(edje_object_data_get(it->base, "states")); EINA_LIST_FOREACH(it->states, l, key) { Eina_Bool on = it->itc->func.state_get(it->data, it->wd->obj, l->data); @@ -943,11 +943,11 @@ it->base = NULL; evas_object_del(it->spacer); it->spacer = NULL; - _stringlist_free(it->labels); + _elm_stringlist_free(it->labels); it->labels = NULL; - _stringlist_free(it->icons); + _elm_stringlist_free(it->icons); it->icons = NULL; - _stringlist_free(it->states); + _elm_stringlist_free(it->states); EINA_LIST_FREE(it->icon_objs, icon) evas_object_del(icon); Modified: trunk/TMP/st/elementary/src/lib/elm_list.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_list.c 2010-03-14 01:07:20 UTC (rev 47194) +++ trunk/TMP/st/elementary/src/lib/elm_list.c 2010-03-14 03:48:22 UTC (rev 47195) @@ -181,10 +181,13 @@ Widget_Data *wd = elm_widget_data_get(obj); Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1; if (!wd) return; - evas_object_size_hint_min_get(wd->scr, &minw, &minh); - evas_object_size_hint_max_get(wd->scr, &maxw, &maxh); - evas_object_size_hint_min_set(obj, minw, minh); - evas_object_size_hint_max_set(obj, maxw, maxh); + if (wd->scr) + { + evas_object_size_hint_min_get(wd->scr, &minw, &minh); + evas_object_size_hint_max_get(wd->scr, &maxw, &maxh); + evas_object_size_hint_min_set(obj, minw, minh); + evas_object_size_hint_max_set(obj, maxw, maxh); + } } static void @@ -195,8 +198,11 @@ Eina_List *n; if (!wd) return; - elm_smart_scroller_theme_set(wd->scr, "list", "base", elm_widget_style_get(obj)); - edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale); + if (wd->scr) + { + elm_smart_scroller_theme_set(wd->scr, "list", "base", elm_widget_style_get(obj)); + edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale); + } EINA_LIST_FOREACH(wd->items, n, it) { it->fixed = 0; @@ -232,24 +238,30 @@ Elm_List_Item *it; if (!wd) return; - EINA_LIST_FOREACH(wd->items, l, it) + if (sub == NULL) abort(); + if (sub == wd->scr) + wd->scr = NULL; + else { - if ((sub == it->icon) || (sub == it->end)) - { - if (it->icon == sub) it->icon = NULL; - if (it->end == sub) it->end = NULL; - evas_object_event_callback_del_full(sub, - EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _changed_size_hints, obj); - if (!wd->walking) - { - _fix_items(obj); - _sizing_eval(obj); - } - else - wd->fix_pending = EINA_TRUE; - break; - } + EINA_LIST_FOREACH(wd->items, l, it) + { + if ((sub == it->icon) || (sub == it->end)) + { + if (it->icon == sub) it->icon = NULL; + if (it->end == sub) it->end = NULL; + evas_object_event_callback_del_full + (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, + obj); + if (!wd->walking) + { + _fix_items(obj); + _sizing_eval(obj); + } + else + wd->fix_pending = EINA_TRUE; + break; + } + } } } @@ -631,10 +643,13 @@ mw = 0; mh = 0; evas_object_size_hint_min_get(wd->box, &mw, &mh); - if (wd->mode == ELM_LIST_LIMIT) - elm_scroller_content_min_limit(wd->scr, 1, 0); - else - elm_scroller_content_min_limit(wd->scr, 0, 0); + if (wd->scr) + { + if (wd->mode == ELM_LIST_LIMIT) + elm_scroller_content_min_limit(wd->scr, 1, 0); + else + elm_scroller_content_min_limit(wd->scr, 0, 0); + } _sizing_eval(obj); } @@ -643,7 +658,8 @@ { Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_widget_scroll_hold_push(wd->scr); + if (wd->scr) + elm_widget_scroll_hold_push(wd->scr); } static void @@ -651,7 +667,8 @@ { Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_widget_scroll_hold_pop(wd->scr); + if (wd->scr) + elm_widget_scroll_hold_pop(wd->scr); } static void @@ -659,7 +676,8 @@ { Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_widget_scroll_hold_push(wd->scr); + if (wd->scr) + elm_widget_scroll_hold_push(wd->scr); } static void @@ -667,7 +685,8 @@ { Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_widget_scroll_hold_pop(wd->scr); + if (wd->scr) + elm_widget_scroll_hold_pop(wd->scr); } EAPI Evas_Object * @@ -852,10 +871,13 @@ if (!wd) return; if (wd->mode == mode) return; wd->mode = mode; - if (wd->mode == ELM_LIST_LIMIT) - elm_scroller_content_min_limit(wd->scr, 1, 0); - else - elm_scroller_content_min_limit(wd->scr, 0, 0); + if (wd->scr) + { + if (wd->mode == ELM_LIST_LIMIT) + elm_scroller_content_min_limit(wd->scr, 1, 0); + else + elm_scroller_content_min_limit(wd->scr, 0, 0); + } } EAPI Elm_List_Mode @@ -950,7 +972,8 @@ evas_object_geometry_get(it->base, &x, &y, &w, &h); x -= bx; y -= by; - elm_scroller_region_show(wd->scr, x, y, w, h); + if (wd->scr) + elm_scroller_region_show(wd->scr, x, y, w, h); } EAPI void @@ -1111,7 +1134,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_smart_scroller_bounce_allow_set(wd->scr, h_bounce, v_bounce); + if (wd->scr) + elm_smart_scroller_bounce_allow_set(wd->scr, h_bounce, v_bounce); } /** @@ -1135,5 +1159,6 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_scroller_policy_set(wd->scr, policy_h, policy_v); + if (wd->scr) + elm_scroller_policy_set(wd->scr, policy_h, policy_v); } Modified: trunk/TMP/st/elementary/src/lib/elm_priv.h =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_priv.h 2010-03-14 01:07:20 UTC (rev 47194) +++ trunk/TMP/st/elementary/src/lib/elm_priv.h 2010-03-14 03:48:22 UTC (rev 47195) @@ -148,11 +148,14 @@ EAPI void elm_widget_type_set(Evas_Object *obj, const char *type); EAPI const char *elm_widget_type_get(const Evas_Object *obj); -EAPI Eina_List *_stringlist_get(const char *str); -EAPI void _stringlist_free(Eina_List *list); +EAPI Eina_List *_elm_stringlist_get(const char *str); +EAPI void _elm_stringlist_free(Eina_List *list); +Eina_Bool _elm_widget_type_check(Evas_Object *obj, const char *type); + #define ELM_SET_WIDTYPE(widtype, type) if (!widtype) widtype = eina_stringshare_add(type) -#define ELM_CHECK_WIDTYPE(obj, widtype) if (elm_widget_type_get(obj) != widtype) return +//#define ELM_CHECK_WIDTYPE(obj, widtype) if (elm_widget_type_get(obj) != widtype) return +#define ELM_CHECK_WIDTYPE(obj, widtype) if (!_elm_widget_type_check((Evas_Object *)(obj), (const char *)(widtype))) return extern char *_elm_appname; extern Elm_Config *_elm_config; Modified: trunk/TMP/st/elementary/src/lib/elm_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_scroller.c 2010-03-14 01:07:20 UTC (rev 47194) +++ trunk/TMP/st/elementary/src/lib/elm_scroller.c 2010-03-14 03:48:22 UTC (rev 47195) @@ -64,8 +64,11 @@ Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_smart_scroller_theme_set(wd->scr, "scroller", "base", elm_widget_style_get(obj)); - edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale); + if (wd->scr) + { + elm_smart_scroller_theme_set(wd->scr, "scroller", "base", elm_widget_style_get(obj)); + edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale); + } _sizing_eval(obj); } @@ -77,7 +80,8 @@ Evas_Coord x, y, w, h; if (!wd) return; elm_widget_show_region_get(obj, &x, &y, &w, &h); - elm_smart_scroller_child_region_show(wd->scr, x, y, w, h); + if (wd->scr) + elm_smart_scroller_child_region_show(wd->scr, x, y, w, h); } static void @@ -92,26 +96,29 @@ evas_object_size_hint_min_get(wd->content, &minw, &minh); evas_object_size_hint_max_get(wd->content, &maxw, &maxh); evas_object_size_hint_weight_get(wd->content, &xw, &xy); - elm_smart_scroller_child_viewport_size_get(wd->scr, &vw, &vh); - if (xw > 0.0) + if (wd->scr) { - if ((minw > 0) && (vw < minw)) vw = minw; - else if ((maxw > 0) && (vw > maxw)) vw = maxw; + elm_smart_scroller_child_viewport_size_get(wd->scr, &vw, &vh); + if (xw > 0.0) + { + if ((minw > 0) && (vw < minw)) vw = minw; + else if ((maxw > 0) && (vw > maxw)) vw = maxw; + } + else if (minw > 0) vw = minw; + if (xy > 0.0) + { + if ((minh > 0) && (vh < minh)) vh = minh; + else if ((maxh > 0) && (vh > maxh)) vh = maxh; + } + else if (minh > 0) vh = minh; + evas_object_resize(wd->content, vw, vh); + w = -1; + h = -1; + edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr), &vmw, &vmh); + if (wd->min_w) w = vmw + minw; + if (wd->min_h) h = vmh + minh; + evas_object_size_hint_min_set(obj, w, h); } - else if (minw > 0) vw = minw; - if (xy > 0.0) - { - if ((minh > 0) && (vh < minh)) vh = minh; - else if ((maxh > 0) && (vh > maxh)) vh = maxh; - } - else if (minh > 0) vh = minh; - evas_object_resize(wd->content, vw, vh); - w = -1; - h = -1; - edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr), &vmw, &vmh); - if (wd->min_w) w = vmw + minw; - if (wd->min_h) h = vmh + minh; - evas_object_size_hint_min_set(obj, w, h); } static void @@ -136,6 +143,8 @@ wd->content = NULL; _sizing_eval(obj); } + else if (sub == wd->scr) + wd->scr = NULL; } static void @@ -145,7 +154,8 @@ Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_smart_scroller_hold_set(wd->scr, 1); + if (wd->scr) + elm_smart_scroller_hold_set(wd->scr, 1); } static void @@ -155,7 +165,8 @@ Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_smart_scroller_hold_set(wd->scr, 0); + if (wd->scr) + elm_smart_scroller_hold_set(wd->scr, 0); } static void @@ -165,7 +176,8 @@ Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_smart_scroller_freeze_set(wd->scr, 1); + if (wd->scr) + elm_smart_scroller_freeze_set(wd->scr, 1); } static void @@ -175,7 +187,8 @@ Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_smart_scroller_freeze_set(wd->scr, 0); + if (wd->scr) + elm_smart_scroller_freeze_set(wd->scr, 0); } static void @@ -317,7 +330,8 @@ { elm_widget_on_show_region_hook_set(content, _show_region_hook, obj); elm_widget_sub_object_add(obj, content); - elm_smart_scroller_child_set(wd->scr, content); + if (wd->scr) + elm_smart_scroller_child_set(wd->scr, content); evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); _sizing_eval(obj); @@ -369,7 +383,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_smart_scroller_child_region_show(wd->scr, x, y, w, h); + if (wd->scr) + elm_smart_scroller_child_region_show(wd->scr, x, y, w, h); } /** @@ -400,7 +415,8 @@ }; if (!wd) return; if ((policy_h >= 3) || (policy_v >= 3)) return; - elm_smart_scroller_policy_set(wd->scr, map[policy_h], map[policy_v]); + if (wd->scr) + elm_smart_scroller_policy_set(wd->scr, map[policy_h], map[policy_v]); } /** @@ -424,8 +440,11 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if ((x) && (y)) elm_smart_scroller_child_pos_get(wd->scr, x, y); - if ((w) && (h)) elm_smart_scroller_child_viewport_size_get(wd->scr, w, h); + if (wd->scr) + { + if ((x) && (y)) elm_smart_scroller_child_pos_get(wd->scr, x, y); + if ((w) && (h)) elm_smart_scroller_child_viewport_size_get(wd->scr, w, h); + } } /** @@ -474,7 +493,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_smart_scroller_bounce_allow_set(wd->scr, h_bounce, v_bounce); + if (wd->scr) + elm_smart_scroller_bounce_allow_set(wd->scr, h_bounce, v_bounce); } /** @@ -505,8 +525,9 @@ if (!wd) return; wd->pagerel_h = h_pagerel; wd->pagerel_v = v_pagerel; - elm_smart_scroller_paging_set(wd->scr, wd->pagerel_h, wd->pagerel_v, - wd->pagesize_h, wd->pagesize_v); + if (wd->scr) + elm_smart_scroller_paging_set(wd->scr, wd->pagerel_h, wd->pagerel_v, + wd->pagesize_h, wd->pagesize_v); } /** @@ -530,8 +551,9 @@ if (!wd) return; wd->pagesize_h = h_pagesize; wd->pagesize_v = v_pagesize; - elm_smart_scroller_paging_set(wd->scr, wd->pagerel_h, wd->pagerel_v, - wd->pagesize_h, wd->pagesize_v); + if (wd->scr) + elm_smart_scroller_paging_set(wd->scr, wd->pagerel_h, wd->pagerel_v, + wd->pagesize_h, wd->pagesize_v); } /** @@ -559,5 +581,6 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - elm_smart_scroller_region_bring_in(wd->scr, x, y, w, h); + if (wd->scr) + elm_smart_scroller_region_bring_in(wd->scr, x, y, w, h); } Modified: trunk/TMP/st/elementary/src/lib/elm_slideshow.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_slideshow.c 2010-03-14 01:07:20 UTC (rev 47194) +++ trunk/TMP/st/elementary/src/lib/elm_slideshow.c 2010-03-14 03:48:22 UTC (rev 47195) @@ -60,7 +60,7 @@ Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; elm_slideshow_clear(obj); - _stringlist_free(wd->transitions); + _elm_stringlist_free(wd->transitions); if (wd->timer) ecore_timer_del(wd->timer); free(wd); } @@ -232,7 +232,7 @@ elm_widget_resize_object_set(obj, wd->slideshow); evas_object_show(wd->slideshow); - wd->transitions = _stringlist_get(edje_object_data_get(wd->slideshow, "transitions")); + wd->transitions = _elm_stringlist_get(edje_object_data_get(wd->slideshow, "transitions")); if (eina_list_count(wd->transitions) > 0) wd->transition = eina_stringshare_add(eina_list_data_get(wd->transitions)); Modified: trunk/TMP/st/elementary/src/lib/elm_widget.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_widget.c 2010-03-14 01:07:20 UTC (rev 47194) +++ trunk/TMP/st/elementary/src/lib/elm_widget.c 2010-03-14 03:48:22 UTC (rev 47195) @@ -236,6 +236,7 @@ elm_widget_sub_object_del(Evas_Object *obj, Evas_Object *sobj) { API_ENTRY return; + if (!sobj) return; sd->subobjs = eina_list_remove(sd->subobjs, sobj); if (!sd->child_can_focus) { @@ -887,7 +888,7 @@ sobj = sd->resize_obj; sd->resize_obj = NULL; evas_object_event_callback_del_full(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd); - evas_object_smart_callback_call(sd->obj, "sub-object-del", sd->resize_obj); + evas_object_smart_callback_call(sd->obj, "sub-object-del", sobj); evas_object_del(sobj); } if (sd->hover_obj) @@ -1001,9 +1002,10 @@ } } +/* utilities */ Eina_List * -_stringlist_get(const char *str) +_elm_stringlist_get(const char *str) { Eina_List *list = NULL; const char *s, *b; @@ -1028,9 +1030,32 @@ } void -_stringlist_free(Eina_List *list) +_elm_stringlist_free(Eina_List *list) { const char *s; - EINA_LIST_FREE(list, s) - eina_stringshare_del(s); + EINA_LIST_FREE(list, s) eina_stringshare_del(s); } + +Eina_Bool +_elm_widget_type_check(Evas_Object *obj, const char *type) +{ + const char *provided, *expected = "(unknown)"; + static int abort_on_warn = -1; + if (EINA_LIKELY(elm_widget_type_get(obj) == type)) return 1; + if (type) expected = type; + provided = elm_widget_type_get(obj); + if ((!provided) || (provided[0] == 0)) + { + provided = evas_object_type_get(obj); + if ((!provided) || (provided[0] == 0)) + provided = "(unknown)"; + } + ERR("Passing Object: %p, of type: '%s' when expecting type: '%s'", obj, provided, expected); + if (abort_on_warn == -1) + { + if (getenv("ELM_ERROR_ABORT")) abort_on_warn = 1; + else abort_on_warn = 0; + } + if (abort_on_warn == 1) abort(); + return 1; +} |
From: Enlightenment S. <no-...@en...> - 2010-03-14 22:34:00
|
Log: aaah typo! fix from lupan. Author: raster Date: 2010-03-14 15:33:52 -0700 (Sun, 14 Mar 2010) New Revision: 47225 Modified: trunk/TMP/st/elementary/src/bin/test_button.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_button.c Modified: trunk/TMP/st/elementary/src/bin/test_button.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_button.c 2010-03-14 20:48:52 UTC (rev 47224) +++ trunk/TMP/st/elementary/src/bin/test_button.c 2010-03-14 22:33:52 UTC (rev 47225) @@ -82,7 +82,7 @@ elm_box_pack_end(bx, bt); evas_object_smart_callback_add(bt, "repeated", _bt_repeated, NULL); elm_button_autorepeat_set(bt, 1); - elm_button_autorepeat_initital_timeout_set(bt, 2.0); + elm_button_autorepeat_initial_timeout_set(bt, 2.0); elm_button_autorepeat_gap_timeout_set(bt, 0.5); evas_object_show(bt); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-03-14 20:48:52 UTC (rev 47224) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-03-14 22:33:52 UTC (rev 47225) @@ -382,7 +382,7 @@ EAPI void elm_button_icon_set(Evas_Object *obj, Evas_Object *icon); EAPI Evas_Object *elm_button_icon_get(Evas_Object *obj); EAPI void elm_button_autorepeat_set(Evas_Object *obj, Eina_Bool on); - EAPI void elm_button_autorepeat_initital_timeout_set(Evas_Object *obj, double t); + EAPI void elm_button_autorepeat_initial_timeout_set(Evas_Object *obj, double t); EAPI void elm_button_autorepeat_gap_timeout_set(Evas_Object *obj, double t); /* available styles: * default Modified: trunk/TMP/st/elementary/src/lib/elm_button.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_button.c 2010-03-14 20:48:52 UTC (rev 47224) +++ trunk/TMP/st/elementary/src/lib/elm_button.c 2010-03-14 22:33:52 UTC (rev 47225) @@ -349,7 +349,7 @@ * @ingroup Button */ EAPI void -elm_button_autorepeat_initital_timeout_set(Evas_Object *obj, double t) +elm_button_autorepeat_initial_timeout_set(Evas_Object *obj, double t) { ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); |
From: Enlightenment S. <no-...@en...> - 2010-04-05 05:07:19
|
Log: 1. if window is transient for another.. if parent del - nuke reference to it in transient. 2. addd flush button in genlist test - for exposing memory issues. Author: raster Date: 2010-04-04 21:58:43 -0700 (Sun, 04 Apr 2010) New Revision: 47757 Modified: trunk/TMP/st/elementary/src/bin/test_genlist.c trunk/TMP/st/elementary/src/lib/elm_win.c Modified: trunk/TMP/st/elementary/src/bin/test_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_genlist.c 2010-04-05 00:43:12 UTC (rev 47756) +++ trunk/TMP/st/elementary/src/bin/test_genlist.c 2010-04-05 04:58:43 UTC (rev 47757) @@ -312,6 +312,16 @@ elm_genlist_item_selected_set(gli, 1); } +static void +my_gl_flush(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *gl = data; + evas_image_cache_flush(evas_object_evas_get(obj)); + evas_font_cache_flush(evas_object_evas_get(obj)); + edje_file_cache_flush(); + edje_collection_cache_flush(); +} + void test_genlist2(void *data, Evas_Object *obj, void *event_info) { @@ -466,6 +476,14 @@ elm_box_pack_end(bx3, bt); evas_object_show(bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "Flush"); + evas_object_smart_callback_add(bt, "clicked", my_gl_flush, gl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx3, bt); + evas_object_show(bt); + elm_box_pack_end(bx, bx3); evas_object_show(bx3); Modified: trunk/TMP/st/elementary/src/lib/elm_win.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_win.c 2010-04-05 00:43:12 UTC (rev 47756) +++ trunk/TMP/st/elementary/src/lib/elm_win.c 2010-04-05 04:58:43 UTC (rev 47757) @@ -29,6 +29,7 @@ static const char *widtype = NULL; static void _elm_win_obj_callback_del(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _elm_win_obj_callback_parent_del(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _elm_win_obj_intercept_show(void *data, Evas_Object *obj); static void _elm_win_move(Ecore_Evas *ee); static void _elm_win_resize(Ecore_Evas *ee); @@ -111,6 +112,12 @@ Elm_Win *win = data; Evas_Object *child; + if (win->parent) + { + evas_object_event_callback_del_full(win->parent, EVAS_CALLBACK_DEL, + _elm_win_obj_callback_parent_del, win); + win->parent = NULL; + } if (win->autodel_clear) *(win->autodel_clear) = -1; _elm_win_list = eina_list_remove(_elm_win_list, win->win_obj); while (win->subobjs) elm_win_resize_object_del(obj, win->subobjs->data); @@ -128,11 +135,11 @@ { evas_object_del(child); } - evas_image_cache_flush(win->evas); - evas_font_cache_flush(win->evas); // FIXME: Why are we flushing edje on every window destroy ?? - edje_file_cache_flush(); - edje_collection_cache_flush(); +// evas_image_cache_flush(win->evas); +// evas_font_cache_flush(win->evas); +// edje_file_cache_flush(); +// edje_collection_cache_flush(); // FIXME: we are in the del handler for the object and delete the canvas // that lives under it from the handler... nasty. deferring doesnt help either ecore_job_add(_deferred_ecore_evas_free, win->ee); @@ -142,11 +149,22 @@ if ((!_elm_win_list) && (elm_policy_get(ELM_POLICY_QUIT) == ELM_POLICY_QUIT_LAST_WINDOW_CLOSED)) { + evas_image_cache_flush(e); + evas_font_cache_flush(e); + edje_file_cache_flush(); + edje_collection_cache_flush(); elm_exit(); } } static void +_elm_win_obj_callback_parent_del(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +{ + Elm_Win *win = data; + if (obj == win->parent) win->parent = NULL; +} + +static void _elm_win_obj_intercept_show(void *data __UNUSED__, Evas_Object *obj) { // this is called to make sure all smart containers have calculated their @@ -445,6 +463,9 @@ win->type = type; win->parent = parent; + if (win->parent) + evas_object_event_callback_add(win->parent, EVAS_CALLBACK_DEL, + _elm_win_obj_callback_parent_del, win); win->evas = ecore_evas_get(win->ee); win->win_obj = elm_widget_add(win->evas); |
From: Enlightenment S. <no-...@en...> - 2010-04-12 08:27:17
|
Log: support flush and dump protocol - also add call to do this by requuest from the app itself. Author: raster Date: 2010-04-12 01:27:10 -0700 (Mon, 12 Apr 2010) New Revision: 47949 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/bin/test_genlist.c trunk/TMP/st/elementary/src/bin/test_launcher.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_main.c trunk/TMP/st/elementary/src/lib/elm_priv.h trunk/TMP/st/elementary/src/lib/elm_win.c Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2010-04-12 08:24:19 UTC (rev 47948) +++ trunk/TMP/st/elementary/src/bin/test.c 2010-04-12 08:27:10 UTC (rev 47949) @@ -68,6 +68,7 @@ void test_multi(void *data, Evas_Object *obj, void *event_info); void test_floating(void *data, Evas_Object *obj, void *event_info); void test_launcher(void *data, Evas_Object *obj, void *event_info); +void test_launcher2(void *data, Evas_Object *obj, void *event_info); void test_anim(void *data, Evas_Object *obj, void *event_info); @@ -257,6 +258,7 @@ ADD_TEST("Multi Touch", test_multi); ADD_TEST("Floating Objects", test_floating); ADD_TEST("Launcher", test_launcher); + ADD_TEST("Launcher 2", test_launcher2); ADD_TEST("Animation", test_anim); #undef ADD_TEST Modified: trunk/TMP/st/elementary/src/bin/test_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_genlist.c 2010-04-12 08:24:19 UTC (rev 47948) +++ trunk/TMP/st/elementary/src/bin/test_genlist.c 2010-04-12 08:27:10 UTC (rev 47949) @@ -312,14 +312,17 @@ elm_genlist_item_selected_set(gli, 1); } +static int +my_gl_flush_delay(void *data) +{ + elm_all_flush(); + return 0; +} + static void my_gl_flush(void *data, Evas_Object *obj, void *event_info) { - Evas_Object *gl = data; - evas_image_cache_flush(evas_object_evas_get(obj)); - evas_font_cache_flush(evas_object_evas_get(obj)); - edje_file_cache_flush(); - edje_collection_cache_flush(); + ecore_timer_add(1.2, my_gl_flush_delay, NULL); } void Modified: trunk/TMP/st/elementary/src/bin/test_launcher.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_launcher.c 2010-04-12 08:24:19 UTC (rev 47948) +++ trunk/TMP/st/elementary/src/bin/test_launcher.c 2010-04-12 08:27:10 UTC (rev 47949) @@ -249,4 +249,128 @@ evas_object_resize(win, 480, 800); evas_object_show(win); } + +void +test_launcher2(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *sc, *tb, *pad, *bt, *ic, *lb, *tb2, *mb, *ck, *bx, *rc, *ly; + int i, j, k, n, m; + char buf[PATH_MAX]; + Eina_List *mbs = NULL; + + win = elm_win_add(NULL, "launcher", ELM_WIN_BASIC); + elm_win_title_set(win, "Launcher"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + snprintf(buf, sizeof(buf), "%s/images/sky_03.jpg", PACKAGE_DATA_DIR); + elm_bg_file_set(bg, buf, NULL); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_box_homogenous_set(bx, 1); + elm_box_horizontal_set(bx, 1); + + for (k = 0 ; k < 8; k++) + { + ly = elm_layout_add(win); + snprintf(buf, sizeof(buf), "%s/objects/test.edj", PACKAGE_DATA_DIR); + elm_layout_file_set(ly, buf, "layout"); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Button 1"); + elm_layout_content_set(ly, "element1", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Button 2"); + elm_layout_content_set(ly, "element2", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Button 3"); + elm_layout_content_set(ly, "element3", bt); + evas_object_show(bt); + + mb = elm_mapbuf_add(win); + elm_mapbuf_content_set(mb, ly); + evas_object_show(ly); + + elm_box_pack_end(bx, mb); + evas_object_show(mb); + + mbs = eina_list_append(mbs, mb); + } + + // fixme: free mbs + evas_object_data_set(win, "mbs", mbs); + + sc = elm_scroller_add(win); + elm_scroller_bounce_set(sc, 1, 0); + elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, sc); + + elm_scroller_content_set(sc, bx); + evas_object_show(bx); + + elm_scroller_page_relative_set(sc, 1.0, 1.0); + evas_object_show(sc); + + tb2 = elm_table_add(win); + evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, tb2); + + ck = elm_check_add(win); + elm_check_label_set(ck, "Map"); + elm_check_state_set(ck, 0); + evas_object_smart_callback_add(ck, "changed", mode_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.05, 0.99); + elm_table_pack(tb2, ck, 0, 0, 1, 1); + evas_object_show(ck); + + ck = elm_check_add(win); + elm_check_label_set(ck, "A"); + elm_check_state_set(ck, 1); + evas_object_smart_callback_add(ck, "changed", alpha_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.20, 0.99); + elm_table_pack(tb2, ck, 1, 0, 1, 1); + evas_object_show(ck); + + ck = elm_check_add(win); + elm_check_label_set(ck, "Smo"); + elm_check_state_set(ck, 1); + evas_object_smart_callback_add(ck, "changed", smooth_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.40, 0.99); + elm_table_pack(tb2, ck, 2, 0, 1, 1); + evas_object_show(ck); + + ck = elm_check_add(win); + elm_check_label_set(ck, "FS"); + elm_check_state_set(ck, 0); + evas_object_smart_callback_add(ck, "changed", full_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.5, 0.99); + elm_table_pack(tb2, ck, 3, 0, 1, 1); + evas_object_show(ck); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Close"); + evas_object_smart_callback_add(bt, "clicked", close_cb, win); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bt, 0.95, 0.99); + elm_table_pack(tb2, bt, 4, 0, 1, 1); + evas_object_show(bt); + + evas_object_show(tb2); + + evas_object_resize(win, 480, 800); + evas_object_show(win); +} #endif Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-04-12 08:24:19 UTC (rev 47948) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-04-12 08:27:10 UTC (rev 47949) @@ -226,7 +226,9 @@ EAPI Eina_Bool elm_policy_set(unsigned int policy, int value); EAPI int elm_policy_get(unsigned int policy); - + + EAPI void elm_all_flush(void); + EAPI void elm_object_scale_set(Evas_Object *obj, double scale); EAPI double elm_object_scale_get(const Evas_Object *obj); EAPI void elm_object_style_set(Evas_Object *obj, const char *style); Modified: trunk/TMP/st/elementary/src/lib/elm_main.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_main.c 2010-04-12 08:24:19 UTC (rev 47948) +++ trunk/TMP/st/elementary/src/lib/elm_main.c 2010-04-12 08:27:10 UTC (rev 47949) @@ -1331,6 +1331,25 @@ return _elm_policies[policy]; } +/** + * Flush all caches & dump all data that can be to lean down to use less memory + */ +EAPI void +elm_all_flush(void) +{ + const Eina_List *l; + Evas_Object *obj; + + EINA_LIST_FOREACH(_elm_win_list, l, obj) + { + Evas *e = evas_object_evas_get(obj); + edje_file_cache_flush(); + edje_collection_cache_flush(); + evas_image_cache_flush(e); + evas_font_cache_flush(e); + evas_render_dump(e); + } +} /** * @defgroup Scaling Selective Widget Scaling Modified: trunk/TMP/st/elementary/src/lib/elm_priv.h =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_priv.h 2010-04-12 08:24:19 UTC (rev 47948) +++ trunk/TMP/st/elementary/src/lib/elm_priv.h 2010-04-12 08:27:10 UTC (rev 47949) @@ -168,6 +168,8 @@ extern const char *_elm_lib_dir; extern int _elm_log_dom; +extern Eina_List *_elm_win_list; + #define CRITICAL(...) EINA_LOG_DOM_CRIT(_elm_log_dom, __VA_ARGS__) #define ERR(...) EINA_LOG_DOM_ERR(_elm_log_dom, __VA_ARGS__) #define WRN(...) EINA_LOG_DOM_WARN(_elm_log_dom, __VA_ARGS__) Modified: trunk/TMP/st/elementary/src/lib/elm_win.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_win.c 2010-04-12 08:24:19 UTC (rev 47948) +++ trunk/TMP/st/elementary/src/lib/elm_win.c 2010-04-12 08:27:10 UTC (rev 47949) @@ -16,7 +16,10 @@ Evas *evas; Evas_Object *parent, *win_obj; Eina_List *subobjs; +#ifdef HAVE_ELEMENTARY_X Ecore_X_Window xwin; + Ecore_Event_Handler *client_message_handler; +#endif Ecore_Job *deferred_resize_job; Ecore_Job *deferred_child_eval_job; @@ -44,7 +47,7 @@ static void _elm_win_subobj_callback_del(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _elm_win_subobj_callback_changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info); -static Eina_List *_elm_win_list = NULL; +Eina_List *_elm_win_list = NULL; static void _elm_win_move(Ecore_Evas *ee) @@ -137,6 +140,10 @@ { evas_object_del(child); } +#ifdef HAVE_ELEMENTARY_X + if (win->client_message_handler) + ecore_event_handler_del(win->client_message_handler); +#endif // FIXME: Why are we flushing edje on every window destroy ?? // evas_image_cache_flush(win->evas); // evas_font_cache_flush(win->evas); @@ -212,6 +219,7 @@ } } +#ifdef HAVE_ELEMENTARY_X static void _elm_win_xwindow_get(Elm_Win *win) { @@ -244,11 +252,12 @@ break; } } +#endif +#ifdef HAVE_ELEMENTARY_X static void _elm_win_xwin_update(Elm_Win *win) { -#ifdef HAVE_ELEMENTARY_X _elm_win_xwindow_get(win); if (win->parent) { @@ -295,8 +304,8 @@ } ecore_x_e_virtual_keyboard_state_set (win->xwin, (Ecore_X_Virtual_Keyboard_State)win->kbdmode); +} #endif -} static void _elm_win_eval_subobjs(Evas_Object *obj) @@ -374,6 +383,47 @@ elm_widget_theme(obj); } +#ifdef HAVE_ELEMENTARY_X +static int +_elm_win_client_message(void *data, int type __UNUSED__, void *event) +{ + Elm_Win *win = data; + Ecore_X_Event_Client_Message *e = event; + + if (e->format != 32) return 1; + if (e->message_type == ECORE_X_ATOM_E_COMP_FLUSH) + { + if (e->data.l[0] == win->xwin) + { + Evas *e = evas_object_evas_get(win->win_obj); + if (e) + { + edje_file_cache_flush(); + edje_collection_cache_flush(); + evas_image_cache_flush(e); + evas_font_cache_flush(e); + } + } + } + else if (e->message_type == ECORE_X_ATOM_E_COMP_DUMP) + { + if (e->data.l[0] == win->xwin) + { + Evas *e = evas_object_evas_get(win->win_obj); + if (e) + { + edje_file_cache_flush(); + edje_collection_cache_flush(); + evas_image_cache_flush(e); + evas_font_cache_flush(e); + evas_render_dump(e); + } + } + } + return 1; +} +#endif + /** * Adds a window object. If this is the first window created, pass NULL as * @p parent. @@ -406,6 +456,10 @@ { case ELM_SOFTWARE_X11: win->ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, 1); +#ifdef HAVE_ELEMENTARY_X + win->client_message_handler = ecore_event_handler_add + (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, win); +#endif break; case ELM_SOFTWARE_FB: win->ee = ecore_evas_fb_new(NULL, 0, 1, 1); @@ -420,6 +474,10 @@ CRITICAL("Software-16 engine create failed. Try software."); win->ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, 1); } +#ifdef HAVE_ELEMENTARY_X + win->client_message_handler = ecore_event_handler_add + (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, win); +#endif break; case ELM_XRENDER_X11: win->ee = ecore_evas_xrender_x11_new(NULL, 0, 0, 0, 1, 1); @@ -428,6 +486,10 @@ CRITICAL("XRender engine create failed. Try software."); win->ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, 1); } +#ifdef HAVE_ELEMENTARY_X + win->client_message_handler = ecore_event_handler_add + (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, win); +#endif break; case ELM_OPENGL_X11: win->ee = ecore_evas_gl_x11_new(NULL, 0, 0, 0, 1, 1); @@ -436,6 +498,10 @@ CRITICAL("OpenGL engine create failed. Try software."); win->ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, 1); } +#ifdef HAVE_ELEMENTARY_X + win->client_message_handler = ecore_event_handler_add + (ECORE_X_EVENT_CLIENT_MESSAGE, _elm_win_client_message, win); +#endif break; case ELM_SOFTWARE_WIN32: win->ee = ecore_evas_software_gdi_new(NULL, 0, 0, 1, 1); @@ -476,7 +542,9 @@ free(win); return NULL; } +#ifdef HAVE_ELEMENTARY_X _elm_win_xwindow_get(win); +#endif if ((_elm_config->bgpixmap) && (!_elm_config->compositing)) ecore_evas_avoid_damage_set(win->ee, ECORE_EVAS_AVOID_DAMAGE_EXPOSE); // bg pixmap done by x - has other issues like can be redrawn by x before it @@ -526,8 +594,10 @@ else if (_elm_config->font_hinting == 2) evas_font_hinting_set(win->evas, EVAS_FONT_HINTING_BYTECODE); +#ifdef HAVE_ELEMENTARY_X _elm_win_xwin_update(win); - +#endif + _elm_win_list = eina_list_append(_elm_win_list, win->win_obj); switch (_elm_config->engine) @@ -547,6 +617,7 @@ default: break; } + return win->win_obj; } @@ -708,7 +779,9 @@ win = elm_widget_data_get(obj); if (!win) return; ecore_evas_borderless_set(win->ee, borderless); +#ifdef HAVE_ELEMENTARY_X _elm_win_xwin_update(win); +#endif } /** @@ -745,7 +818,9 @@ win = elm_widget_data_get(obj); if (!win) return; ecore_evas_shaped_set(win->ee, shaped); +#ifdef HAVE_ELEMENTARY_X _elm_win_xwin_update(win); +#endif } /** @@ -781,6 +856,7 @@ ELM_CHECK_WIDTYPE(obj, widtype); win = elm_widget_data_get(obj); if (!win) return; +#ifdef HAVE_ELEMENTARY_X if (win->xwin) { if (alpha) @@ -795,6 +871,7 @@ _elm_win_xwin_update(win); } else +#endif ecore_evas_alpha_set(win->ee, alpha); } @@ -832,12 +909,14 @@ win = elm_widget_data_get(obj); if (!win) return; +#ifdef HAVE_ELEMENTARY_X if (win->xwin) { ecore_evas_transparent_set(win->ee, transparent); _elm_win_xwin_update(win); } else +#endif ecore_evas_transparent_set(win->ee, transparent); } @@ -876,7 +955,9 @@ win = elm_widget_data_get(obj); if (!win) return; ecore_evas_override_set(win->ee, override); +#ifdef HAVE_ELEMENTARY_X _elm_win_xwin_update(win); +#endif } /** @@ -920,7 +1001,9 @@ break; default: ecore_evas_fullscreen_set(win->ee, fullscreen); +#ifdef HAVE_ELEMENTARY_X _elm_win_xwin_update(win); +#endif break; } } @@ -970,7 +1053,9 @@ win = elm_widget_data_get(obj); if (!win) return; ecore_evas_maximized_set(win->ee, maximized); +#ifdef HAVE_ELEMENTARY_X _elm_win_xwin_update(win); +#endif } /** @@ -1007,7 +1092,9 @@ win = elm_widget_data_get(obj); if (!win) return; ecore_evas_iconified_set(win->ee, iconified); +#ifdef HAVE_ELEMENTARY_X _elm_win_xwin_update(win); +#endif } /** @@ -1043,8 +1130,10 @@ ELM_CHECK_WIDTYPE(obj, widtype); win = elm_widget_data_get(obj); if (!win) return; - ecore_evas_layer_set(win->ee, layer); + ecore_evas_layer_set(win->ee, layer); +#ifdef HAVE_ELEMENTARY_X _elm_win_xwin_update(win); +#endif } /** @@ -1086,7 +1175,9 @@ evas_object_size_hint_min_set(obj, -1, -1); evas_object_size_hint_max_set(obj, -1, -1); _elm_win_eval_subobjs(obj); +#ifdef HAVE_ELEMENTARY_X _elm_win_xwin_update(win); +#endif } /** @@ -1110,7 +1201,9 @@ evas_object_size_hint_min_set(obj, -1, -1); evas_object_size_hint_max_set(obj, -1, -1); _elm_win_eval_subobjs(obj); +#ifdef HAVE_ELEMENTARY_X _elm_win_xwin_update(win); +#endif } /** @@ -1147,7 +1240,9 @@ win = elm_widget_data_get(obj); if (!win) return; ecore_evas_sticky_set(win->ee, sticky); +#ifdef HAVE_ELEMENTARY_X _elm_win_xwin_update(win); +#endif } /** @@ -1200,7 +1295,9 @@ win = elm_widget_data_get(obj); if (!win) return; if (mode == win->kbdmode) return; +#ifdef HAVE_ELEMENTARY_X _elm_win_xwindow_get(win); +#endif win->kbdmode = mode; #ifdef HAVE_ELEMENTARY_X if (win->xwin) @@ -1224,8 +1321,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); win = elm_widget_data_get(obj); if (!win) return; +#ifdef HAVE_ELEMENTARY_X _elm_win_xwindow_get(win); -#ifdef HAVE_ELEMENTARY_X if (win->xwin) ecore_x_e_virtual_keyboard_set(win->xwin, is_keyboard); #endif @@ -1266,8 +1363,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); win = elm_widget_data_get(obj); if (!win) return; +#ifdef HAVE_ELEMENTARY_X _elm_win_xwindow_get(win); -#ifdef HAVE_ELEMENTARY_X if (win->xwin) ecore_x_e_illume_conformant_set(win->xwin, conformant); #endif @@ -1288,8 +1385,8 @@ ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE; win = elm_widget_data_get(obj); if (!win) return EINA_FALSE; +#ifdef HAVE_ELEMENTARY_X _elm_win_xwindow_get(win); -#ifdef HAVE_ELEMENTARY_X if (win->xwin) return ecore_x_e_illume_conformant_get(win->xwin); #endif @@ -1313,8 +1410,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); win = elm_widget_data_get(obj); if (!win) return; +#ifdef HAVE_ELEMENTARY_X _elm_win_xwindow_get(win); -#ifdef HAVE_ELEMENTARY_X if (win->xwin) { ecore_x_e_illume_quickpanel_set(win->xwin, quickpanel); @@ -1346,8 +1443,8 @@ ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE; win = elm_widget_data_get(obj); if (!win) return EINA_FALSE; +#ifdef HAVE_ELEMENTARY_X _elm_win_xwindow_get(win); -#ifdef HAVE_ELEMENTARY_X if (win->xwin) return ecore_x_e_illume_quickpanel_get(win->xwin); #endif @@ -1369,8 +1466,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); win = elm_widget_data_get(obj); if (!win) return; +#ifdef HAVE_ELEMENTARY_X _elm_win_xwindow_get(win); -#ifdef HAVE_ELEMENTARY_X if (win->xwin) ecore_x_e_illume_quickpanel_priority_major_set(win->xwin, priority); #endif @@ -1391,8 +1488,8 @@ ELM_CHECK_WIDTYPE(obj, widtype) -1; win = elm_widget_data_get(obj); if (!win) return -1; +#ifdef HAVE_ELEMENTARY_X _elm_win_xwindow_get(win); -#ifdef HAVE_ELEMENTARY_X if (win->xwin) return ecore_x_e_illume_quickpanel_priority_major_get(win->xwin); #endif @@ -1414,8 +1511,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); win = elm_widget_data_get(obj); if (!win) return; +#ifdef HAVE_ELEMENTARY_X _elm_win_xwindow_get(win); -#ifdef HAVE_ELEMENTARY_X if (win->xwin) ecore_x_e_illume_quickpanel_priority_minor_set(win->xwin, priority); #endif @@ -1436,8 +1533,8 @@ ELM_CHECK_WIDTYPE(obj, widtype) -1; win = elm_widget_data_get(obj); if (!win) return -1; +#ifdef HAVE_ELEMENTARY_X _elm_win_xwindow_get(win); -#ifdef HAVE_ELEMENTARY_X if (win->xwin) return ecore_x_e_illume_quickpanel_priority_minor_get(win->xwin); #endif @@ -1459,8 +1556,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); win = elm_widget_data_get(obj); if (!win) return; +#ifdef HAVE_ELEMENTARY_X _elm_win_xwindow_get(win); -#ifdef HAVE_ELEMENTARY_X if (win->xwin) ecore_x_e_illume_quickpanel_zone_set(win->xwin, zone); #endif @@ -1630,9 +1727,12 @@ { Ecore_X_Window xwin = 0; Ecore_Evas *ee = NULL; - if (!obj) return 0; +#ifdef HAVE_ELEMENTARY_X ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj)); if (ee) xwin = (Ecore_X_Window)ecore_evas_window_get(ee); return xwin; +#else + return 0; +#endif } |
From: Enlightenment S. <no-...@en...> - 2010-04-28 06:13:13
|
Log: support items in anchorblock/view too. Author: raster Date: 2010-04-27 23:13:06 -0700 (Tue, 27 Apr 2010) New Revision: 48384 Modified: trunk/TMP/st/elementary/src/bin/test_anchorblock.c trunk/TMP/st/elementary/src/bin/test_anchorview.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elc_anchorblock.c trunk/TMP/st/elementary/src/lib/elc_anchorview.c trunk/TMP/st/elementary/src/lib/elm_entry.c Modified: trunk/TMP/st/elementary/src/bin/test_anchorblock.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_anchorblock.c 2010-04-28 05:14:02 UTC (rev 48383) +++ trunk/TMP/st/elementary/src/bin/test_anchorblock.c 2010-04-28 06:13:06 UTC (rev 48384) @@ -185,7 +185,7 @@ "of information. This of course can be later explicitly " "done by links maybe running local apps or even being " "web URL's too that launch the web browser and point it " - "to that URL."); + "to that URL. <item relsize=16x16 vsize=full href=emoticon/omg></item>"); evas_object_smart_callback_add(av, "anchor,clicked", my_anchorblock_anchor, av); elm_bubble_content_set(bb, av); evas_object_show(av); @@ -209,7 +209,7 @@ av = elm_anchorblock_add(win); elm_anchorblock_hover_style_set(av, "popout"); elm_anchorblock_hover_parent_set(av, win); - elm_anchorblock_text_set(av, "This is a short message"); + elm_anchorblock_text_set(av, "This is a short message. <item relsize=16x16 vsize=full href=emoticon/haha></item>"); evas_object_smart_callback_add(av, "anchor,clicked", my_anchorblock_anchor, av); elm_bubble_content_set(bb, av); Modified: trunk/TMP/st/elementary/src/bin/test_anchorview.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_anchorview.c 2010-04-28 05:14:02 UTC (rev 48383) +++ trunk/TMP/st/elementary/src/bin/test_anchorview.c 2010-04-28 06:13:06 UTC (rev 48384) @@ -91,7 +91,7 @@ "<a href=X><link>links in the text</></a>, so enter text<br>" "in here to edit it. By the way, links are<br>" "called <a href=anc-02>Anchors</a> so you will need<br>" - "to refer to them this way."); + "to refer to them this way. <item relsize=16x16 vsize=full href=emoticon/guilty-smile></item>"); evas_object_size_hint_weight_set(av, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_smart_callback_add(av, "anchor,clicked", my_anchorview_anchor, av); elm_win_resize_object_add(win, av); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-04-28 05:14:02 UTC (rev 48383) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-04-28 06:13:06 UTC (rev 48384) @@ -481,7 +481,7 @@ EAPI Eina_Bool elm_label_line_wrap_get(const Evas_Object *obj); EAPI void elm_label_wrap_width_set(Evas_Object *obj, Evas_Coord w); EAPI Evas_Coord elm_label_wrap_width_get(const Evas_Object *obj); -/* available styles: + /* available styles: * default * marker */ @@ -759,6 +759,9 @@ EAPI void elm_anchorview_hover_style_set(Evas_Object *obj, const char *style); EAPI void elm_anchorview_hover_end(Evas_Object *obj); EAPI void elm_anchorview_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce); + EAPI void elm_anchorview_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data); + EAPI void elm_anchorview_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data); + EAPI void elm_anchorview_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data); /* smart callbacks called: * "anchor,clicked" - achor called was clicked | event_info = Elm_Entry_Anchorview_Info */ @@ -784,6 +787,9 @@ EAPI void elm_anchorblock_hover_parent_set(Evas_Object *obj, Evas_Object *parent); EAPI void elm_anchorblock_hover_style_set(Evas_Object *obj, const char *style); EAPI void elm_anchorblock_hover_end(Evas_Object *obj); + EAPI void elm_anchorblock_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data); + EAPI void elm_anchorblock_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data); + EAPI void elm_anchorblock_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data); /* smart callbacks called: * "anchor,clicked" - achor called was clicked | event_info = Elm_Entry_Anchorblock_Info */ Modified: trunk/TMP/st/elementary/src/lib/elc_anchorblock.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elc_anchorblock.c 2010-04-28 05:14:02 UTC (rev 48383) +++ trunk/TMP/st/elementary/src/lib/elc_anchorblock.c 2010-04-28 06:13:06 UTC (rev 48384) @@ -16,15 +16,23 @@ * Elm_Entry_Anchorview_Info */ typedef struct _Widget_Data Widget_Data; +typedef struct _Elm_Anchorblock_Item_Provider Elm_Anchorblock_Item_Provider; struct _Widget_Data { Evas_Object *entry; Evas_Object *hover_parent; Evas_Object *pop, *hover; + Eina_List *item_providers; const char *hover_style; }; +struct _Elm_Anchorblock_Item_Provider +{ + Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item); + void *data; +}; + static const char *widtype = NULL; static const char SIG_ANCHOR_CLICKED[] = "anchor,clicked"; @@ -56,8 +64,13 @@ _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + Elm_Anchorblock_Item_Provider *ip; if (!wd) return; if (wd->hover_style) eina_stringshare_del(wd->hover_style); + EINA_LIST_FREE(wd->item_providers, ip) + { + free(ip); + } free(wd); } @@ -138,6 +151,22 @@ wd->hover_parent = NULL; } +static Evas_Object * +_item_provider(void *data, Evas_Object *entry, const char *item) +{ + Widget_Data *wd = elm_widget_data_get(data); + Evas_Object *o; + Eina_List *l; + Elm_Anchorblock_Item_Provider *ip; + + EINA_LIST_FOREACH(wd->item_providers, l, ip) + { + o = ip->func(ip->data, data, item); + if (o) return o; + } + return NULL; +} + /** * Add a new Anchorblock object * @@ -164,6 +193,7 @@ elm_widget_del_hook_set(obj, _del_hook); wd->entry = elm_entry_add(parent); + elm_entry_item_provider_prepend(wd->entry, _item_provider, obj); elm_widget_resize_object_set(obj, wd->entry); elm_entry_editable_set(wd->entry, 0); evas_object_size_hint_weight_set(wd->entry, 1.0, 1.0); @@ -296,3 +326,91 @@ wd->hover = NULL; wd->pop = NULL; } + +/** + * This appends a custom item provider to the list for that anchorblock + * + * This appends the given callback. The list is walked from beginning to end + * with each function called given the item href string in the text. If the + * function returns an object handle other than NULL (it should create an + * and object to do this), then this object is used to replace that item. If + * not the next provider is called until one provides an item object, or the + * default provider in anchorblock does. + * + * @param obj The anchorblock object + * @param func The function called to provide the item object + * @param data The data passed to @p func + * + * @ingroup Anchorblock + */ +EAPI void +elm_anchorblock_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + if (!func) return; + Elm_Anchorblock_Item_Provider *ip = calloc(1, sizeof(Elm_Anchorblock_Item_Provider)); + if (!ip) return; + ip->func = func; + ip->data = data; + wd->item_providers = eina_list_append(wd->item_providers, ip); +} + +/** + * This prepends a custom item provider to the list for that anchorblock + * + * This prepends the given callback. See elm_anchorblock_item_provider_append() for + * more information + * + * @param obj The anchorblock object + * @param func The function called to provide the item object + * @param data The data passed to @p func + * + * @ingroup Anchorblock + */ +EAPI void +elm_anchorblock_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + if (!func) return; + Elm_Anchorblock_Item_Provider *ip = calloc(1, sizeof(Elm_Anchorblock_Item_Provider)); + if (!ip) return; + ip->func = func; + ip->data = data; + wd->item_providers = eina_list_prepend(wd->item_providers, ip); +} + +/** + * This removes a custom item provider to the list for that anchorblock + * + * This removes the given callback. See elm_anchorblock_item_provider_append() for + * more information + * + * @param obj The anchorblock object + * @param func The function called to provide the item object + * @param data The data passed to @p func + * + * @ingroup Anchorblock + */ +EAPI void +elm_anchorblock_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + Eina_List *l; + Elm_Anchorblock_Item_Provider *ip; + if (!wd) return; + if (!func) return; + EINA_LIST_FOREACH(wd->item_providers, l, ip) + { + if ((ip->func == func) && (ip->data == data)) + { + wd->item_providers = eina_list_remove_list(wd->item_providers, l); + free(ip); + return; + } + } +} Modified: trunk/TMP/st/elementary/src/lib/elc_anchorview.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elc_anchorview.c 2010-04-28 05:14:02 UTC (rev 48383) +++ trunk/TMP/st/elementary/src/lib/elc_anchorview.c 2010-04-28 06:13:06 UTC (rev 48384) @@ -13,15 +13,23 @@ * Elm_Entry_Anchorview_Info */ typedef struct _Widget_Data Widget_Data; +typedef struct _Elm_Anchorview_Item_Provider Elm_Anchorview_Item_Provider; struct _Widget_Data { Evas_Object *scroller, *entry; Evas_Object *hover_parent; Evas_Object *pop, *hover; + Eina_List *item_providers; const char *hover_style; }; +struct _Elm_Anchorview_Item_Provider +{ + Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item); + void *data; +}; + static const char *widtype = NULL; static const char SIG_ANCHOR_CLICKED[] = "anchor,clicked"; @@ -49,8 +57,13 @@ _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + Elm_Anchorview_Item_Provider *ip; if (!wd) return; if (wd->hover_style) eina_stringshare_del(wd->hover_style); + EINA_LIST_FREE(wd->item_providers, ip) + { + free(ip); + } free(wd); } @@ -129,6 +142,22 @@ wd->hover_parent = NULL; } +static Evas_Object * +_item_provider(void *data, Evas_Object *entry, const char *item) +{ + Widget_Data *wd = elm_widget_data_get(data); + Evas_Object *o; + Eina_List *l; + Elm_Anchorview_Item_Provider *ip; + + EINA_LIST_FOREACH(wd->item_providers, l, ip) + { + o = ip->func(ip->data, data, item); + if (o) return o; + } + return NULL; +} + /** * Add a new Anchorview object * @@ -157,6 +186,7 @@ wd->scroller = elm_scroller_add(parent); elm_widget_resize_object_set(obj, wd->scroller); wd->entry = elm_entry_add(parent); + elm_entry_item_provider_prepend(wd->entry, _item_provider, obj); elm_entry_editable_set(wd->entry, 0); evas_object_size_hint_weight_set(wd->entry, 1.0, 1.0); evas_object_size_hint_align_set(wd->entry, -1.0, -1.0); @@ -311,3 +341,91 @@ if (!wd) return; elm_scroller_bounce_set(wd->scroller, h_bounce, v_bounce); } + +/** + * This appends a custom item provider to the list for that anchorview + * + * This appends the given callback. The list is walked from beginning to end + * with each function called given the item href string in the text. If the + * function returns an object handle other than NULL (it should create an + * and object to do this), then this object is used to replace that item. If + * not the next provider is called until one provides an item object, or the + * default provider in anchorview does. + * + * @param obj The anchorview object + * @param func The function called to provide the item object + * @param data The data passed to @p func + * + * @ingroup Anchorview + */ +EAPI void +elm_anchorview_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + if (!func) return; + Elm_Anchorview_Item_Provider *ip = calloc(1, sizeof(Elm_Anchorview_Item_Provider)); + if (!ip) return; + ip->func = func; + ip->data = data; + wd->item_providers = eina_list_append(wd->item_providers, ip); +} + +/** + * This prepends a custom item provider to the list for that anchorview + * + * This prepends the given callback. See elm_anchorview_item_provider_append() for + * more information + * + * @param obj The anchorview object + * @param func The function called to provide the item object + * @param data The data passed to @p func + * + * @ingroup Anchorview + */ +EAPI void +elm_anchorview_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + if (!func) return; + Elm_Anchorview_Item_Provider *ip = calloc(1, sizeof(Elm_Anchorview_Item_Provider)); + if (!ip) return; + ip->func = func; + ip->data = data; + wd->item_providers = eina_list_prepend(wd->item_providers, ip); +} + +/** + * This removes a custom item provider to the list for that anchorview + * + * This removes the given callback. See elm_anchorview_item_provider_append() for + * more information + * + * @param obj The anchorview object + * @param func The function called to provide the item object + * @param data The data passed to @p func + * + * @ingroup Anchorview + */ +EAPI void +elm_anchorview_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + Eina_List *l; + Elm_Anchorview_Item_Provider *ip; + if (!wd) return; + if (!func) return; + EINA_LIST_FOREACH(wd->item_providers, l, ip) + { + if ((ip->func == func) && (ip->data == data)) + { + wd->item_providers = eina_list_remove_list(wd->item_providers, l); + free(ip); + return; + } + } +} Modified: trunk/TMP/st/elementary/src/lib/elm_entry.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_entry.c 2010-04-28 05:14:02 UTC (rev 48383) +++ trunk/TMP/st/elementary/src/lib/elm_entry.c 2010-04-28 06:13:06 UTC (rev 48384) @@ -13,7 +13,7 @@ * * You can also insert "items" in the entry with: * - * <item size=16x16 vsize=full href=emoticon/haha></item> + * \<item size=16x16 vsize=full href=emoticon/haha\>\</item\> * * for example. sizing can be set bu size=WxH, relsize=WxH or absize=WxH with * vsize=ascent or vsize=full. the href=NAME sets the item name. Entry |
From: Enlightenment S. <no-...@en...> - 2010-05-07 13:21:56
|
Log: scroller in scroller.... works! well with scrollers for now (elm_scroller). need to fix up some other instances of use of elm_smart_scroller. it's a 1 liner. Author: raster Date: 2010-05-07 06:21:45 -0700 (Fri, 07 May 2010) New Revision: 48667 Modified: trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/bin/test_scroller.c trunk/TMP/st/elementary/src/lib/elm_genlist.c trunk/TMP/st/elementary/src/lib/elm_priv.h trunk/TMP/st/elementary/src/lib/elm_scroller.c trunk/TMP/st/elementary/src/lib/elm_widget.c trunk/TMP/st/elementary/src/lib/els_scroller.c trunk/TMP/st/elementary/src/lib/els_scroller.h Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2010-05-07 12:42:31 UTC (rev 48666) +++ trunk/TMP/st/elementary/src/bin/test.c 2010-05-07 13:21:45 UTC (rev 48667) @@ -51,6 +51,7 @@ void test_fileselector(void *data, Evas_Object *obj, void *event_info); void test_separator(void *data, Evas_Object *obj, void *event_info); void test_scroller(void *data, Evas_Object *obj, void *event_info); +void test_scroller2(void *data, Evas_Object *obj, void *event_info); void test_spinner(void *data, Evas_Object *obj, void *event_info); void test_index(void *data, Evas_Object *obj, void *event_info); void test_photocam(void *data, Evas_Object *obj, void *event_info); @@ -243,6 +244,7 @@ ADD_TEST("File Selector", test_fileselector); ADD_TEST("Separator", test_separator); ADD_TEST("Scroller", test_scroller); + ADD_TEST("Scroller 2", test_scroller2); ADD_TEST("Spinner", test_spinner); ADD_TEST("Index", test_index); ADD_TEST("Photocam", test_photocam); Modified: trunk/TMP/st/elementary/src/bin/test_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_scroller.c 2010-05-07 12:42:31 UTC (rev 48666) +++ trunk/TMP/st/elementary/src/bin/test_scroller.c 2010-05-07 13:21:45 UTC (rev 48667) @@ -126,4 +126,138 @@ evas_object_resize(win, 320, 320); evas_object_show(win); } + +void +click_through(void *data, Evas_Object *obj, void *event_info) +{ + printf("click went through on %p\n", obj); +} + +void +test_scroller2(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bt, *bx, *bx2, *bg, *sc, *tb, *tb2, *rc; + int i, j; + + win = elm_win_add(NULL, "scroller2", ELM_WIN_BASIC); + elm_win_title_set(win, "Scroller 2"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, 0.0); + + /* { */ + for (i = 0; i < 3; i++) + { + bt = elm_button_add(win); + elm_button_label_set(bt, "Vertical"); + evas_object_smart_callback_add(bt, "clicked", click_through, NULL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + } + /* } */ + + /* { */ + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, 0.5); + elm_scroller_bounce_set(sc, 1, 0); + elm_scroller_content_min_limit(sc, 0, 1); + elm_box_pack_end(bx, sc); + evas_object_show(sc); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, 1); + + for (i = 0; i < 10; i++) + { + bt = elm_button_add(win); + elm_button_label_set(bt, "... Horizontal scrolling ..."); + evas_object_smart_callback_add(bt, "clicked", click_through, NULL); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + } + + elm_scroller_content_set(sc, bx2); + evas_object_show(bx2); + /* } */ + + /* { */ + for (i = 0; i < 3; i++) + { + bt = elm_button_add(win); + elm_button_label_set(bt, "Vertical"); + evas_object_smart_callback_add(bt, "clicked", click_through, NULL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + } + /* } */ + + /* { */ + tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_min_set(rc, 200, 120); + elm_table_pack(tb, rc, 0, 0, 1, 1); + + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, sc, 0, 0, 1, 1); + evas_object_show(sc); + + tb2 = elm_table_add(win); + + for (j = 0; j < 16; j++) + { + for (i = 0; i < 16; i++) + { + bt = elm_button_add(win); + elm_button_label_set(bt, "Both"); + evas_object_smart_callback_add(bt, "clicked", click_through, NULL); + elm_table_pack(tb2, bt, i, j, 1, 1); + evas_object_show(bt); + } + } + + elm_scroller_content_set(sc, tb2); + evas_object_show(tb2); + /* } */ + + for (i = 0; i < 24; i++) + { + bt = elm_button_add(win); + elm_button_label_set(bt, "Vertical"); + evas_object_smart_callback_add(bt, "clicked", click_through, NULL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + } + + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_scroller_bounce_set(sc, 0, 1); + elm_win_resize_object_add(win, sc); + elm_scroller_content_set(sc, bx); + evas_object_show(bx); + evas_object_show(sc); + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} #endif Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2010-05-07 12:42:31 UTC (rev 48666) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2010-05-07 13:21:45 UTC (rev 48667) @@ -412,6 +412,19 @@ evas_object_size_hint_max_get(wd->scr, &maxw, &maxh); minh = -1; if (wd->mode != ELM_LIST_LIMIT) minw = -1; + else + { + Evas_Coord vmw, vmh, vw, vh; + + minw = wd->minw; + maxw = -1; + elm_smart_scroller_child_viewport_size_get(wd->scr, &vw, &vh); + if ((minw > 0) && (vw < minw)) vw = minw; + else if ((maxw > 0) && (vw > maxw)) vw = maxw; + minw = -1; + edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr), &vmw, &vmh); + minw = vmw + minw; + } evas_object_size_hint_min_set(obj, minw, minh); evas_object_size_hint_max_set(obj, maxw, maxh); } @@ -2876,10 +2889,7 @@ if (!wd) return; if (wd->mode == mode) return; wd->mode = mode; - if (wd->mode == ELM_LIST_LIMIT) - elm_scroller_content_min_limit(wd->scr, 1, 0); - else - elm_scroller_content_min_limit(wd->scr, 0, 0); + _sizing_eval(obj); } /** Modified: trunk/TMP/st/elementary/src/lib/elm_priv.h =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_priv.h 2010-05-07 12:42:31 UTC (rev 48666) +++ trunk/TMP/st/elementary/src/lib/elm_priv.h 2010-05-07 13:21:45 UTC (rev 48667) @@ -148,7 +148,13 @@ EAPI const char *elm_widget_style_get(const Evas_Object *obj); EAPI void elm_widget_type_set(Evas_Object *obj, const char *type); EAPI const char *elm_widget_type_get(const Evas_Object *obj); - +EAPI void elm_widget_drag_lock_x_set(Evas_Object *obj, Eina_Bool lock); +EAPI void elm_widget_drag_lock_y_set(Evas_Object *obj, Eina_Bool lock); +EAPI Eina_Bool elm_widget_drag_lock_x_get(Evas_Object *obj); +EAPI Eina_Bool elm_widget_drag_lock_y_get(Evas_Object *obj); +EAPI int elm_widget_drag_child_locked_x_get(Evas_Object *obj); +EAPI int elm_widget_drag_child_locked_y_get(Evas_Object *obj); + EAPI Eina_Bool elm_widget_is(const Evas_Object *obj); EAPI Evas_Object *elm_widget_parent_widget_get(const Evas_Object *obj); Modified: trunk/TMP/st/elementary/src/lib/elm_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_scroller.c 2010-05-07 12:42:31 UTC (rev 48666) +++ trunk/TMP/st/elementary/src/lib/elm_scroller.c 2010-05-07 13:21:45 UTC (rev 48667) @@ -307,6 +307,7 @@ wd->widget_base = eina_stringshare_add("base"); wd->scr = elm_smart_scroller_add(e); + elm_smart_scroller_widget_set(wd->scr, obj); // elm_smart_scroller_theme_set(wd->scr, // wd->widget_name, // wd->widget_base, Modified: trunk/TMP/st/elementary/src/lib/elm_widget.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_widget.c 2010-05-07 12:42:31 UTC (rev 48666) +++ trunk/TMP/st/elementary/src/lib/elm_widget.c 2010-05-07 13:21:45 UTC (rev 48667) @@ -40,10 +40,16 @@ int scroll_freeze; double scale; const char *style; - unsigned char can_focus : 1; - unsigned char child_can_focus : 1; - unsigned char focused : 1; - unsigned char disabled : 1; + + int child_drag_x_locked; + int child_drag_y_locked; + Eina_Bool drag_x_locked : 1; + Eina_Bool drag_y_locked : 1; + + Eina_Bool can_focus : 1; + Eina_Bool child_can_focus : 1; + Eina_Bool focused : 1; + Eina_Bool disabled : 1; }; /* local subsystem functions */ @@ -82,10 +88,12 @@ _sub_obj_mouse_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) { Evas_Object *o = obj; - do { - if (_elm_widget_is(o)) break; - o = evas_object_smart_parent_get(o); - } while (o); + do + { + if (_elm_widget_is(o)) break; + o = evas_object_smart_parent_get(o); + } + while (o); if (!o) return; if (!elm_widget_can_focus_get(o)) return; elm_widget_focus_steal(o); @@ -911,6 +919,104 @@ return ""; } + + + + + + + + +static void +_propagate_x_drag_lock(Evas_Object *obj, int dir) +{ + Smart_Data *sd = evas_object_smart_data_get(obj); + if (sd->parent_obj) + { + Smart_Data *sd2 = evas_object_smart_data_get(sd->parent_obj); + if (sd2) + { + sd2->child_drag_x_locked += dir; + _propagate_x_drag_lock(sd->parent_obj, dir); + } + } +} + +static void +_propagate_y_drag_lock(Evas_Object *obj, int dir) +{ + Smart_Data *sd = evas_object_smart_data_get(obj); + if (sd->parent_obj) + { + Smart_Data *sd2 = evas_object_smart_data_get(sd->parent_obj); + if (sd2) + { + sd2->child_drag_y_locked += dir; + _propagate_y_drag_lock(sd->parent_obj, dir); + } + } +} + +EAPI void +elm_widget_drag_lock_x_set(Evas_Object *obj, Eina_Bool lock) +{ + API_ENTRY return; + if (sd->drag_x_locked == lock) return; + sd->drag_x_locked = lock; + if (sd->drag_x_locked) _propagate_x_drag_lock(obj, 1); + else _propagate_x_drag_lock(obj, -1); +} + +EAPI void +elm_widget_drag_lock_y_set(Evas_Object *obj, Eina_Bool lock) +{ + API_ENTRY return; + if (sd->drag_y_locked == lock) return; + sd->drag_y_locked = lock; + if (sd->drag_y_locked) _propagate_y_drag_lock(obj, 1); + else _propagate_y_drag_lock(obj, -1); +} + +EAPI Eina_Bool +elm_widget_drag_lock_x_get(Evas_Object *obj) +{ + API_ENTRY return 0; + printf("check %p x lock %i\n", obj, sd->drag_x_locked); + return sd->drag_x_locked; +} + +EAPI Eina_Bool +elm_widget_drag_lock_y_get(Evas_Object *obj) +{ + API_ENTRY return 0; + printf("check %p y lock %i\n", obj, sd->drag_y_locked); + return sd->drag_y_locked; +} + +EAPI int +elm_widget_drag_child_locked_x_get(Evas_Object *obj) +{ + API_ENTRY return 0; + return sd->child_drag_x_locked; +} + +EAPI int +elm_widget_drag_child_locked_y_get(Evas_Object *obj) +{ + API_ENTRY return 0; + return sd->child_drag_y_locked; +} + + + + + + + + + + + /* local subsystem functions */ static void _smart_reconfigure(Smart_Data *sd) Modified: trunk/TMP/st/elementary/src/lib/els_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/els_scroller.c 2010-05-07 12:42:31 UTC (rev 48666) +++ trunk/TMP/st/elementary/src/lib/els_scroller.c 2010-05-07 13:21:45 UTC (rev 48667) @@ -19,6 +19,8 @@ Evas_Object *edje_obj; Evas_Object *event_obj; + Evas_Object *widget; + Elm_Smart_Scroller_Policy hbar_flags, vbar_flags; struct { @@ -46,10 +48,12 @@ Ecore_Animator *bounce_y_animator; Evas_Coord locked_x, locked_y; unsigned char now : 1; + unsigned char want_dragged : 1; unsigned char dragged : 1; + unsigned char dragged_began : 1; unsigned char dir_x : 1; unsigned char dir_y : 1; - unsigned char dir_none : 1; +// unsigned char dir_none : 1; unsigned char locked : 1; unsigned char bounce_x_hold : 1; unsigned char bounce_y_hold : 1; @@ -624,40 +628,48 @@ if (py > my) py = my; b2x = px; b2y = py; - if (!sd->down.bounce_x_animator) + if ((!sd->widget) || + (!elm_widget_drag_child_locked_x_get(sd->widget))) { - if (sd->bouncemex) + if (!sd->down.bounce_x_animator) { - if (sd->scrollto.x.animator) + if (sd->bouncemex) { - ecore_animator_del(sd->scrollto.x.animator); - sd->scrollto.x.animator = NULL; + if (sd->scrollto.x.animator) + { + ecore_animator_del(sd->scrollto.x.animator); + sd->scrollto.x.animator = NULL; + } + sd->down.bounce_x_animator = ecore_animator_add(_smart_bounce_x_animator, sd); + sd->down.anim_start2 = ecore_loop_time_get(); + sd->down.bx = bx; + sd->down.bx0 = bx; + sd->down.b2x = b2x; + if (sd->down.momentum_animator) sd->down.b0x = sd->down.ax; + else sd->down.b0x = 0; } - sd->down.bounce_x_animator = ecore_animator_add(_smart_bounce_x_animator, sd); - sd->down.anim_start2 = ecore_loop_time_get(); - sd->down.bx = bx; - sd->down.bx0 = bx; - sd->down.b2x = b2x; - if (sd->down.momentum_animator) sd->down.b0x = sd->down.ax; - else sd->down.b0x = 0; } } - if (!sd->down.bounce_y_animator) + if ((!sd->widget) || + (!elm_widget_drag_child_locked_y_get(sd->widget))) { - if (sd->bouncemey) + if (!sd->down.bounce_y_animator) { - if (sd->scrollto.y.animator) + if (sd->bouncemey) { - ecore_animator_del(sd->scrollto.y.animator); - sd->scrollto.y.animator = NULL; + if (sd->scrollto.y.animator) + { + ecore_animator_del(sd->scrollto.y.animator); + sd->scrollto.y.animator = NULL; + } + sd->down.bounce_y_animator = ecore_animator_add(_smart_bounce_y_animator, sd); + sd->down.anim_start3 = ecore_loop_time_get(); + sd->down.by = by; + sd->down.by0 = by; + sd->down.b2y = b2y; + if (sd->down.momentum_animator) sd->down.b0y = sd->down.ay; + else sd->down.b0y = 0; } - sd->down.bounce_y_animator = ecore_animator_add(_smart_bounce_y_animator, sd); - sd->down.anim_start3 = ecore_loop_time_get(); - sd->down.by = by; - sd->down.by0 = by; - sd->down.b2y = b2y; - if (sd->down.momentum_animator) sd->down.b0y = sd->down.ay; - else sd->down.b0y = 0; } } } @@ -1050,6 +1062,13 @@ _smart_scrollto_y(sd, _elm_config->bring_in_scroll_friction, y); } +void +elm_smart_scroller_widget_set(Evas_Object *obj, Evas_Object *wid) +{ + API_ENTRY return; + sd->widget = wid; +} + /* local subsystem functions */ static void _smart_edje_drag_v_start(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__) @@ -1239,7 +1258,7 @@ sd = data; ev = event_info; - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return ; +// if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return ; if (_elm_config->thumbscroll_enable) { if ((sd->down.bounce_x_animator) || (sd->down.bounce_y_animator) || @@ -1291,7 +1310,7 @@ sd->down.dragged = 0; sd->down.dir_x = 0; sd->down.dir_y = 0; - sd->down.dir_none = 0; +// sd->down.dir_none = 0; sd->down.x = ev->canvas.x; sd->down.y = ev->canvas.y; elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y); @@ -1307,6 +1326,7 @@ sd->down.history[0].x = ev->canvas.x; sd->down.history[0].y = ev->canvas.y; } + sd->down.dragged_began = 0; } } @@ -1314,10 +1334,44 @@ _smart_hold_animator(void *data) { Smart_Data *sd = data; - elm_smart_scroller_child_pos_set(sd->smart_obj, sd->down.hold_x, sd->down.hold_y); + Evas_Coord ox, oy; + + elm_smart_scroller_child_pos_get(sd->smart_obj, &ox, &oy); + if (sd->down.dir_x) + { + if ((!sd->widget) || + (!elm_widget_drag_child_locked_x_get(sd->widget))) + { + ox = sd->down.hold_x; + } + } + if (sd->down.dir_y) + { + if ((!sd->widget) || + (!elm_widget_drag_child_locked_y_get(sd->widget))) + { + oy = sd->down.hold_y; + } + } + elm_smart_scroller_child_pos_set(sd->smart_obj, ox, oy); return 1; } +static Eina_Bool +_smart_event_post_up(void *data, Evas *e) +{ + Smart_Data *sd = data; + if (sd->widget) + { + if (sd->down.dragged) + { + elm_widget_drag_lock_x_set(sd->widget, 0); + elm_widget_drag_lock_y_set(sd->widget, 0); + } + } + return 1; +} + static void _smart_event_mouse_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info) { @@ -1327,7 +1381,8 @@ sd = data; ev = event_info; - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return ; +// if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return ; + evas_post_event_callback_push(e, _smart_event_post_up, sd); // FIXME: respect elm_widget_scroll_hold_get of parent container if (_elm_config->thumbscroll_enable) { @@ -1419,10 +1474,18 @@ Evas_Coord pgx, pgy; elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y); - pgx = _smart_page_x_get(sd, ox); - if (pgx != x) _smart_scrollto_x(sd, _elm_config->page_scroll_friction, pgx); - pgy = _smart_page_y_get(sd, oy); - if (pgy != y) _smart_scrollto_y(sd, _elm_config->page_scroll_friction, pgy); + if ((!sd->widget) || + (!elm_widget_drag_child_locked_x_get(sd->widget))) + { + pgx = _smart_page_x_get(sd, ox); + if (pgx != x) _smart_scrollto_x(sd, _elm_config->page_scroll_friction, pgx); + } + if ((!sd->widget) || + (!elm_widget_drag_child_locked_y_get(sd->widget))) + { + pgy = _smart_page_y_get(sd, oy); + if (pgy != y) _smart_scrollto_y(sd, _elm_config->page_scroll_friction, pgy); + } } } else @@ -1432,12 +1495,29 @@ Evas_Coord pgx, pgy; elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y); - pgx = _smart_page_x_get(sd, ox); - if (pgx != x) _smart_scrollto_x(sd, _elm_config->page_scroll_friction, pgx); - pgy = _smart_page_y_get(sd, oy); - if (pgy != y) _smart_scrollto_y(sd, _elm_config->page_scroll_friction, pgy); + if ((!sd->widget) || + (!elm_widget_drag_child_locked_x_get(sd->widget))) + { + pgx = _smart_page_x_get(sd, ox); + if (pgx != x) _smart_scrollto_x(sd, _elm_config->page_scroll_friction, pgx); + } + if ((!sd->widget) || + (!elm_widget_drag_child_locked_y_get(sd->widget))) + { + pgy = _smart_page_y_get(sd, oy); + if (pgy != y) _smart_scrollto_y(sd, _elm_config->page_scroll_friction, pgy); + } } + if (sd->down.hold_animator) + { + ecore_animator_del(sd->down.hold_animator); + sd->down.hold_animator = NULL; + } } + sd->down.dragged_began = 0; + sd->down.dir_x = 0; + sd->down.dir_y = 0; + sd->down.want_dragged = 0; sd->down.dragged = 0; sd->down.now = 0; elm_smart_scroller_child_pos_get(sd->smart_obj, &x, &y); @@ -1464,12 +1544,31 @@ vx = sd->down.onhold_vx * td * (double)_elm_config->thumbscroll_threshhold * 2.0; vy = sd->down.onhold_vy * td * (double)_elm_config->thumbscroll_threshhold * 2.0; elm_smart_scroller_child_pos_get(sd->smart_obj, &ox, &oy); - sd->down.onhold_vxe += vx; - sd->down.onhold_vye += vy; - x = ox + (int)sd->down.onhold_vxe; - y = oy + (int)sd->down.onhold_vye; - sd->down.onhold_vxe -= (int)sd->down.onhold_vxe; - sd->down.onhold_vye -= (int)sd->down.onhold_vye; + x = ox; + y = oy; + + if (sd->down.dir_x) + { + if ((!sd->widget) || + (!elm_widget_drag_child_locked_x_get(sd->widget))) + { + sd->down.onhold_vxe += vx; + x = ox + (int)sd->down.onhold_vxe; + sd->down.onhold_vxe -= (int)sd->down.onhold_vxe; + } + } + + if (sd->down.dir_y) + { + if ((!sd->widget) || + (!elm_widget_drag_child_locked_y_get(sd->widget))) + { + sd->down.onhold_vye += vy; + y = oy + (int)sd->down.onhold_vye; + sd->down.onhold_vye -= (int)sd->down.onhold_vye; + } + } + elm_smart_scroller_child_pos_set(sd->smart_obj, x, y); // printf("scroll %i %i\n", sd->down.hold_x, sd->down.hold_y); } @@ -1477,6 +1576,51 @@ return 1; } +static Eina_Bool +_smart_event_post_move(void *data, Evas *e) +{ + Smart_Data *sd = data; + if (sd->down.want_dragged) + { + int start = 0; + + if (sd->down.dir_x) + { + if ((!sd->widget) || + (!elm_widget_drag_child_locked_x_get(sd->widget))) + { + sd->down.want_dragged = 0; + sd->down.dragged = 1; + if (sd->widget) + { + elm_widget_drag_lock_x_set(sd->widget, 1); + } + start = 1; + } + else + sd->down.dir_x = 0; + } + if (sd->down.dir_y) + { + if ((!sd->widget) || + (!elm_widget_drag_child_locked_y_get(sd->widget))) + { + sd->down.want_dragged = 0; + sd->down.dragged = 1; + if (sd->widget) + { + elm_widget_drag_lock_y_set(sd->widget, 1); + } + start = 1; + } + else + sd->down.dir_y = 0; + } + if (start) _smart_drag_start(sd->smart_obj); + } + return 1; +} + static void _smart_event_mouse_move(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *event_info) { @@ -1486,13 +1630,14 @@ sd = data; ev = event_info; - if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return ; +// if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return ; + evas_post_event_callback_push(e, _smart_event_post_move, sd); // FIXME: respect elm_widget_scroll_hold_get of parent container if (_elm_config->thumbscroll_enable) { if (sd->down.now) { - int faildir = 0; + int dodir = 0; #ifdef SCROLLDBG printf("::: %i %i\n", ev->cur.canvas.x, ev->cur.canvas.y); @@ -1507,33 +1652,47 @@ sd->down.history[0].x = ev->cur.canvas.x; sd->down.history[0].y = ev->cur.canvas.y; - x = ev->cur.canvas.x - sd->down.x; - if (x < 0) x = -x; - y = ev->cur.canvas.y - sd->down.y; - if (y < 0) y = -y; - if ((sd->one_dir_at_a_time) && - (!sd->down.dir_x) && (!sd->down.dir_y) && (!sd->down.dir_none)) - { - if (x > _elm_config->thumbscroll_threshhold) + if (!sd->down.dragged_began) + { + x = ev->cur.canvas.x - sd->down.x; + if (x < 0) x = -x; + y = ev->cur.canvas.y - sd->down.y; + if (y < 0) y = -y; + if ((sd->one_dir_at_a_time) && + (!((sd->down.dir_x) || (sd->down.dir_y)))) + /* && (!sd->down.dir_none))*/ { - if (x > (y * 2)) + if (x > _elm_config->thumbscroll_threshhold) { - sd->down.dir_x = 1; - sd->down.dir_y = 0; - } - else faildir++; - } - if (y > _elm_config->thumbscroll_threshhold) - { - if (y > (x * 2)) - { - sd->down.dir_x = 0; - sd->down.dir_y = 1; + if (x > (y * 2)) + { + sd->down.dir_x = 1; + sd->down.dir_y = 0; + dodir++; + } } - else faildir++; - } - if (faildir) sd->down.dir_none = 1; - } + if (y > _elm_config->thumbscroll_threshhold) + { + if (y > (x * 2)) + { + sd->down.dir_x = 0; + sd->down.dir_y = 1; + dodir++; + } + } + if (!dodir) + { + //sd->down.dir_none = 1; + sd->down.dir_x = 1; + sd->down.dir_y = 1; + } + } + else + { + sd->down.dir_x = 1; + sd->down.dir_y = 1; + } + } if ((!sd->hold) && (!sd->freeze)) { if ((sd->down.dragged) || @@ -1541,15 +1700,27 @@ (_elm_config->thumbscroll_threshhold * _elm_config->thumbscroll_threshhold))) { + sd->down.dragged_began = 1; if (!sd->down.dragged) { - evas_event_feed_hold(e, 1, ev->timestamp, ev->data); - _smart_drag_start(sd->smart_obj); + sd->down.want_dragged = 1; +// evas_event_feed_hold(e, 1, ev->timestamp, ev->data); +// _smart_drag_start(sd->smart_obj); } - ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; - sd->down.dragged = 1; - x = sd->down.sx - (ev->cur.canvas.x - sd->down.x); - y = sd->down.sy - (ev->cur.canvas.y - sd->down.y); + if (sd->down.dragged) + { + ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + } +// ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; +// sd->down.dragged = 1; + if (sd->down.dir_x) + x = sd->down.sx - (ev->cur.canvas.x - sd->down.x); + else + x = sd->down.sx; + if (sd->down.dir_y) + y = sd->down.sy - (ev->cur.canvas.y - sd->down.y); + else + y = sd->down.sy; if ((sd->down.dir_x) || (sd->down.dir_y)) { if (!sd->down.locked) @@ -1558,15 +1729,17 @@ sd->down.locked_y = y; sd->down.locked = 1; } - if (sd->down.dir_x) y = sd->down.locked_y; - else x = sd->down.locked_x; + if (!((sd->down.dir_x) && (sd->down.dir_y))) + { + if (sd->down.dir_x) y = sd->down.locked_y; + else x = sd->down.locked_x; + } } sd->down.hold_x = x; sd->down.hold_y = y; if (!sd->down.hold_animator) - { - sd->down.hold_animator = ecore_animator_add(_smart_hold_animator, sd); - } + sd->down.hold_animator = + ecore_animator_add(_smart_hold_animator, sd); // printf("a %i %i\n", sd->down.hold_x, sd->down.hold_y); // _smart_onhold_animator(sd); // elm_smart_scroller_child_pos_set(sd->smart_obj, x, y); Modified: trunk/TMP/st/elementary/src/lib/els_scroller.h =================================================================== --- trunk/TMP/st/elementary/src/lib/els_scroller.h 2010-05-07 12:42:31 UTC (rev 48666) +++ trunk/TMP/st/elementary/src/lib/els_scroller.h 2010-05-07 13:21:45 UTC (rev 48667) @@ -30,3 +30,4 @@ void elm_smart_scroller_bounce_allow_get (const Evas_Object *obj, Eina_Bool *horiz, Eina_Bool *vert); void elm_smart_scroller_paging_set (Evas_Object *obj, double pagerel_h, double pagerel_v, Evas_Coord pagesize_h, Evas_Coord pagesize_v); void elm_smart_scroller_region_bring_in (Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h); +void elm_smart_scroller_widget_set (Evas_Object *obj, Evas_Object *wid); |
From: Enlightenment S. <no-...@en...> - 2010-05-12 16:32:21
|
Log: working much better elm config stuff. hs old config sliders still there, now adding theme tab. not complete tho. Author: raster Date: 2010-05-12 09:32:12 -0700 (Wed, 12 May 2010) New Revision: 48778 Modified: trunk/TMP/st/elementary/src/bin/config.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_flip.c Modified: trunk/TMP/st/elementary/src/bin/config.c =================================================================== --- trunk/TMP/st/elementary/src/bin/config.c 2010-05-12 15:43:54 UTC (rev 48777) +++ trunk/TMP/st/elementary/src/bin/config.c 2010-05-12 16:32:12 UTC (rev 48778) @@ -56,6 +56,576 @@ } static void +_status_basic(Evas_Object *win, Evas_Object *bx0) +{ + Evas_Object *lb, *fr; + + fr = elm_frame_add(win); + evas_object_size_hint_weight_set(fr, 1.0, 1.0); + elm_frame_label_set(fr, "Information"); + elm_box_pack_end(bx0, fr); + evas_object_show(fr); + + lb = elm_label_add(win); + elm_label_label_set(lb, + "Applying configuration change" + ); + elm_frame_content_set(fr, lb); + evas_object_show(lb); +} + +static void +_status_config(Evas_Object *win, Evas_Object *bx0) +{ + Evas_Object *lb, *pd, *bx2, *fr, *sl, *sp; + + fr = elm_frame_add(win); + evas_object_size_hint_weight_set(fr, 1.0, 1.0); + evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_frame_label_set(fr, "Sizing"); + elm_box_pack_end(bx0, fr); + evas_object_show(fr); + + bx2 = elm_box_add(win); + evas_object_size_hint_weight_set(bx2, 1.0, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, 0.5); + + pd = elm_frame_add(win); + evas_object_size_hint_weight_set(pd, 1.0, 0.0); + evas_object_size_hint_align_set(pd, EVAS_HINT_FILL, 0.5); + elm_object_style_set(pd, "pad_medium"); + elm_box_pack_end(bx2, pd); + evas_object_show(pd); + + lb = elm_label_add(win); + evas_object_size_hint_weight_set(lb, 1.0, 0.0); + evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, 0.5); + elm_label_label_set(lb,"<hilight>Scale</>"); + elm_frame_content_set(pd, lb); + evas_object_show(lb); + + sl = elm_slider_add(win); + evas_object_size_hint_weight_set(sl, 1.0, 0.0); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + elm_slider_span_size_set(sl, 120); + elm_slider_unit_format_set(sl, "%1.2f"); + elm_slider_indicator_format_set(sl, "%1.2f"); + elm_slider_min_max_set(sl, 0.25, 5.0); + elm_slider_value_set(sl, elm_scale_get()); + elm_box_pack_end(bx2, sl); + evas_object_show(sl); + + evas_object_smart_callback_add(sl, "changed", sc_round, NULL); + evas_object_smart_callback_add(sl, "delay,changed", sc_change, NULL); + + sp = elm_separator_add(win); + elm_separator_horizontal_set(sp, 1); + evas_object_size_hint_weight_set(sp, 1.0, 0.0); + evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx2, sp); + evas_object_show(sp); + + pd = elm_frame_add(win); + evas_object_size_hint_weight_set(pd, 1.0, 0.0); + evas_object_size_hint_align_set(pd, EVAS_HINT_FILL, 0.5); + elm_object_style_set(pd, "pad_medium"); + elm_box_pack_end(bx2, pd); + evas_object_show(pd); + + lb = elm_label_add(win); + evas_object_size_hint_weight_set(lb, 1.0, 0.0); + evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, 0.5); + elm_label_label_set(lb, "<hilight>Finger Size</><br>"); + elm_frame_content_set(pd, lb); + evas_object_show(lb); + + sl = elm_slider_add(win); + evas_object_size_hint_weight_set(sl, 1.0, 0.0); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + elm_slider_span_size_set(sl, 120); + elm_slider_unit_format_set(sl, "%1.0f"); + elm_slider_indicator_format_set(sl, "%1.0f"); + elm_slider_min_max_set(sl, 5, 200); + elm_slider_value_set(sl, elm_finger_size_get()); + elm_box_pack_end(bx2, sl); + evas_object_show(sl); + + evas_object_smart_callback_add(sl, "changed", fs_round, NULL); + evas_object_smart_callback_add(sl, "delay,changed", fs_change, NULL); + + // FIXME: add theme selector (basic mode and advanced for fallbacks) + // FIXME: save config + // FIXME: profile selector / creator etc. + // + elm_frame_content_set(fr, bx2); + evas_object_show(bx2); +} + +static void +_flip_to(Evas_Object *win, const char *name) +{ + Evas_Object *wid, *fl, *holder, *front, *back; + int front_vis; + wid = evas_object_data_get(win, name); + fl = evas_object_data_get(win, "flip"); + holder = evas_object_data_get(win, "holder"); + front_vis = elm_flip_front_get(fl); + if (front_vis) + { + front = elm_flip_content_front_get(fl); + back = elm_flip_content_back_get(fl); + elm_table_pack(holder, back, 0, 0, 1, 1); + evas_object_hide(back); +// elm_table_unpack(holder, wid); // this should NOT be needed - but in evas_table/elm_table + elm_flip_content_back_set(fl, wid); + } + else + { + front = elm_flip_content_front_get(fl); + back = elm_flip_content_back_get(fl); + elm_table_pack(holder, front, 0, 0, 1, 1); + evas_object_hide(front); +// elm_table_unpack(holder, wid); // this should NOT be needed - but in evas_table/elm_table + elm_flip_content_front_set(fl, wid); + } + + evas_object_show(wid); + elm_flip_go(fl, ELM_FLIP_ROTATE_Y_CENTER_AXIS); +} + +static void +_cf_sizing(void *data, Evas_Object *obj, void *event_info) +{ + _flip_to(data, "sizing"); +} + +static void +_cf_themes(void *data, Evas_Object *obj, void *event_info) +{ + _flip_to(data, "themes"); +} + +static void +_cf_fonts(void *data, Evas_Object *obj, void *event_info) +{ + _flip_to(data, "fonts"); +} + +static void +_cf_profiles(void *data, Evas_Object *obj, void *event_info) +{ + _flip_to(data, "profiles"); +} + +static void +_cf_scrolling(void *data, Evas_Object *obj, void *event_info) +{ + _flip_to(data, "scrolling"); +} + +static void +_cf_rendering(void *data, Evas_Object *obj, void *event_info) +{ + _flip_to(data, "rendering"); +} + +static void +_cf_caches(void *data, Evas_Object *obj, void *event_info) +{ + _flip_to(data, "caches"); +} + +static void +_theme_use(void *data, Evas_Object *obj, void *event_info) +{ + printf("not implemented\n"); +} + +static void +_theme_browse(void *data, Evas_Object *obj, void *event_info) +{ + printf("not implemented\n"); +} + +static void +_status_config_sizing(Evas_Object *win, Evas_Object *holder) +{ + Evas_Object *lb, *pd, *bx2, *sl, *sp; + + bx2 = elm_box_add(win); + evas_object_size_hint_weight_set(bx2, 1.0, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, 0.5); + + pd = elm_frame_add(win); + evas_object_size_hint_weight_set(pd, 1.0, 0.0); + evas_object_size_hint_align_set(pd, EVAS_HINT_FILL, 0.5); + elm_object_style_set(pd, "pad_medium"); + elm_box_pack_end(bx2, pd); + evas_object_show(pd); + + lb = elm_label_add(win); + evas_object_size_hint_weight_set(lb, 1.0, 0.0); + evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, 0.5); + elm_label_label_set(lb,"<hilight>Scale</>"); + elm_frame_content_set(pd, lb); + evas_object_show(lb); + + sl = elm_slider_add(win); + evas_object_size_hint_weight_set(sl, 1.0, 0.0); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + elm_slider_span_size_set(sl, 120); + elm_slider_unit_format_set(sl, "%1.2f"); + elm_slider_indicator_format_set(sl, "%1.2f"); + elm_slider_min_max_set(sl, 0.25, 5.0); + elm_slider_value_set(sl, elm_scale_get()); + elm_box_pack_end(bx2, sl); + evas_object_show(sl); + + evas_object_smart_callback_add(sl, "changed", sc_round, NULL); + evas_object_smart_callback_add(sl, "delay,changed", sc_change, NULL); + + sp = elm_separator_add(win); + elm_separator_horizontal_set(sp, 1); + evas_object_size_hint_weight_set(sp, 1.0, 0.0); + evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5); + elm_box_pack_end(bx2, sp); + evas_object_show(sp); + + pd = elm_frame_add(win); + evas_object_size_hint_weight_set(pd, 1.0, 0.0); + evas_object_size_hint_align_set(pd, EVAS_HINT_FILL, 0.5); + elm_object_style_set(pd, "pad_medium"); + elm_box_pack_end(bx2, pd); + evas_object_show(pd); + + lb = elm_label_add(win); + evas_object_size_hint_weight_set(lb, 1.0, 0.0); + evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, 0.5); + elm_label_label_set(lb, "<hilight>Finger Size</><br>"); + elm_frame_content_set(pd, lb); + evas_object_show(lb); + + sl = elm_slider_add(win); + evas_object_size_hint_weight_set(sl, 1.0, 0.0); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); + elm_slider_span_size_set(sl, 120); + elm_slider_unit_format_set(sl, "%1.0f"); + elm_slider_indicator_format_set(sl, "%1.0f"); + elm_slider_min_max_set(sl, 5, 200); + elm_slider_value_set(sl, elm_finger_size_get()); + elm_box_pack_end(bx2, sl); + evas_object_show(sl); + + evas_object_smart_callback_add(sl, "changed", fs_round, NULL); + evas_object_smart_callback_add(sl, "delay,changed", fs_change, NULL); + + evas_object_data_set(win, "sizing", bx2); + + elm_table_pack(holder, bx2, 0, 0, 1, 1); +} + +static Evas_Object * +_sample_theme_new(Evas_Object *win) +{ + Evas_Object *base, *bg, *bt, *ck, *rd, *rdg, *sl, *fr, *li, *rc, *sp; + + base = elm_table_add(win); + evas_object_size_hint_weight_set(base, 1.0, 1.0); + evas_object_size_hint_align_set(base, EVAS_HINT_FILL, EVAS_HINT_FILL); + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(base, bg, 0, 0, 2, 4); + evas_object_show(bg); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Button"); + elm_table_pack(base, bt, 0, 0, 1, 1); + evas_object_show(bt); + + ck = elm_check_add(win); + elm_check_label_set(ck, "Check"); + elm_table_pack(base, ck, 0, 1, 1, 1); + evas_object_show(ck); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 0); + elm_radio_label_set(rd, "Radio 1"); + elm_table_pack(base, rd, 1, 0, 1, 1); + evas_object_show(rd); + rdg = rd; + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 1); + elm_radio_label_set(rd, "Radio 2"); + elm_radio_group_add(rd, rdg); + elm_table_pack(base, rd, 1, 1, 1, 1); + evas_object_show(rd); + + sp = elm_separator_add(win); + elm_separator_horizontal_set(sp, 1); + evas_object_size_hint_weight_set(sp, 1.0, 0.0); + evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5); + elm_table_pack(base, sl, 0, 2, 2, 1); + evas_object_show(sp); + + sl = elm_slider_add(win); + elm_slider_label_set(sl, "Slider"); + elm_slider_span_size_set(sl, 120); + elm_slider_min_max_set(sl, 1, 10); + elm_slider_value_set(sl, 4); + evas_object_size_hint_weight_set(sl, 1.0, 0.0); + evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(base, sl, 0, 3, 2, 1); + evas_object_show(sl); + + fr = elm_frame_add(win); + elm_frame_label_set(fr, "Frame"); + elm_table_pack(base, fr, 0, 4, 2, 1); + evas_object_size_hint_weight_set(fr, 1.0, 1.0); + evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(fr); + + li = elm_list_add(win); + evas_object_size_hint_weight_set(li, 1.0, 1.0); + evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_frame_content_set(fr, li); + evas_object_show(li); + + elm_list_item_append(li, "List Item 1", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Second Item", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Third Item", NULL, NULL, NULL, NULL); + elm_list_go(li); + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_min_set(rc, 120, 120); + elm_table_pack(base, rc, 0, 4, 2, 1); + + return base; +} + +static void +_status_config_themes(Evas_Object *win, Evas_Object *holder) +{ + Evas_Object *tb, *rc, *sc, *sp, *li, *pd, *fr, *bt, *sample; + + tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, 1.0, 1.0); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_min_set(rc, 240, 120); + elm_table_pack(tb, rc, 0, 0, 1, 1); + + rc = evas_object_rectangle_add(evas_object_evas_get(win)); + evas_object_size_hint_min_set(rc, 240, 240); + elm_table_pack(tb, rc, 0, 1, 1, 1); + + ///////////////////////////////////////////// + + pd = elm_frame_add(win); + elm_object_style_set(pd, "pad_medium"); + evas_object_size_hint_weight_set(pd, 1.0, 1.0); + evas_object_size_hint_align_set(pd, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, pd, 0, 0, 1, 1); + evas_object_show(pd); + + li = elm_list_add(win); + evas_object_size_hint_weight_set(li, 1.0, 1.0); + evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_frame_content_set(pd, li); + evas_object_show(li); + + // FIXME: list all themes: + // ~/.elementary/themes/*.edj + // $PREFIX/datadir/themes/*.edj + + elm_list_item_append(li, "theme 1", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "theme 2", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "theme 3", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "theme 4", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "theme 5", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "theme 6", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "theme 7", NULL, NULL, NULL, NULL); + + elm_list_go(li); + + pd = elm_frame_add(win); + elm_object_style_set(pd, "pad_medium"); + evas_object_size_hint_weight_set(pd, 1.0, 1.0); + evas_object_size_hint_align_set(pd, 0.9, 0.9); + elm_table_pack(tb, pd, 0, 0, 1, 1); + evas_object_show(pd); + + bt = elm_button_add(win); + evas_object_smart_callback_add(bt, "clicked", _theme_browse, win); + elm_button_label_set(bt, "Browse..."); + evas_object_size_hint_weight_set(bt, 1.0, 1.0); + evas_object_size_hint_align_set(bt, 0.9, 0.9); + elm_frame_content_set(pd, bt); + evas_object_show(bt); + + pd = elm_frame_add(win); + elm_object_style_set(pd, "pad_medium"); + evas_object_size_hint_weight_set(pd, 1.0, 0.0); + evas_object_size_hint_align_set(pd, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(tb, pd, 0, 1, 1, 1); + evas_object_show(pd); + + fr = elm_frame_add(win); + elm_frame_label_set(fr, "Preview"); + evas_object_size_hint_weight_set(fr, 1.0, 1.0); + evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_frame_content_set(pd, fr); + evas_object_show(fr); + + sc = elm_scroller_add(win); + elm_scroller_bounce_set(sc, 0, 0); + evas_object_size_hint_weight_set(sc, 1.0, 1.0); + evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_frame_content_set(fr, sc); + evas_object_show(sc); + + sample = _sample_theme_new(win); + elm_scroller_content_set(sc, sample); + evas_object_show(sample); + evas_object_data_set(win, "sample", sample); + + ///////////////////////////////////////////// + sp = elm_separator_add(win); + elm_separator_horizontal_set(sp, 1); + evas_object_size_hint_weight_set(sp, 1.0, 0.0); + evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5); + elm_table_pack(tb, sp, 0, 2, 1, 1); + evas_object_show(sp); + + pd = elm_frame_add(win); + elm_object_style_set(pd, "pad_medium"); + evas_object_size_hint_weight_set(pd, 0.0, 0.0); + evas_object_size_hint_align_set(pd, 0.5, 0.5); + elm_table_pack(tb, pd, 0, 3, 1, 1); + evas_object_show(pd); + + bt = elm_button_add(win); + evas_object_smart_callback_add(bt, "clicked", _theme_use, win); + elm_button_label_set(bt, "Use Theme"); + evas_object_size_hint_weight_set(bt, 0.0, 0.0); + evas_object_size_hint_align_set(bt, 0.5, 0.5); + elm_frame_content_set(pd, bt); + evas_object_show(bt); + + evas_object_data_set(win, "themes", tb); + + elm_table_pack(holder, tb, 0, 0, 1, 1); +} + +static void +_unimplemented(Evas_Object *win, Evas_Object *holder, const char *name) +{ + Evas_Object *lb, *pd, *bx2; + + bx2 = elm_box_add(win); + evas_object_size_hint_weight_set(bx2, 1.0, 0.0); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, 0.5); + + pd = elm_frame_add(win); + evas_object_size_hint_weight_set(pd, 0.0, 0.0); + evas_object_size_hint_align_set(pd, 0.5, 0.5); + elm_object_style_set(pd, "pad_medium"); + elm_box_pack_end(bx2, pd); + evas_object_show(pd); + + lb = elm_label_add(win); + evas_object_size_hint_weight_set(lb, 0.0, 0.0); + evas_object_size_hint_align_set(lb, 0.5, 0.5); + elm_label_label_set(lb,"<hilight>Not implemented yet</>"); + elm_frame_content_set(pd, lb); + evas_object_show(lb); + + evas_object_data_set(win, name, bx2); + + elm_table_pack(holder, bx2, 0, 0, 1, 1); +} + +static void +_status_config_fonts(Evas_Object *win, Evas_Object *holder) +{ + _unimplemented(win, holder, "fonts"); +} + +static void +_status_config_profiles(Evas_Object *win, Evas_Object *holder) +{ + _unimplemented(win, holder, "profiles"); +} + +static void +_status_config_scrolling(Evas_Object *win, Evas_Object *holder) +{ + _unimplemented(win, holder, "scrolling"); +} + +static void +_status_config_rendering(Evas_Object *win, Evas_Object *holder) +{ + _unimplemented(win, holder, "rendering"); +} + +static void +_status_config_caches(Evas_Object *win, Evas_Object *holder) +{ + _unimplemented(win, holder, "caches"); +} + +static void +_status_config_full(Evas_Object *win, Evas_Object *bx0) +{ + Evas_Object *tb, *holder, *fl; + Elm_Toolbar_Item *it; + + tb = elm_toolbar_add(win); + elm_toolbar_homogenous_set(tb, 0); + evas_object_size_hint_weight_set(tb, 1.0, 0.0); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL); + + it = elm_toolbar_item_add(tb, NULL, "Sizing", _cf_sizing, win); + elm_toolbar_item_add(tb, NULL, "Theme", _cf_themes, win); + + elm_toolbar_item_add(tb, NULL, "Fonts", _cf_fonts, win); + elm_toolbar_item_add(tb, NULL, "Profiles", _cf_profiles, win); + elm_toolbar_item_add(tb, NULL, "Scrolling", _cf_scrolling, win); + elm_toolbar_item_add(tb, NULL, "Rendering", _cf_rendering, win); + elm_toolbar_item_add(tb, NULL, "Caches", _cf_caches, win); + elm_box_pack_end(bx0, tb); + evas_object_show(tb); + + holder = elm_table_add(win); + evas_object_size_hint_align_set(holder, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(holder, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_pack_end(bx0, holder); + evas_object_show(holder); + evas_object_data_set(win, "holder", holder); + + _status_config_sizing(win, holder); + _status_config_themes(win, holder); + _status_config_fonts(win, holder); + _status_config_profiles(win, holder); + _status_config_rendering(win, holder); + _status_config_scrolling(win, holder); + _status_config_caches(win, holder); + + fl = elm_flip_add(win); + evas_object_size_hint_align_set(fl, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(fl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_table_pack(holder, fl, 0, 0, 1, 1); + evas_object_show(fl); + evas_object_data_set(win, "flip", fl); + + elm_toolbar_item_select(it); +} + +static void status_win(void) { Evas_Object *win, *bg, *bx0; @@ -74,109 +644,10 @@ elm_win_resize_object_add(win, bx0); evas_object_show(bx0); - if (!interactive) - { - Evas_Object *lb, *fr; - - fr = elm_frame_add(win); - evas_object_size_hint_weight_set(fr, 1.0, 1.0); - elm_frame_label_set(fr, "Information"); - elm_box_pack_end(bx0, fr); - evas_object_show(fr); - - lb = elm_label_add(win); - elm_label_label_set(lb, - "Applying configuration change" - ); - elm_frame_content_set(fr, lb); - evas_object_show(lb); - } - else - { - Evas_Object *lb, *pd, *bx2, *fr, *sl, *sp; - - fr = elm_frame_add(win); - evas_object_size_hint_weight_set(fr, 1.0, 1.0); - evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_frame_label_set(fr, "Sizing"); - elm_box_pack_end(bx0, fr); - evas_object_show(fr); - - bx2 = elm_box_add(win); - evas_object_size_hint_weight_set(bx2, 1.0, 0.0); - evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, 0.5); - - pd = elm_frame_add(win); - evas_object_size_hint_weight_set(pd, 1.0, 0.0); - evas_object_size_hint_align_set(pd, EVAS_HINT_FILL, 0.5); - elm_object_style_set(pd, "pad_medium"); - elm_box_pack_end(bx2, pd); - evas_object_show(pd); - - lb = elm_label_add(win); - evas_object_size_hint_weight_set(lb, 1.0, 0.0); - evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, 0.5); - elm_label_label_set(lb,"<hilight>Scale</>"); - elm_frame_content_set(pd, lb); - evas_object_show(lb); - - sl = elm_slider_add(win); - evas_object_size_hint_weight_set(sl, 1.0, 0.0); - evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); - elm_slider_span_size_set(sl, 120); - elm_slider_unit_format_set(sl, "%1.2f"); - elm_slider_indicator_format_set(sl, "%1.2f"); - elm_slider_min_max_set(sl, 0.25, 5.0); - elm_slider_value_set(sl, elm_scale_get()); - elm_box_pack_end(bx2, sl); - evas_object_show(sl); - - evas_object_smart_callback_add(sl, "changed", sc_round, NULL); - evas_object_smart_callback_add(sl, "delay,changed", sc_change, NULL); - - sp = elm_separator_add(win); - elm_separator_horizontal_set(sp, 1); - evas_object_size_hint_weight_set(sp, 1.0, 0.0); - evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5); - elm_box_pack_end(bx2, sp); - evas_object_show(sp); - - pd = elm_frame_add(win); - evas_object_size_hint_weight_set(pd, 1.0, 0.0); - evas_object_size_hint_align_set(pd, EVAS_HINT_FILL, 0.5); - elm_object_style_set(pd, "pad_medium"); - elm_box_pack_end(bx2, pd); - evas_object_show(pd); - - lb = elm_label_add(win); - evas_object_size_hint_weight_set(lb, 1.0, 0.0); - evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, 0.5); - elm_label_label_set(lb, "<hilight>Finger Size</><br>"); - elm_frame_content_set(pd, lb); - evas_object_show(lb); - - sl = elm_slider_add(win); - evas_object_size_hint_weight_set(sl, 1.0, 0.0); - evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5); - elm_slider_span_size_set(sl, 120); - elm_slider_unit_format_set(sl, "%1.0f"); - elm_slider_indicator_format_set(sl, "%1.0f"); - elm_slider_min_max_set(sl, 5, 200); - elm_slider_value_set(sl, elm_finger_size_get()); - elm_box_pack_end(bx2, sl); - evas_object_show(sl); - - evas_object_smart_callback_add(sl, "changed", fs_round, NULL); - evas_object_smart_callback_add(sl, "delay,changed", fs_change, NULL); - - // FIXME: add theme selector (basic mode and advanced for fallbacks) - // FIXME: save config - // FIXME: profile selector / creator etc. - - elm_frame_content_set(fr, bx2); - evas_object_show(bx2); - } - + if (!interactive) _status_basic(win, bx0); +// else _status_config(win, bx0); + else _status_config_full(win, bx0); + evas_object_show(win); } Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-05-12 15:43:54 UTC (rev 48777) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-05-12 16:32:12 UTC (rev 48778) @@ -273,7 +273,7 @@ EAPI void elm_coords_finger_size_adjust(int times_w, Evas_Coord *w, int times_h, Evas_Coord *h); EAPI Elm_Theme *elm_theme_new(void); - EAPI void elm_theme_free(Elm_Theme *th); + EAPI void elm_theme_free(Elm_Theme *th); EAPI void elm_theme_overlay_add(Elm_Theme *th, const char *item); EAPI void elm_theme_overlay_del(Elm_Theme *th, const char *item); EAPI void elm_theme_extension_add(Elm_Theme *th, const char *item); @@ -543,9 +543,11 @@ EAPI Evas_Object *elm_table_add(Evas_Object *parent); EAPI void elm_table_homogenous_set(Evas_Object *obj, Eina_Bool homogenous); - EAPI void elm_table_pack(Evas_Object *obj, Evas_Object *subobj, int x, int y, int w, int h); EAPI void elm_table_padding_set(Evas_Object *obj, Evas_Coord horizontal, Evas_Coord vertical); - + EAPI void elm_table_pack(Evas_Object *obj, Evas_Object *subobj, int x, int y, int w, int h); + EAPI void elm_table_unpack(Evas_Object *obj, Evas_Object *subobj); + EAPI void elm_table_clear(Evas_Object *obj, Eina_Bool clear); + typedef struct _Elm_Grid_Cell_Class Elm_Grid_Cell_Class; typedef struct _Elm_Grid_Cell_Class_Func Elm_Grid_Cell_Class_Func; typedef struct _Elm_Grid_Cell Elm_Grid_Cell; @@ -1427,30 +1429,10 @@ EAPI void elm_panel_orient_set(Evas_Object *obj, Elm_Panel_Orient orient); EAPI Elm_Panel_Orient elm_panel_orient_get(Evas_Object *obj); EAPI void elm_panel_content_set(Evas_Object *obj, Evas_Object *content); -EAPI void elm_panel_hidden_set(Evas_Object *obj, Eina_Bool hidden); -EAPI Eina_Bool elm_panel_hidden_get(Evas_Object *obj); -EAPI void elm_panel_toggle(Evas_Object *obj); + EAPI void elm_panel_hidden_set(Evas_Object *obj, Eina_Bool hidden); + EAPI Eina_Bool elm_panel_hidden_get(Evas_Object *obj); + EAPI void elm_panel_toggle(Evas_Object *obj); - -#if 1 // working on it - // flip types: - // rotate around y axis 180 degrees - // rotate around x axis 180 degrees - // - // properties - // perspective focal dist, x, y - // - // FIXME: - // custom value - // map 1/0 - // - // center x, y, z - // angle x, y, z - // - // light 1/0 - // light rgb - // light ambient rgb - // light x, y, z typedef enum _Elm_Flip_Mode { ELM_FLIP_ROTATE_Y_CENTER_AXIS, @@ -1462,13 +1444,14 @@ EAPI Evas_Object *elm_flip_add(Evas_Object *parent); EAPI void elm_flip_content_front_set(Evas_Object *obj, Evas_Object *content); EAPI void elm_flip_content_back_set(Evas_Object *obj, Evas_Object *content); + EAPI Evas_Object *elm_flip_content_front_get(const Evas_Object *obj); + EAPI Evas_Object *elm_flip_content_back_get(const Evas_Object *obj); EAPI Eina_Bool elm_flip_front_get(const Evas_Object *obj); EAPI void elm_flip_perspective_set(Evas_Object *obj, Evas_Coord foc, Evas_Coord x, Evas_Coord y); EAPI void elm_flip_go(Evas_Object *obj, Elm_Flip_Mode mode); /* smart callbacks called: * "animate,done" - when a flip animation is finished */ -#endif EAPI Evas_Object *elm_scrolled_entry_add(Evas_Object *parent); EAPI void elm_scrolled_entry_single_line_set(Evas_Object *obj, Eina_Bool single_line); Modified: trunk/TMP/st/elementary/src/lib/elm_flip.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_flip.c 2010-05-12 15:43:54 UTC (rev 48777) +++ trunk/TMP/st/elementary/src/lib/elm_flip.c 2010-05-12 16:32:12 UTC (rev 48778) @@ -400,6 +400,22 @@ _configure(obj); } +EAPI Evas_Object * +elm_flip_content_front_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + return wd->front.content; +} + +EAPI Evas_Object * +elm_flip_content_back_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + return wd->back.content; +} + /** * Get flip front visibility state * |
From: Enlightenment S. <no-...@en...> - 2010-08-31 06:20:42
|
Log: fix some most unfortunate lack of clip honorning :) Author: raster Date: 2010-08-30 23:20:33 -0700 (Mon, 30 Aug 2010) New Revision: 51773 Modified: trunk/TMP/st/elementary/src/bin/test_launcher.c trunk/TMP/st/elementary/src/lib/elm_flip.c trunk/TMP/st/elementary/src/lib/elm_mapbuf.c trunk/TMP/st/elementary/src/lib/elm_widget.c Modified: trunk/TMP/st/elementary/src/bin/test_launcher.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_launcher.c 2010-08-31 05:02:16 UTC (rev 51772) +++ trunk/TMP/st/elementary/src/bin/test_launcher.c 2010-08-31 06:20:33 UTC (rev 51773) @@ -59,22 +59,140 @@ evas_object_del(data); } +static Eina_Bool +tim_cb(void *data) +{ + Evas_Object *tb, *sc, *mb; + Eina_List *list, *l; + + printf("timeout!\n"); + evas_object_data_del(data, "timer"); + tb = evas_object_data_get(data, "tb"); + sc = evas_object_data_get(data, "sc"); + mb = evas_object_data_get(data, "mb"); + elm_object_scroll_freeze_push(sc); + evas_object_data_set(data, "dragging", (void *)(1)); + evas_object_color_set(data, 255, 255, 255, 255); + list = (Eina_List *)evas_object_data_get + (elm_object_top_widget_get(data), "mbs"); + EINA_LIST_FOREACH(list, l, mb) + evas_object_color_set(mb, 128, 128, 128, 128); + elm_table_unpack(tb, data); + return EINA_FALSE; +} + static void +ic_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Ecore_Timer *tim; + + tim = evas_object_data_get(obj, "timer"); + if (tim) + { + printf("nmotim\n"); + evas_object_data_del(obj, "timer"); + ecore_timer_del(tim); + } +} + +static void ic_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { + Evas_Event_Mouse_Down *ev = event_info; + Ecore_Timer *tim; + Evas_Coord x, y, w, h; + evas_object_color_set(data, 128, 0, 0, 128); + + tim = evas_object_data_get(obj, "timer"); + if (tim) evas_object_data_del(obj, "timer"); + tim = ecore_timer_add(1.0, tim_cb, obj); + evas_object_data_set(obj, "timer", tim); + + evas_object_geometry_get(data, &x, &y, &w, &h); + evas_object_data_set(obj, "x", (void *)(ev->canvas.x)); + evas_object_data_set(obj, "y", (void *)(ev->canvas.y)); + evas_object_data_set(obj, "px", (void *)(x)); + evas_object_data_set(obj, "py", (void *)(y)); + + if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK) + { + printf("double click %p\n", obj); + } } static void ic_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { + Evas_Event_Mouse_Up *ev = event_info; + Ecore_Timer *tim; + + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; evas_object_color_set(data, 255, 255, 255, 255); + tim = evas_object_data_get(obj, "timer"); + if (tim) + { + printf("nmotim2\n"); + evas_object_data_del(obj, "timer"); + ecore_timer_del(tim); + } + if (evas_object_data_get(obj, "dragging")) + { + Evas_Object *tb, *sc, *mb; + Eina_List *list, *l; + int tbx, tby; + + evas_object_data_del(obj, "dragging"); + tb = evas_object_data_get(obj, "tb"); + sc = evas_object_data_get(obj, "sc"); + mb = evas_object_data_get(data, "mb"); + elm_object_scroll_freeze_pop(sc); + tbx = (int)evas_object_data_get(obj, "tbx"); + tby = (int)evas_object_data_get(obj, "tby"); + elm_table_pack(tb, obj, tbx, tby, 1, 1); + list = (Eina_List *)evas_object_data_get + (elm_object_top_widget_get(obj), "mbs"); + EINA_LIST_FOREACH(list, l, mb) + evas_object_color_set(mb, 255, 255, 255, 255); + } } +static void +ic_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Mouse_Move *ev = event_info; + if (evas_object_data_get(obj, "dragging")) + { + Evas_Coord x, y, px, py; + + x = (Evas_Coord)evas_object_data_get(obj, "x"); + y = (Evas_Coord)evas_object_data_get(obj, "y"); + px = (Evas_Coord)evas_object_data_get(obj, "px"); + py = (Evas_Coord)evas_object_data_get(obj, "py"); + evas_object_move(obj, + px + ev->cur.canvas.x - x, + py + ev->cur.canvas.y - y); + } + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + { + Ecore_Timer *tim; + + tim = evas_object_data_get(obj, "timer"); + if (tim) + { + printf("nmotim3\n"); + evas_object_data_del(obj, "timer"); + ecore_timer_del(tim); + } + evas_object_color_set(data, 255, 255, 255, 255); + return; + } +} + void test_launcher(void *data, Evas_Object *obj, void *event_info) { - Evas_Object *win, *bg, *sc, *tb, *pad, *bt, *ic, *lb, *tb2, *mb, *ck, *bx, *rc; + Evas_Object *win, *bg, *sc, *tb, *pad, *bt, *ic, *lb, *tb2, *mb, *ck, *bx, *bx2; int i, j, k, n, m; char buf[PATH_MAX]; const char *names[] = @@ -96,11 +214,17 @@ evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(win, bg); evas_object_show(bg); - + bx = elm_box_add(win); elm_box_homogenous_set(bx, 1); elm_box_horizontal_set(bx, 1); + sc = elm_scroller_add(win); + elm_scroller_bounce_set(sc, 1, 0); + elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL); + n = 0; m = 0; for (k = 0 ; k < 8; k++) { @@ -132,6 +256,10 @@ evas_object_size_hint_align_set(pad, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_table_pack(tb, pad, 6, 1, 1, 10); + mb = elm_mapbuf_add(win); + elm_mapbuf_content_set(mb, tb); + evas_object_show(tb); + for (j = 0; j < 5; j++) { for (i = 0; i < 5; i++) @@ -154,26 +282,24 @@ elm_table_pack(tb, lb, 1 + i, 1 + (j * 2) + 1, 1, 1); evas_object_show(lb); - rc = evas_object_rectangle_add(evas_object_evas_get(win)); - evas_object_color_set(rc, 0, 0, 0, 0); - evas_object_size_hint_weight_set(rc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(rc, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_table_pack(tb, rc, 1 + i, 1 + (j * 2), 1, 2); - evas_object_show(rc); + evas_object_event_callback_add(ic, EVAS_CALLBACK_DEL, ic_del_cb, ic); - evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_DOWN, ic_down_cb, lb); - evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_UP, ic_up_cb, lb); + evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_DOWN, ic_down_cb, ic); + evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_UP, ic_up_cb, ic); + evas_object_event_callback_add(ic, EVAS_CALLBACK_MOUSE_MOVE, ic_move_cb, ic); - evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_DOWN, ic_down_cb, ic); - evas_object_event_callback_add(rc, EVAS_CALLBACK_MOUSE_UP, ic_up_cb, ic); + evas_object_data_set(ic, "lb", lb); + evas_object_data_set(ic, "tb", tb); + evas_object_data_set(ic, "sc", sc); + evas_object_data_set(ic, "bx", bx); + evas_object_data_set(ic, "mb", mb); + evas_object_data_set(ic, "tbx", (void *)(1 + i)); + evas_object_data_set(ic, "tby", (void *)(1 + (j * 2))); n++; if (n > 23) n = 0; m++; if (m > 15) m = 0; } } - mb = elm_mapbuf_add(win); - elm_mapbuf_content_set(mb, tb); - evas_object_show(tb); elm_box_pack_end(bx, mb); evas_object_show(mb); @@ -184,11 +310,11 @@ // fixme: free mbs evas_object_data_set(win, "mbs", mbs); - sc = elm_scroller_add(win); - elm_scroller_bounce_set(sc, 1, 0); - elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); - evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(win, sc); + bx2 = elm_box_add(win); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_box_horizontal_set(bx2, 0); + elm_win_resize_object_add(win, bx2); + evas_object_show(bx2); elm_scroller_content_set(sc, bx); evas_object_show(bx); @@ -197,8 +323,11 @@ evas_object_show(sc); tb2 = elm_table_add(win); - evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(win, tb2); + evas_object_size_hint_weight_set(tb2, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_fill_set(tb2, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx2, tb2); + + elm_box_pack_end(bx2, sc); ck = elm_check_add(win); elm_check_label_set(ck, "Map"); Modified: trunk/TMP/st/elementary/src/lib/elm_flip.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_flip.c 2010-08-31 05:02:16 UTC (rev 51772) +++ trunk/TMP/st/elementary/src/lib/elm_flip.c 2010-08-31 06:20:33 UTC (rev 51773) @@ -335,6 +335,7 @@ evas_object_resize(wd->front.clip, 99999, 99999); elm_widget_sub_object_add(wd->front.clip, obj); evas_object_smart_member_add(wd->front.clip, obj); + evas_object_clip_set(wd->front.clip, evas_object_clip_get(obj)); wd->back.clip = evas_object_rectangle_add(e); evas_object_color_set(wd->back.clip, 255, 255, 255, 255); @@ -342,6 +343,7 @@ evas_object_resize(wd->back.clip, 99999, 99999); elm_widget_sub_object_add(wd->back.clip, obj); evas_object_smart_member_add(wd->back.clip, obj); + evas_object_clip_set(wd->back.clip, evas_object_clip_get(obj)); evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _move, NULL); Modified: trunk/TMP/st/elementary/src/lib/elm_mapbuf.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_mapbuf.c 2010-08-31 05:02:16 UTC (rev 51772) +++ trunk/TMP/st/elementary/src/lib/elm_mapbuf.c 2010-08-31 06:20:33 UTC (rev 51773) @@ -197,7 +197,9 @@ { elm_widget_sub_object_add(content, obj); evas_object_smart_member_add(content, obj); - evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, + evas_object_clip_set(content, evas_object_clip_get(obj)); + evas_object_event_callback_add(content, + EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); } _sizing_eval(obj); @@ -225,6 +227,7 @@ content = wd->content; elm_widget_sub_object_del(obj, wd->content); evas_object_smart_member_del(wd->content); + evas_object_clip_unset(wd->content); wd->content = NULL; return content; } Modified: trunk/TMP/st/elementary/src/lib/elm_widget.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_widget.c 2010-08-31 05:02:16 UTC (rev 51772) +++ trunk/TMP/st/elementary/src/lib/elm_widget.c 2010-08-31 06:20:33 UTC (rev 51773) @@ -1250,37 +1250,67 @@ static void _smart_show(Evas_Object *obj) { + Eina_List *list, *l; + Evas_Object *o; INTERNAL_ENTRY; - evas_object_show(sd->resize_obj); + list = evas_object_smart_members_get(obj); + EINA_LIST_FOREACH(list, l, o) + { + evas_object_show(o); + } } static void _smart_hide(Evas_Object *obj) { + Eina_List *list, *l; + Evas_Object *o; INTERNAL_ENTRY; - evas_object_hide(sd->resize_obj); + list = evas_object_smart_members_get(obj); + EINA_LIST_FOREACH(list, l, o) + { + evas_object_hide(o); + } _if_focused_revert(obj); } static void _smart_color_set(Evas_Object *obj, int r, int g, int b, int a) { + Eina_List *list, *l; + Evas_Object *o; INTERNAL_ENTRY; - evas_object_color_set(sd->resize_obj, r, g, b, a); + list = evas_object_smart_members_get(obj); + EINA_LIST_FOREACH(list, l, o) + { + evas_object_color_set(o, r, g, b, a); + } } static void _smart_clip_set(Evas_Object *obj, Evas_Object *clip) { + Eina_List *list, *l; + Evas_Object *o; INTERNAL_ENTRY; - evas_object_clip_set(sd->resize_obj, clip); + list = evas_object_smart_members_get(obj); + EINA_LIST_FOREACH(list, l, o) + { + evas_object_clip_set(o, clip); + } } static void _smart_clip_unset(Evas_Object *obj) { + Eina_List *list, *l; + Evas_Object *o; INTERNAL_ENTRY; - evas_object_clip_unset(sd->resize_obj); + list = evas_object_smart_members_get(obj); + EINA_LIST_FOREACH(list, l, o) + { + evas_object_clip_unset(o); + } } static void |
From: Enlightenment S. <no-...@en...> - 2010-09-02 09:58:58
|
Log: ooof flippidy-do-da... working much better. Author: raster Date: 2010-09-02 02:58:52 -0700 (Thu, 02 Sep 2010) New Revision: 51831 Modified: trunk/TMP/st/elementary/src/bin/test_flip.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_flip.c trunk/TMP/st/elementary/src/lib/elm_widget.c Modified: trunk/TMP/st/elementary/src/bin/test_flip.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_flip.c 2010-09-02 09:40:23 UTC (rev 51830) +++ trunk/TMP/st/elementary/src/bin/test_flip.c 2010-09-02 09:58:52 UTC (rev 51831) @@ -44,6 +44,20 @@ } void +my_fl_7(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *fl = data; + elm_flip_go(fl, ELM_FLIP_CUBE_UP); +} + +void +my_fl_8(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *fl = data; + elm_flip_go(fl, ELM_FLIP_CUBE_DOWN); +} + +void test_flip(void *data, Evas_Object *obj, void *event_info) { Evas_Object *win, *bg, *bx, *bx2, *fl, *o, *bt, *ly; @@ -138,6 +152,14 @@ elm_box_pack_end(bx2, bt); evas_object_show(bt); + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, 1); + evas_object_size_hint_align_set(bx2, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, 0.0); + bt = elm_button_add(win); elm_button_label_set(bt, "5"); evas_object_smart_callback_add(bt, "clicked", my_fl_5, fl); @@ -154,6 +176,22 @@ elm_box_pack_end(bx2, bt); evas_object_show(bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "7"); + evas_object_smart_callback_add(bt, "clicked", my_fl_7, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "8"); + evas_object_smart_callback_add(bt, "clicked", my_fl_8, fl); + evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + elm_box_pack_end(bx, bx2); evas_object_show(bx2); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-09-02 09:40:23 UTC (rev 51830) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-09-02 09:58:52 UTC (rev 51831) @@ -1525,7 +1525,9 @@ ELM_FLIP_ROTATE_XZ_CENTER_AXIS, ELM_FLIP_ROTATE_YZ_CENTER_AXIS, ELM_FLIP_CUBE_LEFT, - ELM_FLIP_CUBE_RIGHT + ELM_FLIP_CUBE_RIGHT, + ELM_FLIP_CUBE_UP, + ELM_FLIP_CUBE_DOWN } Elm_Flip_Mode; EAPI Evas_Object *elm_flip_add(Evas_Object *parent); Modified: trunk/TMP/st/elementary/src/lib/elm_flip.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_flip.c 2010-09-02 09:40:23 UTC (rev 51830) +++ trunk/TMP/st/elementary/src/lib/elm_flip.c 2010-09-02 09:58:52 UTC (rev 51831) @@ -114,6 +114,34 @@ } } +static void +flip_show_hide(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + if (elm_flip_front_get(obj)) + { + if (wd->front.content) + evas_object_show(wd->front.clip); + else + evas_object_hide(wd->front.clip); + if (wd->back.content) + evas_object_hide(wd->back.clip); + else + evas_object_hide(wd->back.clip); + } + else + { + if (wd->front.content) + evas_object_hide(wd->front.clip); + else + evas_object_hide(wd->front.clip); + if (wd->back.content) + evas_object_show(wd->back.clip); + else + evas_object_hide(wd->back.clip); + } +} + static Eina_Bool _flip(Evas_Object *obj) { @@ -222,7 +250,36 @@ evas_map_util_3d_rotate(mb, 0.0, deg, 0.0, cx, cy, w / 2); } break; - + case ELM_FLIP_CUBE_UP: + p = 1.0 - t; + p = 1.0 - (p * p); + deg = -90.0 * p; + if (wd->state) + { + evas_map_util_3d_rotate(mf, deg, 0.0, 0.0, cx, cy, h / 2); + evas_map_util_3d_rotate(mb, deg + 90, 0.0, 0.0, cx, cy, h / 2); + } + else + { + evas_map_util_3d_rotate(mf, deg + 90, 0.0, 0.0, cx, cy, h / 2); + evas_map_util_3d_rotate(mb, deg, 0.0, 0.0, cx, cy, h / 2); + } + break; + case ELM_FLIP_CUBE_DOWN: + p = 1.0 - t; + p = 1.0 - (p * p); + deg = 90.0 * p; + if (wd->state) + { + evas_map_util_3d_rotate(mf, deg, 0.0, 0.0, cx, cy, h / 2); + evas_map_util_3d_rotate(mb, deg - 90, 0.0, 0.0, cx, cy, h / 2); + } + else + { + evas_map_util_3d_rotate(mf, deg - 90, 0.0, 0.0, cx, cy, h / 2); + evas_map_util_3d_rotate(mb, deg, 0.0, 0.0, cx, cy, h / 2); + } + break; default: break; } @@ -333,7 +390,7 @@ evas_object_color_set(wd->front.clip, 255, 255, 255, 255); evas_object_move(wd->front.clip, -49999, -49999); evas_object_resize(wd->front.clip, 99999, 99999); - elm_widget_sub_object_add(wd->front.clip, obj); + elm_widget_sub_object_add(obj, wd->front.clip); evas_object_smart_member_add(wd->front.clip, obj); evas_object_clip_set(wd->front.clip, evas_object_clip_get(obj)); @@ -342,7 +399,7 @@ evas_object_move(wd->back.clip, -49999, -49999); evas_object_resize(wd->back.clip, 99999, 99999); elm_widget_sub_object_add(wd->back.clip, obj); - evas_object_smart_member_add(wd->back.clip, obj); + evas_object_smart_member_add(obj, wd->back.clip); evas_object_clip_set(wd->back.clip, evas_object_clip_get(obj)); evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); @@ -386,11 +443,8 @@ EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); _sizing_eval(obj); - if (!elm_flip_front_get(obj)) evas_object_hide(wd->front.clip); - else evas_object_show(wd->front.clip); } - else - evas_object_hide(wd->front.clip); + flip_show_hide(obj); _configure(obj); } @@ -425,11 +479,8 @@ EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); _sizing_eval(obj); - if (elm_flip_front_get(obj)) evas_object_hide(wd->back.clip); - else evas_object_show(wd->back.clip); } - else - evas_object_hide(wd->back.clip); + flip_show_hide(obj); _configure(obj); } @@ -514,6 +565,9 @@ * ELM_FLIP_ROTATE_YZ_CENTER_AXIS * ELM_FLIP_CUBE_LEFT * ELM_FLIP_CUBE_RIGHT + * + * FIXME: add - ELM_FLIP_CUBE_UP + * FIXMEL add - ELM_FLIP_CUBE_DOWN * * @ingroup Flip */ @@ -524,7 +578,9 @@ Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; if (!wd->animator) wd->animator = ecore_animator_add(_animate, obj); + flip_show_hide(obj); wd->mode = mode; wd->start = ecore_loop_time_get(); wd->len = 0.5; + _flip(obj); } Modified: trunk/TMP/st/elementary/src/lib/elm_widget.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_widget.c 2010-09-02 09:40:23 UTC (rev 51830) +++ trunk/TMP/st/elementary/src/lib/elm_widget.c 2010-09-02 09:58:52 UTC (rev 51831) @@ -1256,6 +1256,14 @@ list = evas_object_smart_members_get(obj); EINA_LIST_FOREACH(list, l, o) { + Evas_Object *obj2; + + obj2 = evas_object_clip_get(o); + if (obj2) + { + obj2 = evas_object_smart_parent_get(obj2); + if (obj2 == obj) continue; + } evas_object_show(o); } } @@ -1269,6 +1277,14 @@ list = evas_object_smart_members_get(obj); EINA_LIST_FOREACH(list, l, o) { + Evas_Object *obj2; + + obj2 = evas_object_clip_get(o); + if (obj2) + { + obj2 = evas_object_smart_parent_get(obj2); + if (obj2 == obj) continue; + } evas_object_hide(o); } _if_focused_revert(obj); @@ -1283,6 +1299,14 @@ list = evas_object_smart_members_get(obj); EINA_LIST_FOREACH(list, l, o) { + Evas_Object *obj2; + + obj2 = evas_object_clip_get(o); + if (obj2) + { + obj2 = evas_object_smart_parent_get(obj2); + if (obj2 == obj) continue; + } evas_object_color_set(o, r, g, b, a); } } @@ -1296,6 +1320,14 @@ list = evas_object_smart_members_get(obj); EINA_LIST_FOREACH(list, l, o) { + Evas_Object *obj2; + + obj2 = evas_object_clip_get(o); + if (obj2) + { + obj2 = evas_object_smart_parent_get(obj2); + if (obj2 == obj) continue; + } evas_object_clip_set(o, clip); } } @@ -1309,6 +1341,14 @@ list = evas_object_smart_members_get(obj); EINA_LIST_FOREACH(list, l, o) { + Evas_Object *obj2; + + obj2 = evas_object_clip_get(o); + if (obj2) + { + obj2 = evas_object_smart_parent_get(obj2); + if (obj2 == obj) continue; + } evas_object_clip_unset(o); } } |
From: Enlightenment S. <no-...@en...> - 2010-09-24 05:11:41
|
Log: make theme browser in elm config util actually work. add api's needed. it's simple. only allows 1 level of theme. would need an advanced dialog to allow: theme1:theme2:theme3:theme4... etc. also no browsing for themes - just whats instaleld n system and user dirs atm. Author: raster Date: 2010-09-23 22:11:33 -0700 (Thu, 23 Sep 2010) New Revision: 52667 Modified: trunk/TMP/st/elementary/src/bin/config.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_frame.c trunk/TMP/st/elementary/src/lib/elm_theme.c Modified: trunk/TMP/st/elementary/src/bin/config.c =================================================================== --- trunk/TMP/st/elementary/src/bin/config.c 2010-09-24 04:42:24 UTC (rev 52666) +++ trunk/TMP/st/elementary/src/bin/config.c 2010-09-24 05:11:33 UTC (rev 52667) @@ -1,6 +1,19 @@ #include <Elementary.h> #ifndef ELM_LIB_QUICKLAUNCH +typedef struct _Theme Theme; + +struct _Theme +{ + const char *label; + const char *name; + const char *path; + Eina_Bool in_search_path; +}; + +static Theme *tsel = NULL; +static Eina_List *themes = NULL; + static int quiet = 0; static int interactive = 1; @@ -238,10 +251,66 @@ static void _theme_use(void *data, Evas_Object *obj, void *event_info) { - printf("not implemented\n"); + const char *defth; + char *newth; + Theme *t = tsel; + + if (!t) return; + defth = elm_theme_get(NULL); + newth = malloc(strlen(defth) + 1 + strlen(t->name) + 1); + if (newth) + { + char *rest; + + newth[0] = 0; + rest = strchr(defth, ':'); + if (!rest) + strcpy(newth, t->name); + else + { + strcpy(newth, t->name); + strcat(newth, rest); + } + elm_theme_all_set(newth); + free(newth); + } } static void +_theme_sel(void *data, Evas_Object *obj, void *event_info) +{ + Theme *t = data; + Evas_Object *win = elm_object_top_widget_get(obj); + Evas_Object *sample = evas_object_data_get(win, "sample"); + Elm_Theme *th; + const char *defth; + char *newth; + + tsel = t; + defth = elm_theme_get(NULL); + newth = malloc(strlen(defth) + 1 + strlen(t->name) + 1); + th = elm_theme_new(); + if (newth) + { + char *rest; + + newth[0] = 0; + rest = strchr(defth, ':'); + if (!rest) + strcpy(newth, t->name); + else + { + strcpy(newth, t->name); + strcat(newth, rest); + } + elm_theme_set(th, newth); + free(newth); + } + elm_object_theme_set(sample, th); + elm_theme_free(th); +} + +static void _theme_browse(void *data, Evas_Object *obj, void *event_info) { printf("not implemented\n"); @@ -336,7 +405,7 @@ bg = elm_bg_add(win); evas_object_size_hint_weight_set(bg, 1.0, 1.0); evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_table_pack(base, bg, 0, 0, 2, 4); + elm_table_pack(base, bg, 0, 0, 2, 5); evas_object_show(bg); bt = elm_button_add(win); @@ -409,6 +478,8 @@ _status_config_themes(Evas_Object *win, Evas_Object *holder) { Evas_Object *tb, *rc, *sc, *sp, *li, *pd, *fr, *bt, *sample; + Eina_List *list, *l; + char *th, *s, *ext; tb = elm_table_add(win); evas_object_size_hint_weight_set(tb, 1.0, 1.0); @@ -437,17 +508,49 @@ elm_frame_content_set(pd, li); evas_object_show(li); - // FIXME: list all themes: - // ~/.elementary/themes/*.edj - // $PREFIX/datadir/themes/*.edj - - elm_list_item_append(li, "theme 1", NULL, NULL, NULL, NULL); - elm_list_item_append(li, "theme 2", NULL, NULL, NULL, NULL); - elm_list_item_append(li, "theme 3", NULL, NULL, NULL, NULL); - elm_list_item_append(li, "theme 4", NULL, NULL, NULL, NULL); - elm_list_item_append(li, "theme 5", NULL, NULL, NULL, NULL); - elm_list_item_append(li, "theme 6", NULL, NULL, NULL, NULL); - elm_list_item_append(li, "theme 7", NULL, NULL, NULL, NULL); + list = elm_theme_name_available_list_new(); + EINA_LIST_FOREACH(list, l, th) + { + Theme *t; + + t = calloc(1, sizeof(Theme)); + t->name = eina_stringshare_add(th); + s = elm_theme_list_item_path_get(th, &(t->in_search_path)); + if (s) + { + t->path = eina_stringshare_add(s); + free(s); + } + if (t->in_search_path) + { + s = strdup(th); + if (s) + { + s[0] = toupper(s[0]); + t->label = eina_stringshare_add(s); + free(s); + } + else + t->label = eina_stringshare_add(s); + } + else + { + s = strdup(ecore_file_file_get(th)); + if (s) + { + s[0] = toupper(s[0]); + ext = strrchr(s, '.'); + if (ext) *ext = 0; + t->label = eina_stringshare_add(s); + free(s); + } + else + t->label = eina_stringshare_add(s); + } + themes = eina_list_append(themes, t); + elm_list_item_append(li, t->label, NULL, NULL, _theme_sel, t); + } + elm_theme_name_available_list_free(list); elm_list_go(li); @@ -458,6 +561,7 @@ elm_table_pack(tb, pd, 0, 0, 1, 1); evas_object_show(pd); +/* FIXME: not implemented yet bt = elm_button_add(win); evas_object_smart_callback_add(bt, "clicked", _theme_browse, win); elm_button_label_set(bt, "Browse..."); @@ -465,7 +569,7 @@ evas_object_size_hint_align_set(bt, 0.9, 0.9); elm_frame_content_set(pd, bt); evas_object_show(bt); - + */ pd = elm_frame_add(win); elm_object_style_set(pd, "pad_medium"); evas_object_size_hint_weight_set(pd, 1.0, 0.0); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-09-24 04:42:24 UTC (rev 52666) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-09-24 05:11:33 UTC (rev 52667) @@ -339,11 +339,16 @@ EAPI void elm_theme_extension_del(Elm_Theme *th, const char *item); EAPI void elm_theme_set(Elm_Theme *th, const char *theme); EAPI const char *elm_theme_get(Elm_Theme *th); + EAPI const Eina_List *elm_theme_list_get(Elm_Theme *th); + EAPI char *elm_theme_list_item_path_get(const char *f, Eina_Bool *in_search_path); EAPI void elm_theme_flush(Elm_Theme *th); EAPI void elm_theme_full_flush(void); EAPI void elm_theme_all_set(const char *theme); - + + EAPI Eina_List *elm_theme_name_available_list_new(void); + EAPI void elm_theme_name_available_list_free(Eina_List *list); + EAPI void elm_object_theme_set(Evas_Object *obj, Elm_Theme *th); EAPI Elm_Theme *elm_object_theme_get(Evas_Object *obj); Modified: trunk/TMP/st/elementary/src/lib/elm_frame.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_frame.c 2010-09-24 04:42:24 UTC (rev 52666) +++ trunk/TMP/st/elementary/src/lib/elm_frame.c 2010-09-24 05:11:33 UTC (rev 52667) @@ -14,6 +14,7 @@ { Evas_Object *frm; Evas_Object *content; + const char *label; }; static const char *widtype = NULL; @@ -28,6 +29,7 @@ { Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; + if (wd->label) eina_stringshare_del(wd->label); free(wd); } @@ -37,6 +39,7 @@ Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; _elm_theme_object_set(obj, wd->frm, "frame", "base", elm_widget_style_get(obj)); + edje_object_part_text_set(wd->frm, "elm.text", wd->label); if (wd->content) edje_object_part_swallow(wd->frm, "elm.swallow.content", wd->content); edje_object_scale_set(wd->frm, elm_widget_scale_get(obj) * _elm_config->scale); @@ -129,7 +132,8 @@ ELM_CHECK_WIDTYPE(obj, widtype); Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - edje_object_part_text_set(wd->frm, "elm.text", label); + eina_stringshare_replace(&(wd->label), label); + edje_object_part_text_set(wd->frm, "elm.text", wd->label); _sizing_eval(obj); } @@ -147,8 +151,8 @@ { ELM_CHECK_WIDTYPE(obj, widtype) NULL; Widget_Data *wd = elm_widget_data_get(obj); - if ((!wd) || (!wd->frm)) return NULL; - return edje_object_part_text_get(wd->frm, "elm.text"); + if (!wd) return NULL; + return wd->label; } /** Modified: trunk/TMP/st/elementary/src/lib/elm_theme.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_theme.c 2010-09-24 04:42:24 UTC (rev 52666) +++ trunk/TMP/st/elementary/src/lib/elm_theme.c 2010-09-24 05:11:33 UTC (rev 52667) @@ -433,6 +433,7 @@ EAPI const char * elm_theme_get(Elm_Theme *th) { + if (!th) th = &(theme_default); if (!th->theme) { Eina_List *l; @@ -459,6 +460,90 @@ } /** + * Return a list of theme elements to be used in a theme. + * + * @param th Theme to get the list of theme elements from. + * @return The internal list of theme elements + * + * This returns the internal list of theme elements (will only be valid as + * long as the theme is not modified by elm_theme_set() or theme is not + * freed by elm_theme_free(). This is a list of strings which must not be + * altered as they are also internal. If @p th is NULL, then the default + * theme element list is returned. + */ +EAPI const Eina_List * +elm_theme_list_get(Elm_Theme *th) +{ + if (!th) th = &(theme_default); + return th->themes; +} + +/** + * Return the full patrh for a theme element + * + * @param f The theme element name + * @param in_search_path Pointer to a boolean to indicate if item is in the search path or not + * @return The full path to the file found. + * + * This returns a string you should free with free() on success, NULL on + * failure. This will search for the given theme element, and if it is a + * full or relative path element or a simple searchable name. The returned + * path is the full path to the file, if searched, and the file exists, or it + * is simply the full path given in the element or a resolved path if + * relative to home. The @p in_search_path boolean pointed to is set to + * EINA_TRUE if the file was a searchable file andis in the search path, + * and EINA_FALSE otherwise. + */ +EAPI char * +elm_theme_list_item_path_get(const char *f, Eina_Bool *in_search_path) +{ + static const char *home = NULL; + char buf[PATH_MAX]; + + if (!f) + { + if (in_search_path) *in_search_path = EINA_FALSE; + return NULL; + } + + if (!home) + { + home = getenv("HOME"); + if (!home) home = ""; + } + + if ((f[0] == '/') || ((f[0] == '.') && (f[1] == '/')) || + ((f[0] == '.') && (f[1] == '.') && (f[2] == '/')) || + (isalpha(f[0]) && f[1] == ':')) + { + if (in_search_path) *in_search_path = EINA_FALSE; + return strdup(f); + } + else if (((f[0] == '~') && (f[1] == '/'))) + { + if (in_search_path) *in_search_path = EINA_FALSE; + snprintf(buf, sizeof(buf), "%s/%s", home, f + 2); + return strdup(buf); + } + snprintf(buf, sizeof(buf), "%s/.elementary/themes/%s.edj", home, f); + if (ecore_file_exists(buf)) + { + if (in_search_path) *in_search_path = EINA_TRUE; + return strdup(buf); + } + + snprintf(buf, sizeof(buf), "%s/themes/%s.edj", _elm_data_dir, f); + if (ecore_file_exists(buf)) + { + if (in_search_path) *in_search_path = EINA_TRUE; + return strdup(buf); + } + + if (in_search_path) *in_search_path = EINA_FALSE; + return NULL; +} + +/** * Flush the current theme. * * @param th Theme to flush @@ -522,6 +607,97 @@ } /** + * Return a list of theme elements in the theme search path + * + * @return A list of strings that are the theme element names. + * + * This lists all available theme files in the standard Elementary search path + * for theme elements, and returns them in alphabetical order as theme + * element names in a list of strings. Free this with + * elm_theme_name_available_list_free() when you are done with the list. + */ +EAPI Eina_List * +elm_theme_name_available_list_new(void) +{ + Eina_List *list = NULL; + Eina_List *dir, *l; + char buf[PATH_MAX], *file, *s, *th; + static const char *home = NULL; + + if (!home) + { + home = getenv("HOME"); + if (!home) home = ""; + } + + snprintf(buf, sizeof(buf), "%s/.elementary/themes", home); + dir = ecore_file_ls(buf); + EINA_LIST_FREE(dir, file) + { + snprintf(buf, sizeof(buf), "%s/.elementary/themes/%s", home, file); + if ((!ecore_file_is_dir(buf)) && (ecore_file_size(buf) > 0)) + { + s = strchr(file, '.'); + if ((s) && (!strcasecmp(s, ".edj"))) + { + th = strdup(file); + s = strchr(th, '.'); + *s = 0; + list = eina_list_append(list, th); + } + } + free(file); + } + + snprintf(buf, sizeof(buf), "%s/themes", _elm_data_dir); + dir = ecore_file_ls(buf); + EINA_LIST_FREE(dir, file) + { + snprintf(buf, sizeof(buf), "%s/themes/%s", _elm_data_dir, file); + if ((!ecore_file_is_dir(buf)) && (ecore_file_size(buf) > 0)) + { + s = strchr(file, '.'); + if ((s) && (!strcasecmp(s, ".edj"))) + { + int dup; + + th = strdup(file); + s = strchr(th, '.'); + *s = 0; + dup = 0; + EINA_LIST_FOREACH(list, l, s) + { + if (!strcmp(s, th)) + { + dup = 1; + break; + } + } + if (dup) free(th); + else list = eina_list_append(list, th); + } + } + free(file); + } + list = eina_list_sort(list, 0, EINA_COMPARE_CB(strcasecmp)); + return list; +} + +/** + * Free the list returned by elm_theme_name_available_list_new() + * + * This frees the list of themes returned by + * elm_theme_name_available_list_new(). Once freed the list should no longer + * be used. a new list mys be created. + */ +EAPI void +elm_theme_name_available_list_free(Eina_List *list) +{ + char *s; + EINA_LIST_FREE(list, s) free(s); +} + +/** * Set a specific theme to be used for this object and its children * * @param obj The object to set the theme on |
From: Enlightenment S. <no-...@en...> - 2010-10-20 14:12:24
|
Log: quicklaunch works again. yes - it's semi-broken. but it works. Author: raster Date: 2010-10-20 07:12:17 -0700 (Wed, 20 Oct 2010) New Revision: 53669 Modified: trunk/TMP/st/elementary/src/bin/quicklaunch.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_main.c Modified: trunk/TMP/st/elementary/src/bin/quicklaunch.c =================================================================== --- trunk/TMP/st/elementary/src/bin/quicklaunch.c 2010-10-20 14:10:55 UTC (rev 53668) +++ trunk/TMP/st/elementary/src/bin/quicklaunch.c 2010-10-20 14:12:17 UTC (rev 53669) @@ -281,7 +281,7 @@ handle_run(fd, bytes); } } - elm_quicklaunch_sub_shutdown(); + while (elm_quicklaunch_sub_shutdown() > 0); } elm_quicklaunch_shutdown(); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-10-20 14:10:55 UTC (rev 53668) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-10-20 14:12:17 UTC (rev 53669) @@ -289,15 +289,15 @@ /**************************************************************************/ /* General calls */ - EAPI void elm_init(int argc, char **argv); - EAPI void elm_shutdown(void); + EAPI int elm_init(int argc, char **argv); + EAPI int elm_shutdown(void); EAPI void elm_run(void); EAPI void elm_exit(void); - EAPI void elm_quicklaunch_init(int argc, char **argv); - EAPI void elm_quicklaunch_sub_init(int argc, char **argv); - EAPI void elm_quicklaunch_sub_shutdown(void); - EAPI void elm_quicklaunch_shutdown(void); + EAPI int elm_quicklaunch_init(int argc, char **argv); + EAPI int elm_quicklaunch_sub_init(int argc, char **argv); + EAPI int elm_quicklaunch_sub_shutdown(void); + EAPI int elm_quicklaunch_shutdown(void); EAPI void elm_quicklaunch_seed(void); EAPI Eina_Bool elm_quicklaunch_prepare(int argc, char **argv); EAPI Eina_Bool elm_quicklaunch_fork(int argc, char **argv, char *cwd, void (postfork_func) (void *data), void *postfork_data); Modified: trunk/TMP/st/elementary/src/lib/elm_main.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_main.c 2010-10-20 14:10:55 UTC (rev 53668) +++ trunk/TMP/st/elementary/src/lib/elm_main.c 2010-10-20 14:12:17 UTC (rev 53669) @@ -15,6 +15,8 @@ #include <Elementary.h> #include "elm_priv.h" +#define SEMI_BROKEN_QUICKLANCH 1 + static Elm_Version _version = { VMAJ, VMIN, VMIC, VREV }; EAPI Elm_Version *elm_version = &_version; @@ -294,6 +296,8 @@ EAPI int ELM_EVENT_POLICY_CHANGED = 0; static int _elm_init_count = 0; +static int _elm_sub_init_count = 0; +static int _elm_ql_init_count = 0; static int _elm_policies[ELM_POLICY_LAST]; static Ecore_Event_Handler *_elm_exit_handler = NULL; @@ -317,36 +321,42 @@ /** * Inititalise Elementary - * + * + * @return The init counter value. + * * This call is exported only for use by the ELM_MAIN() macro. There is no * need to use this if you use this macro (which is highly advisable). * @ingroup General */ -EAPI void +EAPI int elm_init(int argc, char **argv) { _elm_init_count++; - if (_elm_init_count != 1) return; + if (_elm_init_count > 1) return _elm_init_count; elm_quicklaunch_init(argc, argv); elm_quicklaunch_sub_init(argc, argv); + return _elm_init_count; } /** * Shut down Elementary * + * @return The init counter value. + * * This should be called at the end of your application just before it ceases * to do any more processing. This will clean up any permanent resources your * application may have allocated via Elementary that would otherwise persist * on an exit without this call. * @ingroup General */ -EAPI void +EAPI int elm_shutdown(void) { _elm_init_count--; - if (_elm_init_count != 0) return; + if (_elm_init_count > 0) return _elm_init_count; elm_quicklaunch_sub_shutdown(); elm_quicklaunch_shutdown(); + return _elm_init_count; } #ifdef ELM_EDBUS @@ -415,11 +425,13 @@ #endif } -EAPI void +EAPI int elm_quicklaunch_init(int argc, char **argv) { char buf[PATH_MAX], *s; + _elm_ql_init_count++; + if (_elm_ql_init_count > 1) return _elm_ql_init_count; eina_init(); _elm_log_dom = eina_log_domain_register("elementary", EINA_COLOR_LIGHTBLUE); if (!_elm_log_dom) @@ -513,49 +525,75 @@ _elm_lib_dir = eina_stringshare_add("/"); _elm_config_init(); + return _elm_ql_init_count; } -EAPI void +EAPI int elm_quicklaunch_sub_init(int argc, char **argv) { + _elm_sub_init_count++; + if (_elm_sub_init_count > 1) return _elm_sub_init_count; +#ifndef SEMI_BROKEN_QUICKLANCH ecore_app_args_set(argc, (const char **)argv); evas_init(); edje_init(); + _elm_config_sub_init(); + if ((_elm_config->engine == ELM_SOFTWARE_X11) || + (_elm_config->engine == ELM_SOFTWARE_16_X11) || + (_elm_config->engine == ELM_XRENDER_X11) || + (_elm_config->engine == ELM_OPENGL_X11)) + { +#ifdef HAVE_ELEMENTARY_X + ecore_x_init(NULL); +#endif + } ecore_evas_init(); // FIXME: check errors ecore_imf_init(); _elm_module_init(); - _elm_config_sub_init(); +#endif + return _elm_sub_init_count; } -EAPI void +EAPI int elm_quicklaunch_sub_shutdown(void) { + _elm_sub_init_count--; + if (_elm_sub_init_count > 0) return _elm_sub_init_count; +#ifndef SEMI_BROKEN_QUICKLANCH _elm_win_shutdown(); + _elm_module_shutdown(); + ecore_imf_shutdown(); + ecore_evas_shutdown(); if ((_elm_config->engine == ELM_SOFTWARE_X11) || (_elm_config->engine == ELM_SOFTWARE_16_X11) || (_elm_config->engine == ELM_XRENDER_X11) || + (_elm_config->engine == ELM_OPENGL_X11)) + { +#ifdef HAVE_ELEMENTARY_X + ecore_x_disconnect(); +#endif + } + if ((_elm_config->engine == ELM_SOFTWARE_X11) || + (_elm_config->engine == ELM_SOFTWARE_16_X11) || + (_elm_config->engine == ELM_XRENDER_X11) || (_elm_config->engine == ELM_OPENGL_X11) || (_elm_config->engine == ELM_SOFTWARE_SDL) || (_elm_config->engine == ELM_SOFTWARE_16_SDL) || (_elm_config->engine == ELM_OPENGL_SDL) || (_elm_config->engine == ELM_SOFTWARE_WIN32) || (_elm_config->engine == ELM_SOFTWARE_16_WINCE)) - { -#ifdef HAVE_ELEMENTARY_X - ecore_x_disconnect(); -#endif - evas_cserve_disconnect(); - } - _elm_module_shutdown(); - ecore_imf_shutdown(); - ecore_evas_shutdown(); + evas_cserve_disconnect(); edje_shutdown(); evas_shutdown(); +#endif + return _elm_sub_init_count; } -EAPI void +EAPI int elm_quicklaunch_shutdown(void) { + _elm_ql_init_count--; + if (_elm_ql_init_count > 0) return _elm_ql_init_count; eina_stringshare_del(_elm_data_dir); _elm_data_dir = NULL; eina_stringshare_del(_elm_lib_dir); @@ -586,11 +624,13 @@ _elm_widget_type_clear(); eina_shutdown(); + return _elm_ql_init_count; } EAPI void elm_quicklaunch_seed(void) { +#ifndef SEMI_BROKEN_QUICKLANCH Evas_Object *win, *bg, *bt; win = elm_win_add(NULL, "seed", ELM_WIN_BASIC); @@ -613,6 +653,7 @@ #endif } ecore_main_loop_iterate(); +#endif } static void *qr_handle = NULL; @@ -744,7 +785,26 @@ return EINA_FALSE; } if (postfork_func) postfork_func(postfork_data); - + +#ifdef SEMI_BROKEN_QUICKLANCH + ecore_app_args_set(argc, (const char **)argv); + evas_init(); + edje_init(); + _elm_config_sub_init(); + if ((_elm_config->engine == ELM_SOFTWARE_X11) || + (_elm_config->engine == ELM_SOFTWARE_16_X11) || + (_elm_config->engine == ELM_XRENDER_X11) || + (_elm_config->engine == ELM_OPENGL_X11)) + { +#ifdef HAVE_ELEMENTARY_X + ecore_x_init(NULL); +#endif + } + ecore_evas_init(); // FIXME: check errors + ecore_imf_init(); + _elm_module_init(); +#endif + setsid(); if (chdir(cwd) != 0) perror("could not chdir"); |
From: Enlightenment S. <no-...@en...> - 2010-10-21 04:05:46
|
Log: aaah fix non quicklaunch mode too. Author: raster Date: 2010-10-20 21:05:35 -0700 (Wed, 20 Oct 2010) New Revision: 53703 Modified: trunk/TMP/st/elementary/src/bin/quicklaunch.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_main.c Modified: trunk/TMP/st/elementary/src/bin/quicklaunch.c =================================================================== --- trunk/TMP/st/elementary/src/bin/quicklaunch.c 2010-10-21 01:10:30 UTC (rev 53702) +++ trunk/TMP/st/elementary/src/bin/quicklaunch.c 2010-10-21 04:05:35 UTC (rev 53703) @@ -177,6 +177,7 @@ CRITICAL("listen(sock=%d, 4096): %s", sock, strerror(errno)); exit(-1); } + elm_quicklaunch_mode_set(EINA_TRUE); elm_quicklaunch_init(argc, argv); restart_time = ecore_time_get(); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-10-21 01:10:30 UTC (rev 53702) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-10-21 04:05:35 UTC (rev 53703) @@ -294,6 +294,7 @@ EAPI void elm_run(void); EAPI void elm_exit(void); + EAPI void elm_quicklaunch_mode_set(Eina_Bool ql_on); EAPI int elm_quicklaunch_init(int argc, char **argv); EAPI int elm_quicklaunch_sub_init(int argc, char **argv); EAPI int elm_quicklaunch_sub_shutdown(void); Modified: trunk/TMP/st/elementary/src/lib/elm_main.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_main.c 2010-10-21 01:10:30 UTC (rev 53702) +++ trunk/TMP/st/elementary/src/lib/elm_main.c 2010-10-21 04:05:35 UTC (rev 53703) @@ -15,7 +15,7 @@ #include <Elementary.h> #include "elm_priv.h" -#define SEMI_BROKEN_QUICKLANCH 1 +#define SEMI_BROKEN_QUICKLAUNCH 1 static Elm_Version _version = { VMAJ, VMIN, VMIC, VREV }; EAPI Elm_Version *elm_version = &_version; @@ -300,6 +300,7 @@ static int _elm_ql_init_count = 0; static int _elm_policies[ELM_POLICY_LAST]; static Ecore_Event_Handler *_elm_exit_handler = NULL; +static Eina_Bool quicklaunch_on = 0; static Eina_Bool _elm_signal_exit(void *data __UNUSED__, int ev_type __UNUSED__, void *ev __UNUSED__) @@ -425,6 +426,12 @@ #endif } +EAPI void +elm_quicklaunch_mode_set(Eina_Bool ql_on) +{ + quicklaunch_on = ql_on; +} + EAPI int elm_quicklaunch_init(int argc, char **argv) { @@ -533,27 +540,31 @@ { _elm_sub_init_count++; if (_elm_sub_init_count > 1) return _elm_sub_init_count; -#ifndef SEMI_BROKEN_QUICKLANCH - ecore_app_args_set(argc, (const char **)argv); - evas_init(); - edje_init(); - _elm_config_sub_init(); - if ((_elm_config->engine == ELM_SOFTWARE_X11) || - (_elm_config->engine == ELM_SOFTWARE_16_X11) || - (_elm_config->engine == ELM_XRENDER_X11) || - (_elm_config->engine == ELM_OPENGL_X11)) + if (quicklaunch_on) { +#ifdef SEMI_BROKEN_QUICKLAUNCH + return _elm_sub_init_count; +#endif + } + if (!quicklaunch_on) + { + ecore_app_args_set(argc, (const char **)argv); + evas_init(); + edje_init(); + _elm_config_sub_init(); + if ((_elm_config->engine == ELM_SOFTWARE_X11) || + (_elm_config->engine == ELM_SOFTWARE_16_X11) || + (_elm_config->engine == ELM_XRENDER_X11) || + (_elm_config->engine == ELM_OPENGL_X11)) + { #ifdef HAVE_ELEMENTARY_X - ecore_x_init(NULL); + ecore_x_init(NULL); #endif + } + ecore_evas_init(); // FIXME: check errors + ecore_imf_init(); + _elm_module_init(); } - ecore_evas_init(); // FIXME: check errors - ecore_imf_init(); - _elm_module_init(); -#else - (void) argc; - (void) argv; -#endif return _elm_sub_init_count; } @@ -562,33 +573,40 @@ { _elm_sub_init_count--; if (_elm_sub_init_count > 0) return _elm_sub_init_count; -#ifndef SEMI_BROKEN_QUICKLANCH - _elm_win_shutdown(); - _elm_module_shutdown(); - ecore_imf_shutdown(); - ecore_evas_shutdown(); - if ((_elm_config->engine == ELM_SOFTWARE_X11) || - (_elm_config->engine == ELM_SOFTWARE_16_X11) || - (_elm_config->engine == ELM_XRENDER_X11) || - (_elm_config->engine == ELM_OPENGL_X11)) + if (quicklaunch_on) { +#ifdef SEMI_BROKEN_QUICKLAUNCH + return _elm_sub_init_count; +#endif + } + if (!quicklaunch_on) + { + _elm_win_shutdown(); + _elm_module_shutdown(); + ecore_imf_shutdown(); + ecore_evas_shutdown(); + if ((_elm_config->engine == ELM_SOFTWARE_X11) || + (_elm_config->engine == ELM_SOFTWARE_16_X11) || + (_elm_config->engine == ELM_XRENDER_X11) || + (_elm_config->engine == ELM_OPENGL_X11)) + { #ifdef HAVE_ELEMENTARY_X - ecore_x_disconnect(); + ecore_x_disconnect(); #endif + } + if ((_elm_config->engine == ELM_SOFTWARE_X11) || + (_elm_config->engine == ELM_SOFTWARE_16_X11) || + (_elm_config->engine == ELM_XRENDER_X11) || + (_elm_config->engine == ELM_OPENGL_X11) || + (_elm_config->engine == ELM_SOFTWARE_SDL) || + (_elm_config->engine == ELM_SOFTWARE_16_SDL) || + (_elm_config->engine == ELM_OPENGL_SDL) || + (_elm_config->engine == ELM_SOFTWARE_WIN32) || + (_elm_config->engine == ELM_SOFTWARE_16_WINCE)) + evas_cserve_disconnect(); + edje_shutdown(); + evas_shutdown(); } - if ((_elm_config->engine == ELM_SOFTWARE_X11) || - (_elm_config->engine == ELM_SOFTWARE_16_X11) || - (_elm_config->engine == ELM_XRENDER_X11) || - (_elm_config->engine == ELM_OPENGL_X11) || - (_elm_config->engine == ELM_SOFTWARE_SDL) || - (_elm_config->engine == ELM_SOFTWARE_16_SDL) || - (_elm_config->engine == ELM_OPENGL_SDL) || - (_elm_config->engine == ELM_SOFTWARE_WIN32) || - (_elm_config->engine == ELM_SOFTWARE_16_WINCE)) - evas_cserve_disconnect(); - edje_shutdown(); - evas_shutdown(); -#endif return _elm_sub_init_count; } @@ -633,29 +651,32 @@ EAPI void elm_quicklaunch_seed(void) { -#ifndef SEMI_BROKEN_QUICKLANCH - Evas_Object *win, *bg, *bt; - - win = elm_win_add(NULL, "seed", ELM_WIN_BASIC); - bg = elm_bg_add(win); - elm_win_resize_object_add(win, bg); - evas_object_show(bg); - bt = elm_button_add(win); - elm_button_label_set(bt, " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~-_=+\\|]}[{;:'\",<.>/?"); - elm_win_resize_object_add(win, bt); - ecore_main_loop_iterate(); - evas_object_del(win); - ecore_main_loop_iterate(); - if ((_elm_config->engine == ELM_SOFTWARE_X11) || - (_elm_config->engine == ELM_SOFTWARE_16_X11) || - (_elm_config->engine == ELM_XRENDER_X11) || - (_elm_config->engine == ELM_OPENGL_X11)) +#ifndef SEMI_BROKEN_QUICKLAUNCH + if (quicklaunch_on) { -#ifdef HAVE_ELEMENTARY_X - ecore_x_sync(); -#endif - } - ecore_main_loop_iterate(); + Evas_Object *win, *bg, *bt; + + win = elm_win_add(NULL, "seed", ELM_WIN_BASIC); + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + bt = elm_button_add(win); + elm_button_label_set(bt, " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~-_=+\\|]}[{;:'\",<.>/?"); + elm_win_resize_object_add(win, bt); + ecore_main_loop_iterate(); + evas_object_del(win); + ecore_main_loop_iterate(); + if ((_elm_config->engine == ELM_SOFTWARE_X11) || + (_elm_config->engine == ELM_SOFTWARE_16_X11) || + (_elm_config->engine == ELM_XRENDER_X11) || + (_elm_config->engine == ELM_OPENGL_X11)) + { +# ifdef HAVE_ELEMENTARY_X + ecore_x_sync(); +# endif + } + ecore_main_loop_iterate(); + } #endif } @@ -789,24 +810,27 @@ } if (postfork_func) postfork_func(postfork_data); -#ifdef SEMI_BROKEN_QUICKLANCH - ecore_app_args_set(argc, (const char **)argv); - evas_init(); - edje_init(); - _elm_config_sub_init(); - if ((_elm_config->engine == ELM_SOFTWARE_X11) || - (_elm_config->engine == ELM_SOFTWARE_16_X11) || - (_elm_config->engine == ELM_XRENDER_X11) || - (_elm_config->engine == ELM_OPENGL_X11)) + if (quicklaunch_on) { -#ifdef HAVE_ELEMENTARY_X - ecore_x_init(NULL); +#ifdef SEMI_BROKEN_QUICKLAUNCH + ecore_app_args_set(argc, (const char **)argv); + evas_init(); + edje_init(); + _elm_config_sub_init(); + if ((_elm_config->engine == ELM_SOFTWARE_X11) || + (_elm_config->engine == ELM_SOFTWARE_16_X11) || + (_elm_config->engine == ELM_XRENDER_X11) || + (_elm_config->engine == ELM_OPENGL_X11)) + { +# ifdef HAVE_ELEMENTARY_X + ecore_x_init(NULL); +# endif + } + ecore_evas_init(); // FIXME: check errors + ecore_imf_init(); + _elm_module_init(); #endif } - ecore_evas_init(); // FIXME: check errors - ecore_imf_init(); - _elm_module_init(); -#endif setsid(); if (chdir(cwd) != 0) |
From: Enlightenment S. <no-...@en...> - 2010-10-28 04:13:16
|
Log: 1. need calls return runtime failure if elm doesnt have the feature. 2. elm config dont use desktops if no efreet. Author: raster Date: 2010-10-27 21:13:09 -0700 (Wed, 27 Oct 2010) New Revision: 53945 Modified: trunk/TMP/st/elementary/src/bin/config.c trunk/TMP/st/elementary/src/bin/test_icon_desktops.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_main.c trunk/TMP/st/elementary/src/lib/elm_thumb.c Modified: trunk/TMP/st/elementary/src/bin/config.c =================================================================== --- trunk/TMP/st/elementary/src/bin/config.c 2010-10-28 03:46:52 UTC (rev 53944) +++ trunk/TMP/st/elementary/src/bin/config.c 2010-10-28 04:13:09 UTC (rev 53945) @@ -684,13 +684,15 @@ _profiles_list_selected_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) { const char *cur_profile = NULL; - Efreet_Desktop *desk = NULL; char *pdir, buf[PATH_MAX]; const char *sel_profile; Eina_Bool cur_selected; const char *prof_name; Evas_Object *en; - +#ifdef ELM_EFREET + Efreet_Desktop *desk = NULL; +#endif + sel_profile = data; if (!sel_profile) return; @@ -708,12 +710,12 @@ /* other than curr *\/ */ pdir = elm_profile_dir_get(sel_profile); +#ifdef ELM_EFREET snprintf(buf, sizeof(buf), "%s/profile.desktop", pdir); desk = efreet_desktop_new(buf); - - if ((desk) && (desk->name)) - prof_name = desk->name; + if ((desk) && (desk->name)) prof_name = desk->name; else +#endif prof_name = cur_profile; snprintf(buf, sizeof(buf), "<hilight>Selected profile: %s</><br>", @@ -721,13 +723,15 @@ elm_label_label_set(evas_object_data_get(obj, "prof_name_lbl"), buf); en = evas_object_data_get(obj, "prof_desc_entry"); - if (desk) - elm_scrolled_entry_entry_set(en, desk->comment); +#ifdef ELM_EFREET + if (desk) elm_scrolled_entry_entry_set(en, desk->comment); else +#endif elm_scrolled_entry_entry_set(en, "Unknown"); - if (desk) - efreet_desktop_free(desk); +#ifdef ELM_EFREET + if (desk) efreet_desktop_free(desk); +#endif } static void @@ -742,41 +746,40 @@ return; elm_list_clear(l_widget); - efreet_init(); cur_profile = elm_profile_get(); EINA_LIST_FOREACH(p_names, l, profile) { - Efreet_Desktop *desk = NULL; char buf[PATH_MAX], *pdir; const char *label, *ext; Evas_Object *ic; Elm_List_Item *it; - +#ifdef ELM_EFREET + Efreet_Desktop *desk = NULL; +#endif + pdir = elm_profile_dir_get(profile); + label = profile; + +#ifdef ELM_EFREET snprintf(buf, sizeof(buf), "%s/profile.desktop", pdir); - desk = efreet_desktop_new(buf); - label = profile; - - if ((desk) && (desk->name)) - label = desk->name; - + if ((desk) && (desk->name)) label = desk->name; +#endif + buf[0] = 0; - if (pdir) - snprintf(buf, sizeof(buf), "%s/icon.edj", pdir); + if (pdir) snprintf(buf, sizeof(buf), "%s/icon.edj", pdir); +#ifdef ELM_EFREET if ((desk) && (desk->icon) && (pdir)) snprintf(buf, sizeof(buf), "%s/%s", pdir, desk->icon); +#endif ic = elm_icon_add(l_widget); - ext = strrchr(buf, '.'); if (ext) { - if (!strcmp(ext, ".edj")) - elm_icon_file_set(ic, buf, "icon"); - else - elm_icon_file_set(ic, buf, NULL); + if (!strcmp(ext, ".edj")) elm_icon_file_set(ic, buf, "icon"); + else elm_icon_file_set(ic, buf, NULL); } evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, @@ -792,14 +795,12 @@ if (pdir) free(pdir); - if (desk) - efreet_desktop_free(desk); +#ifdef ELM_EFREET + if (desk) efreet_desktop_free(desk); +#endif } - efreet_shutdown(); - - if (sel_it) - elm_list_item_selected_set(sel_it, EINA_TRUE); + if (sel_it) elm_list_item_selected_set(sel_it, EINA_TRUE); elm_list_go(l_widget); } @@ -1072,6 +1073,9 @@ /* put here any init code specific to this app like parsing args, etc. */ if (!quiet) { +#ifdef ELM_EFREET + elm_need_efreet(); +#endif status_win(); /* create main window */ if (!interactive) ecore_timer_add(2.0, _exit_timer, NULL); Modified: trunk/TMP/st/elementary/src/bin/test_icon_desktops.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_icon_desktops.c 2010-10-28 03:46:52 UTC (rev 53944) +++ trunk/TMP/st/elementary/src/bin/test_icon_desktops.c 2010-10-28 04:13:09 UTC (rev 53945) @@ -108,16 +108,18 @@ evas_object_show(gl); #ifdef ELM_EFREET - elm_need_efreet(); - desktops = efreet_util_desktop_name_glob_list("*"); - if (desktops) + if (elm_need_efreet()) { - Efreet_Desktop *d; - - EINA_LIST_FREE(desktops, d) - elm_genlist_item_append(gl, &it_desk, d, - NULL, ELM_GENLIST_ITEM_NONE, - desktop_sel, NULL); + desktops = efreet_util_desktop_name_glob_list("*"); + if (desktops) + { + Efreet_Desktop *d; + + EINA_LIST_FREE(desktops, d) + elm_genlist_item_append(gl, &it_desk, d, + NULL, ELM_GENLIST_ITEM_NONE, + desktop_sel, NULL); + } } #endif Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-10-28 03:46:52 UTC (rev 53944) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-10-28 04:13:09 UTC (rev 53945) @@ -308,9 +308,9 @@ EAPI int elm_quicklaunch_fallback(int argc, char **argv); EAPI char *elm_quicklaunch_exe_path_get(const char *exe); - EAPI void elm_need_efreet(void); - EAPI void elm_need_e_dbus(void); - EAPI void elm_need_ethumb(void); + EAPI Eina_Bool elm_need_efreet(void); + EAPI Eina_Bool elm_need_e_dbus(void); + EAPI Eina_Bool elm_need_ethumb(void); EAPI Eina_Bool elm_policy_set(unsigned int policy, int value); EAPI int elm_policy_get(unsigned int policy); Modified: trunk/TMP/st/elementary/src/lib/elm_main.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_main.c 2010-10-28 03:46:52 UTC (rev 53944) +++ trunk/TMP/st/elementary/src/lib/elm_main.c 2010-10-28 04:13:09 UTC (rev 53945) @@ -363,13 +363,16 @@ #ifdef ELM_EDBUS static int _elm_need_e_dbus = 0; #endif -EAPI void +EAPI Eina_Bool elm_need_e_dbus(void) { #ifdef ELM_EDBUS - if (_elm_need_e_dbus++) return; + if (_elm_need_e_dbus++) return EINA_TRUE; e_dbus_init(); e_hal_init(); + return EINA_TRUE; +#else + return EINA_FALSE; #endif } @@ -388,11 +391,11 @@ #ifdef ELM_EFREET static int _elm_need_efreet = 0; #endif -EAPI void +EAPI Eina_Bool elm_need_efreet(void) { #ifdef ELM_EFREET - if (_elm_need_efreet++) return; + if (_elm_need_efreet++) return EINA_TRUE; efreet_init(); efreet_mime_init(); efreet_trash_init(); @@ -410,6 +413,9 @@ } } */ + return EINA_TRUE; +#else + return EINA_FALSE; #endif } Modified: trunk/TMP/st/elementary/src/lib/elm_thumb.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_thumb.c 2010-10-28 03:46:52 UTC (rev 53944) +++ trunk/TMP/st/elementary/src/lib/elm_thumb.c 2010-10-28 04:13:09 UTC (rev 53945) @@ -392,14 +392,17 @@ * * @ingroup Thumb */ -EAPI void +EAPI Eina_Bool elm_need_ethumb(void) { #ifdef ELM_ETHUMB - if (_elm_need_ethumb++) return; + if (_elm_need_ethumb++) return EINA_TRUE; ELM_ECORE_EVENT_ETHUMB_CONNECT = ecore_event_type_new(); ethumb_client_init(); _elm_ethumb_client = ethumb_client_connect(_connect_cb, NULL, NULL); + return EINA_TRUE; +#else + return EINA_FALSE; #endif } |
From: Enlightenment S. <no-...@en...> - 2010-10-30 04:01:16
|
Log: mapbuf -> hide/show content absolutely if mapbuf is hidden/shown and add test. Author: raster Date: 2010-10-29 21:01:09 -0700 (Fri, 29 Oct 2010) New Revision: 54014 Modified: trunk/TMP/st/elementary/src/bin/test_launcher.c trunk/TMP/st/elementary/src/lib/elm_mapbuf.c trunk/TMP/st/elementary/src/lib/elm_widget.c Modified: trunk/TMP/st/elementary/src/bin/test_launcher.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_launcher.c 2010-10-29 22:07:13 UTC (rev 54013) +++ trunk/TMP/st/elementary/src/bin/test_launcher.c 2010-10-30 04:01:09 UTC (rev 54014) @@ -553,6 +553,21 @@ } static void +l3_hidden_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + Evas_Object *win = data; + Evas_Object *mb; + Eina_List *mbs, *l; + + mbs = evas_object_data_get(win, "mbs"); + EINA_LIST_FOREACH(mbs, l, mb) + { + if (evas_object_visible_get(mb)) evas_object_hide(mb); + else evas_object_show(mb); + } +} + +static void l3_close_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { evas_object_del(data); @@ -882,12 +897,21 @@ elm_table_pack(tb2, ck, 3, 0, 1, 1); evas_object_show(ck); + ck = elm_check_add(win); + elm_check_label_set(ck, "Hid"); + elm_check_state_set(ck, 0); + evas_object_smart_callback_add(ck, "changed", l3_hidden_cb, win); + evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ck, 0.5, 0.99); + elm_table_pack(tb2, ck, 4, 0, 1, 1); + evas_object_show(ck); + bt = elm_button_add(win); elm_button_label_set(bt, "Close"); evas_object_smart_callback_add(bt, "clicked", l3_close_cb, win); evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(bt, 0.95, 0.99); - elm_table_pack(tb2, bt, 4, 0, 1, 1); + elm_table_pack(tb2, bt, 5, 0, 1, 1); evas_object_show(bt); evas_object_show(tb2); Modified: trunk/TMP/st/elementary/src/lib/elm_mapbuf.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_mapbuf.c 2010-10-29 22:07:13 UTC (rev 54013) +++ trunk/TMP/st/elementary/src/lib/elm_mapbuf.c 2010-10-30 04:01:09 UTC (rev 54014) @@ -11,7 +11,7 @@ struct _Widget_Data { - Evas_Object *content; + Evas_Object *content, *clip; Eina_Bool enabled : 1; Eina_Bool alpha : 1; Eina_Bool smooth : 1; @@ -85,7 +85,7 @@ Widget_Data *wd = elm_widget_data_get(obj); Evas_Coord x, y, w, h; if (!wd) return; - evas_object_geometry_get(obj, &x, &y, &w, &h); + evas_object_geometry_get(wd->clip, &x, &y, &w, &h); if (wd->enabled) { Evas_Map *m; @@ -116,7 +116,7 @@ { Evas_Coord x, y, w, h, x2, y2; - evas_object_geometry_get(obj, &x, &y, &w, &h); + evas_object_geometry_get(wd->clip, &x, &y, &w, &h); evas_object_geometry_get(wd->content, &x2, &y2, NULL, NULL); if ((x != x2) || (y != y2)) { @@ -141,15 +141,15 @@ } static void -_move(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +_move(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { - _configure(obj); + _configure(data); } static void -_resize(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +_resize(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { - _configure(obj); + _configure(data); } /** @@ -178,10 +178,16 @@ elm_widget_theme_hook_set(obj, _theme_hook); elm_widget_can_focus_set(obj, EINA_FALSE); + wd->clip = evas_object_rectangle_add(e); + evas_object_pass_events_set(wd->clip, EINA_TRUE); + evas_object_color_set(wd->clip, 0, 0, 0, 0); + evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); - evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _move, NULL); - evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize, NULL); - + evas_object_event_callback_add(wd->clip, EVAS_CALLBACK_MOVE, _move, obj); + evas_object_event_callback_add(wd->clip, EVAS_CALLBACK_RESIZE, _resize, obj); + + elm_widget_resize_object_set(obj, wd->clip); + wd->enabled = 0; wd->alpha = 1; wd->smooth = 1; @@ -213,14 +219,17 @@ wd->content = content; if (content) { - // FIXME: dont handle del + evas_object_data_set(content, "_elm_leaveme", (void *)1); elm_widget_sub_object_add(content, obj); evas_object_smart_member_add(content, obj); - evas_object_clip_set(content, evas_object_clip_get(obj)); + evas_object_clip_set(content, wd->clip); + evas_object_color_set(wd->clip, 255, 255, 255, 255); evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); } + else + evas_object_color_set(wd->clip, 0, 0, 0, 0); _sizing_eval(obj); _configure(obj); } @@ -263,9 +272,11 @@ if (!wd) return NULL; if (!wd->content) return NULL; content = wd->content; - elm_widget_sub_object_del(obj, wd->content); - evas_object_smart_member_del(wd->content); - evas_object_clip_unset(wd->content); + elm_widget_sub_object_del(obj, content); + evas_object_smart_member_del(content); + evas_object_color_set(wd->clip, 0, 0, 0, 0); + evas_object_clip_unset(content); + evas_object_data_del(content, "_elm_leaveme"); wd->content = NULL; return content; } Modified: trunk/TMP/st/elementary/src/lib/elm_widget.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_widget.c 2010-10-29 22:07:13 UTC (rev 54013) +++ trunk/TMP/st/elementary/src/lib/elm_widget.c 2010-10-30 04:01:09 UTC (rev 54014) @@ -2582,8 +2582,6 @@ Eina_List *list; Evas_Object *o; INTERNAL_ENTRY; -// evas_object_clip_unset(sd->resize_obj); -// return; if ((list = evas_object_smart_members_get(obj))) { EINA_LIST_FREE(list, o) |
From: Enlightenment S. <no-...@en...> - 2010-11-06 06:02:30
|
Log: improve genlist item realize/nrealize by almost 2x. (4.7->2.7 sec for processing of a genlist queue of 20,000 items). added genlist item cache to do this. yay!. also wil improve runtime scrolling - realiz/unrealize will be also equivalently faster, so less add/del overhead for the edje objects in gnelist itself. the icons that apps swallow in still get deleted and created. this is another matter for anothr day. ant be solved inside of genlist itself. probably need an unrealize callback per item and a way to steal your icons back from the item. Author: raster Date: 2010-11-05 23:02:22 -0700 (Fri, 05 Nov 2010) New Revision: 54214 Modified: trunk/TMP/st/elementary/src/bin/test_genlist.c trunk/TMP/st/elementary/src/lib/elm_genlist.c Modified: trunk/TMP/st/elementary/src/bin/test_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_genlist.c 2010-11-06 03:42:35 UTC (rev 54213) +++ trunk/TMP/st/elementary/src/bin/test_genlist.c 2010-11-06 06:02:22 UTC (rev 54214) @@ -153,7 +153,7 @@ evas_object_show(bt_1500); elm_box_pack_end(bx, bt_1500); - for (i = 0; i < 2000; i++) + for (i = 0; i < 20000; i++) { gli = elm_genlist_item_append(gl, &itc1, (void *)(long)i/* item data */, Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2010-11-06 03:42:35 UTC (rev 54213) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2010-11-06 06:02:22 UTC (rev 54214) @@ -244,6 +244,7 @@ typedef struct _Widget_Data Widget_Data; typedef struct _Item_Block Item_Block; typedef struct _Pan Pan; +typedef struct _Item_Cache Item_Cache; struct _Widget_Data { @@ -256,6 +257,7 @@ Eina_List *queue, *selected; Elm_Genlist_Item *show_item; Elm_Genlist_Item *last_selected_item; + Eina_Inlist *item_cache; Elm_List_Mode mode; Eina_Bool on_hold : 1; Eina_Bool multi : 1; @@ -272,6 +274,8 @@ struct { Evas_Coord x, y; } history[SWIPE_MOVES]; + int item_cache_count; + int item_cache_max; int movements; int walking; int item_width; @@ -306,11 +310,10 @@ const Elm_Genlist_Item_Class *itc; Elm_Genlist_Item *parent; Elm_Genlist_Item_Flags flags; - struct - { - Evas_Smart_Cb func; - const void *data; - } func; + struct { + Evas_Smart_Cb func; + const void *data; + } func; Evas_Object *spacer; Eina_List *labels, *icons, *states, *icon_objs; @@ -320,19 +323,19 @@ Elm_Genlist_Item *rel; - struct - { - const void *data; - Elm_Tooltip_Item_Content_Cb content_cb; - Evas_Smart_Cb del_cb; - const char *style; - } tooltip; + struct { + const void *data; + Elm_Tooltip_Item_Content_Cb content_cb; + Evas_Smart_Cb del_cb; + const char *style; + } tooltip; const char *mouse_cursor; int relcount; int walking; int expanded_depth; + int order_num_in; Eina_Bool before : 1; @@ -352,6 +355,22 @@ Eina_Bool updateme : 1; }; +struct _Item_Cache +{ + EINA_INLIST; + + Evas_Object *base_view, *spacer; + + const char *item_style; // it->itc->item_style + Eina_Bool tree : 1; // it->flags & ELM_GENLIST_ITEM_SUBITEMS + Eina_Bool compress : 1; // it->wd->compress + Eina_Bool odd : 1; // in & 0x1 + + Eina_Bool selected : 1; // it->selected + Eina_Bool disabled : 1; // it->disabled + Eina_Bool expanded : 1; // it->expanded +}; + #define ELM_GENLIST_ITEM_FROM_INLIST(item) \ ((item) ? EINA_INLIST_CONTAINER_GET(item, Elm_Genlist_Item) : NULL) @@ -362,6 +381,7 @@ }; static const char *widtype = NULL; +static void _item_cache_zero(Widget_Data *wd); static void _del_hook(Evas_Object *obj); static void _theme_hook(Evas_Object *obj); //static void _show_region_hook(void *data, Evas_Object *obj); @@ -610,6 +630,7 @@ { Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; + _item_cache_zero(wd); if (wd->calc_job) ecore_job_del(wd->calc_job); if (wd->update_job) ecore_job_del(wd->update_job); free(wd); @@ -631,6 +652,7 @@ Widget_Data *wd = elm_widget_data_get(obj); Item_Block *itb; if (!wd) return; + _item_cache_zero(wd); elm_smart_scroller_object_theme_set(obj, wd->scr, "genlist", "base", elm_widget_style_get(obj)); // edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale); wd->item_width = wd->item_height = 0; @@ -1143,7 +1165,113 @@ evas_object_smart_callback_call(it->base.widget, "contract,request", it); } + static void +_item_cache_clean(Widget_Data *wd) +{ + while ((wd->item_cache) && (wd->item_cache_count > wd->item_cache_max)) + { + Item_Cache *itc; + + itc = EINA_INLIST_CONTAINER_GET(wd->item_cache->last, Item_Cache); + wd->item_cache = eina_inlist_remove(wd->item_cache, + wd->item_cache->last); + wd->item_cache_count--; + if (itc->spacer) evas_object_del(itc->spacer); + if (itc->base_view) evas_object_del(itc->base_view); + if (itc->item_style) eina_stringshare_del(itc->item_style); + free(itc); + } +} + +static void +_item_cache_zero(Widget_Data *wd) +{ + int pmax = wd->item_cache_max; + wd->item_cache_max = 0; + _item_cache_clean(wd); + wd->item_cache_max = pmax; +} + +static void +_item_cache_add(Elm_Genlist_Item *it) +{ + Item_Cache *itc; + + if (it->wd->item_cache_max <= 0) + { + evas_object_del(it->base.view); + it->base.view = NULL; + evas_object_del(it->spacer); + it->spacer = NULL; + return; + } + + it->wd->item_cache_count++; + itc = calloc(1, sizeof(Item_Cache)); + it->wd->item_cache = eina_inlist_prepend(it->wd->item_cache, EINA_INLIST_GET(itc)); + itc->spacer = it->spacer; + it->spacer = NULL; + itc->base_view = it->base.view; + it->base.view = NULL; + evas_object_hide(itc->base_view); + evas_object_move(itc->base_view, -9999, -9999); + itc->item_style = eina_stringshare_add(it->itc->item_style); + if (it->flags & ELM_GENLIST_ITEM_SUBITEMS) itc->tree = 1; + itc->compress = (it->wd->compress); + itc->odd = (it->order_num_in & 0x1); + itc->selected = it->selected; + itc->disabled = it->disabled; + itc->expanded = it->expanded; + edje_object_signal_callback_del(it->base.view, "elm,action,expand,toggle", + "elm", _signal_expand_toggle); + edje_object_signal_callback_del(it->base.view, "elm,action,expand", "elm", + _signal_expand); + edje_object_signal_callback_del(it->base.view, "elm,action,contract", + "elm", _signal_contract); + evas_object_event_callback_del(it->base.view, EVAS_CALLBACK_MOUSE_DOWN, + _mouse_down); + evas_object_event_callback_del(it->base.view, EVAS_CALLBACK_MOUSE_UP, + _mouse_up); + evas_object_event_callback_del(it->base.view, EVAS_CALLBACK_MOUSE_MOVE, + _mouse_move); + _item_cache_clean(it->wd); +} + +static Item_Cache * +_item_cache_find(Elm_Genlist_Item *it) +{ + Item_Cache *itc; + Eina_Bool tree = 0, odd; + + if (it->flags & ELM_GENLIST_ITEM_SUBITEMS) tree = 1; + odd = (it->order_num_in & 0x1); + EINA_INLIST_FOREACH(it->wd->item_cache, itc) + { + if ((itc->tree == tree) && + (itc->odd == odd) && + (itc->compress == it->wd->compress) && + (!strcmp(it->itc->item_style, itc->item_style))) + { + it->wd->item_cache = eina_inlist_remove(it->wd->item_cache, + EINA_INLIST_GET(itc)); + it->wd->item_cache_count--; + return itc; + } + } + return NULL; +} + +static void +_item_cache_free(Item_Cache *itc) +{ + if (itc->spacer) evas_object_del(itc->spacer); + if (itc->base_view) evas_object_del(itc->base_view); + if (itc->item_style) eina_stringshare_del(itc->item_style); + free(itc); +} + +static void _item_realize(Elm_Genlist_Item *it, int in, int calc) { Elm_Genlist_Item *it2; @@ -1151,26 +1279,40 @@ const char *treesize; char buf[1024]; int depth, tsize = 20; - + Item_Cache *itc; + if ((it->realized) || (it->delete_me)) return; - it->base.view = edje_object_add(evas_object_evas_get(it->base.widget)); - edje_object_scale_set(it->base.view, elm_widget_scale_get(it->base.widget) * - _elm_config->scale); - evas_object_smart_member_add(it->base.view, it->wd->pan_smart); - elm_widget_sub_object_add(it->base.widget, it->base.view); + it->order_num_in = in; - if (it->flags & ELM_GENLIST_ITEM_SUBITEMS) strncpy(buf, "tree", sizeof(buf)); - else strncpy(buf, "item", sizeof(buf)); - if (it->wd->compress) strncat(buf, "_compress", sizeof(buf) - strlen(buf)); - - if (in & 0x1) strncat(buf, "_odd", sizeof(buf) - strlen(buf)); - strncat(buf, "/", sizeof(buf) - strlen(buf)); - strncat(buf, it->itc->item_style, sizeof(buf) - strlen(buf)); - - _elm_theme_object_set(it->base.widget, it->base.view, "genlist", buf, elm_widget_style_get(it->base.widget)); - it->spacer = evas_object_rectangle_add(evas_object_evas_get(it->base.widget)); - evas_object_color_set(it->spacer, 0, 0, 0, 0); - elm_widget_sub_object_add(it->base.widget, it->spacer); + itc = _item_cache_find(it); + if (itc) + { + it->base.view = itc->base_view; + itc->base_view = NULL; + it->spacer = itc->spacer; + itc->spacer = NULL; + } + else + { + it->base.view = edje_object_add(evas_object_evas_get(it->base.widget)); + edje_object_scale_set(it->base.view, elm_widget_scale_get(it->base.widget) * + _elm_config->scale); + evas_object_smart_member_add(it->base.view, it->wd->pan_smart); + elm_widget_sub_object_add(it->base.widget, it->base.view); + + if (it->flags & ELM_GENLIST_ITEM_SUBITEMS) strncpy(buf, "tree", sizeof(buf)); + else strncpy(buf, "item", sizeof(buf)); + if (it->wd->compress) strncat(buf, "_compress", sizeof(buf) - strlen(buf)); + + if (in & 0x1) strncat(buf, "_odd", sizeof(buf) - strlen(buf)); + strncat(buf, "/", sizeof(buf) - strlen(buf)); + strncat(buf, it->itc->item_style, sizeof(buf) - strlen(buf)); + + _elm_theme_object_set(it->base.widget, it->base.view, "genlist", buf, elm_widget_style_get(it->base.widget)); + it->spacer = evas_object_rectangle_add(evas_object_evas_get(it->base.widget)); + evas_object_color_set(it->spacer, 0, 0, 0, 0); + elm_widget_sub_object_add(it->base.widget, it->spacer); + } for (it2 = it, depth = 0; it2->parent; it2 = it2->parent) depth += 1; it->expanded_depth = depth; treesize = edje_object_data_get(it->base.view, "treesize"); @@ -1198,12 +1340,39 @@ _mouse_up, it); evas_object_event_callback_add(it->base.view, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move, it); - if (it->selected) - edje_object_signal_emit(it->base.view, "elm,state,selected", "elm"); - if (it->disabled) - edje_object_signal_emit(it->base.view, "elm,state,disabled", "elm"); - if (it->expanded) - edje_object_signal_emit(it->base.view, "elm,state,expanded", "elm"); + if (itc) + { + if (it->selected != itc->selected) + { + if (it->selected) + edje_object_signal_emit(it->base.view, "elm,state,selected", "elm"); + else + edje_object_signal_emit(it->base.view, "elm,state,unselected", "elm"); + } + if (it->disabled != itc->disabled) + { + if (it->disabled) + edje_object_signal_emit(it->base.view, "elm,state,disabled", "elm"); + else + edje_object_signal_emit(it->base.view, "elm,state,enabled", "elm"); + } + if (it->expanded != itc->expanded) + { + if (it->expanded) + edje_object_signal_emit(it->base.view, "elm,state,expanded", "elm"); + else + edje_object_signal_emit(it->base.view, "elm,state,contracted", "elm"); + } + } + else + { + if (it->selected) + edje_object_signal_emit(it->base.view, "elm,state,selected", "elm"); + if (it->disabled) + edje_object_signal_emit(it->base.view, "elm,state,disabled", "elm"); + if (it->expanded) + edje_object_signal_emit(it->base.view, "elm,state,expanded", "elm"); + } } if ((calc) && (it->wd->homogeneous) && (it->wd->item_width)) @@ -1234,6 +1403,8 @@ edje_object_part_text_set(it->base.view, l->data, s); free(s); } + else if (itc) + edje_object_part_text_set(it->base.view, l->data, ""); } } if (it->itc->func.icon_get) @@ -1272,6 +1443,11 @@ snprintf(buf, sizeof(buf), "elm,state,%s,active", key); edje_object_signal_emit(it->base.view, buf, "elm"); } + else if (itc) + { + snprintf(buf, sizeof(buf), "elm,state,%s,passive", key); + edje_object_signal_emit(it->base.view, buf, "elm"); + } } } if (!it->mincalcd) @@ -1311,6 +1487,8 @@ it->realized = EINA_TRUE; it->want_unrealize = EINA_FALSE; + + if (itc) _item_cache_free(itc); } static void @@ -1324,10 +1502,7 @@ ecore_timer_del(it->long_timer); it->long_timer = NULL; } - evas_object_del(it->base.view); - it->base.view = NULL; - evas_object_del(it->spacer); - it->spacer = NULL; + _item_cache_add(it); elm_widget_stringlist_free(it->labels); it->labels = NULL; elm_widget_stringlist_free(it->icons); @@ -1901,6 +2076,7 @@ wd->obj = obj; wd->mode = ELM_LIST_SCROLL; wd->max_items_per_block = 32; + wd->item_cache_max = wd->max_items_per_block * 2; wd->longpress_timeout = 1.0; evas_object_smart_callback_add(obj, "scroll-hold-on", _hold_on, obj); @@ -2128,6 +2304,11 @@ { Widget_Data *wd = data; + //xxx + //static double q_start = 0.0; + //if (q_start == 0.0) q_start = ecore_time_get(); + //xxx + if (_queue_proecess(wd, 1) > 0) { if (wd->calc_job) ecore_job_del(wd->calc_job); @@ -2135,6 +2316,9 @@ } if (!wd->queue) { + //xxx + //printf("PROCESS TIME: %3.3f\n", ecore_time_get() - q_start); + //xxx wd->queue_idler = NULL; return ECORE_CALLBACK_CANCEL; } @@ -3890,6 +4074,8 @@ Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; wd->max_items_per_block = n; + wd->item_cache_max = wd->max_items_per_block * 2; + _item_cache_clean(wd); } /** |