From: Enlightenment S. <no-...@en...> - 2010-10-12 14:38:53
|
Log: Add 2 new options for bg image: Center & Stretch. Add a new Test for BG Options. Add a new 'bg_overlay' in objects/test.edc for testing bg overlay stuff. NB: There is an issue here that I cannot seem to get straight (perhaps pebkac, not sure)...but basically it seems that showing/hiding the overlay causes the other swallows of the edc to get recalc'd and makes the 'image' not work well w/ Center. Author: devilhorns Date: 2010-10-12 07:38:46 -0700 (Tue, 12 Oct 2010) New Revision: 53307 Modified: trunk/TMP/st/elementary/data/objects/test.edc trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/bin/test_bg.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_bg.c Modified: trunk/TMP/st/elementary/data/objects/test.edc =================================================================== --- trunk/TMP/st/elementary/data/objects/test.edc 2010-10-12 14:13:22 UTC (rev 53306) +++ trunk/TMP/st/elementary/data/objects/test.edc 2010-10-12 14:38:46 UTC (rev 53307) @@ -470,5 +470,63 @@ } } } + group { name: "bg_overlay"; + images { + image: "clo.png" LOSSY 60; + } + parts { + part { name: "clip"; + type: RECT; + description { state: "default" 0.0; + } + } + part { name: "clo"; + mouse_events: 0; + clip_to: "clip"; + description { state: "default" 0.0; + fill { + smooth: 0; + origin { + relative: 0.0 0.0; + offset: 0 0; + } + size { + relative: 1.84722 1.0; + offset: 0 0; + } + } + image.normal: "clo.png"; + } + description { state: "drift" 0.0; + inherit: "default" 0.0; + fill { + origin { + relative: 1.84722 0.0; + offset: 0 0; + } + size { + relative: 1.84722 1.0; + offset: 0 0; + } + } + } + } + } + programs { + program { name: "anim1"; + signal: "load"; + source: ""; + action: STATE_SET "drift" 0.0; + transition: LINEAR 10.0; + target: "clo"; + after: "anim2"; + } + program { name: "anim2"; + action: STATE_SET "default" 0.0; + target: "clo"; + after: "anim1"; + } + } + } } Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2010-10-12 14:13:22 UTC (rev 53306) +++ trunk/TMP/st/elementary/data/themes/default.edc 2010-10-12 14:38:46 UTC (rev 53307) @@ -261,6 +261,11 @@ } } } + part { name: "elm.swallow.rectangle"; + type: SWALLOW; + description { state: "default" 0.0; + } + } part { name: "elm.swallow.background"; type: SWALLOW; description { state: "default" 0.0; @@ -299,8 +304,6 @@ part { name: "elm.swallow.content"; type: SWALLOW; description { state: "default" 0.0; - rel1.offset: 4 4; - rel2.offset: -5 -5; } } } Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2010-10-12 14:13:22 UTC (rev 53306) +++ trunk/TMP/st/elementary/src/bin/test.c 2010-10-12 14:38:46 UTC (rev 53307) @@ -4,6 +4,7 @@ /* all tests prototypes */ void test_bg_plain(void *data, Evas_Object *obj, void *event_info); void test_bg_image(void *data, Evas_Object *obj, void *event_info); +void test_bg_options(void *data, Evas_Object *obj, void *event_info); void test_icon(void *data, Evas_Object *obj, void *event_info); void test_box_vert(void *data, Evas_Object *obj, void *event_info); void test_box_vert2(void *data, Evas_Object *obj, void *event_info); @@ -214,6 +215,7 @@ #define ADD_TEST(name_, cb_) elm_test_add(&tests, name_, cb_) ADD_TEST("Bg Plain", test_bg_plain); ADD_TEST("Bg Image", test_bg_image); + ADD_TEST("Bg Options", test_bg_options); ADD_TEST("Icon Transparent", test_icon); ADD_TEST("Box Vert", test_box_vert); ADD_TEST("Box Vert 2", test_box_vert2); Modified: trunk/TMP/st/elementary/src/bin/test_bg.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test_bg.c 2010-10-12 14:13:22 UTC (rev 53306) +++ trunk/TMP/st/elementary/src/bin/test_bg.c 2010-10-12 14:38:46 UTC (rev 53307) @@ -1,5 +1,50 @@ #include <Elementary.h> #ifndef ELM_LIB_QUICKLAUNCH +static void +_cb_radio_changed(void *data, Evas_Object *obj, void *event) +{ + Evas_Object *o_bg = data; + + elm_bg_option_set(o_bg, elm_radio_value_get((Evas_Object *)obj)); +} + +static void +_cb_overlay_changed(void *data, Evas_Object *obj, void *event) +{ + Evas_Object *o_bg = data; + + if (elm_check_state_get(obj)) + { + Evas_Object *parent, *over; + char buff[PATH_MAX]; + + snprintf(buff, sizeof(buff), "%s/objects/test.edj", PACKAGE_DATA_DIR); + parent = elm_object_parent_widget_get(o_bg); + over = edje_object_add(evas_object_evas_get(parent)); + edje_object_file_set(over, buff, "bg_overlay"); + elm_bg_overlay_set(o_bg, over); + } + else + elm_bg_overlay_set(o_bg, NULL); +} + +static void +_cb_color_changed(void *data, Evas_Object *obj, void *event) +{ + Evas_Object *o_bg = data; + double val = 0.0; + + val = elm_spinner_value_get(obj); + if (val == 1.0) + elm_bg_color_set(o_bg, 255, 255, 255); + else if (val == 2.0) + elm_bg_color_set(o_bg, 255, 0, 0); + else if (val == 3.0) + elm_bg_color_set(o_bg, 0, 0, 255); + else if (val == 4.0) + elm_bg_color_set(o_bg, 0, 255, 0); +} + void test_bg_plain(void *data, Evas_Object *obj, void *event_info) { @@ -41,6 +86,7 @@ elm_win_autodel_set(win, 1); bg = elm_bg_add(win); + elm_bg_option_set(bg, ELM_BG_OPTION_CENTER); snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", PACKAGE_DATA_DIR); elm_bg_file_set(bg, buf, NULL); evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -52,4 +98,111 @@ evas_object_resize(win, 320, 320); evas_object_show(win); } + +void +test_bg_options(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg; + Evas_Object *box, *hbox, *o_bg; + Evas_Object *rd, *rdg; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "bg-options", ELM_WIN_BASIC); + elm_win_title_set(win, "Bg Options"); + 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); + + box = elm_box_add(win); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, box); + evas_object_show(box); + + o_bg = elm_bg_add(win); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", PACKAGE_DATA_DIR); + elm_bg_file_set(o_bg, buf, NULL); + evas_object_size_hint_weight_set(o_bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(o_bg, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, o_bg); + evas_object_show(o_bg); + + hbox = elm_box_add(win); + elm_box_horizontal_set(hbox, EINA_TRUE); + evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, ELM_BG_OPTION_CENTER); + elm_radio_label_set(rd, "Center"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_radio_changed, o_bg); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + rdg = rd; + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, ELM_BG_OPTION_SCALE); + elm_radio_group_add(rd, rdg); + elm_radio_label_set(rd, "Scale"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_radio_changed, o_bg); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, ELM_BG_OPTION_STRETCH); + elm_radio_group_add(rd, rdg); + elm_radio_label_set(rd, "Stretch"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_radio_changed, o_bg); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, ELM_BG_OPTION_TILE); + elm_radio_group_add(rd, rdg); + elm_radio_label_set(rd, "Tile"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_radio_changed, o_bg); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + + elm_radio_value_set(rdg, ELM_BG_OPTION_SCALE); + + rd = elm_check_add(win); + elm_check_label_set(rd, "Show Overlay"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_overlay_changed, o_bg); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + + /* color choices ... this is ghetto, but we don't have a 'colorpicker' + * widget yet :( */ + rd = elm_spinner_add(win); + elm_object_style_set(rd, "vertical"); + elm_spinner_min_max_set(rd, 1, 4); + elm_spinner_label_format_set(rd, "%.0f"); + elm_spinner_editable_set(rd, EINA_FALSE); + elm_spinner_special_value_add(rd, 1, "White"); + elm_spinner_special_value_add(rd, 2, "Red"); + elm_spinner_special_value_add(rd, 3, "Blue"); + elm_spinner_special_value_add(rd, 4, "Green"); + evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(rd, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_smart_callback_add(rd, "changed", _cb_color_changed, o_bg); + elm_box_pack_end(hbox, rd); + evas_object_show(rd); + + elm_box_pack_end(box, hbox); + evas_object_show(hbox); + + evas_object_size_hint_min_set(bg, 160, 160); + evas_object_size_hint_max_set(bg, 640, 640); + evas_object_resize(win, 320, 320); + 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-10-12 14:13:22 UTC (rev 53306) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2010-10-12 14:38:46 UTC (rev 53307) @@ -448,7 +448,9 @@ */ typedef enum _Elm_Bg_Option { + ELM_BG_OPTION_CENTER, ELM_BG_OPTION_SCALE, + ELM_BG_OPTION_STRETCH, ELM_BG_OPTION_TILE } Elm_Bg_Option; Modified: trunk/TMP/st/elementary/src/lib/elm_bg.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_bg.c 2010-10-12 14:13:22 UTC (rev 53306) +++ trunk/TMP/st/elementary/src/lib/elm_bg.c 2010-10-12 14:38:46 UTC (rev 53307) @@ -52,35 +52,68 @@ } static void -_custom_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__) +_custom_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { - int iw = 0, ih = 0; - Evas_Coord x = 0, y = 0, w = 0, h = 0, ow = 0, oh = 0; Widget_Data *wd = data; + Evas_Coord bx = 0, by = 0, bw = 0, bh = 0; + Evas_Coord iw = 0, ih = 0; + Evas_Coord fx = 0, fy = 0, fw = 0, fh = 0; + Evas_Coord nx = 0, ny = 0, nw = 0, nh = 0; + const char *p; - evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); - evas_object_image_size_get(obj, &iw, &ih); + if ((!wd->img) || (!wd->file)) return; + if (((p = strrchr(wd->file, '.'))) && (!strcasecmp(p, ".edj"))) return; + /* grab image size */ + evas_object_image_size_get(wd->img, &iw, &ih); if ((iw < 1) || (ih < 1)) return; - if (wd->option == ELM_BG_OPTION_SCALE) + + /* grab base object dimensions */ + evas_object_geometry_get(wd->base, &bx, &by, &bw, &bh); + + /* set some defaults */ + nx = bx; + ny = by; + nw = bw; + nh = bh; + + switch (wd->option) { - w = ow; - h = (ih * w) / iw; - if (h < oh) + case ELM_BG_OPTION_CENTER: + fx = fy = 0; + fw = nw = iw; + fh = nh = ih; + nx = ((bw - fw) / 2); + ny = ((bh - fh) / 2); + break; + case ELM_BG_OPTION_SCALE: + fw = bw; + fh = ((ih * fw) / iw); + if (fh < bh) { - h = oh; - w = (iw * h) / ih; + fh = bh; + fw = ((iw * fh) / ih); } - x = (ow - w) / 2; - y = (oh - h) / 2; + fx = ((bw - fw) / 2); + fy = ((bh - fh) / 2); + break; + case ELM_BG_OPTION_TILE: + fx = fy = 0; + fw = iw; + fh = ih; + break; + case ELM_BG_OPTION_STRETCH: + default: + fx = nx = 0; + fy = ny = 0; + fw = bw; + fh = bh; + break; } - else if (wd->option == ELM_BG_OPTION_TILE) - { - x = y = 0; - w = iw; - h = ih; - } - evas_object_image_fill_set(obj, x, y, w, h); + + evas_object_image_fill_set(wd->img, fx, fy, fw, fh); + evas_object_move(wd->img, nx, ny); + evas_object_resize(wd->img, nw, nh); } /** @@ -113,6 +146,9 @@ _elm_theme_object_set(obj, wd->base, "bg", "base", "default"); elm_widget_resize_object_set(obj, wd->base); + evas_object_event_callback_add(wd->base, EVAS_CALLBACK_RESIZE, + _custom_resize, wd); + wd->option = ELM_BG_OPTION_SCALE; return obj; } @@ -153,14 +189,12 @@ else { wd->img = evas_object_image_add(evas_object_evas_get(wd->base)); - evas_object_event_callback_add(wd->img, EVAS_CALLBACK_RESIZE, - _custom_resize, wd); evas_object_image_file_set(wd->img, file, group); } - elm_widget_sub_object_add(obj, wd->img); evas_object_repeat_events_set(wd->img, EINA_TRUE); edje_object_part_swallow(wd->base, "elm.swallow.background", wd->img); - evas_object_show(wd->img); + elm_widget_sub_object_add(obj, wd->img); + _custom_resize(wd, NULL, NULL, NULL); } /** @@ -182,6 +216,7 @@ wd = elm_widget_data_get(obj); wd->option = option; + _custom_resize(wd, NULL, NULL, NULL); } /** @@ -206,11 +241,11 @@ if (!wd->rect) { wd->rect = evas_object_rectangle_add(evas_object_evas_get(wd->base)); + edje_object_part_swallow(wd->base, "elm.swallow.rectangle", wd->rect); elm_widget_sub_object_add(obj, wd->rect); - edje_object_part_swallow(wd->base, "elm.swallow.rectangle", wd->rect); + _custom_resize(wd, NULL, NULL, NULL); } evas_object_color_set(wd->rect, r, g, b, 255); - evas_object_show(wd->rect); } /** @@ -235,8 +270,14 @@ evas_object_del(wd->overlay); wd->overlay = NULL; } - if (!overlay) return; + if (!overlay) + { + _custom_resize(wd, NULL, NULL, NULL); + return; + } wd->overlay = overlay; + edje_object_part_swallow(wd->base, "elm.swallow.content", wd->overlay); elm_widget_sub_object_add(obj, wd->overlay); - edje_object_part_swallow(wd->base, "elm.swallow.content", wd->overlay); + + _custom_resize(wd, NULL, NULL, NULL); } |