From: Enlightenment S. <no-...@en...> - 2008-10-07 01:24:51
|
Log: new elm api - more evas liek and evas/edje freindly. i can mvoe forward now. Author: raster Date: 2008-10-06 18:23:49 -0700 (Mon, 06 Oct 2008) New Revision: 36487 Removed: trunk/TMP/st/elementary/src/lib/elm_pad.c Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h trunk/TMP/st/elementary/src/lib/Makefile.am trunk/TMP/st/elementary/src/lib/elm_bg.c trunk/TMP/st/elementary/src/lib/elm_box.c trunk/TMP/st/elementary/src/lib/elm_button.c trunk/TMP/st/elementary/src/lib/elm_clock.c trunk/TMP/st/elementary/src/lib/elm_contactlist.c trunk/TMP/st/elementary/src/lib/elm_frame.c trunk/TMP/st/elementary/src/lib/elm_icon.c trunk/TMP/st/elementary/src/lib/elm_label.c 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_scroller.c trunk/TMP/st/elementary/src/lib/elm_table.c trunk/TMP/st/elementary/src/lib/elm_toggle.c trunk/TMP/st/elementary/src/lib/elm_widget.c trunk/TMP/st/elementary/src/lib/elm_win.c trunk/TMP/st/elementary/src/lib/els_box.c trunk/TMP/st/elementary/src/lib/els_box.h trunk/TMP/st/elementary/src/lib/els_table.c trunk/TMP/st/elementary/src/lib/els_table.h Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2008-10-06 22:56:35 UTC (rev 36486) +++ trunk/TMP/st/elementary/data/themes/default.edc 2008-10-07 01:23:49 UTC (rev 36487) @@ -56,7 +56,7 @@ } } } - part { name: "elm.swallow.contents"; + part { name: "elm.swallow.content"; type: SWALLOW; description { state: "default" 0.0; rel1.offset: 4 4; @@ -398,7 +398,7 @@ image.normal: "bt_base1.png"; } } - part { name: "elm.swallow.contents"; + part { name: "elm.swallow.content"; type: SWALLOW; description { state: "default" 0.0; visible: 0; @@ -423,7 +423,7 @@ scale: 1; description { state: "default" 0.0; visible: 0; - rel1.to_x: "elm.swallow.contents"; + rel1.to_x: "elm.swallow.content"; rel1.relative: 1.0 0.0; rel1.offset: 0 4; rel2.offset: -5 -5; @@ -501,13 +501,13 @@ signal: "elm,state,icon,visible"; source: "elm"; action: STATE_SET "visible" 0.0; - target: "elm.swallow.contents"; + target: "elm.swallow.content"; } program { name: "icon_hide"; signal: "elm,state,icon,hidden"; source: "elm"; action: STATE_SET "default" 0.0; - target: "elm.swallow.contents"; + target: "elm.swallow.content"; } } } @@ -696,7 +696,7 @@ } } } - part { name: "elm.swallow.contents"; + part { name: "elm.swallow.content"; type: SWALLOW; description { state: "default" 0.0; visible: 0; @@ -720,7 +720,7 @@ scale: 1; description { state: "default" 0.0; visible: 0; - rel1.to_x: "elm.swallow.contents"; + rel1.to_x: "elm.swallow.content"; rel1.relative: 1.0 0.0; rel1.offset: 0 4; rel2.to_x: "bg"; @@ -790,13 +790,13 @@ signal: "elm,state,icon,visible"; source: "elm"; action: STATE_SET "visible" 0.0; - target: "elm.swallow.contents"; + target: "elm.swallow.content"; } program { name: "icon_hide"; signal: "elm,state,icon,hidden"; source: "elm"; action: STATE_SET "default" 0.0; - target: "elm.swallow.contents"; + target: "elm.swallow.content"; } } } @@ -2141,7 +2141,7 @@ image.normal: "bt_base1.png"; } } - part { name: "elm.swallow.contents"; + part { name: "elm.swallow.content"; type: SWALLOW; type: RECT; description { state: "default" 0.0; @@ -2162,7 +2162,7 @@ scale: 1; description { state: "default" 0.0; align: 0.0 1.0; - rel1.to_x: "elm.swallow.contents"; + rel1.to_x: "elm.swallow.content"; rel1.relative: 1.0 1.0; rel1.offset: 0 -5; rel2.offset: -5 -5; Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-06 22:56:35 UTC (rev 36486) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-07 01:23:49 UTC (rev 36487) @@ -1,975 +1,589 @@ #include <Elementary.h> -/* This is a test app (that is also functional) to test the api and serve - * as an example - */ +// FIXME: add more explicit tests for: +// labels +// frames +// scroller -static void -on_win_resize(void *data, Elm_Win *win, Elm_Cb_Type type, void *info) -{ - /* window is resized */ - printf("resize to: %ix%i\n", win->w, win->h); -} +static void my_win_del(void *data, Evas_Object *obj, void *event_info); +static void my_bt_1(void *data, Evas_Object *obj, void *event_info); +static void my_win_main(void); static void -on_win_del_req(void *data, Elm_Win *win, Elm_Cb_Type type, void *info) +my_win_del(void *data, Evas_Object *obj, void *event_info) { - /* because autodel is on - after this callback the window will be deleted */ - /* but to be explicit - exit the app when window is closed */ - elm_exit(); + /* called when my_win_main is requested to be deleted */ + elm_exit(); /* exit the program's main loop that runs in elm_run() */ } static void -win_bg_simple(void) +my_bt_1(void *data, Evas_Object *obj, void *event_info) { - Elm_Win *win; - Elm_Bg *bg; + Evas_Object *win, *bg; + + win = elm_win_add(NULL, "bg-plain", ELM_WIN_BASIC); + elm_win_title_set(win, "Bg Plain"); + elm_win_autodel_set(win, 1); - win = elm_win_new(); /* create a window */ - win->name_set(win, "win_simple"); /* set the window name - used by window - * manager. make it uniqie for windows - * with in this application */ - win->title_set(win, "Simple Window with default Bg"); /* set the title */ - win->autodel = 0; /* dont auto delete the window if someone closes it. - * this means the del+req handler has to delete it. by - * default it is on */ - /* add a callback that is called when the user tries to close the window */ - win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); - /* add a callback that gets called when the window is resized */ - win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); - - /* our window needs a baground, so ask for one - it will be set with a - * default bg */ - bg = elm_bg_new(win); - bg->show(bg); /* show the bg */ + bg = elm_bg_add(win); + /* allow bg to expand in x & y */ + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); - win->size_req(win, NULL, 240, 320); /* request that the window is 240x240 - * no min/max size enforced */ - win->show(win); /* show the window */ + /* set size hints. a minimum size for the bg. this should propagate back + * to the window thus limiting its size based off the bg as the bg is one + * of the window's resize objects. */ + evas_object_size_hint_min_set(bg, 160, 160); + /* and set a maximum size. not needed very often. normally used together + * with evas_object_size_hint_min_set() at the same size to make a + * window not resizable */ + evas_object_size_hint_max_set(bg, 640, 640); + /* and now just resize the window to a size you want. normally widgets + * will determine the initial size though */ + evas_object_resize(win, 320, 320); + /* and show the window */ + evas_object_show(win); } static void -win_bg_image(void) +my_bt_2(void *data, Evas_Object *obj, void *event_info) { - Elm_Win *win; - Elm_Bg *bg; + Evas_Object *win, *bg; char buf[PATH_MAX]; + + win = elm_win_add(NULL, "bg-image", ELM_WIN_BASIC); + elm_win_title_set(win, "Bg Image"); + elm_win_autodel_set(win, 1); - win = elm_win_new(); - win->name_set(win, "win_bg"); - win->title_set(win, "Simple Window with and image Bg"); - win->autodel = 0; - win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); - win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); - - bg = elm_bg_new(win); - /* this is a test - shows how to have your own custom wallpaper in - * your app - don't use this unless you have a very good reason! there - * is a default and all apps look nicer sharing the default, but if - * you insist... */ + bg = elm_bg_add(win); snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", PACKAGE_DATA_DIR); - bg->file_set(bg, buf, NULL); /* set the bg - the NULL is for special - * files that contain multiple images - * inside 1 file. not normally used but - * might be if you have archive files with - * multiple images in them */ - bg->show(bg); - - win->size_req(win, NULL, 240, 240); - win->show(win); + elm_bg_file_set(bg, buf, NULL); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + 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); } static void -win_scrollable_label(void) +my_bt_3(void *data, Evas_Object *obj, void *event_info) { - Elm_Win *win; - Elm_Bg *bg; - Elm_Scroller *scroller; - Elm_Label *label; - - win = elm_win_new(); - win->name_set(win, "win_bg"); - win->title_set(win, "Simple Window with scroller and label inside"); - win->autodel = 0; - win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); - win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); - - bg = elm_bg_new(win); - bg->show(bg); + Evas_Object *win, *bg, *ic; + char buf[PATH_MAX]; - scroller = elm_scroller_new(win); - - label = elm_label_new(win); - label->text_set(label, - "Hello world<br>" - "<br>" - "I am a label. I come here to temonstrate how to put<br>" - "text into a label, with newlines, even markup to test<br>" - "things like <b>bold text</b> where markup can be custom<br>" - "and extensible, defined by the theme's textbloxk style<br>" - "for the label.<br>" - "<br>" - "Note that the markup is html-like and things like newline<br>" - "chars and tab chars like stdout text are not valid text<br>" - "markup mechanisms. Use markup tags instead.<br>" - "<br>" - "Now we shall borrow some text from another test program<br>" - "(Expedite) to put some more tests in here<br>" - "<br>" - "<style=outline color=#fff outline_color=#000>Styled</> " - "<style=shadow shadow_color=#fff8>text</> " - "<style=soft_shadow shadow_color=#0002>should</> " - "<style=glow color=#fff glow2_color=#fe87 glow_color=#f214 >go here</> " - "<style=far_shadow shadow_color=#0005>as it is</> " - "<style=outline_shadow color=#fff outline_color=#8228 shadow_color=#005>within</> " - "<style=outline_soft_shadow color=#fff outline_color=#8228 shadow_color=#0002>right tags</> " - "<style=far_soft_shadow color=#fff shadow_color=#0002>to make it align to the</> " - "<underline=on underline_color=#00f>right hand</> " - "<backing=on backing_color=#fff8>side </><backing_color=#ff08>of</><backing_color=#0f08> </>" - "<strikethrough=on strikethrough_color=#f0f8>the textblock</>." - "<br>" - "<underline=double underline_color=#f00 underline2_color=#00f>now we need</> " - "to test some <color=#f00 font_size=8>C</><color=#0f0 font_size=10>O</>" - "<color=#00f font_size=12>L</><color=#fff font_size=14>O</>" - "<color=#ff0 font_size=16>R</><color=#0ff font_size=18> Bla Rai</>" - "<color=#f0f font_size=20> Stuff</>." - "<br>" - "<style=outline color=#fff outline_color=#000>Round about the cauldron go;</> " - "In the poison'd entrails throw.<br>" - "<style=shadow shadow_color=#fff8>Toad, that under cold stone</> " - "Days and nights has thirty-one<br>" - "<style=soft_shadow shadow_color=#0002>Swelter'd venom sleeping got,</> " - "<style=glow color=#fff glow2_color=#fe87 glow_color=#f214 >Boil thou first i' the charmed pot.</><br>" - "Double, double toil and trouble; " - "Fire burn, and cauldron bubble.<br>" - "<style=far_shadow shadow_color=#0005>Fillet of a fenny snake,</> " - "In the cauldron boil and bake;<br>" - "<style=outline_shadow color=#fff outline_color=#8228 shadow_color=#005>Eye of newt and toe of frog,</> " - "<underline=on underline_color=#00f>Wool of bat and tongue of dog,</><br>" - "<backing=on backing_color=#fff8>Adder's fork and blind-worm's sting,</> " - "<underline=double underline_color=#f00 underline2_color=#00f>Lizard's leg and owlet's wing,</><br>" - "<color=#808 font_size=20>For a charm of powerful trouble, " - "Like a hell-broth boil and bubble.<br>" - "Double, double toil and trouble;</> " - "Fire burn and cauldron bubble.<br>" - "Scale of dragon, tooth of wolf, " - "Witches' mummy, maw and gulf<br>" - "Of the ravin'd salt-sea shark, " - "Root of hemlock digg'd i' the dark,<br>" - "Liver of blaspheming Jew, " - "Gall of goat, and slips of yew<br>" - "Silver'd in the moon's eclipse, " - "Nose of Turk and Tartar's lips,<br>" - "Finger of birth-strangled babe " - "Ditch-deliver'd by a drab,<br>" - "Make the gruel thick and slab: " - "Add thereto a tiger's chaudron,<br>" - "For the ingredients of our cauldron. " - "Double, double toil and trouble;<br>" - "Fire burn and cauldron bubble. " - "Cool it with a baboon's blood,<br>" - "Then the charm is firm and good.<br>" - "<br>" - "Heizölrückstoßabdämpfung fløde pingüino kilómetros cœur déçu l'âme<br>" - "plutôt naïve Louÿs rêva crapaüter Íosa Úrmhac Óighe pór Éava Ádhaim<br>" - ); - scroller->child_add(scroller, label); - label->show(label); - scroller->show(scroller); + win = elm_win_add(NULL, "icon-transparent", ELM_WIN_BASIC); + elm_win_title_set(win, "Icon Transparent"); + elm_win_autodel_set(win, 1); + elm_win_alpha_set(win, 1); - win->size_req(win, NULL, 240, 480); - win->show(win); + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic, buf, NULL); + elm_icon_scale_set(ic, 0, 0); + elm_win_resize_object_add(win, ic); + evas_object_show(ic); + + evas_object_show(win); } static void -win_label_determines_min_size(void) +my_bt_4(void *data, Evas_Object *obj, void *event_info) { - Elm_Win *win; - Elm_Bg *bg; - Elm_Label *label; + Evas_Object *win, *bg, *bx, *ic; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "box-vert", ELM_WIN_BASIC); + elm_win_title_set(win, "Box Vert"); + elm_win_autodel_set(win, 1); - win = elm_win_new(); - win->name_set(win, "win_bg"); - win->title_set(win, "Simple Window with label setting minimum size"); - win->autodel = 0; - win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); - win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); - - bg = elm_bg_new(win); - bg->expand_x = 0; /* allows the window to grow in the y axis because */ - bg->expand_y = 1; /* its only child can expand in y */ - bg->show(bg); + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); - label = elm_label_new(win); - label->text_set(label, - "Hello world<br>" - "<br>" - "I am a label. I come here to temonstrate how to put<br>" - "text into a label, with newlines, even markup to test<br>" - "things like <b>bold text</b> where markup can be custom<br>" - "and extensible, defined by the theme's textbloxk style<br>" - "for the label.<br>" - "<br>" - "Note that the markup is html-like and things like newline<br>" - "chars and tab chars like stdout text are not valid text<br>" - "markup mechanisms. Use markup tags instead.<br>" - ); - label->show(label); - label->expand_x = 0; /* allows the window to grow in the y axis because */ - label->expand_y = 1; /* its only child can expand in y */ - /* why do i change expand on both bg and label? both are children of the - * window widget and thus both affect the window sizing. if any expands - * in an axis then window expanding is allowed always */ - elm_widget_sizing_update(label); /* make sure that the lable knows about its - * sizing changes like expand above */ - win->show(win); -} + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + evas_object_show(bx); -static void -win_box_vert_of_labels(void) -{ - Elm_Win *win; - Elm_Bg *bg; - Elm_Box *box; - Elm_Label *label; - - win = elm_win_new(); - win->name_set(win, "win_bg"); - win->title_set(win, "Simple Window with box + labels setting minimum size"); - win->autodel = 0; - win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); - win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); - - bg = elm_bg_new(win); - bg->expand_x = 1; - bg->expand_y = 1; - bg->show(bg); + 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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.5); + elm_box_pack_end(bx, ic); + evas_object_show(ic); - box = elm_box_new(win); - box->expand_x = 1; - box->expand_y = 1; + 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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.0, 0.5); + elm_box_pack_end(bx, ic); + evas_object_show(ic); - label = elm_label_new(win); - label->text_set(label, "Expand X/Y 0/0, Fill X/Y 0/0, Align: 0.5 0.5"); - box->pack_end(box, label); - label->show(label); - label->align_x = 0.5; - label->align_y = 0.5; - label->expand_x = 0; - label->expand_y = 0; - label->fill_x = 0; - label->fill_y = 0; - elm_widget_sizing_update(label); - - label = elm_label_new(win); - label->text_set(label, "Expand X/Y 1/1, Fill X/Y 0/0, Align: 0.5 0.5"); - box->pack_end(box, label); - label->show(label); - label->align_x = 0.5; - label->align_y = 0.5; - label->expand_x = 1; - label->expand_y = 1; - label->fill_x = 0; - label->fill_y = 0; - elm_widget_sizing_update(label); - - label = elm_label_new(win); - label->text_set(label, "Expand X/Y 1/1, Fill X/Y 1/1, Align: 0.5 0.5"); - box->pack_end(box, label); - label->show(label); - label->align_x = 0.5; - label->align_y = 0.5; - label->expand_x = 1; - label->expand_y = 1; - label->fill_x = 1; - label->fill_y = 1; - elm_widget_sizing_update(label); - - label = elm_label_new(win); - label->text_set(label, "Expand X/Y 0/0, Fill X/Y 1/1, Align: 0.5 0.5"); - box->pack_end(box, label); - label->show(label); - label->align_x = 0.5; - label->align_y = 0.5; - label->expand_x = 0; - label->expand_y = 0; - label->fill_x = 1; - label->fill_y = 1; - elm_widget_sizing_update(label); - - label = elm_label_new(win); - label->text_set(label, "Expand X/Y 0/0, Fill X/Y 1/1, Align: 0.0 0.5"); - box->pack_end(box, label); - label->show(label); - label->align_x = 0.0; - label->align_y = 0.5; - label->expand_x = 0; - label->expand_y = 0; - label->fill_x = 1; - label->fill_y = 1; - elm_widget_sizing_update(label); - - label = elm_label_new(win); - label->text_set(label, "Expand X/Y 0/0, Fill X/Y 1/1, Align: 1.0 0.5"); - box->pack_end(box, label); - label->show(label); - label->align_x = 1.0; - label->align_y = 0.5; - label->expand_x = 0; - label->expand_y = 0; - label->fill_x = 1; - label->fill_y = 1; - elm_widget_sizing_update(label); - - label = elm_label_new(win); - label->text_set(label, "Expand X/Y 0/0, Fill X/Y 1/1, Align: 0.5 0.0"); - box->pack_end(box, label); - label->show(label); - label->align_x = 0.5; - label->align_y = 0.0; - label->expand_x = 0; - label->expand_y = 0; - label->fill_x = 1; - label->fill_y = 1; - elm_widget_sizing_update(label); - - label = elm_label_new(win); - label->text_set(label, "Expand X/Y 0/0, Fill X/Y 1/1, Align: 0.5 1.0"); - box->pack_end(box, label); - label->show(label); - label->align_x = 0.5; - label->align_y = 1.0; - label->expand_x = 0; - label->expand_y = 0; - label->fill_x = 1; - label->fill_y = 1; - elm_widget_sizing_update(label); - - elm_widget_sizing_update(box); - box->show(box); + 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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 1.0, 0.5); + elm_box_pack_end(bx, ic); + evas_object_show(ic); - win->show(win); + evas_object_show(win); } static void -win_scrollable_box_vert_of_labels(void) +my_bt_5(void *data, Evas_Object *obj, void *event_info) { - Elm_Win *win; - Elm_Bg *bg; - Elm_Scroller *scroller; - Elm_Box *box; - Elm_Label *label; - int i; + Evas_Object *win, *bg, *bx, *ic; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "box-horiz", ELM_WIN_BASIC); + elm_win_title_set(win, "Box Horiz"); + elm_win_autodel_set(win, 1); - win = elm_win_new(); - win->name_set(win, "win_bg"); - win->title_set(win, "Simple Window with scroller and box + labels inside"); - win->autodel = 0; - win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); - win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); - - bg = elm_bg_new(win); - bg->expand_x = 1; - bg->expand_y = 1; - bg->show(bg); + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); - scroller = elm_scroller_new(win); + bx = elm_box_add(win); + elm_box_horizontal_set(bx, 1); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + evas_object_show(bx); - box = elm_box_new(win); - box->expand_x = 1; - box->expand_y = 1; - - for (i = 0; i < 40; i++) - { - char buf[200]; - - snprintf(buf, sizeof(buf), "This is a Label in a box, #%i", i); - label = elm_label_new(win); - label->text_set(label, buf); - box->pack_end(box, label); - label->show(label); - label->expand_x = 0; - label->expand_y = 0; - elm_widget_sizing_update(label); - label->show(label); - } - - scroller->child_add(scroller, box); + 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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.5); + elm_box_pack_end(bx, ic); + evas_object_show(ic); - elm_widget_sizing_update(box); - box->show(box); + 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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.0); + elm_box_pack_end(bx, ic); + evas_object_show(ic); - scroller->show(scroller); - - win->size_req(win, NULL, 240, 240); - win->show(win); + 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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.0, 1.0); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + evas_object_show(win); } static void -win_table_of_labels(void) +my_bt_6(void *data, Evas_Object *obj, void *event_info) { - Elm_Win *win; - Elm_Bg *bg; - Elm_Table *table; - Elm_Label *label; + Evas_Object *win, *bg, *bx, *ic, *bt; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "buttons", ELM_WIN_BASIC); + elm_win_title_set(win, "Buttons"); + elm_win_autodel_set(win, 1); - win = elm_win_new(); - win->name_set(win, "win_bg"); - win->title_set(win, "Simple Window with table + labels setting minimum size"); - win->autodel = 0; - win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); - win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); - bg = elm_bg_new(win); - bg->expand_x = 1; - bg->expand_y = 1; - bg->show(bg); + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + bt = elm_button_add(win); + elm_button_label_set(bt, "Icon sized to button"); + elm_button_icon_set(bt, ic); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_show(ic); - table = elm_table_new(win); - table->expand_x = 1; - table->expand_y = 1; + 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_icon_scale_set(ic, 0, 0); + bt = elm_button_add(win); + elm_button_label_set(bt, "Icon no scale"); + elm_button_icon_set(bt, ic); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_show(ic); - label = elm_label_new(win); - label->text_set(label, "X"); - table->pack(table, label, 0, 0, 1, 1); - label->fill_x = 0; - label->fill_y = 0; - label->show(label); - elm_widget_sizing_update(label); - - label = elm_label_new(win); - label->text_set(label, "Y"); - table->pack(table, label, 1, 0, 1, 1); - label->fill_x = 0; - label->fill_y = 0; - label->show(label); - elm_widget_sizing_update(label); - - label = elm_label_new(win); - label->text_set(label, "Z"); - table->pack(table, label, 2, 0, 1, 1); - label->fill_x = 0; - label->fill_y = 0; - label->show(label); - elm_widget_sizing_update(label); - - label = elm_label_new(win); - label->text_set(label, "A"); - table->pack(table, label, 0, 1, 1, 1); - label->fill_x = 0; - label->fill_y = 0; - label->show(label); - elm_widget_sizing_update(label); - - label = elm_label_new(win); - label->text_set(label, "BB"); - table->pack(table, label, 1, 1, 2, 1); - label->fill_x = 0; - label->fill_y = 0; - label->show(label); - elm_widget_sizing_update(label); - - label = elm_label_new(win); - label->text_set(label, "CCC"); - table->pack(table, label, 0, 2, 3, 1); - label->fill_x = 0; - label->fill_y = 0; - label->show(label); - elm_widget_sizing_update(label); - - elm_widget_sizing_update(table); - table->show(table); + bt = elm_button_add(win); + elm_button_label_set(bt, "Label Only"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); - win->show(win); + 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_icon_scale_set(ic, 0, 0); + bt = elm_button_add(win); + elm_button_icon_set(bt, ic); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_show(ic); + + evas_object_show(win); } static void -on_button_activate(void *data, Elm_Button *bt, Elm_Cb_Type type, void *info) +my_bt_7(void *data, Evas_Object *obj, void *event_info) { - printf("Button %p activate\n", bt); -} - -static void -win_table_of_buttons(void) -{ - Elm_Win *win; - Elm_Bg *bg; - Elm_Icon *icon; - Elm_Table *table; - Elm_Button *button; + Evas_Object *win, *bg, *bx, *ic, *tg; char buf[PATH_MAX]; + + win = elm_win_add(NULL, "toggles", ELM_WIN_BASIC); + elm_win_title_set(win, "Toggles"); + elm_win_autodel_set(win, 1); - win = elm_win_new(); - win->name_set(win, "win_bg"); - win->title_set(win, "Simple Window with table + buttons setting minimum size"); - win->autodel = 0; - win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); - win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); - - bg = elm_bg_new(win); - bg->expand_x = 1; - bg->expand_y = 1; - bg->show(bg); + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); - table = elm_table_new(win); - table->expand_x = 1; - table->expand_y = 1; + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); - button = elm_button_new(win); - button->text_set(button, "Button 1"); - table->pack(table, button, 0, 0, 1, 1); - button->fill_x = 0; - button->fill_y = 0; - button->show(button); - elm_widget_sizing_update(button); - button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); - - button = elm_button_new(win); - button->text_set(button, "Button 2"); - table->pack(table, button, 1, 0, 1, 1); - button->fill_x = 0; - button->fill_y = 0; - button->show(button); - elm_widget_sizing_update(button); - button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); - - button = elm_button_new(win); - button->text_set(button, "Button 3"); - table->pack(table, button, 2, 0, 1, 1); - button->fill_x = 0; - button->fill_y = 0; - button->show(button); - elm_widget_sizing_update(button); - button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); - - button = elm_button_new(win); - button->text_set(button, "Button 4"); - table->pack(table, button, 0, 1, 1, 1); - button->fill_x = 1; - button->fill_y = 0; - button->show(button); - elm_widget_sizing_update(button); - button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); - - button = elm_button_new(win); - icon = elm_icon_new(win); + ic = elm_icon_add(win); snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); - icon->file_set(icon, buf, NULL); - icon->scale_up = 0; - icon->layout_update(icon); - button->child_add(button, icon); - table->pack(table, button, 1, 1, 2, 1); - button->fill_x = 1; - button->fill_y = 1; - button->show(button); - elm_widget_sizing_update(button); - button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); - - button = elm_button_new(win); - button->text_set(button, "Button 6"); - icon = elm_icon_new(win); - snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR); - icon->file_set(icon, buf, NULL); - button->child_add(button, icon); - table->pack(table, button, 0, 2, 3, 1); - button->fill_x = 1; - button->fill_y = 1; - button->show(button); - elm_widget_sizing_update(button); - button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); - - elm_widget_sizing_update(table); - table->show(table); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + tg = elm_toggle_add(win); + elm_toggle_label_set(tg, "Icon sized to toggle"); + elm_toggle_icon_set(tg, ic); + elm_toggle_state_set(tg, 1); + elm_toggle_states_labels_set(tg, "Yes", "No"); + elm_box_pack_end(bx, tg); + evas_object_show(tg); + evas_object_show(ic); - win->show(win); + 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_icon_scale_set(ic, 0, 0); + tg = elm_toggle_add(win); + elm_toggle_label_set(tg, "Icon no scale"); + elm_toggle_icon_set(tg, ic); + elm_box_pack_end(bx, tg); + evas_object_show(tg); + evas_object_show(ic); + + tg = elm_toggle_add(win); + elm_toggle_label_set(tg, "Label Only"); + elm_toggle_states_labels_set(tg, "Big", "Small"); + elm_box_pack_end(bx, tg); + evas_object_show(tg); + + 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_icon_scale_set(ic, 0, 0); + tg = elm_toggle_add(win); + elm_toggle_icon_set(tg, ic); + elm_box_pack_end(bx, tg); + evas_object_show(tg); + evas_object_show(ic); + + evas_object_show(win); } static void -on_toggle_changed(void *data, Elm_Toggle *tg, Elm_Cb_Type type, void *info) +my_bt_8(void *data, Evas_Object *obj, void *event_info) { - printf("toggle: %i\n", tg->state); -} - -static void -win_box_vert_of_toggles(void) -{ - Elm_Win *win; - Elm_Bg *bg; - Elm_Box *box; - Elm_Toggle *toggle; - Elm_Icon *icon; + Evas_Object *win, *bg, *tb, *bt; char buf[PATH_MAX]; - - win = elm_win_new(); - win->name_set(win, "win_bg"); - win->title_set(win, "Simple Window with box + toggles setting min size"); - win->autodel = 0; - win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); - win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); - - bg = elm_bg_new(win); - bg->expand_x = 0; - bg->expand_y = 0; - bg->show(bg); - box = elm_box_new(win); - box->expand_x = 0; - box->expand_y = 0; + win = elm_win_add(NULL, "table", ELM_WIN_BASIC); + elm_win_title_set(win, "Table"); + elm_win_autodel_set(win, 1); - toggle = elm_toggle_new(win); - toggle->text_set(toggle, "Label ON/OFF"); - toggle->state = 1; - toggle->layout_update(toggle); - toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); - box->pack_end(box, toggle); - toggle->show(toggle); - toggle->expand_y = 0; - toggle->fill_y = 0; - elm_widget_sizing_update(toggle); - - toggle = elm_toggle_new(win); - toggle->text_set(toggle, "Icon + Label ON/OFF"); - icon = elm_icon_new(win); - snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR); - icon->file_set(icon, buf, NULL); - toggle->child_add(toggle, icon); - toggle->state = 1; - toggle->layout_update(toggle); - toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); - box->pack_end(box, toggle); - toggle->show(toggle); - toggle->expand_y = 0; - toggle->fill_y = 0; - elm_widget_sizing_update(toggle); - - toggle = elm_toggle_new(win); - toggle->text_set(toggle, NULL); - icon = elm_icon_new(win); - snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR); - icon->file_set(icon, buf, NULL); - toggle->child_add(toggle, icon); - toggle->state = 1; - toggle->layout_update(toggle); - toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); - box->pack_end(box, toggle); - toggle->show(toggle); - toggle->expand_y = 0; - toggle->fill_y = 0; - elm_widget_sizing_update(toggle); - - toggle = elm_toggle_new(win); - toggle->text_set(toggle, "Label Yes/No"); - toggle->states_text_set(toggle, "Yes", "No"); - toggle->state = 1; - toggle->layout_update(toggle); - toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); - box->pack_end(box, toggle); - toggle->show(toggle); - toggle->expand_y = 0; - toggle->fill_y = 0; - elm_widget_sizing_update(toggle); - - elm_widget_sizing_update(box); - box->show(box); + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); - win->show(win); + tb = elm_table_add(win); + elm_win_resize_object_add(win, tb); + evas_object_size_hint_weight_set(tb, 1.0, 1.0); + evas_object_show(tb); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Button 1"); + evas_object_size_hint_weight_set(bt, 1.0, 1.0); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + elm_table_pack(tb, bt, 0, 0, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Button 2"); + evas_object_size_hint_weight_set(bt, 1.0, 1.0); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + elm_table_pack(tb, bt, 1, 0, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Button 3"); + evas_object_size_hint_weight_set(bt, 1.0, 1.0); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + elm_table_pack(tb, bt, 2, 0, 1, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Button 4"); + evas_object_size_hint_weight_set(bt, 1.0, 1.0); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + elm_table_pack(tb, bt, 0, 1, 2, 1); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Button 5"); + evas_object_size_hint_weight_set(bt, 1.0, 1.0); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + elm_table_pack(tb, bt, 2, 1, 1, 3); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Button 6"); + evas_object_size_hint_weight_set(bt, 1.0, 1.0); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + elm_table_pack(tb, bt, 0, 2, 2, 2); + evas_object_show(bt); + + evas_object_show(win); } static void -win_scrollable_box_vert_of_toggles_and_buttons(void) +my_bt_9(void *data, Evas_Object *obj, void *event_info) { - Elm_Win *win; - Elm_Bg *bg; - Elm_Box *box; - Elm_Scroller *scroller; - Elm_Toggle *toggle; - Elm_Icon *icon; - Elm_Button *button; - Elm_Label *label; + Evas_Object *win, *bg, *bx, *ck; char buf[PATH_MAX]; + + win = elm_win_add(NULL, "clock", ELM_WIN_BASIC); + elm_win_title_set(win, "Clock"); + elm_win_autodel_set(win, 1); - win = elm_win_new(); - win->name_set(win, "win_bg"); - win->title_set(win, "Simple Window with scroller + box + toggles + buttons"); - win->autodel = 0; - win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); - win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); - - bg = elm_bg_new(win); - bg->expand_x = 1; - bg->expand_y = 1; - bg->show(bg); + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); - scroller = elm_scroller_new(win); + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); - box = elm_box_new(win); - - toggle = elm_toggle_new(win); - toggle->text_set(toggle, "Label ON/OFF"); - toggle->state = 1; - toggle->layout_update(toggle); - toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); - box->pack_end(box, toggle); - toggle->show(toggle); - toggle->expand_y = 0; - toggle->fill_y = 0; - elm_widget_sizing_update(toggle); - - toggle = elm_toggle_new(win); - toggle->text_set(toggle, "Icon + Label ON/OFF"); - icon = elm_icon_new(win); - snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR); - icon->file_set(icon, buf, NULL); - toggle->child_add(toggle, icon); - toggle->state = 1; - toggle->layout_update(toggle); - toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); - box->pack_end(box, toggle); - toggle->show(toggle); - toggle->expand_y = 0; - toggle->fill_y = 0; - elm_widget_sizing_update(toggle); - - toggle = elm_toggle_new(win); - toggle->text_set(toggle, NULL); - icon = elm_icon_new(win); - snprintf(buf, sizeof(buf), "%s/images/logo.png", PACKAGE_DATA_DIR); - icon->file_set(icon, buf, NULL); - toggle->child_add(toggle, icon); - toggle->state = 1; - toggle->layout_update(toggle); - toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); - box->pack_end(box, toggle); - toggle->show(toggle); - toggle->expand_y = 0; - toggle->fill_y = 0; - elm_widget_sizing_update(toggle); - - toggle = elm_toggle_new(win); - toggle->text_set(toggle, "Label Yes/No"); - toggle->states_text_set(toggle, "Yes", "No"); - toggle->state = 1; - toggle->layout_update(toggle); - toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); - box->pack_end(box, toggle); - toggle->show(toggle); - toggle->expand_y = 0; - toggle->fill_y = 0; - elm_widget_sizing_update(toggle); - - toggle = elm_toggle_new(win); - toggle->text_set(toggle, "Toggle "); - toggle->states_text_set(toggle, "Up", "Down"); - toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); - box->pack_end(box, toggle); - toggle->show(toggle); - toggle->expand_y = 0; - toggle->fill_y = 0; - elm_widget_sizing_update(toggle); - - toggle = elm_toggle_new(win); - toggle->text_set(toggle, "Toggle "); - toggle->states_text_set(toggle, "In", "Out"); - toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); - box->pack_end(box, toggle); - toggle->show(toggle); - toggle->expand_y = 0; - toggle->fill_y = 0; - elm_widget_sizing_update(toggle); - - toggle = elm_toggle_new(win); - toggle->text_set(toggle, "Toggle "); - toggle->states_text_set(toggle, "Up", "Down"); - toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); - box->pack_end(box, toggle); - toggle->show(toggle); - toggle->expand_y = 0; - toggle->fill_y = 0; - elm_widget_sizing_update(toggle); - - label = elm_label_new(win); - label->text_set(label, - "Hello world<br>" - "<br>" - "I am a label. I come here to temonstrate how to put<br>" - "text into a label, with newlines, even markup to test<br>" - "things like <b>bold text</b> where markup can be custom<br>" - "and extensible, defined by the theme's textbloxk style<br>" - "for the label.<br>" - "<br>" - "Note that the markup is html-like and things like newline<br>" - "chars and tab chars like stdout text are not valid text<br>" - "markup mechanisms. Use markup tags instead.<br>" - ); - box->pack_end(box, label); - label->expand_y = 0; - label->fill_y = 0; - elm_widget_sizing_update(label); - label->show(label); + ck = elm_clock_add(win); + elm_box_pack_end(bx, ck); + evas_object_show(ck); - button = elm_button_new(win); - button->text_set(button, "Button 1"); - box->pack_end(box, button); - button->expand_y = 0; - button->fill_y = 0; - button->show(button); - elm_widget_sizing_update(button); - button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); + ck = elm_clock_add(win); + elm_clock_show_am_pm_set(ck, 1); + elm_box_pack_end(bx, ck); + evas_object_show(ck); - button = elm_button_new(win); - button->text_set(button, "Button 2"); - box->pack_end(box, button); - button->expand_y = 0; - button->fill_y = 0; - button->show(button); - elm_widget_sizing_update(button); - button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); + ck = elm_clock_add(win); + elm_clock_show_seconds_set(ck, 1); + elm_box_pack_end(bx, ck); + evas_object_show(ck); - button = elm_button_new(win); - button->text_set(button, "Button 3"); - box->pack_end(box, button); - button->expand_y = 0; - button->fill_y = 0; - button->show(button); - elm_widget_sizing_update(button); - button->cb_add(button, ELM_CB_ACTIVATED, on_button_activate, NULL); + ck = elm_clock_add(win); + elm_clock_show_seconds_set(ck, 1); + elm_clock_show_am_pm_set(ck, 1); + elm_box_pack_end(bx, ck); + evas_object_show(ck); - scroller->child_add(scroller, box); + ck = elm_clock_add(win); + elm_clock_edit_set(ck, 1); + elm_clock_show_seconds_set(ck, 1); + elm_clock_show_am_pm_set(ck, 1); + elm_clock_time_set(ck, 10, 11, 12); + elm_box_pack_end(bx, ck); + evas_object_show(ck); - elm_widget_sizing_update(box); - box->show(box); - - scroller->show(scroller); - - win->size_req(win, NULL, 400, 320); - - win->show(win); + evas_object_show(win); } static void -on_clock_changed(void *data, Elm_Clock *cloc, Elm_Cb_Type type, void *info) +my_win_main(void) { - printf("clock: %i:%i:%i\n", cloc->hrs, cloc->min, cloc->sec); -} - -static void -win_box_vert_of_clock_and_toggles(void) -{ - Elm_Win *win; - Elm_Bg *bg; - Elm_Box *box; - Elm_Toggle *toggle; - Elm_Clock *cloc; - Elm_Pad *pad; - Elm_Frame *frame; - char buf[PATH_MAX]; - - win = elm_win_new(); - win->name_set(win, "win_bg"); - win->title_set(win, "Simple Window with box + toggles setting min size"); - win->autodel = 0; - win->cb_add(win, ELM_CB_DEL_REQ, on_win_del_req, NULL); - win->cb_add(win, ELM_CB_RESIZE, on_win_resize, NULL); - - bg = elm_bg_new(win); - snprintf(buf, sizeof(buf), "%s/images/sky_04.jpg", PACKAGE_DATA_DIR); - bg->file_set(bg, buf, NULL); - bg->expand_x = 0; - bg->expand_y = 0; - bg->show(bg); + Evas_Object *win, *bg, *bx0, *lb, *bx, *bt, *sc, *fr; - pad = elm_pad_new(win); - pad->expand_x = 0; - pad->expand_y = 0; - pad->show(pad); + /* 1 create an elm window - it returns an evas object. this is a little + * special as the object lives in the canvas that is inside the window + * so what is returned is really inside the window, but as you manipulate + * the evas object returned - the window will respond. elm_win makes sure + * of that so you can blindly treat it like any other evas object + * pretty much, just as long as you know it has special significance */ + /* the first parameter is a "parent" window - eg for a dialog you want to + * have a main window it is related to, here it is NULL meaning there + * is no parent. "main" is the name of the window - used by the window + * manager for identifying the window uniquely amongst all the windows + * within this application (and all instances of the application). the + * type is a basic window (the final parameter) */ + win = elm_win_add(NULL, "main", ELM_WIN_BASIC); + /* set the title of the window - this is in the titlebar */ + elm_win_title_set(win, "Elementary Tests"); + + /* set a callback on the window when "delete-request" is emitted as + * a callback. when this happens my_win_del() is called and the + * data pointer (first param) is passed the final param here (in this + * case it is NULL). This is how you can pass specific things to a + * callback like objects or data layered on top */ + evas_object_smart_callback_add(win, "delete-request", my_win_del, NULL); - frame = elm_frame_new(win); - pad->child_add(pad, frame); - frame->text_set(frame, "Time"); - frame->expand_x = 0; - frame->expand_y = 0; - frame->show(frame); -/* - pad = elm_pad_new(win); - frame->child_add(frame, pad); - pad->expand_x = 0; - pad->expand_y = 0; - pad->show(pad); -*/ - box = elm_box_new(win); -// pad->child_add(pad, box); - frame->child_add(frame, box); - box->expand_x = 0; - box->expand_y = 0; + /* add a background to our window. this just uses the standard theme set + * background. without a backgorund, you could make a window seem + * transparent with elm_win_alpha_set(win, 1); for example. if you have + * a compositor running this will make the window able to be + * semi-transparent and any space not filled by object/widget pixels will + * be transparent or translucent based on alpha. if you do not have a + * comnpositor running this should fall back to using shaped windows + * (which have a mask). both these features will be slow and rely on + * a lot more resources, so only use it if you need it. */ + bg = elm_bg_add(win); + /* set weight to 1.0 x 1.0 == expand in both x and y direction */ + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + /* tell the window that this object is to be resized along with the window. + * also as a result this object will be one of several objects that + * controls the minimum/maximum size of the window */ + elm_win_resize_object_add(win, bg); + /* and show the background */ + evas_object_show(bg); - toggle = elm_toggle_new(win); - toggle->text_set(toggle, "Alarm"); - toggle->states_text_set(toggle, "ON", "OFF"); - toggle->state = 0; - toggle->layout_update(toggle); - toggle->cb_add(toggle, ELM_CB_CHANGED, on_toggle_changed, NULL); - box->pack_end(box, toggle); - toggle->show(toggle); - toggle->expand_y = 0; - toggle->fill_y = 0; - elm_widget_sizing_update(toggle); + /* add a box layout widget to the window */ + bx0 = elm_box_add(win); + /* allow base box (bx0) to expand in x and y */ + evas_object_size_hint_weight_set(bx0, 1.0, 1.0); + /* tell the window that the box affects window size and also will be + * resized when the window is */ + elm_win_resize_object_add(win, bx0); + evas_object_show(bx0); - cloc = elm_clock_new(win); - cloc->expand_x = 0; - cloc->fill_x = 0; - cloc->edit = 1; - cloc->hrs = 6; - cloc->min = 54; - cloc->sec = 32; - cloc->time_update(cloc); - cloc->cb_add(cloc, ELM_CB_CHANGED, on_clock_changed, NULL); - box->pack_end(box, cloc); - elm_widget_sizing_update(cloc); - cloc->show(cloc); + fr = elm_frame_add(win); + elm_frame_label_set(fr, "Information"); + elm_box_pack_end(bx0, fr); + evas_object_show(fr); - cloc = elm_clock_new(win); - cloc->expand_x = 0; - cloc->fill_x = 0; - box->pack_end(box, cloc); - elm_widget_sizing_update(cloc); - cloc->show(cloc); + lb = elm_label_add(win); + elm_label_label_set(lb, + "Please slect a test from the list below<br>" + "by clicking the test button to show the<br>" + "test window."); + elm_frame_content_set(fr, lb); + evas_object_show(lb); - cloc = elm_clock_new(win); - cloc->am_pm = 0; - cloc->seconds = 1; - cloc->time_update(cloc); - cloc->expand_x = 0; - cloc->fill_x = 0; - box->pack_end(box, cloc); - elm_widget_sizing_update(cloc); - cloc->show(cloc); + /* add a scroller object - anything inside is scrollable */ + sc = elm_scroller_add(win); + /* add scroller to main box */ + evas_object_size_hint_weight_set(sc, 1.0, 1.0); + evas_object_size_hint_align_set(sc, -1.0, -1.0); + elm_box_pack_end(bx0, sc); + evas_object_show(sc); - cloc = elm_clock_new(win); - cloc->am_pm = 0; - cloc->seconds = 0; - cloc->time_update(cloc); - cloc->expand_x = 0; - cloc->fill_x = 0; - box->pack_end(box, cloc); - elm_widget_sizing_update(cloc); - cloc->show(cloc); + /* add a box layout widget to the window */ + bx = elm_box_add(win); + /* set weight to 1.0 x 1.0 == expand in x and y) */ + evas_object_size_hint_weight_set(bx, 1.0, 0.0); -/* - cloc = elm_clock_new(win); - cloc->am_pm = 1; - cloc->seconds = 0; - cloc->time_update(cloc); - cloc->expand_x = 0; - cloc->fill_x = 0; - box->pack_end(box, cloc); - elm_widget_sizing_update(cloc); - cloc->show(cloc); - */ + /* set the box ad the child int he scrolled view*/ + elm_scroller_child_set(sc, bx); + /* show the box, scroller and main box */ + evas_object_show(bx); - elm_widget_sizing_update(box); - box->show(box); + /* create a button */ + bt = elm_button_add(win); + /* set the button label */ + elm_button_label_set(bt, "Bg Plain"); + /* add a callback to be run when the button is clicked */ + evas_object_smart_callback_add(bt, "clicked", my_bt_1, NULL); + /* the button should fill any space it is given horizontally */ + evas_object_size_hint_align_set(bt, -1.0, 0.0); + /* put the button at the end of the box */ + elm_box_pack_end(bx, bt); + /* show the button */ + evas_object_show(bt); - win->show(win); + bt = elm_button_add(win); + elm_button_label_set(bt, "Bg Image"); + evas_object_smart_callback_add(bt, "clicked", my_bt_2, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Icon Transparent"); + evas_object_smart_callback_add(bt, "clicked", my_bt_3, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Box Vert"); + evas_object_smart_callback_add(bt, "clicked", my_bt_4, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Box Horiz"); + evas_object_smart_callback_add(bt, "clicked", my_bt_5, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Buttons"); + evas_object_smart_callback_add(bt, "clicked", my_bt_6, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Toggles"); + evas_object_smart_callback_add(bt, "clicked", my_bt_7, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Table"); + evas_object_smart_callback_add(bt, "clicked", my_bt_8, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Clock"); + evas_object_smart_callback_add(bt, "clicked", my_bt_9, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + /* set an initial window size */ + evas_object_resize(win, 320, 320); + /* show the window */ + evas_object_show(win); } int @@ -979,18 +593,7 @@ * types, enums and macros will be Elm_ and ELM_ etc.) */ elm_init(argc, argv); - /* setup some windows with test widgets in them */ - win_bg_simple(); - win_bg_image(); - win_scrollable_label(); - win_label_determines_min_size(); - win_box_vert_of_labels(); - win_scrollable_box_vert_of_labels(); - win_table_of_labels(); - win_table_of_buttons(); - win_box_vert_of_toggles(); - win_scrollable_box_vert_of_toggles_and_buttons(); - win_box_vert_of_clock_and_toggles(); + my_win_main(); elm_run(); /* and run the program now and handle all events etc. */ Modified: trunk/TMP/st/elementary/src/lib/Elementary.h =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-06 22:56:35 UTC (rev 36486) +++ trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-07 01:23:49 UTC (rev 36487) @@ -61,519 +61,107 @@ extern "C" { #endif -// FIXME: need to be able to enable/disable widgets -// FIXME: need to determine scale from dpi - /* Types here */ - typedef enum _Elm_Obj_Type - { - ELM_OBJ_OBJ, - ELM_OBJ_CB, - ELM_OBJ_WIDGET, - ELM_OBJ_WIN, - ELM_OBJ_BG, - ELM_OBJ_SCROLLER, - ELM_OBJ_LABEL, - ELM_OBJ_BOX, - ELM_OBJ_TABLE, - ELM_OBJ_BUTTON, - ELM_OBJ_ICON, - ELM_OBJ_TOGGLE, - ELM_OBJ_CLOCK, - ELM_OBJ_FRAME, - ELM_OBJ_PAD, - ELM_OBJ_CONTACTLIST -// ELM_OBJ_CHECK, // FIXME: do -// ELM_OBJ_RADIO, // FIXME: do -// ELM_OBJ_SEP, // FIXME: do (separator horiz or vert) -// ELM_OBJ_EXPANDER // FIXME: do (like a paned but slides open/closed) -// ELM_OBJ_SPIN, // FIXME: do -// ELM_OBJ_SLIDER, // FIXME: do -// ELM_OBJ_ENTRY, // FIXME: do -// ELM_OBJ_EDITOR, // FIXME: do -// ELM_OBJ_LISTITEM, // FIXME: do -// ELM_OBJ_BUSY, // FIXME: do -// // FIXME: list more widgets to do here like: -// // CONTACT, SELECTOR, FILES, PREVIEW, SIGNALINFO, CALLINFO, -// // CELLEDIT (csv - maybe later xls or some other cell format), -// // COLORSEL, TACHO ... -// -// wrap other basic ecore things: -// ELM_OBJ_TIMER, -// ELM_OBJ_ANIMATOR, -// ELM_OBJ_JOB, - } Elm_Obj_Type; - - typedef enum _Elm_Cb_Type - { - ELM_CB_DEL, - ELM_CB_CHILD_ADD, - ELM_CB_CHILD_DEL, - ELM_CB_UNPARENT, - ELM_CB_PARENT, - ELM_CB_DEL_REQ, - ELM_CB_RESIZE, - ELM_CB_CHANGED, - ELM_CB_ACTIVATED - } Elm_Cb_Type; - +/**************************************************************************/ + /* Objects */ typedef enum _Elm_Win_Type { ELM_WIN_BASIC, ELM_WIN_DIALOG_BASIC } Elm_Win_Type; - typedef struct _Elm_Obj_Class Elm_Obj_Class; - typedef struct _Elm_Obj Elm_Obj; - typedef struct _Elm_Cb_Class Elm_Cb_Class; - typedef struct _Elm_Cb Elm_Cb; - typedef struct _Elm_Win_Class Elm_Win_Class; - typedef struct _Elm_Win Elm_Win; - typedef struct _Elm_Widget_Class Elm_Widget_Class; - typedef struct _Elm_Widget Elm_Widget; - typedef struct _Elm_Bg_Class Elm_Bg_Class; - typedef struct _Elm_Bg Elm_Bg; - typedef struct _Elm_Scroller_Class Elm_Scroller_Class; - typedef struct _Elm_Scroller Elm_Scroller; - typedef struct _Elm_Label_Class Elm_Label_Class; - typedef struct _Elm_Label Elm_Label; - typedef struct _Elm_Box_Class Elm_Box_Class; - typedef struct _Elm_Box Elm_Box; - typedef struct _Elm_Table_Class Elm_Table_Class; - typedef struct _Elm_Table Elm_Table; - typedef struct _Elm_Button_Class Elm_Button_Class; - typedef struct _Elm_Button Elm_Button; - typedef struct _Elm_Icon_Class Elm_Icon_Class; - typedef struct _Elm_Icon Elm_Icon; - typedef struct _Elm_Toggle_Class Elm_Toggle_Class; - typedef struct _Elm_Toggle Elm_Toggle; - typedef struct _Elm_Clock_Class Elm_Clock_Class; - typedef struct _Elm_Clock Elm_Clock; - typedef struct _Elm_Frame_Class Elm_Frame_Class; - typedef struct _Elm_Frame Elm_Frame; - typedef struct _Elm_Pad_Class Elm_Pad_Class; - typedef struct _Elm_Pad Elm_Pad; - typedef struct _Elm_Contactlist_Class Elm_Contactlist_Class; - typedef struct _Elm_Contactlist Elm_Contactlist; - - typedef void (*Elm_Cb_Func) (void *data, Elm_Obj *obj, Elm_Cb_Type type, void *info); - - /* API calls here */ - /**************************************************************************/ /* General calls */ - EAPI void elm_init(int argc, char **argv); - EAPI void elm_shutdown(void); - EAPI void elm_run(void); - EAPI void elm_exit(void); - -/**************************************************************************/ - /* Generic Elm Object */ -#define Elm_Obj_Class_Methods \ - void (*del) (Elm_Obj *obj); \ - void (*ref) (Elm_Obj *obj); \ - void (*unref) (Elm_Obj *obj); \ - Elm_Cb *(*cb_add) (Elm_Obj *obj, Elm_Cb_Type type, Elm_Cb_Func func, void *data); \ - void (*child_add) (Elm_Obj *obj, Elm_Obj *child); \ - void (*unparent) (Elm_Obj *obj); \ - int (*hastype) (Elm_Obj *obj, Elm_Obj_Type type) -#define Elm_Obj_Class_All Elm_Obj_Class_Methods; \ - Elm_Obj_Type type; \ - void *clas; /* the obj class and parent classes */ \ - Elm_Obj *parent; \ - Evas_List *children; \ - Evas_List *cbs; \ - int refs; \ - unsigned char delete_me : 1; \ - unsigned char delete_deferred : 1 + EAPI void elm_init(int argc, char **argv); + EAPI void elm_shutdown(void); + EAPI void elm_run(void); + EAPI void elm_exit(void); - struct _Elm_Obj_Class - { - void *parent; - Elm_Obj_Type type; - Elm_Obj_Class_Methods; - }; - struct _Elm_Obj - { - Elm_Obj_Class_All; - }; -#define ELM_OBJ(o) ((Elm_Obj *)o) - -/**************************************************************************/ - /* Callback Object */ -#define Elm_Cb_Class_Methods -#define Elm_Cb_Class_All Elm_Obj_Class_All; Elm_Cb_Class_Methods; \ - Elm_Cb_Class_Methods; \ - Elm_Cb_Type cb_type; \ - Elm_Cb_Func func; \ - void *data; - struct _Elm_Cb_Class - { - void *parent; - Elm_Obj_Type type; - Elm_Cb_Class_Methods; - }; - struct _Elm_Cb - { - Elm_Cb_Class_All; - }; + 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); + EAPI void elm_win_title_set(Evas_Object *obj, const char *title); + EAPI void elm_win_autodel_set(Evas_Object *obj, Evas_Bool autod... [truncated message content] |
From: Enlightenment S. <no-...@en...> - 2008-10-08 06:38:30
|
Log: 1. fix scale property fetch 2. add hover object - beginning to work. will be used to pop up menus/options etc. Author: raster Date: 2008-10-07 23:38:20 -0700 (Tue, 07 Oct 2008) New Revision: 36515 Added: trunk/TMP/st/elementary/src/lib/elm_hover.c Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h trunk/TMP/st/elementary/src/lib/Makefile.am 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_widget.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2008-10-08 01:22:17 UTC (rev 36514) +++ trunk/TMP/st/elementary/data/themes/default.edc 2008-10-08 06:38:20 UTC (rev 36515) @@ -2120,13 +2120,61 @@ } /////////////////////////////////////////////////////////////////////////////// + group { name: "hover"; + images { + image: "bt_base1.png" COMP; + image: "bt_base2.png" COMP; + image: "bt_hilight.png" COMP; + image: "bt_shine.png" COMP; + } + parts { + part { name: "base"; + type: RECT; + mouse_events: 1; + description { state: "default" 0.0; + color: 0 0 0 200; + } + } + part { name: "box"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 255 255 255 200; + rel1.to: "elm.swallow.size"; + rel1.offset: -2 -2; + rel2.to: "elm.swallow.size"; + rel2.offset: 1 1; + } + } + part { name: "elm.swallow.offset"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 0.0 0.0; + } + } + part { name: "elm.swallow.size"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1.to: "elm.swallow.offset"; + rel1.relative: 1.0 1.0; + rel2.to: "elm.swallow.offset"; + rel2.relative: 1.0 1.0; + } + } + } + } + +/////////////////////////////////////////////////////////////////////////////// group { name: "contact"; images { image: "bt_base1.png" COMP; image: "bt_base2.png" COMP; image: "bt_hilight.png" COMP; image: "bt_shine.png" COMP; - } + } parts { part { name: "button_image"; mouse_events: 1; Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-08 01:22:17 UTC (rev 36514) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-08 06:38:20 UTC (rev 36515) @@ -425,7 +425,7 @@ static void my_bt_10(void *data, Evas_Object *obj, void *event_info) { - Evas_Object *win, *bg, *ly, *ck, *bt; + Evas_Object *win, *bg, *ly, *bt; char buf[PATH_MAX]; win = elm_win_add(NULL, "layout", ELM_WIN_BASIC); @@ -463,6 +463,50 @@ } static void +my_hover_bt_1(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *hv = data; + + evas_object_show(hv); +} + +static void +my_bt_11(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *bx, *bt, *hv; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "hover", ELM_WIN_BASIC); + elm_win_title_set(win, "Hover"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + hv = elm_hover_add(win); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Button"); + evas_object_smart_callback_add(bt, "clicked", my_hover_bt_1, hv); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + elm_hover_parent_set(hv, win); + elm_hover_target_set(hv, bt); + + 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); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *bx, *bt, *sc, *fr; @@ -625,6 +669,13 @@ elm_box_pack_end(bx, bt); evas_object_show(bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "Hover"); + evas_object_smart_callback_add(bt, "clicked", my_bt_11, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + /* set an initial window size */ evas_object_resize(win, 320, 320); /* show the window */ Modified: trunk/TMP/st/elementary/src/lib/Elementary.h =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-08 01:22:17 UTC (rev 36514) +++ trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-08 06:38:20 UTC (rev 36515) @@ -171,6 +171,12 @@ /* smart callbacks elm_win objects will call: */ + EAPI Evas_Object *elm_hover_add(Evas_Object *parent); + EAPI void elm_hover_target_set(Evas_Object *obj, Evas_Object *target); + EAPI void elm_hover_parent_set(Evas_Object *obj, Evas_Object *parent); + /* smart callbacks elm_win objects will call: + */ + // FIXME: fixes to do // * current sizing inefficient // * scroller could do with page up/down/left/right buttons and and idea of Modified: trunk/TMP/st/elementary/src/lib/Makefile.am =================================================================== --- trunk/TMP/st/elementary/src/lib/Makefile.am 2008-10-08 01:22:17 UTC (rev 36514) +++ trunk/TMP/st/elementary/src/lib/Makefile.am 2008-10-08 06:38:20 UTC (rev 36515) @@ -31,6 +31,7 @@ elm_table.c \ elm_clock.c \ elm_layout.c \ +elm_hover.c \ \ els_pan.c \ els_pan.h \ Added: trunk/TMP/st/elementary/src/lib/elm_hover.c Modified: trunk/TMP/st/elementary/src/lib/elm_main.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_main.c 2008-10-08 01:22:17 UTC (rev 36514) +++ trunk/TMP/st/elementary/src/lib/elm_main.c 2008-10-08 06:38:20 UTC (rev 36515) @@ -42,13 +42,15 @@ (_elm_config->engine == ELM_XRENDER_X11) || (_elm_config->engine == ELM_OPENGL_X11)) { - int val; + int val = 1000; ecore_x_init(NULL); if (ecore_x_window_prop_card32_get(ecore_x_window_root_first_get(), ecore_x_atom_get("ENLIGHTENMENT_SCALE"), - &val, 1)) - _elm_config->scale = (double)val / 1000.0; + &val, 1) > 0) + { + if (val > 0) _elm_config->scale = (double)val / 1000.0; + } } } Modified: trunk/TMP/st/elementary/src/lib/elm_priv.h =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_priv.h 2008-10-08 01:22:17 UTC (rev 36514) +++ trunk/TMP/st/elementary/src/lib/elm_priv.h 2008-10-08 06:38:20 UTC (rev 36515) @@ -47,6 +47,7 @@ EAPI void elm_widget_sub_object_add(Evas_Object *obj, Evas_Object *sobj); EAPI void elm_widget_sub_object_del(Evas_Object *obj, Evas_Object *sobj); EAPI void elm_widget_resize_object_set(Evas_Object *obj, Evas_Object *sobj); +EAPI void elm_widget_hover_object_set(Evas_Object *obj, Evas_Object *sobj); EAPI void elm_widget_can_focus_set(Evas_Object *obj, int can_focus); EAPI int elm_widget_can_focus_get(Evas_Object *obj); EAPI int elm_widget_focus_get(Evas_Object *obj); Modified: trunk/TMP/st/elementary/src/lib/elm_widget.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_widget.c 2008-10-08 01:22:17 UTC (rev 36514) +++ trunk/TMP/st/elementary/src/lib/elm_widget.c 2008-10-08 06:38:20 UTC (rev 36515) @@ -2,8 +2,8 @@ #include "elm_priv.h" #define SMART_NAME "e_widget" -#define API_ENTRY Smart_Data *sd; sd = evas_object_smart_data_get(obj); if ((!obj) || (!sd) || (evas_object_type_get(obj) && strcmp(evas_object_type_get(obj), SMART_NAME))) -#define INTERNAL_ENTRY Smart_Data *sd; sd = evas_object_smart_data_get(obj); if (!sd) return; +#define API_ENTRY Smart_Data *sd = evas_object_smart_data_get(obj); if ((!obj) || (!sd) || (evas_object_type_get(obj) && strcmp(evas_object_type_get(obj), SMART_NAME))) +#define INTERNAL_ENTRY Smart_Data *sd = evas_object_smart_data_get(obj); if (!sd) return; typedef struct _Smart_Data Smart_Data; struct _Smart_Data @@ -11,8 +11,8 @@ Evas_Object *parent_obj; Evas_Coord x, y, w, h; Evas_List *subobjs; - Evas_List *hovers; Evas_Object *resize_obj; + Evas_Object *hover_obj; void (*del_func) (Evas_Object *obj); void (*focus_func) (Evas_Object *obj); void (*activate_func) (Evas_Object *obj); @@ -44,6 +44,15 @@ /* local subsystem globals */ static Evas_Smart *_e_smart = NULL; +static void +_sub_obj_del(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Smart_Data *sd = data; + if (obj == sd->resize_obj) sd->resize_obj = NULL; + else if (obj == sd->hover_obj) sd->hover_obj = NULL; + else sd->subobjs = evas_list_remove(sd->subobjs, obj); +} + /* externally accessible functions */ EAPI Evas_Object * elm_widget_add(Evas *evas) @@ -147,14 +156,38 @@ elm_widget_resize_object_set(Evas_Object *obj, Evas_Object *sobj) { API_ENTRY return; - if (sd->resize_obj) evas_object_smart_member_del(sd->resize_obj); + if (sd->resize_obj) + { + evas_object_event_callback_del(sd->resize_obj, EVAS_CALLBACK_DEL, _sub_obj_del); + evas_object_smart_member_del(sd->resize_obj); + } sd->resize_obj = sobj; - evas_object_smart_member_add(sobj, obj); - _smart_reconfigure(sd); - evas_object_smart_callback_call(obj, "sub-object-add", sobj); + if (sd->resize_obj) + { + evas_object_smart_member_add(sobj, obj); + evas_object_event_callback_add(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd); + _smart_reconfigure(sd); + evas_object_smart_callback_call(obj, "sub-object-add", sobj); + } } EAPI void +elm_widget_hover_object_set(Evas_Object *obj, Evas_Object *sobj) +{ + API_ENTRY return; + if (sd->hover_obj) + { + evas_object_event_callback_del(sd->hover_obj, EVAS_CALLBACK_DEL, _sub_obj_del); + } + sd->hover_obj = sobj; + if (sd->hover_obj) + { + evas_object_event_callback_add(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd); + _smart_reconfigure(sd); + } +} + +EAPI void elm_widget_can_focus_set(Evas_Object *obj, int can_focus) { API_ENTRY return; @@ -439,7 +472,12 @@ { evas_object_move(sd->resize_obj, sd->x, sd->y); evas_object_resize(sd->resize_obj, sd->w, sd->h); - } + } + if (sd->hover_obj) + { + evas_object_move(sd->hover_obj, sd->x, sd->y); + evas_object_resize(sd->hover_obj, sd->w, sd->h); + } } static void @@ -464,10 +502,23 @@ INTERNAL_ENTRY; if (sd->del_func) sd->del_func(obj); + if (sd->resize_obj) + { + evas_object_event_callback_del(sd->resize_obj, EVAS_CALLBACK_DEL, _sub_obj_del); + sd->resize_obj = NULL; + evas_object_del(sd->resize_obj); + } + if (sd->hover_obj) + { + evas_object_event_callback_del(sd->hover_obj, EVAS_CALLBACK_DEL, _sub_obj_del); + sd->hover_obj = NULL; + evas_object_del(sd->hover_obj); + } while (sd->subobjs) { sobj = sd->subobjs->data; sd->subobjs = evas_list_remove_list(sd->subobjs, sd->subobjs); + evas_object_event_callback_del(sobj, EVAS_CALLBACK_DEL, _sub_obj_del); evas_object_del(sobj); } free(sd); |
From: Enlightenment S. <no-...@en...> - 2008-10-08 08:14:33
|
Log: and enable the 5 swallow regions (possibly limitless) of the hover and test Author: raster Date: 2008-10-08 01:14:25 -0700 (Wed, 08 Oct 2008) New Revision: 36516 Added: trunk/TMP/st/elementary/data/themes/shad_circ.png Modified: trunk/TMP/st/elementary/data/themes/Makefile.am trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/elm_box.c trunk/TMP/st/elementary/src/lib/elm_button.c trunk/TMP/st/elementary/src/lib/elm_frame.c trunk/TMP/st/elementary/src/lib/elm_hover.c trunk/TMP/st/elementary/src/lib/elm_layout.c trunk/TMP/st/elementary/src/lib/elm_scroller.c trunk/TMP/st/elementary/src/lib/elm_table.c trunk/TMP/st/elementary/src/lib/elm_toggle.c Modified: trunk/TMP/st/elementary/data/themes/Makefile.am =================================================================== --- trunk/TMP/st/elementary/data/themes/Makefile.am 2008-10-08 06:38:20 UTC (rev 36515) +++ trunk/TMP/st/elementary/data/themes/Makefile.am 2008-10-08 08:14:25 UTC (rev 36516) @@ -57,7 +57,8 @@ sb_runnerh.png \ sb_runnerv.png \ shelf_inset.png \ -tog_base.png +tog_base.png \ +shad_circ.png default.edj: Makefile $(EXTRA_DIST) $(EDJE_CC) $(EDJE_FLAGS) \ Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2008-10-08 06:38:20 UTC (rev 36515) +++ trunk/TMP/st/elementary/data/themes/default.edc 2008-10-08 08:14:25 UTC (rev 36516) @@ -2122,49 +2122,119 @@ /////////////////////////////////////////////////////////////////////////////// group { name: "hover"; images { - image: "bt_base1.png" COMP; - image: "bt_base2.png" COMP; - image: "bt_hilight.png" COMP; - image: "bt_shine.png" COMP; + image: "shad_circ.png" COMP; } parts { + part { name: "elm.swallow.offset"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 0.0 0.0; + } + } + part { name: "elm.swallow.size"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1.to: "elm.swallow.offset"; + rel1.relative: 1.0 1.0; + rel2.to: "elm.swallow.offset"; + rel2.relative: 1.0 1.0; + } + } part { name: "base"; type: RECT; mouse_events: 1; description { state: "default" 0.0; - color: 0 0 0 200; + color: 0 0 0 64; } } + part { name: "shad"; + mouse_events: 0; + description { state: "default" 0.0; + image.normal: "shad_circ.png"; + rel1.to: "elm.swallow.size"; + rel1.offset: -20 -20; + rel2.to: "elm.swallow.size"; + rel2.offset: 19 19; + fill.smooth: 0; + } + } part { name: "box"; type: RECT; mouse_events: 0; description { state: "default" 0.0; - color: 255 255 255 200; + color: 0 0 0 0; rel1.to: "elm.swallow.size"; rel1.offset: -2 -2; rel2.to: "elm.swallow.size"; rel2.offset: 1 1; } } - part { name: "elm.swallow.offset"; + part { name: "elm.swallow.slot.left"; type: SWALLOW; description { state: "default" 0.0; - align: 0.0 0.0; + align: 1.0 0.5; + rel1.to: "elm.swallow.slot.middle"; rel1.relative: 0.0 0.0; - rel2.relative: 0.0 0.0; + rel1.offset: -1 0; + rel2.to: "elm.swallow.slot.middle"; + rel2.relative: 0.0 1.0; + rel2.offset: -1 -1; } } - part { name: "elm.swallow.size"; + part { name: "elm.swallow.slot.right"; type: SWALLOW; description { state: "default" 0.0; - align: 0.0 0.0; - rel1.to: "elm.swallow.offset"; - rel1.relative: 1.0 1.0; - rel2.to: "elm.swallow.offset"; + align: 0.0 0.5; + rel1.to: "elm.swallow.slot.middle"; + rel1.relative: 1.0 0.0; + rel1.offset: 0 0; + rel2.to: "elm.swallow.slot.middle"; rel2.relative: 1.0 1.0; + rel2.offset: 0 -1; } } + part { name: "elm.swallow.slot.top"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.5 1.0; + rel1.to: "elm.swallow.slot.middle"; + rel1.relative: 0.0 0.0; + rel1.offset: 0 -1; + rel2.to: "elm.swallow.slot.middle"; + rel2.relative: 1.0 0.0; + rel2.offset: -1 -1; + } + } + part { name: "elm.swallow.slot.bottom"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.5 0.0; + rel1.to: "elm.swallow.slot.middle"; + rel1.relative: 0.0 1.0; + rel1.offset: 0 0; + rel2.to: "elm.swallow.slot.middle"; + rel2.relative: 1.0 1.0; + rel2.offset: -1 0; + } + } + part { name: "elm.swallow.slot.middle"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "elm.swallow.size"; + rel2.to: "elm.swallow.size"; + } + } } + programs { + program { name: "end"; + signal: "mouse,down,1"; + source: "base"; + action: SIGNAL_EMIT "elm,action,dismiss" ""; + } + } } /////////////////////////////////////////////////////////////////////////////// Added: trunk/TMP/st/elementary/data/themes/shad_circ.png Property changes on: trunk/TMP/st/elementary/data/themes/shad_circ.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-08 06:38:20 UTC (rev 36515) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-08 08:14:25 UTC (rev 36516) @@ -500,6 +500,46 @@ elm_hover_parent_set(hv, win); elm_hover_target_set(hv, bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "Popup"); + elm_hover_content_set(hv, "middle", bt); + evas_object_show(bt); + + bx = elm_box_add(win); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Top 1"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Top 2"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Top 3"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + evas_object_show(bx); + elm_hover_content_set(hv, "top", bx); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Bottom"); + elm_hover_content_set(hv, "bottom", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Left"); + elm_hover_content_set(hv, "left", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Right"); + elm_hover_content_set(hv, "right", bt); + evas_object_show(bt); + evas_object_size_hint_min_set(bg, 160, 160); evas_object_size_hint_max_set(bg, 640, 640); evas_object_resize(win, 320, 320); Modified: trunk/TMP/st/elementary/src/lib/elm_box.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_box.c 2008-10-08 06:38:20 UTC (rev 36515) +++ trunk/TMP/st/elementary/src/lib/elm_box.c 2008-10-08 08:14:25 UTC (rev 36516) @@ -97,30 +97,30 @@ elm_box_pack_start(Evas_Object *obj, Evas_Object *subobj) { Widget_Data *wd = elm_widget_data_get(obj); + elm_widget_sub_object_add(obj, subobj); _els_smart_box_pack_start(wd->box, subobj); - elm_widget_sub_object_add(obj, subobj); } EAPI void elm_box_pack_end(Evas_Object *obj, Evas_Object *subobj) { Widget_Data *wd = elm_widget_data_get(obj); + elm_widget_sub_object_add(obj, subobj); _els_smart_box_pack_end(wd->box, subobj); - elm_widget_sub_object_add(obj, subobj); } EAPI void elm_box_pack_before(Evas_Object *obj, Evas_Object *subobj, Evas_Object *before) { Widget_Data *wd = elm_widget_data_get(obj); + elm_widget_sub_object_add(obj, subobj); _els_smart_box_pack_before(wd->box, subobj, before); - elm_widget_sub_object_add(obj, subobj); } EAPI void elm_box_pack_after(Evas_Object *obj, Evas_Object *subobj, Evas_Object *after) { Widget_Data *wd = elm_widget_data_get(obj); + elm_widget_sub_object_add(obj, subobj); _els_smart_box_pack_after(wd->box, subobj, after); - elm_widget_sub_object_add(obj, subobj); } Modified: trunk/TMP/st/elementary/src/lib/elm_button.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_button.c 2008-10-08 06:38:20 UTC (rev 36515) +++ trunk/TMP/st/elementary/src/lib/elm_button.c 2008-10-08 08:14:25 UTC (rev 36516) @@ -117,9 +117,9 @@ wd->icon = icon; if (icon) { + elm_widget_sub_object_add(obj, icon); edje_object_part_swallow(wd->btn, "elm.swallow.content", icon); edje_object_signal_emit(wd->btn, "elm,state,icon,visible", "elm"); - elm_widget_sub_object_add(obj, icon); evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); _sizing_eval(obj); Modified: trunk/TMP/st/elementary/src/lib/elm_frame.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_frame.c 2008-10-08 06:38:20 UTC (rev 36515) +++ trunk/TMP/st/elementary/src/lib/elm_frame.c 2008-10-08 08:14:25 UTC (rev 36516) @@ -94,8 +94,8 @@ wd->content = content; if (content) { + elm_widget_sub_object_add(obj, content); edje_object_part_swallow(wd->frm, "elm.swallow.content", content); - elm_widget_sub_object_add(obj, content); evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); _sizing_eval(obj); Modified: trunk/TMP/st/elementary/src/lib/elm_hover.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_hover.c 2008-10-08 06:38:20 UTC (rev 36515) +++ trunk/TMP/st/elementary/src/lib/elm_hover.c 2008-10-08 08:14:25 UTC (rev 36516) @@ -28,7 +28,6 @@ _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); -/* while (wd->subs) { Subinfo *si = wd->subs->data; @@ -36,7 +35,6 @@ evas_stringshare_del(si->swallow); free(si); } - */ free(wd); } @@ -51,9 +49,9 @@ evas_object_move(wd->cov, x, y); evas_object_resize(wd->cov, w, h); evas_object_size_hint_min_set(wd->offset, x2 - x, y2 - y); - edje_object_part_swallow(wd->hov, "elm.swallow.offset", wd->offset); + edje_object_part_swallow(wd->cov, "elm.swallow.offset", wd->offset); evas_object_size_hint_min_set(wd->size, w2, h2); - edje_object_part_swallow(wd->hov, "elm.swallow.size", wd->size); + edje_object_part_swallow(wd->cov, "elm.swallow.size", wd->size); } static void @@ -61,18 +59,15 @@ { Widget_Data *wd = elm_widget_data_get(data); Evas_List *l; -/* for (l = wd->subs; l; l = l->next) { Subinfo *si = l->data; if (si->obj == obj) { edje_object_part_swallow(wd->hov, si->swallow, obj); - _sizing_eval(obj); break; } } - */ } static void @@ -82,7 +77,6 @@ Evas_Object *sub = event_info; Evas_List *l; -/* for (l = wd->subs; l; l = l->next) { Subinfo *si = l->data; @@ -96,7 +90,6 @@ break; } } - */ } static void @@ -126,7 +119,7 @@ } static void -_cov_down(void *data, Evas *e, Evas_Object *obj, void *event_info) +_signal_dismiss(void *data, Evas_Object *obj, const char *emission, const char *source) { Widget_Data *wd = elm_widget_data_get(data); evas_object_smart_callback_call(data, "clicked", NULL); @@ -148,6 +141,7 @@ wd->hov = evas_object_rectangle_add(e); evas_object_color_set(wd->hov, 0, 0, 0, 0); + evas_object_pass_events_set(wd->hov, 1); elm_widget_resize_object_set(obj, wd->hov); evas_object_event_callback_add(wd->hov, EVAS_CALLBACK_MOVE, _hov_move, obj); evas_object_event_callback_add(wd->hov, EVAS_CALLBACK_RESIZE, _hov_resize, obj); @@ -157,18 +151,20 @@ wd->cov = edje_object_add(e); _elm_theme_set(wd->cov, "hover", "hover"); elm_widget_sub_object_add(obj, wd->cov); - evas_object_event_callback_add(wd->cov, EVAS_CALLBACK_MOUSE_DOWN, _cov_down, obj); + edje_object_signal_callback_add(wd->cov, "elm,action,dismiss", "", _signal_dismiss, obj); wd->offset = evas_object_rectangle_add(e); + evas_object_pass_events_set(wd->offset, 1); evas_object_color_set(wd->offset, 0, 0, 0, 0); elm_widget_sub_object_add(obj, wd->offset); wd->size = evas_object_rectangle_add(e); + evas_object_pass_events_set(wd->size, 1); evas_object_color_set(wd->size, 0, 0, 0, 0); elm_widget_sub_object_add(obj, wd->size); - edje_object_part_swallow(wd->hov, "elm.swallow.offset", wd->offset); - edje_object_part_swallow(wd->hov, "elm.swallow.size", wd->size); + edje_object_part_swallow(wd->cov, "elm.swallow.offset", wd->offset); + edje_object_part_swallow(wd->cov, "elm.swallow.size", wd->size); evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); @@ -194,18 +190,19 @@ _sizing_eval(obj); } -/* EAPI void elm_hover_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content) { Widget_Data *wd = elm_widget_data_get(obj); Subinfo *si; Evas_List *l; - + char buf[1024]; + + snprintf(buf, sizeof(buf), "elm.swallow.slot.%s", swallow); for (l = wd->subs; l; l = l->next) { si = l->data; - if (!strcmp(swallow, si->swallow)) + if (!strcmp(buf, si->swallow)) { if (content == si->obj) return; elm_widget_sub_object_del(obj, si->obj); @@ -214,15 +211,14 @@ } if (content) { - edje_object_part_swallow(wd->hov, swallow, content); elm_widget_sub_object_add(obj, content); + edje_object_part_swallow(wd->cov, buf, content); evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); si = ELM_NEW(Subinfo); - si->swallow = evas_stringshare_add(swallow); + si->swallow = evas_stringshare_add(buf); si->obj = content; wd->subs = evas_list_append(wd->subs, si); _sizing_eval(obj); } } -*/ Modified: trunk/TMP/st/elementary/src/lib/elm_layout.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_layout.c 2008-10-08 06:38:20 UTC (rev 36515) +++ trunk/TMP/st/elementary/src/lib/elm_layout.c 2008-10-08 08:14:25 UTC (rev 36516) @@ -134,8 +134,8 @@ } if (content) { + elm_widget_sub_object_add(obj, content); edje_object_part_swallow(wd->lay, swallow, content); - elm_widget_sub_object_add(obj, content); evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); si = ELM_NEW(Subinfo); Modified: trunk/TMP/st/elementary/src/lib/elm_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_scroller.c 2008-10-08 06:38:20 UTC (rev 36515) +++ trunk/TMP/st/elementary/src/lib/elm_scroller.c 2008-10-08 08:14:25 UTC (rev 36516) @@ -108,10 +108,10 @@ wd->content = content; if (content) { + elm_widget_sub_object_add(obj, content); elm_smart_scroller_child_set(wd->scr, content); evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); - elm_widget_sub_object_add(obj, content); _sizing_eval(obj); } } Modified: trunk/TMP/st/elementary/src/lib/elm_table.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_table.c 2008-10-08 06:38:20 UTC (rev 36515) +++ trunk/TMP/st/elementary/src/lib/elm_table.c 2008-10-08 08:14:25 UTC (rev 36516) @@ -90,6 +90,6 @@ elm_table_pack(Evas_Object *obj, Evas_Object *subobj, int x, int y, int w, int h) { Widget_Data *wd = elm_widget_data_get(obj); + elm_widget_sub_object_add(obj, subobj); _els_smart_table_pack(wd->tbl, subobj, x, y, w, h); - elm_widget_sub_object_add(obj, subobj); } Modified: trunk/TMP/st/elementary/src/lib/elm_toggle.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_toggle.c 2008-10-08 06:38:20 UTC (rev 36515) +++ trunk/TMP/st/elementary/src/lib/elm_toggle.c 2008-10-08 08:14:25 UTC (rev 36516) @@ -132,9 +132,9 @@ wd->icon = icon; if (icon) { + elm_widget_sub_object_add(obj, icon); edje_object_part_swallow(wd->tgl, "elm.swallow.content", icon); edje_object_signal_emit(wd->tgl, "elm,state,icon,visible", "elm"); - elm_widget_sub_object_add(obj, icon); evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); _sizing_eval(obj); |
From: Enlightenment S. <no-...@en...> - 2008-10-09 08:10:25
|
Log: hover does styles now and popout style is animated. Author: raster Date: 2008-10-09 01:10:20 -0700 (Thu, 09 Oct 2008) New Revision: 36541 Added: trunk/TMP/st/elementary/data/themes/bt_dis_base.png trunk/TMP/st/elementary/data/themes/bt_dis_hilight.png Modified: trunk/TMP/st/elementary/data/themes/Makefile.am trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h trunk/TMP/st/elementary/src/lib/elm_hover.c Modified: trunk/TMP/st/elementary/data/themes/Makefile.am =================================================================== --- trunk/TMP/st/elementary/data/themes/Makefile.am 2008-10-09 00:46:29 UTC (rev 36540) +++ trunk/TMP/st/elementary/data/themes/Makefile.am 2008-10-09 08:10:20 UTC (rev 36541) @@ -58,7 +58,9 @@ sb_runnerv.png \ shelf_inset.png \ tog_base.png \ -shad_circ.png +shad_circ.png \ +bt_dis_base.png \ +bt_dis_hilight.png default.edj: Makefile $(EXTRA_DIST) $(EDJE_CC) $(EDJE_FLAGS) \ Added: trunk/TMP/st/elementary/data/themes/bt_dis_base.png Property changes on: trunk/TMP/st/elementary/data/themes/bt_dis_base.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/bt_dis_hilight.png Property changes on: trunk/TMP/st/elementary/data/themes/bt_dis_hilight.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2008-10-09 00:46:29 UTC (rev 36540) +++ trunk/TMP/st/elementary/data/themes/default.edc 2008-10-09 08:10:20 UTC (rev 36541) @@ -2195,6 +2195,406 @@ } /////////////////////////////////////////////////////////////////////////////// + group { name: "elm/hover/base/popout"; + images { + image: "shad_circ.png" COMP; + image: "bt_dis_base.png" COMP; + image: "bt_dis_hilight.png" COMP; + } + parts { + part { name: "elm.swallow.offset"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 0.0 0.0; + } + } + part { name: "elm.swallow.size"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.0 0.0; + rel1.to: "elm.swallow.offset"; + rel1.relative: 1.0 1.0; + rel2.to: "elm.swallow.offset"; + rel2.relative: 1.0 1.0; + } + } + part { name: "base"; + type: RECT; + mouse_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + } + description { state: "visible" 0.0; + inherit: "default" 1.0; + color: 0 0 0 64; + } + } + part { name: "leftclip"; + type: RECT; + description { state: "default" 0.0; + rel2.to_x: "pop"; + rel2.relative: 0.0 1.0; + rel2.offset: 1 -1; + } + } + part { name: "left"; + clip_to: "leftclip"; + description { state: "default" 0.0; + visible: 0; + rel1.to: "elm.swallow.slot.left"; + rel1.offset: -5 -5; + rel2.to: "elm.swallow.slot.left"; + rel2.offset: 4 4; + image { + normal: "bt_dis_base.png"; + border: 4 4 4 4; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "elm.swallow.slot.left"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.0 0.5; + rel1.to: "elm.swallow.slot.middle"; + rel1.relative: 0.0 0.0; + rel1.offset: -1 0; + rel2.to: "elm.swallow.slot.middle"; + rel2.relative: 0.0 1.0; + rel2.offset: -1 -1; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + rel1.offset: -7 0; + rel2.offset: -7 -1; + align: 1.0 0.5; + } + } + part { name: "leftover"; + clip_to: "leftclip"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "left"; + rel2.to: "left"; + rel2.relative: 1.0 0.5; + image { + normal: "bt_dis_hilight.png"; + border: 4 4 4 0; + } + } + } + part { name: "rightclip"; + type: RECT; + description { state: "default" 0.0; + rel1.to_x: "pop"; + rel1.relative: 1.0 0.0; + rel1.offset: -2 0; + } + } + part { name: "right"; + clip_to: "rightclip"; + description { state: "default" 0.0; + visible: 0; + rel1.to: "elm.swallow.slot.right"; + rel1.offset: -5 -5; + rel2.to: "elm.swallow.slot.right"; + rel2.offset: 4 4; + image { + normal: "bt_dis_base.png"; + border: 4 4 4 4; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "elm.swallow.slot.right"; + type: SWALLOW; + description { state: "default" 0.0; + align: 1.0 0.5; + rel1.to: "elm.swallow.slot.middle"; + rel1.relative: 1.0 0.0; + rel1.offset: 0 0; + rel2.to: "elm.swallow.slot.middle"; + rel2.relative: 1.0 1.0; + rel2.offset: 0 -1; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + rel1.offset: 6 0; + rel2.offset: 6 -1; + align: 0.0 0.5; + } + } + part { name: "rightover"; + clip_to: "rightclip"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "right"; + rel2.to: "right"; + rel2.relative: 1.0 0.5; + image { + normal: "bt_dis_hilight.png"; + border: 4 4 4 0; + } + } + } + part { name: "topclip"; + type: RECT; + description { state: "default" 0.0; + rel2.to_y: "pop"; + rel2.relative: 1.0 0.0; + rel2.offset: -1 1; + } + } + part { name: "top"; + clip_to: "topclip"; + description { state: "default" 0.0; + visible: 0; + rel1.to: "elm.swallow.slot.top"; + rel1.offset: -5 -5; + rel2.to: "elm.swallow.slot.top"; + rel2.offset: 4 4; + image { + normal: "bt_dis_base.png"; + border: 4 4 4 4; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "elm.swallow.slot.top"; + type: SWALLOW; + clip_to: "topclip"; + description { state: "default" 0.0; + visible: 1; + align: 0.5 0.0; + rel1.to: "elm.swallow.slot.middle"; + rel1.relative: 0.0 0.0; + rel1.offset: 0 -1; + rel2.to: "elm.swallow.slot.middle"; + rel2.relative: 1.0 0.0; + rel2.offset: -1 -1; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + rel1.offset: 0 -7; + rel2.offset: -1 -7; + align: 0.5 1.0; + } + } + part { name: "topover"; + clip_to: "topclip"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "top"; + rel2.to: "top"; + rel2.relative: 1.0 0.5; + image { + normal: "bt_dis_hilight.png"; + border: 4 4 4 0; + } + } + } + part { name: "bottomclip"; + type: RECT; + description { state: "default" 0.0; + rel1.to_y: "pop"; + rel1.relative: 0.0 1.0; + rel1.offset: -1 -2; + } + } + part { name: "bottom"; + clip_to: "bottomclip"; + description { state: "default" 0.0; + visible: 0; + rel1.to: "elm.swallow.slot.bottom"; + rel1.offset: -5 -5; + rel2.to: "elm.swallow.slot.bottom"; + rel2.offset: 4 4; + image { + normal: "bt_dis_base.png"; + border: 4 4 4 4; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "elm.swallow.slot.bottom"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.5 1.0; + rel1.to: "elm.swallow.slot.middle"; + rel1.relative: 0.0 1.0; + rel1.offset: 0 0; + rel2.to: "elm.swallow.slot.middle"; + rel2.relative: 1.0 1.0; + rel2.offset: -1 0; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + rel1.offset: 0 6; + rel2.offset: -1 6; + align: 0.5 0.0; + } + } + part { name: "bottomover"; + clip_to: "bottomclip"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "bottom"; + rel2.to: "bottom"; + rel2.relative: 1.0 0.5; + image { + normal: "bt_dis_hilight.png"; + border: 4 4 4 0; + } + } + } + part { name: "shad"; + mouse_events: 0; + description { state: "default" 0.0; + image.normal: "shad_circ.png"; + rel1.to: "elm.swallow.size"; + rel1.offset: -64 -64; + rel2.to: "elm.swallow.size"; + rel2.offset: 63 63; + fill.smooth: 0; + } + } + part { name: "pop"; + mouse_events: 1; + description { state: "default" 0.0; + rel1.to: "elm.swallow.slot.middle"; + rel1.offset: -5 -5; + rel2.to: "elm.swallow.slot.middle"; + rel2.offset: 4 4; + image { + normal: "bt_dis_base.png"; + border: 4 4 4 4; + } + } + } + part { name: "elm.swallow.slot.middle"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "elm.swallow.size"; + rel2.to: "elm.swallow.size"; + } + } + part { name: "popover"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "pop"; + rel2.to: "pop"; + rel2.relative: 1.0 0.5; + image { + normal: "bt_dis_hilight.png"; + border: 4 4 4 0; + } + } + } + } + programs { + program { name: "end"; + signal: "mouse,down,1"; + source: "base"; + action: SIGNAL_EMIT "elm,action,dismiss" ""; + } + + program { name: "show"; + signal: "elm,action,show"; + source: "elm"; + action: STATE_SET "visible" 0.0; +// transition: DECELERATE 0.5; + target: "base"; + } + program { name: "hide"; + signal: "elm,action,hide"; + source: "elm"; + action: STATE_SET "default" 0.0; +// transition: DECELERATE 0.5; + target: "base"; + } + + program { name: "leftshow"; + signal: "elm,action,slot,left,show"; + source: "elm"; + action: STATE_SET "visible" 0.0; + transition: DECELERATE 0.5; + target: "left"; + target: "elm.swallow.slot.left"; + } + program { name: "lefthide"; + signal: "elm,action,slot,left,hide"; + source: "elm"; + action: STATE_SET "default" 0.0; + transition: DECELERATE 0.5; + target: "left"; + target: "elm.swallow.slot.left"; + } + program { name: "rightshow"; + signal: "elm,action,slot,right,show"; + source: "elm"; + action: STATE_SET "visible" 0.0; + transition: DECELERATE 0.5; + target: "right"; + target: "elm.swallow.slot.right"; + } + program { name: "righthide"; + signal: "elm,action,slot,right,hide"; + source: "elm"; + action: STATE_SET "default" 0.0; + transition: DECELERATE 0.5; + target: "right"; + target: "elm.swallow.slot.right"; + } + program { name: "topshow"; + signal: "elm,action,slot,top,show"; + source: "elm"; + action: STATE_SET "visible" 0.0; + transition: DECELERATE 0.5; + target: "top"; + target: "elm.swallow.slot.top"; + } + program { name: "tophide"; + signal: "elm,action,slot,top,hide"; + source: "elm"; + action: STATE_SET "default" 0.0; + transition: DECELERATE 0.5; + target: "top"; + target: "elm.swallow.slot.top"; + } + program { name: "bottomshow"; + signal: "elm,action,slot,bottom,show"; + source: "elm"; + action: STATE_SET "visible" 0.0; + transition: DECELERATE 0.5; + target: "bottom"; + target: "elm.swallow.slot.bottom"; + } + program { name: "bottomhide"; + signal: "elm,action,slot,bottom,hide"; + source: "elm"; + action: STATE_SET "default" 0.0; + transition: DECELERATE 0.5; + target: "bottom"; + target: "elm.swallow.slot.bottom"; + } + } + } + +/////////////////////////////////////////////////////////////////////////////// group { name: "elm/icon/base/default"; min: 10 10; images.image: "bt_base1.png" COMP; parts { part { name: "base"; description { state: "default" 0.0; aspect: 1.0 1.0; Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-09 00:46:29 UTC (rev 36540) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-09 08:10:20 UTC (rev 36541) @@ -550,6 +550,86 @@ } static void +my_bt_12(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *bx, *bt, *hv, *ic; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "hover2", ELM_WIN_BASIC); + elm_win_title_set(win, "Hover 2"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + hv = elm_hover_add(win); + elm_hover_style_set(hv, "popout"); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Button"); + evas_object_smart_callback_add(bt, "clicked", my_hover_bt_1, hv); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + elm_hover_parent_set(hv, win); + elm_hover_target_set(hv, bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Popup"); + elm_hover_content_set(hv, "middle", bt); + evas_object_show(bt); + + bx = elm_box_add(win); + + 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_icon_scale_set(ic, 0, 0); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + bt = elm_button_add(win); + elm_button_label_set(bt, "Top 1"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "Top 2"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "Top 3"); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + evas_object_show(bx); + elm_hover_content_set(hv, "top", bx); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Bot"); + elm_hover_content_set(hv, "bottom", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Left"); + elm_hover_content_set(hv, "left", bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Right"); + elm_hover_content_set(hv, "right", bt); + evas_object_show(bt); + + 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); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *bx, *bt, *sc, *fr; @@ -719,6 +799,13 @@ elm_box_pack_end(bx, bt); evas_object_show(bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "Hover 2"); + evas_object_smart_callback_add(bt, "clicked", my_bt_12, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + /* set an initial window size */ evas_object_resize(win, 320, 320); /* show the window */ Modified: trunk/TMP/st/elementary/src/lib/Elementary.h =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-09 00:46:29 UTC (rev 36540) +++ trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-09 08:10:20 UTC (rev 36541) @@ -176,6 +176,7 @@ EAPI void elm_hover_target_set(Evas_Object *obj, Evas_Object *target); EAPI void elm_hover_parent_set(Evas_Object *obj, Evas_Object *parent); EAPI void elm_hover_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content); + EAPI void elm_hover_style_set(Evas_Object *obj, const char *style); /* smart callbacks called: */ Modified: trunk/TMP/st/elementary/src/lib/elm_hover.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_hover.c 2008-10-09 00:46:29 UTC (rev 36540) +++ trunk/TMP/st/elementary/src/lib/elm_hover.c 2008-10-09 08:10:20 UTC (rev 36541) @@ -110,14 +110,42 @@ _hov_show(void *data, Evas *e, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(data); + Evas_List *l; + // FIXME: use signals for show for hov evas_object_show(wd->cov); + edje_object_signal_emit(wd->cov, "elm,action,show", "elm"); + for (l = wd->subs; l; l = l->next) + { + Subinfo *si = l->data; + char buf[1024]; + if (!strncmp(si->swallow, "elm.swallow.slot.", 17)) + { + snprintf(buf, sizeof(buf), "elm,action,slot,%s,show", + si->swallow + 17); + edje_object_signal_emit(wd->cov, buf, "elm"); + } + } } static void _hov_hide(void *data, Evas *e, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(data); + Evas_List *l; + // FIXME: use signals for hide for hov + edje_object_signal_emit(wd->cov, "elm,action,hide", "elm"); evas_object_hide(wd->cov); + for (l = wd->subs; l; l = l->next) + { + Subinfo *si = l->data; + char buf[1024]; + if (!strncmp(si->swallow, "elm.swallow.slot.", 17)) + { + snprintf(buf, sizeof(buf), "elm,action,slot,%s,hide", + si->swallow + 17); + edje_object_signal_emit(wd->cov, buf, "elm"); + } + } } static void @@ -288,3 +316,11 @@ _sizing_eval(obj); } } + +EAPI void +elm_hover_style_set(Evas_Object *obj, const char *style) +{ + Widget_Data *wd = elm_widget_data_get(obj); + _elm_theme_set(wd->cov, "hover", "base", style); + _sizing_eval(obj); +} |
From: Enlightenment S. <no-...@en...> - 2008-10-15 09:58:49
|
Log: more entry testing and support. Author: raster Date: 2008-10-15 02:58:44 -0700 (Wed, 15 Oct 2008) New Revision: 36666 Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h trunk/TMP/st/elementary/src/lib/elm_entry.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2008-10-15 09:58:25 UTC (rev 36665) +++ trunk/TMP/st/elementary/data/themes/default.edc 2008-10-15 09:58:44 UTC (rev 36666) @@ -2662,6 +2662,49 @@ } /////////////////////////////////////////////////////////////////////////////// + group { name: "elm/entry/base/default"; + styles + { + style { name: "entry_textblock_style"; + base: "font=Sans font_size=10 align=left color=#000 wrap=word"; + tag: "br" "\n"; + tag: "tab" "\t"; + tag: "em" "+ font=Sans:style=Oblique"; + tag: "b" "+ font=Sans:style=Bold"; + tag: "link" "+ color=#800 underline=on underline_color=#8008"; + tag: "hilight" "+ font=Sans:style=Bold"; + } + } + parts { + part { name: "elm.text"; + type: TEXTBLOCK; + mouse_events: 1; + scale: 1; + entry_mode: EDITABLE; + multiline: 1; +// source: "X"; // selection under +// source2: "X"; // selection over + source3: "elm/button/base/default"; // cursor under +// source4: "X"; // cursor over + description { state: "default" 0.0; + text { + style: "entry_textblock_style"; + min: 1 1; + } + } + } + } + programs { + program { name: "focus"; + signal: "load"; + source: ""; + action: FOCUS_SET; + target: "elm.text"; + } + } + } + +/////////////////////////////////////////////////////////////////////////////// group { name: "elm/icon/base/default"; min: 10 10; images.image: "bt_base1.png" COMP; parts { part { name: "base"; description { state: "default" 0.0; aspect: 1.0 1.0; Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-15 09:58:25 UTC (rev 36665) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-15 09:58:44 UTC (rev 36666) @@ -630,6 +630,70 @@ } static void +my_entry_bt_1(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *en = data; +} + +static void +my_entry_bt_2(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *en = data; + printf("TEXT:\n"); + printf("%s\n", + elm_entry_entry_get(en)); +} + +static void +my_bt_13(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *bx, *bt, *en; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "entry", ELM_WIN_BASIC); + elm_win_title_set(win, "Entry"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Clear"); + evas_object_smart_callback_add(bt, "clicked", my_entry_bt_1, en); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + en = elm_entry_add(win); + elm_entry_entry_set(en, + "This is an entry widget in this window that<br>" + "uses markup <b>like this</b> for styling and<br>" + "formatting <em>like this</em>, as well as<br>" + "<a href=X><link>links in the text</link></a>, so enter text<br>" + "in here to edit it."); + evas_object_size_hint_weight_set(en, 1.0, 1.0); + evas_object_size_hint_align_set(en, -1.0, -1.0); + elm_box_pack_end(bx, en); + evas_object_show(en); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Print"); + evas_object_smart_callback_add(bt, "clicked", my_entry_bt_2, en); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + elm_widget_focus_set(en, 1); + + evas_object_show(win); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *bx, *bt, *sc, *fr; @@ -806,6 +870,13 @@ elm_box_pack_end(bx, bt); evas_object_show(bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "Entry"); + evas_object_smart_callback_add(bt, "clicked", my_bt_13, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + /* set an initial window size */ evas_object_resize(win, 320, 320); /* show the window */ Modified: trunk/TMP/st/elementary/src/lib/Elementary.h =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-15 09:58:25 UTC (rev 36665) +++ trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-15 09:58:44 UTC (rev 36666) @@ -181,7 +181,9 @@ */ EAPI Evas_Object *elm_entry_add(Evas_Object *parent); - + EAPI void elm_entry_entry_set(Evas_Object *obj, const char *entry); + EAPI const char *elm_entry_entry_get(Evas_Object *obj); + // FIXME: fixes to do // * current sizing tree inefficient // * scroller could do with page up/down/left/right buttons and and idea of Modified: trunk/TMP/st/elementary/src/lib/elm_entry.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_entry.c 2008-10-15 09:58:25 UTC (rev 36665) +++ trunk/TMP/st/elementary/src/lib/elm_entry.c 2008-10-15 09:58:44 UTC (rev 36666) @@ -64,3 +64,10 @@ edje_object_part_text_set(wd->ent, "elm.text", entry); _sizing_eval(obj); } + +EAPI const char * +elm_entry_entry_get(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + return edje_object_part_text_get(wd->ent, "elm.text"); +} |
From: Enlightenment S. <no-...@en...> - 2008-10-17 06:41:13
|
Log: and support/test the new edje entry stuff. pretyt solid i think. Author: raster Date: 2008-10-16 23:41:07 -0700 (Thu, 16 Oct 2008) New Revision: 36742 Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/elm_entry.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2008-10-17 06:40:46 UTC (rev 36741) +++ trunk/TMP/st/elementary/data/themes/default.edc 2008-10-17 06:41:07 UTC (rev 36742) @@ -2685,7 +2685,9 @@ source: "elm/entry/selection/default"; // selection under // source2: "X"; // selection over // source3: "X"; // cursor under - source4: "elm/entry/cursor/default"; // cursor under + source4: "elm/entry/cursor/default"; // cursorover + source5: "elm/entry/anchor/default"; // anchor under +// source6: "X"; // anchor over description { state: "default" 0.0; text { style: "entry_textblock_style"; @@ -2835,6 +2837,18 @@ } } } + + group { name: "elm/entry/anchor/default"; + parts { + part { name: "bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + color: 128 0 0 64; + } + } + } + } /////////////////////////////////////////////////////////////////////////////// group { name: "elm/icon/base/default"; min: 10 10; images.image: "bt_base1.png" COMP; parts { part { name: "base"; Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-17 06:40:46 UTC (rev 36741) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-17 06:41:07 UTC (rev 36742) @@ -686,8 +686,10 @@ "This is an entry widget in this window that<br>" "uses markup <b>like this</> for styling and<br>" "formatting <em>like this</>, as well as<br>" - "<+a href=X><link>links in the text</></>, so enter text<br>" - "in here to edit it."); + "<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."); evas_object_size_hint_weight_set(en, 1.0, 1.0); evas_object_size_hint_align_set(en, -1.0, -1.0); elm_box_pack_end(bx, en); Modified: trunk/TMP/st/elementary/src/lib/elm_entry.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_entry.c 2008-10-17 06:40:46 UTC (rev 36741) +++ trunk/TMP/st/elementary/src/lib/elm_entry.c 2008-10-17 06:41:07 UTC (rev 36742) @@ -104,11 +104,50 @@ _signal_cursor_changed(void *data, Evas_Object *obj, const char *emission, const char *source) { Widget_Data *wd = elm_widget_data_get(data); + Evas_Coord cx, cy, cw, ch; evas_object_smart_callback_call(data, "cursor,changed", NULL); + // FIXME: handle auto-scroll within parent (get cursor - if not visible // jump so it is) + edje_object_part_text_cursor_geometry_get(wd->ent, "elm.text", &cx, &cy, &cw, &ch); + printf("CURSOR: @%i+%i %ix%i\n", cx, cy, cw, ch); } +static void +_signal_anchor_down(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + printf("DOWN %s\n", emission); +} + +static void +_signal_anchor_up(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + printf("UP %s\n", emission); +} + +static void +_signal_anchor_move(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + printf("MOVE %s\n", emission); +} + +static void +_signal_anchor_in(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + printf("IN %s\n", emission); +} + +static void +_signal_anchor_out(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + printf("OUT %s\n", emission); +} + EAPI Evas_Object * elm_entry_add(Evas_Object *parent) { @@ -134,6 +173,11 @@ edje_object_signal_callback_add(wd->ent, "entry,copy,notify", "elm.text", _signal_entry_copy_notify, obj); edje_object_signal_callback_add(wd->ent, "entry,cut,notify", "elm.text", _signal_entry_cut_notify, obj); edje_object_signal_callback_add(wd->ent, "cursor,changed", "elm.text", _signal_cursor_changed, obj); + edje_object_signal_callback_add(wd->ent, "anchor,mouse,down,*", "elm.text", _signal_anchor_down, obj); + edje_object_signal_callback_add(wd->ent, "anchor,mouse,up,*", "elm.text", _signal_anchor_up, obj); + edje_object_signal_callback_add(wd->ent, "anchor,mouse,move,*", "elm.text", _signal_anchor_move, obj); + edje_object_signal_callback_add(wd->ent, "anchor,mouse,in,*", "elm.text", _signal_anchor_in, obj); + edje_object_signal_callback_add(wd->ent, "anchor,mouse,out,*", "elm.text", _signal_anchor_out, obj); elm_widget_resize_object_set(obj, wd->ent); return obj; } @@ -143,6 +187,14 @@ { Widget_Data *wd = elm_widget_data_get(obj); edje_object_part_text_set(wd->ent, "elm.text", entry); + + // debug + { + Evas_List *l, *an; + an = edje_object_part_text_anchor_list_get(wd->ent, "elm.text"); + for (l = an; l; l = l->next) + printf("ANCHOR: %s\n", l->data); + } _sizing_eval(obj); } |
From: Enlightenment S. <no-...@en...> - 2008-10-21 12:59:09
|
Log: first composite widget - a simple notepad widget - loads (and saves) to a given filename. done for you. just tell it the file. Author: raster Date: 2008-10-21 05:01:00 -0700 (Tue, 21 Oct 2008) New Revision: 36925 Added: trunk/TMP/st/elementary/data/themes/icon_apps.png trunk/TMP/st/elementary/data/themes/icon_arrow_down.png trunk/TMP/st/elementary/data/themes/icon_arrow_left.png trunk/TMP/st/elementary/data/themes/icon_arrow_right.png trunk/TMP/st/elementary/data/themes/icon_arrow_up.png trunk/TMP/st/elementary/data/themes/icon_close.png trunk/TMP/st/elementary/data/themes/icon_home.png trunk/TMP/st/elementary/src/lib/elc_notepad.c Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h trunk/TMP/st/elementary/src/lib/Makefile.am Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2008-10-21 11:59:47 UTC (rev 36924) +++ trunk/TMP/st/elementary/data/themes/default.edc 2008-10-21 12:01:00 UTC (rev 36925) @@ -327,6 +327,8 @@ signal: "load"; source: ""; script { + set_state(PART:"sb_hbar_clip", "hidden", 0.0); + set_state(PART:"sb_vbar_clip", "hidden", 0.0); set_int(sbvis_h, 0); set_int(sbvis_v, 0); set_int(sbvis_timer, 0); @@ -468,6 +470,15 @@ aspect_preference: VERTICAL; rel2.offset: 4 -5; } + description { state: "icononly" 0.0; + inherit: "default" 0.0; + visible: 1; + align: 0.5 0.5; + aspect: 1.0 1.0; + rel2.offset: -5 -5; + rel2.relative: 1.0 1.0; + aspect_preference: VERTICAL; + } } part { name: "elm.text"; @@ -522,14 +533,14 @@ program { name: "button_click"; signal: "mouse,down,1"; - source: "button_image"; + source: "over2"; action: STATE_SET "clicked" 0.0; target: "button_image"; } program { name: "button_unclick"; signal: "mouse,up,1"; - source: "button_image"; + source: "over2"; action: STATE_SET "default" 0.0; target: "button_image"; } @@ -542,20 +553,39 @@ program { name: "text_show"; signal: "elm,state,text,visible"; source: "elm"; - action: STATE_SET "visible" 0.0; - target: "elm.text"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.swallow.content", st, 30, vl); + if (!strcmp(st, "icononly")) + set_state(PART:"elm.swallow.content", "visible", 0.0); + set_state(PART:"elm.text", "visible", 0.0); + } } program { name: "text_hide"; signal: "elm,state,text,hidden"; source: "elm"; - action: STATE_SET "default" 0.0; - target: "elm.text"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.swallow.content", st, 30, vl); + if (!strcmp(st, "visible")) + set_state(PART:"elm.swallow.content", "icononly", 0.0); + set_state(PART:"elm.text", "default", 0.0); + } } program { name: "icon_show"; signal: "elm,state,icon,visible"; source: "elm"; - action: STATE_SET "visible" 0.0; - target: "elm.swallow.content"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.text", st, 30, vl); + if (!strcmp(st, "visible")) + set_state(PART:"elm.swallow.content", "visible", 0.0); + else + set_state(PART:"elm.swallow.content", "icononly", 0.0); + } } program { name: "icon_hide"; signal: "elm,state,icon,hidden"; @@ -2881,10 +2911,34 @@ } } /////////////////////////////////////////////////////////////////////////////// - group { name: "elm/icon/base/default"; min: 10 10; - images.image: "bt_base1.png" COMP; parts { part { name: "base"; + group { name: "elm/icon/home/default"; min: 32 32; + images.image: "icon_home.png" COMP; parts { part { name: "base"; description { state: "default" 0.0; aspect: 1.0 1.0; - image.normal: "bt_base1.png"; } } } } + image.normal: "icon_home.png"; } } } } + group { name: "elm/icon/close/default"; min: 32 32; + images.image: "icon_close.png" COMP; parts { part { name: "base"; + description { state: "default" 0.0; aspect: 1.0 1.0; + image.normal: "icon_close.png"; } } } } + group { name: "elm/icon/apps/default"; min: 32 32; + images.image: "icon_apps.png" COMP; parts { part { name: "base"; + description { state: "default" 0.0; aspect: 1.0 1.0; + image.normal: "icon_apps.png"; } } } } + group { name: "elm/icon/arrow_up/default"; min: 32 32; + images.image: "icon_arrow_up.png" COMP; parts { part { name: "base"; + description { state: "default" 0.0; aspect: 1.0 1.0; + image.normal: "icon_arrow_up.png"; } } } } + group { name: "elm/icon/arrow_down/default"; min: 32 32; + images.image: "icon_arrow_down.png" COMP; parts { part { name: "base"; + description { state: "default" 0.0; aspect: 1.0 1.0; + image.normal: "icon_arrow_down.png"; } } } } + group { name: "elm/icon/arrow_left/default"; min: 32 32; + images.image: "icon_arrow_left.png" COMP; parts { part { name: "base"; + description { state: "default" 0.0; aspect: 1.0 1.0; + image.normal: "icon_arrow_left.png"; } } } } + group { name: "elm/icon/arrow_right/default"; min: 32 32; + images.image: "icon_arrow_right.png" COMP; parts { part { name: "base"; + description { state: "default" 0.0; aspect: 1.0 1.0; + image.normal: "icon_arrow_right.png"; } } } } /////////////////////////////////////////////////////////////////////////////// group { name: "elm/contact/base/default"; Added: trunk/TMP/st/elementary/data/themes/icon_apps.png Property changes on: trunk/TMP/st/elementary/data/themes/icon_apps.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/icon_arrow_down.png Property changes on: trunk/TMP/st/elementary/data/themes/icon_arrow_down.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/icon_arrow_left.png Property changes on: trunk/TMP/st/elementary/data/themes/icon_arrow_left.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/icon_arrow_right.png Property changes on: trunk/TMP/st/elementary/data/themes/icon_arrow_right.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/icon_arrow_up.png Property changes on: trunk/TMP/st/elementary/data/themes/icon_arrow_up.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/icon_close.png Property changes on: trunk/TMP/st/elementary/data/themes/icon_close.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/icon_home.png Property changes on: trunk/TMP/st/elementary/data/themes/icon_home.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-21 11:59:47 UTC (rev 36924) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-21 12:01:00 UTC (rev 36925) @@ -763,8 +763,6 @@ elm_box_pack_end(bx, sc); en = elm_entry_add(win); - // FIXME: HACK! not exposed! - evas_object_propagate_events_set(en, 0); elm_entry_entry_set(en, "This is an entry widget in this window that<br>" "uses markup <b>like this</> for styling and<br>" @@ -829,6 +827,104 @@ } static void +my_notepad_bt_1(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *en = data; +} + +static void +my_notepad_bt_2(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *en = data; +} + +static void +my_notepad_bt_3(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *en = data; +} + +static void +my_bt_15(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *bx, *bx2, *bt, *ic, *np; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "notepad", ELM_WIN_BASIC); + elm_win_title_set(win, "Notepad"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + np = elm_notepad_add(win); + elm_notepad_file_set(np, "note.txt", ELM_TEXT_FORMAT_MARKUP_UTF8); + evas_object_size_hint_weight_set(np, 1.0, 1.0); + evas_object_size_hint_align_set(np, -1.0, -1.0); + elm_box_pack_end(bx, np); + evas_object_show(np); + + bx2 = elm_box_add(win); + elm_box_horizontal_set(bx2, 1); + elm_box_homogenous_set(bx2, 1); + evas_object_size_hint_weight_set(bx2, 1.0, 0.0); + evas_object_size_hint_align_set(bx2, -1.0, -1.0); + + bt = elm_button_add(win); + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "arrow_left"); + elm_icon_scale_set(ic, 1, 0); + elm_button_icon_set(bt, ic); + evas_object_show(ic); + evas_object_smart_callback_add(bt, "clicked", my_notepad_bt_1, np); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "close"); + elm_icon_scale_set(ic, 1, 0); + elm_button_icon_set(bt, ic); + evas_object_show(ic); + evas_object_smart_callback_add(bt, "clicked", my_notepad_bt_2, np); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "arrow_right"); + elm_icon_scale_set(ic, 1, 0); + elm_button_icon_set(bt, ic); + evas_object_show(ic); + evas_object_smart_callback_add(bt, "clicked", my_notepad_bt_3, np); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + elm_box_pack_end(bx, bx2); + evas_object_show(bx2); + + // FIXME: HACK! not exposed! (should expose some later?) + elm_widget_focus_set(np, 1); + + evas_object_resize(win, 320, 300); + + evas_object_show(win); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *bx, *bt, *sc, *fr; @@ -1018,6 +1114,13 @@ evas_object_size_hint_align_set(bt, -1.0, 0.0); elm_box_pack_end(bx, bt); evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Notepad"); + evas_object_smart_callback_add(bt, "clicked", my_bt_15, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); /* set an initial window size */ evas_object_resize(win, 320, 520); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-21 11:59:47 UTC (rev 36924) +++ trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-21 12:01:00 UTC (rev 36925) @@ -99,6 +99,7 @@ EAPI Evas_Object *elm_icon_add(Evas_Object *parent); EAPI void elm_icon_file_set(Evas_Object *obj, const char *file, const char *group); + EAPI void elm_icon_standard_set(Evas_Object *obj, const char *name); EAPI void elm_icon_smooth_set(Evas_Object *obj, Evas_Bool smooth); EAPI void elm_icon_no_scale_set(Evas_Object *obj, Evas_Bool no_scale); EAPI void elm_icon_scale_set(Evas_Object *obj, Evas_Bool scale_up, Evas_Bool scale_down); @@ -198,6 +199,20 @@ * "cursor,changed" - the cursor changed position * "anchor,X,clicked,N" - achor called 'X' was clicked with button 'N' */ + + /* 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, + ELM_TEXT_FORMAT_MARKUP_UTF8 + } Elm_Text_Format; + EAPI Evas_Object *elm_notepad_add(Evas_Object *parent); + EAPI void elm_notepad_file_set(Evas_Object *obj, const char *file, Elm_Text_Format format); + /* smart callbacks called: + */ + // FIXME: fixes to do // * current sizing tree inefficient @@ -207,12 +222,6 @@ // * frame needs to be able to use custom frame style // * button needs to be able to use custom frame style // * toggle needs to be able to use custom frame style -// -// FIXME: immediate hitlist for widgets: -// ENTRY: 1 or more line text entry -// -// POPSEL: a button that when pressed uses a hover to display a h/v box or -// a table of options surrounding the button with scroll butons at -// the end and the ability to drag and scroll + #endif Modified: trunk/TMP/st/elementary/src/lib/Makefile.am =================================================================== --- trunk/TMP/st/elementary/src/lib/Makefile.am 2008-10-21 11:59:47 UTC (rev 36924) +++ trunk/TMP/st/elementary/src/lib/Makefile.am 2008-10-21 12:01:00 UTC (rev 36925) @@ -36,6 +36,8 @@ elm_contact.c \ elm_contactlist.c \ \ +elc_notepad.c \ +\ els_pan.c \ els_pan.h \ els_scroller.c \ Added: trunk/TMP/st/elementary/src/lib/elc_notepad.c |
From: Enlightenment S. <no-...@en...> - 2008-10-22 09:01:37
|
Log: and support password mode and proper focus on click Author: raster Date: 2008-10-22 01:58:56 -0700 (Wed, 22 Oct 2008) New Revision: 36958 Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h trunk/TMP/st/elementary/src/lib/elc_notepad.c trunk/TMP/st/elementary/src/lib/elm_entry.c trunk/TMP/st/elementary/src/lib/elm_scroller.c trunk/TMP/st/elementary/src/lib/elm_widget.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2008-10-22 08:57:49 UTC (rev 36957) +++ trunk/TMP/st/elementary/data/themes/default.edc 2008-10-22 08:58:56 UTC (rev 36958) @@ -146,6 +146,7 @@ type: RECT; mouse_events: 0; description { state: "default" 0.0; + fixed: 1 1; visible: 0; min: 17 17; align: 1.0 0.0; @@ -184,6 +185,7 @@ confine: "sb_vbar"; } description { state: "default" 0.0; + fixed: 1 1; min: 17 17; rel1 { relative: 0.5 0.5; @@ -241,6 +243,7 @@ type: RECT; mouse_events: 0; description { state: "default" 0.0; + fixed: 1 1; visible: 0; min: 17 17; align: 0.0 1.0; @@ -279,6 +282,7 @@ confine: "sb_hbar"; } description { state: "default" 0.0; + fixed: 1 1; min: 17 17; rel1 { relative: 0.5 0.5; @@ -2767,6 +2771,76 @@ } } + group { name: "elm/entry/base-single/default"; + styles + { + style { name: "entry_single_textblock_style"; + base: "font=Sans font_size=10 align=left color=#000 wrap=none"; +// tag: "br" "\n"; +// tag: "tab" "\t"; + tag: "em" "+ font=Sans:style=Oblique"; + tag: "b" "+ font=Sans:style=Bold"; + tag: "link" "+ color=#800 underline=on underline_color=#8008"; + tag: "hilight" "+ font=Sans:style=Bold"; + } + } + parts { + part { name: "elm.text"; + type: TEXTBLOCK; + mouse_events: 1; + scale: 1; + entry_mode: EDITABLE; + multiline: 0; + source: "elm/entry/selection/default"; // selection under + source4: "elm/entry/cursor/default"; // cursorover + source5: "elm/entry/anchor/default"; // anchor under + description { state: "default" 0.0; + text { + style: "entry_single_textblock_style"; + min: 1 1; + } + } + } + } + programs { + program { name: "focus"; + signal: "load"; + source: ""; + action: FOCUS_SET; + target: "elm.text"; + } + } + } + + group { name: "elm/entry/base-password/default"; + parts { + part { name: "elm.text"; + type: TEXTBLOCK; + mouse_events: 1; + scale: 1; + entry_mode: PASSOWRD; + multiline: 0; + source: "elm/entry/selection/default"; // selection under + source4: "elm/entry/cursor/default"; // cursorover + source5: "elm/entry/anchor/default"; // anchor under + description { state: "default" 0.0; + text { + style: "entry_single_textblock_style"; + min: 1 1; + } + } + } + } + programs { + program { name: "focus"; + signal: "load"; + source: ""; + action: FOCUS_SET; + target: "elm.text"; + } + } + } + group { name: "elm/entry/cursor/default"; images { image: "cur_box.png" COMP; Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-22 08:57:49 UTC (rev 36957) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-22 08:58:56 UTC (rev 36958) @@ -758,6 +758,38 @@ evas_object_show(bx); sc = elm_scroller_add(win); + elm_scroller_content_min_limit(sc, 0, 1); + evas_object_size_hint_weight_set(sc, 1.0, 0.0); + evas_object_size_hint_align_set(sc, -1.0, -1.0); + 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 a single line"); + evas_object_size_hint_weight_set(en, 1.0, 1.0); + evas_object_size_hint_align_set(en, -1.0, -1.0); + elm_scroller_content_set(sc, en); + evas_object_show(en); + + evas_object_show(sc); + + sc = elm_scroller_add(win); + elm_scroller_content_min_limit(sc, 0, 1); + evas_object_size_hint_weight_set(sc, 1.0, 0.0); + evas_object_size_hint_align_set(sc, -1.0, -1.0); + elm_box_pack_end(bx, sc); + + en = elm_entry_add(win); + elm_entry_password_set(en, 1); + elm_entry_entry_set(en, "Password here"); + evas_object_size_hint_weight_set(en, 1.0, 1.0); + evas_object_size_hint_align_set(en, -1.0, -1.0); + elm_scroller_content_set(sc, en); + evas_object_show(en); + + evas_object_show(sc); + + sc = elm_scroller_add(win); evas_object_size_hint_weight_set(sc, 1.0, 1.0); evas_object_size_hint_align_set(sc, -1.0, -1.0); elm_box_pack_end(bx, sc); @@ -771,7 +803,7 @@ "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. At the end here is a really long line to test line wrapping to see if it works. But just in case this line is not long enough I will add more here to really test it out, as Elementary really needs some good testing to see if entry widgets work as advertised."); - evas_object_size_hint_weight_set(en, 1.0, 0.0); + evas_object_size_hint_weight_set(en, 1.0, 1.0); evas_object_size_hint_align_set(en, -1.0, -1.0); elm_scroller_content_set(sc, en); evas_object_show(en); @@ -865,7 +897,7 @@ evas_object_show(bx); np = elm_notepad_add(win); - elm_notepad_file_set(np, "note.txt", ELM_TEXT_FORMAT_MARKUP_UTF8); + elm_notepad_file_set(np, "note.txt", ELM_TEXT_FORMAT_PLAIN_UTF8); evas_object_size_hint_weight_set(np, 1.0, 1.0); evas_object_size_hint_align_set(np, -1.0, -1.0); elm_box_pack_end(bx, np); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-22 08:57:49 UTC (rev 36957) +++ trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-22 08:58:56 UTC (rev 36958) @@ -127,6 +127,7 @@ EAPI Evas_Object *elm_scroller_add(Evas_Object *parent); EAPI void elm_scroller_content_set(Evas_Object *obj, Evas_Object *child); + EAPI void elm_scroller_content_min_limit(Evas_Object *obj, Evas_Bool w, Evas_Bool h); /* smart callbacks called: */ @@ -183,6 +184,8 @@ */ EAPI Evas_Object *elm_entry_add(Evas_Object *parent); + EAPI void elm_entry_single_line_set(Evas_Object *obj, Evas_Bool single_line); + EAPI void elm_entry_password_set(Evas_Object *obj, Evas_Bool password); EAPI void elm_entry_entry_set(Evas_Object *obj, const char *entry); EAPI const char *elm_entry_entry_get(Evas_Object *obj); EAPI const char *elm_entry_selection_get(Evas_Object *obj); @@ -198,6 +201,7 @@ * "selection,cut" - the user cut the text * "cursor,changed" - the cursor changed position * "anchor,X,clicked,N" - achor called 'X' was clicked with button 'N' + * "activated" - when the enter key is pressed (useful for single line) */ /* composite widgets - these basically put together basic widgets above Modified: trunk/TMP/st/elementary/src/lib/elc_notepad.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elc_notepad.c 2008-10-22 08:57:49 UTC (rev 36957) +++ trunk/TMP/st/elementary/src/lib/elc_notepad.c 2008-10-22 08:58:56 UTC (rev 36958) @@ -131,7 +131,6 @@ char str[16]; escape = evas_textblock_string_escape_get(buf + ppos, &stlen); - printf("esc = %s\n", escape); if (escape) text = _buf_append(text, escape, &len, &alloc); else @@ -198,7 +197,6 @@ fputs(text, f); // FIXME: catch error fputs("\n", f); // FIXME: catch error fclose(f); - printf(".. written\n"); } static void @@ -316,7 +314,6 @@ _save_plain_utf8(wd->file, elm_entry_entry_get(wd->entry)); break; case ELM_TEXT_FORMAT_MARKUP_UTF8: - printf(".. save markup\n"); _save_markup_utf8(wd->file, elm_entry_entry_get(wd->entry)); break; default: @@ -328,7 +325,6 @@ _delay_write(void *data) { Widget_Data *wd = elm_widget_data_get(data); - printf(".. save\n"); _save(data); wd->delay_write = NULL; return 0; @@ -338,7 +334,6 @@ _entry_changed(void *data, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(data); - printf(".. changed\n"); if (wd->delay_write) { ecore_timer_del(wd->delay_write); Modified: trunk/TMP/st/elementary/src/lib/elm_entry.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_entry.c 2008-10-22 08:57:49 UTC (rev 36957) +++ trunk/TMP/st/elementary/src/lib/elm_entry.c 2008-10-22 08:58:56 UTC (rev 36958) @@ -7,8 +7,10 @@ { Evas_Object *ent; Evas_Coord lastw; - Evas_Bool changed; - Evas_Bool linewrap; + Evas_Bool changed : 1; + Evas_Bool linewrap : 1; + Evas_Bool single_line : 1; + Evas_Bool password : 1; Ecore_Job *deferred_recalc_job; }; @@ -218,6 +220,13 @@ printf("OUT %s\n", emission); } +static void +_signal_key_enter(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + evas_object_smart_callback_call(data, "activated", NULL); +} + EAPI Evas_Object * elm_entry_add(Evas_Object *parent) { @@ -252,11 +261,48 @@ edje_object_signal_callback_add(wd->ent, "anchor,mouse,move,*", "elm.text", _signal_anchor_move, obj); edje_object_signal_callback_add(wd->ent, "anchor,mouse,in,*", "elm.text", _signal_anchor_in, obj); edje_object_signal_callback_add(wd->ent, "anchor,mouse,out,*", "elm.text", _signal_anchor_out, obj); + edje_object_signal_callback_add(wd->ent, "entry,key,enter", "elm.text", _signal_key_enter, obj); elm_widget_resize_object_set(obj, wd->ent); + evas_object_propagate_events_set(obj, 0); return obj; } EAPI void +elm_entry_single_line_set(Evas_Object *obj, Evas_Bool single_line) +{ + Widget_Data *wd = elm_widget_data_get(obj); + char *t; + if (wd->single_line == single_line) return; + wd->single_line = single_line; + wd->linewrap = 0; + t = elm_entry_entry_get(obj); + if (t) t = strdup(t); + if (!wd->single_line) _elm_theme_set(wd->ent, "entry", "base", "default"); + else _elm_theme_set(wd->ent, "entry", "base-single", "default"); + elm_entry_entry_set(obj, t); + if (t) free(t); + _sizing_eval(obj); +} + +EAPI void +elm_entry_password_set(Evas_Object *obj, Evas_Bool password) +{ + Widget_Data *wd = elm_widget_data_get(obj); + char *t; + if (wd->password == password) return; + wd->password = password; + wd->single_line = 1; + wd->linewrap = 0; + t = elm_entry_entry_get(obj); + if (t) t = strdup(t); + if (!wd->password) _elm_theme_set(wd->ent, "entry", "base", "default"); + else _elm_theme_set(wd->ent, "entry", "base-password", "default"); + elm_entry_entry_set(obj, t); + if (t) free(t); + _sizing_eval(obj); +} + +EAPI void elm_entry_entry_set(Evas_Object *obj, const char *entry) { Widget_Data *wd = elm_widget_data_get(obj); Modified: trunk/TMP/st/elementary/src/lib/elm_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_scroller.c 2008-10-22 08:57:49 UTC (rev 36957) +++ trunk/TMP/st/elementary/src/lib/elm_scroller.c 2008-10-22 08:58:56 UTC (rev 36958) @@ -7,6 +7,8 @@ { Evas_Object *scr; Evas_Object *content; + Evas_Bool min_w : 1; + Evas_Bool min_h : 1; }; static void _del_hook(Evas_Object *obj); @@ -34,7 +36,7 @@ _sizing_eval(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); - Evas_Coord vw, vh, minw, minh, maxw, maxh; + Evas_Coord vw, vh, minw, minh, maxw, maxh, w, h, vmw, vmh; double xw, xy; evas_object_size_hint_min_get(wd->content, &minw, &minh); @@ -54,6 +56,12 @@ } 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 @@ -99,8 +107,8 @@ wd->scr = elm_smart_scroller_add(e); elm_widget_resize_object_set(obj, wd->scr); - - edje_object_size_min_calc(wd->scr, &minw, &minh); + + edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr), &minw, &minh); evas_object_size_hint_min_set(obj, minw, minh); evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize, obj); @@ -127,3 +135,12 @@ _sizing_eval(obj); } } + +EAPI void +elm_scroller_content_min_limit(Evas_Object *obj, Evas_Bool w, Evas_Bool h) +{ + Widget_Data *wd = elm_widget_data_get(obj); + wd->min_w = w; + wd->min_h = h; + _sizing_eval(obj); +} Modified: trunk/TMP/st/elementary/src/lib/elm_widget.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_widget.c 2008-10-22 08:57:49 UTC (rev 36957) +++ trunk/TMP/st/elementary/src/lib/elm_widget.c 2008-10-22 08:58:56 UTC (rev 36958) @@ -8,6 +8,7 @@ struct _Smart_Data { + Evas_Object *obj; Evas_Object *parent_obj; Evas_Coord x, y, w, h; Evas_List *subobjs; @@ -56,6 +57,14 @@ else sd->subobjs = evas_list_remove(sd->subobjs, obj); } +static void +_sub_obj_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Smart_Data *sd = data; + if (obj == sd->resize_obj) + elm_widget_focus_set(sd->obj, 1); +} + /* externally accessible functions */ EAPI Evas_Object * elm_widget_add(Evas *evas) @@ -170,6 +179,7 @@ if (sd->resize_obj) { evas_object_event_callback_del(sd->resize_obj, EVAS_CALLBACK_DEL, _sub_obj_del); + evas_object_event_callback_del(sd->resize_obj, EVAS_CALLBACK_MOUSE_DOWN, _sub_obj_mouse_down); evas_object_smart_member_del(sd->resize_obj); } sd->resize_obj = sobj; @@ -177,6 +187,7 @@ { evas_object_smart_member_add(sobj, obj); evas_object_event_callback_add(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd); + evas_object_event_callback_add(sobj, EVAS_CALLBACK_MOUSE_DOWN, _sub_obj_mouse_down, sd); _smart_reconfigure(sd); evas_object_smart_callback_call(obj, "sub-object-add", sobj); } @@ -520,6 +531,7 @@ sd = calloc(1, sizeof(Smart_Data)); if (!sd) return; + sd->obj = obj; sd->x = 0; sd->y = 0; sd->w = 0; |
From: Enlightenment S. <no-...@en...> - 2008-10-25 02:11:10
|
Log: so much more - valgrind complaints fixed in many places, leaks and anchorblock/view are working... Author: raster Date: 2008-10-24 19:11:06 -0700 (Fri, 24 Oct 2008) New Revision: 37081 Added: trunk/TMP/st/elementary/src/lib/elc_anchorblock.c trunk/TMP/st/elementary/src/lib/elc_anchorview.c Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h trunk/TMP/st/elementary/src/lib/Makefile.am trunk/TMP/st/elementary/src/lib/elm_box.c trunk/TMP/st/elementary/src/lib/elm_entry.c trunk/TMP/st/elementary/src/lib/elm_hover.c trunk/TMP/st/elementary/src/lib/elm_priv.h trunk/TMP/st/elementary/src/lib/elm_table.c trunk/TMP/st/elementary/src/lib/elm_widget.c trunk/TMP/st/elementary/src/lib/elm_win.c trunk/TMP/st/elementary/src/lib/els_box.c trunk/TMP/st/elementary/src/lib/els_table.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2008-10-24 21:47:10 UTC (rev 37080) +++ trunk/TMP/st/elementary/data/themes/default.edc 2008-10-25 02:11:06 UTC (rev 37081) @@ -2812,6 +2812,93 @@ } } + group { name: "elm/entry/base-single-noedit/default"; + parts { + part { name: "elm.text"; + type: TEXTBLOCK; + mouse_events: 1; + scale: 1; + entry_mode: PLAIN; + multiline: 0; + source: "elm/entry/selection/default"; // selection under + source4: "elm/entry/cursor/default"; // cursorover + source5: "elm/entry/anchor/default"; // anchor under + description { state: "default" 0.0; + text { + style: "entry_single_textblock_style"; + min: 1 1; + } + } + } + } + programs { + program { name: "focus"; + signal: "load"; + source: ""; + action: FOCUS_SET; + target: "elm.text"; + } + } + } + + group { name: "elm/entry/base-noedit/default"; + parts { + part { name: "elm.text"; + type: TEXTBLOCK; + mouse_events: 1; + scale: 1; + entry_mode: PLAIN; + multiline: 1; + source: "elm/entry/selection/default"; // selection under + source4: "elm/entry/cursor/default"; // cursorover + source5: "elm/entry/anchor/default"; // anchor under + description { state: "default" 0.0; + text { + style: "entry_textblock_style"; + min: 0 1; + } + } + } + } + programs { + program { name: "focus"; + signal: "load"; + source: ""; + action: FOCUS_SET; + target: "elm.text"; + } + } + } + + group { name: "elm/entry/base-nowrap-noedit/default"; + parts { + part { name: "elm.text"; + type: TEXTBLOCK; + mouse_events: 1; + scale: 1; + entry_mode: PLAIN; + multiline: 1; + source: "elm/entry/selection/default"; // selection under + source4: "elm/entry/cursor/default"; // cursorover + source5: "elm/entry/anchor/default"; // anchor under + description { state: "default" 0.0; + text { + style: "entry_textblock_style"; + min: 1 1; + } + } + } + } + programs { + program { name: "focus"; + signal: "load"; + source: ""; + action: FOCUS_SET; + target: "elm.text"; + } + } + } + group { name: "elm/entry/base-password/default"; parts { part { name: "elm.text"; Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-24 21:47:10 UTC (rev 37080) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-25 02:11:06 UTC (rev 37081) @@ -494,7 +494,7 @@ evas_object_show(bt); elm_hover_parent_set(hv, win); elm_hover_target_set(hv, bt); - + bt = elm_button_add(win); elm_button_label_set(bt, "Popup"); elm_hover_content_set(hv, "middle", bt); @@ -508,6 +508,7 @@ elm_icon_scale_set(ic, 0, 0); elm_box_pack_end(bx, ic); evas_object_show(ic); + bt = elm_button_add(win); elm_button_label_set(bt, "Top 1"); elm_box_pack_end(bx, bt); @@ -520,6 +521,7 @@ elm_button_label_set(bt, "Top 3"); elm_box_pack_end(bx, bt); evas_object_show(bt); + evas_object_show(bx); elm_hover_content_set(hv, "top", bx); @@ -537,7 +539,7 @@ elm_button_label_set(bt, "Right"); elm_hover_content_set(hv, "right", bt); evas_object_show(bt); - + evas_object_size_hint_min_set(bg, 160, 160); evas_object_size_hint_max_set(bg, 640, 640); evas_object_resize(win, 320, 320); @@ -859,19 +861,19 @@ static void my_notepad_bt_1(void *data, Evas_Object *obj, void *event_info) { - Evas_Object *en = data; + Evas_Object *np = data; } static void my_notepad_bt_2(void *data, Evas_Object *obj, void *event_info) { - Evas_Object *en = data; + Evas_Object *np = data; } static void my_notepad_bt_3(void *data, Evas_Object *obj, void *event_info) { - Evas_Object *en = data; + Evas_Object *np = data; } static void @@ -954,6 +956,271 @@ } static void +my_anchorview_bt(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *av = data; + elm_anchorview_hover_end(av); +} + +static void +my_anchorview_anchor(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *av = data; + Elm_Entry_Anchorview_Info *ei = event_info; + Evas_Object *bt, *bx; + + bt = elm_button_add(obj); + elm_button_label_set(bt, ei->name); + elm_hover_content_set(ei->hover, "middle", bt); + evas_object_show(bt); + + // hints as to where we probably should put hover contents (buttons etc.). + if (ei->hover_top) + { + bx = elm_box_add(obj); + bt = elm_button_add(obj); + elm_button_label_set(bt, "Top 1"); + elm_box_pack_end(bx, bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorview_bt, av); + evas_object_show(bt); + bt = elm_button_add(obj); + elm_button_label_set(bt, "Top 2"); + elm_box_pack_end(bx, bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorview_bt, av); + evas_object_show(bt); + bt = elm_button_add(obj); + elm_button_label_set(bt, "Top 3"); + elm_box_pack_end(bx, bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorview_bt, av); + evas_object_show(bt); + elm_hover_content_set(ei->hover, "top", bx); + evas_object_show(bx); + } + if (ei->hover_bottom) + { + bt = elm_button_add(obj); + elm_button_label_set(bt, "Bot"); + elm_hover_content_set(ei->hover, "bottom", bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorview_bt, av); + evas_object_show(bt); + } + if (ei->hover_left) + { + bt = elm_button_add(obj); + elm_button_label_set(bt, "Left"); + elm_hover_content_set(ei->hover, "left", bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorview_bt, av); + evas_object_show(bt); + } + if (ei->hover_right) + { + bt = elm_button_add(obj); + elm_button_label_set(bt, "Right"); + elm_hover_content_set(ei->hover, "right", bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorview_bt, av); + evas_object_show(bt); + } +} + +static void +my_bt_16(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *av; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "anchorview", ELM_WIN_BASIC); + elm_win_title_set(win, "Anchorview"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + av = elm_anchorview_add(win); + elm_anchorview_hover_style_set(av, "popout"); + elm_anchorview_hover_parent_set(av, win); + elm_anchorview_text_set(av, + "This is an entry widget in this window that<br>" + "uses markup <b>like this</> for styling and<br>" + "formatting <em>like this</>, as well as<br>" + "<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."); + evas_object_size_hint_weight_set(av, 1.0, 1.0); + evas_object_smart_callback_add(av, "anchor,clicked", my_anchorview_anchor, av); + elm_win_resize_object_add(win, av); + evas_object_show(av); + + evas_object_resize(win, 320, 300); + + // FIXME: not exported + elm_widget_focus_set(win, 1); + evas_object_show(win); +} + +static void +my_anchorblock_bt(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *av = data; + elm_anchorblock_hover_end(av); +} + +static void +my_anchorblock_anchor(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *av = data; + Elm_Entry_Anchorblock_Info *ei = event_info; + Evas_Object *bt, *bx; + + bt = elm_button_add(obj); + elm_button_label_set(bt, ei->name); + elm_hover_content_set(ei->hover, "middle", bt); + evas_object_show(bt); + + // hints as to where we probably should put hover contents (buttons etc.). + if (ei->hover_top) + { + bx = elm_box_add(obj); + bt = elm_button_add(obj); + elm_button_label_set(bt, "Top 1"); + elm_box_pack_end(bx, bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorblock_bt, av); + evas_object_show(bt); + bt = elm_button_add(obj); + elm_button_label_set(bt, "Top 2"); + elm_box_pack_end(bx, bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorblock_bt, av); + evas_object_show(bt); + bt = elm_button_add(obj); + elm_button_label_set(bt, "Top 3"); + elm_box_pack_end(bx, bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorblock_bt, av); + evas_object_show(bt); + elm_hover_content_set(ei->hover, "top", bx); + evas_object_show(bx); + } + if (ei->hover_bottom) + { + bt = elm_button_add(obj); + elm_button_label_set(bt, "Bot"); + elm_hover_content_set(ei->hover, "bottom", bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorblock_bt, av); + evas_object_show(bt); + } + if (ei->hover_left) + { + bt = elm_button_add(obj); + elm_button_label_set(bt, "Left"); + elm_hover_content_set(ei->hover, "left", bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorblock_bt, av); + evas_object_show(bt); + } + if (ei->hover_right) + { + bt = elm_button_add(obj); + elm_button_label_set(bt, "Right"); + elm_hover_content_set(ei->hover, "right", bt); + evas_object_smart_callback_add(bt, "clicked", my_anchorblock_bt, av); + evas_object_show(bt); + } +} + +static void +my_bt_17(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *av, *sc, *bx, *fr; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "anchorblock", ELM_WIN_BASIC); + elm_win_title_set(win, "Anchorblock"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, 1.0, 1.0); + elm_win_resize_object_add(win, sc); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 0.0); + evas_object_size_hint_align_set(bx, -1.0, -1.0); + elm_scroller_content_set(sc, bx); + evas_object_show(bx); + + fr = elm_frame_add(win); + elm_frame_label_set(fr, "Message 3"); + evas_object_size_hint_weight_set(fr, 1.0, 0.0); + evas_object_size_hint_align_set(fr, -1.0,-1.0); + av = elm_anchorblock_add(win); + elm_anchorblock_hover_style_set(av, "popout"); + elm_anchorblock_hover_parent_set(av, win); + elm_anchorblock_text_set(av, + "Hi there. This is the most recent message in the " + "list of messages. It has one <a href=tel:+614321234>+61 432 1234</a> " + "(phone number) to click on."); + evas_object_smart_callback_add(av, "anchor,clicked", my_anchorblock_anchor, av); + elm_frame_content_set(fr, av); + evas_object_show(av); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + fr = elm_frame_add(win); + elm_frame_label_set(fr, "Message 2"); + evas_object_size_hint_weight_set(fr, 1.0, 0.0); + evas_object_size_hint_align_set(fr, -1.0,-1.0); + av = elm_anchorblock_add(win); + elm_anchorblock_hover_style_set(av, "popout"); + elm_anchorblock_hover_parent_set(av, win); + elm_anchorblock_text_set(av, + "Hey what are you doing? This is the second last message " + "Hi there. This is the most recent message in the " + "list. It's a longer one so it can wrap more and " + "contains a <a href=contact:john>John</a> contact " + "link in it to test popups on links. The idea is that " + "all SMS's are scanned for things that look like phone " + "numbers or names that are in your contacts list, and " + "if they are, they become clickable links that pop up " + "a menus of obvious actions to perform on this piece " + "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."); + evas_object_smart_callback_add(av, "anchor,clicked", my_anchorblock_anchor, av); + elm_frame_content_set(fr, av); + evas_object_show(av); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + fr = elm_frame_add(win); + elm_frame_label_set(fr, "Message 1"); + evas_object_size_hint_weight_set(fr, 1.0, 0.0); + evas_object_size_hint_align_set(fr, -1.0,-1.0); + 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"); + evas_object_smart_callback_add(av, "anchor,clicked", my_anchorblock_anchor, av); + elm_frame_content_set(fr, av); + evas_object_show(av); + elm_box_pack_end(bx, fr); + evas_object_show(fr); + + evas_object_show(sc); + + evas_object_resize(win, 320, 300); + + // FIXME: not exported + elm_widget_focus_set(win, 1); + evas_object_show(win); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *bx, *bt, *sc, *fr; @@ -1151,6 +1418,20 @@ elm_box_pack_end(bx, bt); evas_object_show(bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "Anchorview"); + evas_object_smart_callback_add(bt, "clicked", my_bt_16, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Anchorblock"); + evas_object_smart_callback_add(bt, "clicked", my_bt_17, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + /* set an initial window size */ evas_object_resize(win, 320, 520); /* show the window */ Modified: trunk/TMP/st/elementary/src/lib/Elementary.h =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-24 21:47:10 UTC (rev 37080) +++ trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-25 02:11:06 UTC (rev 37081) @@ -181,8 +181,16 @@ EAPI void elm_hover_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content); EAPI void elm_hover_style_set(Evas_Object *obj, const char *style); /* smart callbacks called: + * "clicked" - the user clicked the empty space in the hover to dismiss */ + typedef struct _Elm_Entry_Anchor_Info Elm_Entry_Anchor_Info; + struct _Elm_Entry_Anchor_Info + { + const char *name; + int button; + Evas_Coord x, y, w, h; + }; EAPI Evas_Object *elm_entry_add(Evas_Object *parent); EAPI void elm_entry_single_line_set(Evas_Object *obj, Evas_Bool single_line); EAPI void elm_entry_password_set(Evas_Object *obj, Evas_Bool password); @@ -191,6 +199,7 @@ EAPI const char *elm_entry_selection_get(Evas_Object *obj); EAPI void elm_entry_entry_insert(Evas_Object *obj, const char *entry); EAPI void elm_entry_line_wrap_set(Evas_Object *obj, Evas_Bool wrap); + EAPI void elm_entry_editable_set(Evas_Object *obj, Evas_Bool editable); /* smart callbacks called: * "changed" - the text content changed * "selection,start" - the user started selecting text @@ -200,7 +209,7 @@ * "selection,copy" - the user copied the text * "selection,cut" - the user cut the text * "cursor,changed" - the cursor changed position - * "anchor,X,clicked,N" - achor called 'X' was clicked with button 'N' + * "anchor,clicked" - achor called was clicked | event_info = Elm_Entry_Anchor_Info * "activated" - when the enter key is pressed (useful for single line) */ @@ -216,8 +225,52 @@ EAPI void elm_notepad_file_set(Evas_Object *obj, const char *file, Elm_Text_Format format); /* smart callbacks called: */ - + + typedef struct _Elm_Entry_Anchorview_Info Elm_Entry_Anchorview_Info; + struct _Elm_Entry_Anchorview_Info + { + const char *name; + int button; + Evas_Object *hover; + struct { + Evas_Coord x, y, w, h; + } anchor, hover_parent; + Evas_Bool hover_left : 1; + Evas_Bool hover_right : 1; + Evas_Bool hover_top : 1; + Evas_Bool hover_bottom : 1; + }; + EAPI Evas_Object *elm_anchorview_add(Evas_Object *parent); + EAPI void elm_anchorview_text_set(Evas_Object *obj, const char *text); + EAPI void elm_anchorview_hover_style_set(Evas_Object *obj, const char *style); + EAPI void elm_anchorview_hover_end(Evas_Object *obj); + /* smart callbacks called: + * "anchor,clicked" - achor called was clicked | event_info = Elm_Entry_Anchorview_Info + */ + typedef struct _Elm_Entry_Anchorblock_Info Elm_Entry_Anchorblock_Info; + struct _Elm_Entry_Anchorblock_Info + { + const char *name; + int button; + Evas_Object *hover; + struct { + Evas_Coord x, y, w, h; + } anchor, hover_parent; + Evas_Bool hover_left : 1; + Evas_Bool hover_right : 1; + Evas_Bool hover_top : 1; + Evas_Bool hover_bottom : 1; + }; + EAPI Evas_Object *elm_anchorblock_add(Evas_Object *parent); + EAPI void elm_anchorblock_text_set(Evas_Object *obj, const char *text); + EAPI void elm_anchorblock_hover_style_set(Evas_Object *obj, const char *style); + EAPI void elm_anchorblock_hover_end(Evas_Object *obj); + /* smart callbacks called: + * "anchor,clicked" - achor called was clicked | event_info = Elm_Entry_Anchorblock_Info + */ + + // FIXME: fixes to do // * current sizing tree inefficient // * scroller could do with page up/down/left/right buttons and and idea of Modified: trunk/TMP/st/elementary/src/lib/Makefile.am =================================================================== --- trunk/TMP/st/elementary/src/lib/Makefile.am 2008-10-24 21:47:10 UTC (rev 37080) +++ trunk/TMP/st/elementary/src/lib/Makefile.am 2008-10-25 02:11:06 UTC (rev 37081) @@ -37,6 +37,8 @@ elm_contactlist.c \ \ elc_notepad.c \ +elc_anchorview.c \ +elc_anchorblock.c \ \ els_pan.c \ els_pan.h \ Added: trunk/TMP/st/elementary/src/lib/elc_anchorblock.c Added: trunk/TMP/st/elementary/src/lib/elc_anchorview.c Modified: trunk/TMP/st/elementary/src/lib/elm_box.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_box.c 2008-10-24 21:47:10 UTC (rev 37080) +++ trunk/TMP/st/elementary/src/lib/elm_box.c 2008-10-25 02:11:06 UTC (rev 37081) @@ -69,7 +69,6 @@ elm_widget_del_hook_set(obj, _del_hook); wd->box = _els_smart_box_add(e); - elm_widget_sub_object_add(obj, wd->box); evas_object_event_callback_add(wd->box, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); elm_widget_resize_object_set(obj, wd->box); Modified: trunk/TMP/st/elementary/src/lib/elm_entry.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_entry.c 2008-10-24 21:47:10 UTC (rev 37080) +++ trunk/TMP/st/elementary/src/lib/elm_entry.c 2008-10-25 02:11:06 UTC (rev 37081) @@ -11,6 +11,7 @@ Evas_Bool linewrap : 1; Evas_Bool single_line : 1; Evas_Bool password : 1; + Evas_Bool editable : 1; Ecore_Job *deferred_recalc_job; }; @@ -90,6 +91,8 @@ { Widget_Data *wd = elm_widget_data_get(data); if (wd->linewrap) _sizing_eval(data); + Evas_Coord ww, hh; + evas_object_geometry_get(wd->ent, NULL, NULL, &ww, &hh); } static void @@ -160,7 +163,7 @@ // FIXME: handle auto-scroll within parent (get cursor - if not visible // jump so it is) edje_object_part_text_cursor_geometry_get(wd->ent, "elm.text", &cx, &cy, &cw, &ch); - printf("CURSOR: @%i+%i %ix%i\n", cx, cy, cw, ch); +// printf("CURSOR: @%i+%i %ix%i\n", cx, cy, cw, ch); elm_widget_show_region_set(data, cx, cy, cw, ch); } @@ -168,22 +171,23 @@ _signal_anchor_down(void *data, Evas_Object *obj, const char *emission, const char *source) { Widget_Data *wd = elm_widget_data_get(data); - printf("DOWN %s\n", emission); +// printf("DOWN %s\n", emission); } static void _signal_anchor_up(void *data, Evas_Object *obj, const char *emission, const char *source) { Widget_Data *wd = elm_widget_data_get(data); + Elm_Entry_Anchor_Info ei; char *buf, *buf2, *p, *p2, *n; int buflen; - printf("UP %s\n", emission); +// printf("UP %s\n", emission); p = strrchr(emission, ','); if (p) { + Eina_List *geoms; + n = p + 1; - buflen = 200 + strlen(n); - buf = alloca(buflen); p2 = p -1; while (p2 >= emission) { @@ -194,8 +198,32 @@ buf2 = alloca(5 + p - p2); strncpy(buf2, p2, p - p2); buf2[p - p2] = 0; - snprintf(buf, buflen, "anchor,%s,clicked,%s", buf2, n); - evas_object_smart_callback_call(data, buf, NULL); + ei.name = n; + ei.button = atoi(buf2); + ei.x = ei.y = ei.w = ei.h = 0; + geoms = edje_object_part_text_anchor_geometry_get(wd->ent, "elm.text", ei.name); + if (geoms) + { + Evas_Textblock_Rectangle *r; + Eina_List *l; + Evas_Coord px, py, x, y; + + evas_object_geometry_get(wd->ent, &x, &y, NULL, NULL); + evas_pointer_output_xy_get(evas_object_evas_get(wd->ent), &px, &py); + EINA_LIST_FOREACH(geoms, l, r) + { + if (((r->x + x) <= px) && ((r->y + y) <= py) && + ((r->x + x + r->w) > px) && ((r->y + y + r->h) > py)) + { + ei.x = r->x + x; + ei.y = r->y + y; + ei.w = r->w; + ei.h = r->h; + break; + } + } + } + evas_object_smart_callback_call(data, "anchor,clicked", &ei); } } @@ -203,21 +231,21 @@ _signal_anchor_move(void *data, Evas_Object *obj, const char *emission, const char *source) { Widget_Data *wd = elm_widget_data_get(data); - printf("MOVE %s\n", emission); +// printf("MOVE %s\n", emission); } static void _signal_anchor_in(void *data, Evas_Object *obj, const char *emission, const char *source) { Widget_Data *wd = elm_widget_data_get(data); - printf("IN %s\n", emission); +// printf("IN %s\n", emission); } static void _signal_anchor_out(void *data, Evas_Object *obj, const char *emission, const char *source) { Widget_Data *wd = elm_widget_data_get(data); - printf("OUT %s\n", emission); +// printf("OUT %s\n", emission); } static void @@ -243,6 +271,7 @@ elm_widget_can_focus_set(obj, 1); wd->linewrap = 1; + wd->editable = 1; wd->ent = edje_object_add(e); evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_RESIZE, _resize, obj); @@ -266,6 +295,39 @@ return obj; } +static const char * +_getbase(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + if (wd->editable) + { + if (wd->password) return "base-password"; + else + { + if (wd->single_line) return "base-single"; + else + { + if (wd->linewrap) return "base"; + else return "base-nowrap"; + } + } + } + else + { + if (wd->password) return "base-password"; + else + { + if (wd->single_line) return "base-single-noedit"; + else + { + if (wd->linewrap) return "base-noedit"; + else return "base-nowrap-noedit"; + } + } + } + return "base"; +} + EAPI void elm_entry_single_line_set(Evas_Object *obj, Evas_Bool single_line) { @@ -276,8 +338,7 @@ wd->linewrap = 0; t = elm_entry_entry_get(obj); if (t) t = strdup(t); - if (!wd->single_line) _elm_theme_set(wd->ent, "entry", "base", "default"); - else _elm_theme_set(wd->ent, "entry", "base-single", "default"); + _elm_theme_set(wd->ent, "entry", _getbase(obj), "default"); elm_entry_entry_set(obj, t); if (t) free(t); _sizing_eval(obj); @@ -294,8 +355,7 @@ wd->linewrap = 0; t = elm_entry_entry_get(obj); if (t) t = strdup(t); - if (!wd->password) _elm_theme_set(wd->ent, "entry", "base", "default"); - else _elm_theme_set(wd->ent, "entry", "base-password", "default"); + _elm_theme_set(wd->ent, "entry", _getbase(obj), "default"); elm_entry_entry_set(obj, t); if (t) free(t); _sizing_eval(obj); @@ -308,12 +368,14 @@ edje_object_part_text_set(wd->ent, "elm.text", entry); // debug +#if 0 { Eina_List *l, *an; an = edje_object_part_text_anchor_list_get(wd->ent, "elm.text"); for (l = an; l; l = l->next) printf("ANCHOR: %s\n", l->data); } +#endif wd->changed = 1; _sizing_eval(obj); } @@ -350,9 +412,23 @@ wd->linewrap = wrap; t = elm_entry_entry_get(obj); if (t) t = strdup(t); - if (wd->linewrap) _elm_theme_set(wd->ent, "entry", "base", "default"); - else _elm_theme_set(wd->ent, "entry", "base-nowrap", "default"); + _elm_theme_set(wd->ent, "entry", _getbase(obj), "default"); elm_entry_entry_set(obj, t); if (t) free(t); _sizing_eval(obj); } + +EAPI void +elm_entry_editable_set(Evas_Object *obj, Evas_Bool editable) +{ + Widget_Data *wd = elm_widget_data_get(obj); + char *t; + if (wd->editable == editable) return; + wd->editable = editable; + t = elm_entry_entry_get(obj); + if (t) t = strdup(t); + _elm_theme_set(wd->ent, "entry", _getbase(obj), "default"); + elm_entry_entry_set(obj, t); + if (t) free(t); + _sizing_eval(obj); +} Modified: trunk/TMP/st/elementary/src/lib/elm_hover.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_hover.c 2008-10-24 21:47:10 UTC (rev 37080) +++ trunk/TMP/st/elementary/src/lib/elm_hover.c 2008-10-25 02:11:06 UTC (rev 37081) @@ -19,17 +19,26 @@ Evas_Object *obj; }; +static void _del_pre_hook(Evas_Object *obj); static void _del_hook(Evas_Object *obj); static void _sizing_eval(Evas_Object *obj); static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _sub_del(void *data, Evas_Object *obj, void *event_info); +static void _hov_move(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _hov_resize(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _hov_show(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _hov_hide(void *data, Evas *e, Evas_Object *obj, void *event_info); static void -_del_hook(Evas_Object *obj) +_del_pre_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); elm_hover_target_set(obj, NULL); elm_hover_parent_set(obj, NULL); + evas_object_event_callback_del(wd->hov, EVAS_CALLBACK_MOVE, _hov_move); + evas_object_event_callback_del(wd->hov, EVAS_CALLBACK_RESIZE, _hov_resize); + evas_object_event_callback_del(wd->hov, EVAS_CALLBACK_SHOW, _hov_show); + evas_object_event_callback_del(wd->hov, EVAS_CALLBACK_HIDE, _hov_hide); while (wd->subs) { Subinfo *si = wd->subs->data; @@ -37,6 +46,12 @@ evas_stringshare_del(si->swallow); free(si); } +} + +static void +_del_hook(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); free(wd); } @@ -112,8 +127,11 @@ Widget_Data *wd = elm_widget_data_get(data); Eina_List *l; // FIXME: use signals for show for hov - evas_object_show(wd->cov); - edje_object_signal_emit(wd->cov, "elm,action,show", "elm"); + if (wd->cov) + { + evas_object_show(wd->cov); + edje_object_signal_emit(wd->cov, "elm,action,show", "elm"); + } for (l = wd->subs; l; l = l->next) { Subinfo *si = l->data; @@ -133,8 +151,11 @@ Widget_Data *wd = elm_widget_data_get(data); Eina_List *l; // FIXME: use signals for hide for hov - edje_object_signal_emit(wd->cov, "elm,action,hide", "elm"); - evas_object_hide(wd->cov); + if (wd->cov) + { + edje_object_signal_emit(wd->cov, "elm,action,hide", "elm"); + evas_object_hide(wd->cov); + } for (l = wd->subs; l; l = l->next) { Subinfo *si = l->data; @@ -207,6 +228,7 @@ e = evas_object_evas_get(parent); obj = elm_widget_add(e); elm_widget_data_set(obj, wd); + elm_widget_del_pre_hook_set(obj, _del_pre_hook); elm_widget_del_hook_set(obj, _del_hook); wd->hov = evas_object_rectangle_add(e); @@ -279,7 +301,7 @@ evas_object_event_callback_add(wd->parent, EVAS_CALLBACK_SHOW, _parent_show, obj); evas_object_event_callback_add(wd->parent, EVAS_CALLBACK_HIDE, _parent_hide, obj); evas_object_event_callback_add(wd->parent, EVAS_CALLBACK_DEL, _parent_del, obj); - elm_widget_sub_object_add(parent, obj); +// elm_widget_sub_object_add(parent, obj); } _sizing_eval(obj); } @@ -307,6 +329,7 @@ { elm_widget_sub_object_add(obj, content); edje_object_part_swallow(wd->cov, buf, content); + evas_object_event_callback_add(content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); si = ELM_NEW(Subinfo); Modified: trunk/TMP/st/elementary/src/lib/elm_priv.h =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_priv.h 2008-10-24 21:47:10 UTC (rev 37080) +++ trunk/TMP/st/elementary/src/lib/elm_priv.h 2008-10-25 02:11:06 UTC (rev 37081) @@ -42,6 +42,7 @@ /* FIXME: should this be public? for now - private (but public symbols) */ EAPI Evas_Object *elm_widget_add(Evas *evas); EAPI void elm_widget_del_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj)); +EAPI void elm_widget_del_pre_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj)); EAPI void elm_widget_focus_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj)); EAPI void elm_widget_activate_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj)); EAPI void elm_widget_disable_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj)); Modified: trunk/TMP/st/elementary/src/lib/elm_table.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_table.c 2008-10-24 21:47:10 UTC (rev 37080) +++ trunk/TMP/st/elementary/src/lib/elm_table.c 2008-10-25 02:11:06 UTC (rev 37081) @@ -69,7 +69,6 @@ elm_widget_del_hook_set(obj, _del_hook); wd->tbl = _els_smart_table_add(e); - elm_widget_sub_object_add(obj, wd->tbl); evas_object_event_callback_add(wd->tbl, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); elm_widget_resize_object_set(obj, wd->tbl); Modified: trunk/TMP/st/elementary/src/lib/elm_widget.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_widget.c 2008-10-24 21:47:10 UTC (rev 37080) +++ trunk/TMP/st/elementary/src/lib/elm_widget.c 2008-10-25 02:11:06 UTC (rev 37081) @@ -15,6 +15,7 @@ Evas_Object *resize_obj; Evas_Object *hover_obj; void (*del_func) (Evas_Object *obj); + void (*del_pre_func) (Evas_Object *obj); void (*focus_func) (Evas_Object *obj); void (*activate_func) (Evas_Object *obj); void (*disable_func) (Evas_Object *obj); @@ -82,6 +83,13 @@ } EAPI void +elm_widget_del_pre_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj)) +{ + API_ENTRY return; + sd->del_pre_func = func; +} + +EAPI void elm_widget_focus_hook_set(Evas_Object *obj, void (*func) (Evas_Object *obj)) { API_ENTRY return; @@ -170,6 +178,11 @@ { if (elm_widget_can_focus_get(sobj)) sd->child_can_focus = 0; } + if (!strcmp(evas_object_type_get(sobj), SMART_NAME)) + { + sd = evas_object_smart_data_get(sobj); + if (sd) sd->parent_obj = NULL; + } evas_object_smart_callback_call(obj, "sub-object-del", sobj); } @@ -186,6 +199,7 @@ sd->resize_obj = sobj; if (sd->resize_obj) { + evas_object_clip_set(sobj, evas_object_clip_get(obj)); evas_object_smart_member_add(sobj, obj); evas_object_event_callback_add(sobj, EVAS_CALLBACK_DEL, _sub_obj_del, sd); evas_object_event_callback_add(sobj, EVAS_CALLBACK_MOUSE_DOWN, _sub_obj_mouse_down, sd); @@ -547,7 +561,7 @@ Evas_Object *sobj; INTERNAL_ENTRY; - if (sd->del_func) sd->del_func(obj); + if (sd->del_pre_func) sd->del_pre_func(obj); if (sd->resize_obj) { evas_object_event_callback_del(sd->resize_obj, EVAS_CALLBACK_DEL, _sub_obj_del); @@ -567,6 +581,7 @@ evas_object_event_callback_del(sobj, EVAS_CALLBACK_DEL, _sub_obj_del); evas_object_del(sobj); } + if (sd->del_func) sd->del_func(obj); free(sd); } Modified: trunk/TMP/st/elementary/src/lib/elm_win.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_win.c 2008-10-24 21:47:10 UTC (rev 37080) +++ trunk/TMP/st/elementary/src/lib/elm_win.c 2008-10-25 02:11:06 UTC (rev 37081) @@ -43,6 +43,7 @@ _elm_win_resize(Ecore_Evas *ee) { Elm_Win *win = ecore_evas_data_get(ee, "__Elm"); + if (!win) return; if (win->deferred_resize_job) ecore_job_del(win->deferred_resize_job); win->deferred_resize_job = ecore_job_add(_elm_win_resize_job, win); } @@ -135,6 +136,12 @@ } static void +_deferred_ecore_evas_free(void *data) +{ + ecore_evas_free(data); +} + +static void _elm_win_obj_callback_del(void *data, Evas *e, Evas_Object *obj, void *event_info) { Elm_Win *win = data; @@ -153,9 +160,20 @@ evas_object_intercept_color_set_callback_del(win->win_obj, _elm_win_obj_intercept_color_set); evas_object_event_callback_del(win->win_obj, EVAS_CALLBACK_DEL, _elm_win_obj_callback_del); evas_object_event_callback_del(win->win_obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _elm_win_obj_callback_changed_size_hints); - ecore_evas_free(win->ee); + ecore_evas_callback_delete_request_set(win->ee, NULL); + ecore_evas_callback_resize_set(win->ee, NULL); if (win->deferred_resize_job) ecore_job_del(win->deferred_resize_job); if (win->deferred_child_eval_job) ecore_job_del(win->deferred_child_eval_job); + while (evas_object_bottom_get(win->evas) && + (evas_object_bottom_get(win->evas) != obj)) + evas_object_del(evas_object_bottom_get(win->evas)); + while (evas_object_top_get(win->evas) && + (evas_object_top_get(win->evas) != obj)) + evas_object_del(evas_object_top_get(win->evas)); +// 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); +// ecore_evas_free(win->ee); free(win); } @@ -177,6 +195,7 @@ _elm_win_delete_request(Ecore_Evas *ee) { Elm_Win *win = ecore_evas_data_get(ee, "__Elm"); + if (!win) return; evas_object_smart_callback_call(win->win_obj, "delete-request", NULL); if (win->autodel) evas_object_del(win->win_obj); } Modified: trunk/TMP/st/elementary/src/lib/els_box.c =================================================================== --- trunk/TMP/st/elementary/src/lib/els_box.c 2008-10-24 21:47:10 UTC (rev 37080) +++ trunk/TMP/st/elementary/src/lib/els_box.c 2008-10-25 02:11:06 UTC (rev 37081) @@ -9,9 +9,10 @@ Evas_Coord x, y, w, h; Evas_Object *obj; Evas_Object *clip; - unsigned char changed : 1; - unsigned char horizontal : 1; - unsigned char homogenous : 1; + Evas_Bool changed : 1; + Evas_Bool horizontal : 1; + Evas_Bool homogenous : 1; + Evas_Bool deleting : 1; Eina_List *items; }; @@ -157,7 +158,7 @@ if (!sd) return; sd->items = eina_list_remove(sd->items, obj); _smart_disown(obj); - _smart_reconfigure(sd); + if (!sd->deleting) _smart_reconfigure(sd); } /* local subsystem functions */ @@ -474,11 +475,13 @@ sd = evas_object_smart_data_get(obj); if (!sd) return; + sd->deleting = 1; while (sd->items) { Evas_Object *child; child = sd->items->data; + printf("_smart_del -> _els_smart_box_unpack\n"); _els_smart_box_unpack(child); } evas_object_del(sd->clip); Modified: trunk/TMP/st/elementary/src/lib/els_table.c =================================================================== --- trunk/TMP/st/elementary/src/lib/els_table.c 2008-10-24 21:47:10 UTC (rev 37080) +++ trunk/TMP/st/elementary/src/lib/els_table.c 2008-10-25 02:11:06 UTC (rev 37081) @@ -9,7 +9,8 @@ Evas_Coord x, y, w, h; Evas_Object *obj; Evas_Object *clip; - unsigned char homogenous : 1; + Evas_Bool homogenous : 1; + Evas_Bool deleting : 1; Eina_List *items; struct { int cols, rows; @@ -97,7 +98,7 @@ sd = ti->sd; sd->items = eina_list_remove(sd->items, obj); _smart_disown(obj); - _smart_reconfigure(sd); + if (!sd->deleting) _smart_reconfigure(sd); } void @@ -810,6 +811,7 @@ sd = evas_object_smart_data_get(obj); if (!sd) return; + sd->deleting = 1; while (sd->items) { Evas_Object *child; |
From: Enlightenment S. <no-...@en...> - 2008-10-29 01:51:50
|
Log: bubble widget and test. looking good. Author: raster Date: 2008-10-28 18:51:45 -0700 (Tue, 28 Oct 2008) New Revision: 37291 Added: trunk/TMP/st/elementary/data/themes/bubble_1.png trunk/TMP/st/elementary/data/themes/bubble_2.png trunk/TMP/st/elementary/data/themes/bubble_shine.png trunk/TMP/st/elementary/src/lib/elm_bubble.c Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h trunk/TMP/st/elementary/src/lib/Makefile.am Added: trunk/TMP/st/elementary/data/themes/bubble_1.png Property changes on: trunk/TMP/st/elementary/data/themes/bubble_1.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/bubble_2.png Property changes on: trunk/TMP/st/elementary/data/themes/bubble_2.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/bubble_shine.png Property changes on: trunk/TMP/st/elementary/data/themes/bubble_shine.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2008-10-29 01:38:47 UTC (rev 37290) +++ trunk/TMP/st/elementary/data/themes/default.edc 2008-10-29 01:51:45 UTC (rev 37291) @@ -3080,62 +3080,69 @@ /////////////////////////////////////////////////////////////////////////////// group { name: "elm/bubble/base/default"; images { - image: "frame_1.png" COMP; - image: "frame_2.png" COMP; - image: "dia_grad.png" COMP; + image: "bubble_1.png" COMP; + image: "bubble_shine.png" COMP; } parts { - part { name: "base0"; - mouse_events: 0; + part { name: "elm.swallow.icon"; + type: SWALLOW; description { state: "default" 0.0; - image.normal: "dia_grad.png"; - rel1.to: "over"; - rel2.to: "over"; - fill { - smooth: 0; - size { - relative: 0.0 1.0; - offset: 64 0; - } + fixed: 1 1; + align: 0.0 1.0; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + rel1 { + to_y: "elm.text"; + relative: 0.0 0.0; + offset: 4 0; } - } - } - part { name: "base"; - mouse_events: 0; - description { state: "default" 0.0; - image { - normal: "frame_2.png"; - border: 5 5 32 26; - middle: 0; + rel2 { + relative: 0.0 1.0; + offset: 4 -5; } - fill.smooth : 0; } } - part { name: "elm.swallow.content"; - type: SWALLOW; + part { name: "elm.text"; + type: TEXT; + mouse_events: 0; + scale: 1; description { state: "default" 0.0; + align: 0.0 1.0; + fixed: 0 1; rel1 { - to_y: "elm.text"; + to_x: "elm.swallow.icon"; + relative: 1.0 1.0; + offset: 4 -5; + } + rel2 { + to_x: "elm.info"; relative: 0.0 1.0; - offset: 8 2; + offset: -5 -5; } - rel2.offset: -9 -9; + color: 0 0 0 255; + text { + font: "Sans:style=Bold,Edje-Vera-Bold"; + size: 10; + min: 0 1; + max: 0 1; + align: 0.0 1.0; + } } } - part { name: "elm.text"; + part { name: "elm.info"; type: TEXT; mouse_events: 0; scale: 1; description { state: "default" 0.0; - align: 0.0 0.0; - fixed: 0 1; + align: 1.0 1.0; + fixed: 1 1; rel1 { - relative: 0.0 0.0; - offset: 6 6; + relative: 1.0 1.0; + offset: -5 -5; } rel2 { - relative: 1.0 0.0; - offset: -7 6; + relative: 1.0 1.0; + offset: -5 -5; } color: 0 0 0 64; text { @@ -3143,21 +3150,55 @@ size: 10; min: 1 1; max: 1 1; - align: 0.0 0.0; + align: 1.0 1.0; } } } - part { name: "over"; + part { name: "base0"; + mouse_events: 0; + description { state: "default" 0.0; + rel2 { + to_y: "elm.swallow.icon"; + relative: 1.0 0.0; + offset: -1 -1; + } + image { + normal: "bubble_1.png"; + border: 36 11 10 19; + } + fill.smooth: 0; + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + description { state: "default" 0.0; + rel1 { + to: "base0"; + offset: 9 8; + } + rel2 { + to: "base0"; + offset: -10 -17; + } + } + } + part { name: "shine"; mouse_events: 0; description { state: "default" 0.0; - rel1.offset: 4 4; - rel2.offset: -5 -5; + rel1 { + to: "base0"; + offset: 5 4; + } + rel2 { + to: "base0"; + relative: 1.0 0.5; + offset: -6 -16; + } image { - normal: "frame_1.png"; - border: 2 2 28 22; - middle: 0; + normal: "bubble_shine.png"; + border: 5 5 5 0; } - fill.smooth : 0; + fill.smooth: 0; } } } Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-10-29 01:38:47 UTC (rev 37290) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-10-29 01:51:45 UTC (rev 37291) @@ -1130,7 +1130,7 @@ static void my_bt_17(void *data, Evas_Object *obj, void *event_info) { - Evas_Object *win, *bg, *av, *sc, *bx, *fr; + Evas_Object *win, *bg, *av, *sc, *bx, *bb, *ic; char buf[PATH_MAX]; win = elm_win_add(NULL, "anchorblock", ELM_WIN_BASIC); @@ -1152,10 +1152,19 @@ elm_scroller_content_set(sc, bx); evas_object_show(bx); - fr = elm_frame_add(win); - elm_frame_label_set(fr, "Message 3"); - evas_object_size_hint_weight_set(fr, 1.0, 0.0); - evas_object_size_hint_align_set(fr, -1.0,-1.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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + bb = elm_bubble_add(win); + elm_bubble_label_set(bb, "Message 3"); + elm_bubble_info_set(bb, "10:32 4/11/2008"); + elm_bubble_icon_set(bb, ic); + evas_object_show(ic); + evas_object_size_hint_weight_set(bb, 1.0, 0.0); + evas_object_size_hint_align_set(bb, -1.0,-1.0); av = elm_anchorblock_add(win); elm_anchorblock_hover_style_set(av, "popout"); elm_anchorblock_hover_parent_set(av, win); @@ -1164,15 +1173,23 @@ "list of messages. It has one <a href=tel:+614321234>+61 432 1234</a> " "(phone number) to click on."); evas_object_smart_callback_add(av, "anchor,clicked", my_anchorblock_anchor, av); - elm_frame_content_set(fr, av); + elm_bubble_content_set(bb, av); evas_object_show(av); - elm_box_pack_end(bx, fr); - evas_object_show(fr); + elm_box_pack_end(bx, bb); + evas_object_show(bb); - fr = elm_frame_add(win); - elm_frame_label_set(fr, "Message 2"); - evas_object_size_hint_weight_set(fr, 1.0, 0.0); - evas_object_size_hint_align_set(fr, -1.0,-1.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); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + bb = elm_bubble_add(win); + elm_bubble_label_set(bb, "Message 2"); + elm_bubble_info_set(bb, "7:16 27/10/2008"); + elm_bubble_icon_set(bb, ic); + evas_object_show(ic); + evas_object_size_hint_weight_set(bb, 1.0, 0.0); + evas_object_size_hint_align_set(bb, -1.0,-1.0); av = elm_anchorblock_add(win); elm_anchorblock_hover_style_set(av, "popout"); elm_anchorblock_hover_parent_set(av, win); @@ -1191,25 +1208,34 @@ "web URL's too that launch the web browser and point it " "to that URL."); evas_object_smart_callback_add(av, "anchor,clicked", my_anchorblock_anchor, av); - elm_frame_content_set(fr, av); + elm_bubble_content_set(bb, av); evas_object_show(av); - elm_box_pack_end(bx, fr); - evas_object_show(fr); + elm_box_pack_end(bx, bb); + evas_object_show(bb); - fr = elm_frame_add(win); - elm_frame_label_set(fr, "Message 1"); - evas_object_size_hint_weight_set(fr, 1.0, 0.0); - evas_object_size_hint_align_set(fr, -1.0,-1.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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + bb = elm_bubble_add(win); + elm_bubble_label_set(bb, "Message 1"); + elm_bubble_info_set(bb, "20:47 18/6/2008"); + elm_bubble_icon_set(bb, ic); + evas_object_show(ic); + evas_object_size_hint_weight_set(bb, 1.0, 0.0); + evas_object_size_hint_align_set(bb, -1.0,-1.0); 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"); evas_object_smart_callback_add(av, "anchor,clicked", my_anchorblock_anchor, av); - elm_frame_content_set(fr, av); + elm_bubble_content_set(bb, av); evas_object_show(av); - elm_box_pack_end(bx, fr); - evas_object_show(fr); + elm_box_pack_end(bx, bb); + evas_object_show(bb); evas_object_show(sc); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-29 01:38:47 UTC (rev 37290) +++ trunk/TMP/st/elementary/src/lib/Elementary.h 2008-10-29 01:51:45 UTC (rev 37291) @@ -270,6 +270,13 @@ * "anchor,clicked" - achor called was clicked | event_info = Elm_Entry_Anchorblock_Info */ + EAPI Evas_Object *elm_bubble_add(Evas_Object *parent); + EAPI void elm_bubble_label_set(Evas_Object *obj, const char *label); + EAPI void elm_bubble_info_set(Evas_Object *obj, const char *label); + EAPI void elm_bubble_content_set(Evas_Object *obj, Evas_Object *content); + EAPI void elm_bubble_icon_set(Evas_Object *obj, Evas_Object *icon); + /* smart callbacks called: + */ // FIXME: fixes to do // * current sizing tree inefficient Modified: trunk/TMP/st/elementary/src/lib/Makefile.am =================================================================== --- trunk/TMP/st/elementary/src/lib/Makefile.am 2008-10-29 01:38:47 UTC (rev 37290) +++ trunk/TMP/st/elementary/src/lib/Makefile.am 2008-10-29 01:51:45 UTC (rev 37291) @@ -33,6 +33,7 @@ elm_layout.c \ elm_hover.c \ elm_entry.c \ +elm_bubble.c \ elm_contact.c \ elm_contactlist.c \ \ Added: trunk/TMP/st/elementary/src/lib/elm_bubble.c |
From: Enlightenment S. <no-...@en...> - 2008-11-18 08:45:43
|
Log: used new edje calls and fix bugs. Author: raster Date: 2008-11-18 00:45:38 -0800 (Tue, 18 Nov 2008) New Revision: 37701 Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h trunk/TMP/st/elementary/src/lib/elm_entry.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2008-11-18 08:45:27 UTC (rev 37700) +++ trunk/TMP/st/elementary/data/themes/default.edc 2008-11-18 08:45:38 UTC (rev 37701) @@ -2950,7 +2950,7 @@ description { state: "default" 0.0; text { style: "entry_single_textblock_style"; - repch: "●"; + repch: "*"; min: 1 1; } } Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-11-18 08:45:27 UTC (rev 37700) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-11-18 08:45:38 UTC (rev 37701) @@ -769,6 +769,7 @@ elm_entry_entry_set(en, "This is a single line"); evas_object_size_hint_weight_set(en, 1.0, 0.0); evas_object_size_hint_align_set(en, -1.0, 0.0); + elm_entry_select_all(en); elm_scroller_content_set(sc, en); evas_object_show(en); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h 2008-11-18 08:45:27 UTC (rev 37700) +++ trunk/TMP/st/elementary/src/lib/Elementary.h 2008-11-18 08:45:38 UTC (rev 37701) @@ -200,6 +200,9 @@ EAPI void elm_entry_entry_insert(Evas_Object *obj, const char *entry); EAPI void elm_entry_line_wrap_set(Evas_Object *obj, Evas_Bool wrap); EAPI void elm_entry_editable_set(Evas_Object *obj, Evas_Bool editable); + EAPI void elm_entry_select_none(Evas_Object *obj); + EAPI void elm_entry_select_all(Evas_Object *obj); + /* smart callbacks called: * "changed" - the text content changed * "selection,start" - the user started selecting text @@ -285,19 +288,18 @@ //////////////////////// // //// (bugs - high priority) -// * single line entry on scale change adds newlines // * scale change for hover doesnt seem to do new size alloc nicely -// * left/right arrow broken with password mode for entry +// * left/right arrow broken with password mode for entry + utf8 chars... // //// (incomplete - medium priority) // * disabled not supported // * tab widget focusing (not useful for touchscreen tho...) -// * entry needs to support setting selection to all, or clearing // * bubble should allow style (left/right + top/bottom) // * need to get toplevel object (win) // * entry needs to set vkbd properties/hint (as does win) -// * entry selection conflicts with finger scroll +// * entry selection conflicts with finger scroll (make selection start/stop work on signals?) // * on the fly theme changes - test (should work) +// * entry doesnt talk with x copy & paste at all // //// (more widgets/features - medium priority) // * toolbar widget (edje + box + button + separators) Modified: trunk/TMP/st/elementary/src/lib/elm_entry.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_entry.c 2008-11-18 08:45:27 UTC (rev 37700) +++ trunk/TMP/st/elementary/src/lib/elm_entry.c 2008-11-18 08:45:38 UTC (rev 37701) @@ -30,10 +30,13 @@ static void _signal_entry_cut_notify(void *data, Evas_Object *obj, const char *emission, const char *source); static void _signal_cursor_changed(void *data, Evas_Object *obj, const char *emission, const char *source); +static Eina_List *entries = NULL; + static void _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + entries = eina_list_remove(entries, obj); if (wd->deferred_recalc_job) ecore_job_del(wd->deferred_recalc_job); free(wd); } @@ -165,7 +168,12 @@ _signal_selection_start(void *data, Evas_Object *obj, const char *emission, const char *source) { Widget_Data *wd = elm_widget_data_get(data); + Eina_List *l; evas_object_smart_callback_call(data, "selection,start", NULL); + for (l = entries; l; l = l->next) + { + if (l->data != data) elm_entry_select_none(l->data); + } // FIXME: x clipboard/copy & paste - do } @@ -352,6 +360,7 @@ edje_object_part_text_set(wd->ent, "elm.text", "<br>"); elm_widget_resize_object_set(obj, wd->ent); _sizing_eval(obj); + entries = eina_list_prepend(entries, obj); return obj; } @@ -459,3 +468,17 @@ if (t) free(t); _sizing_eval(obj); } + +EAPI void +elm_entry_select_none(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + edje_object_part_text_select_none(wd->ent, "elm.text"); +} + +EAPI void +elm_entry_select_all(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + edje_object_part_text_select_all(wd->ent, "elm.text"); +} |
From: Enlightenment S. <no-...@en...> - 2008-12-18 13:39:04
|
Log: toolbar in. not 100% done yet. Author: raster Date: 2008-12-18 05:38:58 -0800 (Thu, 18 Dec 2008) New Revision: 38209 Added: trunk/TMP/st/elementary/data/themes/bt_dis_shine.png trunk/TMP/st/elementary/data/themes/icon_left_arrow.png trunk/TMP/st/elementary/data/themes/icon_right_arrow.png trunk/TMP/st/elementary/data/themes/toolbar_sel.png trunk/TMP/st/elementary/src/lib/elm_toolbar.c Modified: trunk/TMP/st/elementary/data/themes/Makefile.am trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h trunk/TMP/st/elementary/src/lib/Makefile.am trunk/TMP/st/elementary/src/lib/elm_main.c trunk/TMP/st/elementary/src/lib/elm_scroller.c trunk/TMP/st/elementary/src/lib/els_scroller.c trunk/TMP/st/elementary/src/lib/els_scroller.h Modified: trunk/TMP/st/elementary/data/themes/Makefile.am =================================================================== --- trunk/TMP/st/elementary/data/themes/Makefile.am 2008-12-18 13:04:23 UTC (rev 38208) +++ trunk/TMP/st/elementary/data/themes/Makefile.am 2008-12-18 13:38:58 UTC (rev 38209) @@ -67,7 +67,11 @@ outdent-bottom.png \ updown.png \ leftright.png \ -hoversel_entry_bg.png +hoversel_entry_bg.png \ +bt_dis_shine.png \ +icon_left_arrow.png \ +icon_right_arrow.png \ +toolbar_sel.png default.edj: Makefile $(EXTRA_DIST) $(EDJE_CC) $(EDJE_FLAGS) \ Added: trunk/TMP/st/elementary/data/themes/bt_dis_shine.png Property changes on: trunk/TMP/st/elementary/data/themes/bt_dis_shine.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2008-12-18 13:04:23 UTC (rev 38208) +++ trunk/TMP/st/elementary/data/themes/default.edc 2008-12-18 13:38:58 UTC (rev 38209) @@ -4439,84 +4439,265 @@ image.normal: "icon_arrow_right.png"; } } } } /////////////////////////////////////////////////////////////////////////////// - group { name: "elm/contact/base/default"; + group { name: "elm/toolbar/base/default"; images { - image: "bt_base1.png" COMP; - image: "bt_base2.png" COMP; - image: "bt_hilight.png" COMP; - image: "bt_shine.png" COMP; + image: "bt_dis_base.png" COMP; + image: "bt_dis_hilight.png" COMP; + image: "bt_dis_shine.png" COMP; + image: "icon_left_arrow.png" COMP; + image: "icon_right_arrow.png" COMP; } parts { - part { name: "button_image"; - mouse_events: 1; - description { state: "default" 0.0; - image { - normal: "bt_base2.png"; - border: 7 7 7 7; - } - } - description { state: "clicked" 0.0; - inherit: "default" 0.0; - image.normal: "bt_base1.png"; - } - } - part { name: "elm.swallow.content"; - type: SWALLOW; - type: RECT; - description { state: "default" 0.0; - aspect: 1.0 1.0; - aspect_preference: VERTICAL; - align: 0.0 0.5; - rel1.offset: 4 4; - rel2.offset: 4 -5; - rel2.relative: 0.0 1.0; - color: 255 0 0 128; - } - } - part { - name: "elm.text"; - type: TEXT; - effect: SOFT_SHADOW; - mouse_events: 0; - scale: 1; - description { state: "default" 0.0; - align: 0.0 1.0; - rel1.to_x: "elm.swallow.content"; - rel1.relative: 1.0 1.0; - rel1.offset: 0 -5; - rel2.offset: -5 -5; - color: 224 224 224 255; - color3: 0 0 0 64; - text { - text: "Name of Contact goes here"; - font: "Sans:style=Bold,Edje-Vera-Bold"; - size: 10; - min: 0 1; - align: 0.0 1.0; - } - } - } - part { name: "over1"; - mouse_events: 0; - description { state: "default" 0.0; - rel2.relative: 1.0 0.5; - image { - normal: "bt_hilight.png"; - border: 7 7 7 0; - } - } - } - part { name: "over2"; - mouse_events: 1; - repeat_events: 1; + part { name: "base"; + mouse_events: 1; + description { state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + offset: 2 2; + } + rel2.offset: -3 -3; + image { + normal: "bt_dis_base.png"; + border: 4 4 4 4; + } + } + } + part { name: "clipper"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + to: "base"; + offset: 2 2; + } + rel2 { + to: "base"; + offset: -3 -3; + } + } + } + part { name: "elm.swallow.content"; + clip_to: "clipper"; + type: SWALLOW; + description { + state: "default" 0.0; + rel1.to: "clipper"; + rel2.to: "clipper"; + } + } + part { name: "over2"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "base"; + rel2.to: "base"; + image { + normal: "bt_dis_shine.png"; + border: 4 4 4 4; + } + } + } + part { name: "over1"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "base"; + rel2.to: "base"; + rel2.relative: 1.0 0.5; + image { + normal: "bt_dis_hilight.png"; + border: 4 4 4 0; + } + color: 255 255 255 128; + } + } + part { name: "left_arrow"; + mouse_events: 0; + description { state: "default" 0.0; + image.normal: "icon_left_arrow.png"; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + align: 0.0 0.5; + min: 32 32; + max: 32 32; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + color: 255 255 255 0; + } + } + part { name: "right_arrow"; + mouse_events: 0; + description { state: "default" 0.0; + image.normal: "icon_right_arrow.png"; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + align: 1.0 0.5; + min: 32 32; + max: 32 32; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + color: 255 255 255 0; + } + } + part { name: "event"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { name: "sb_hbar_show"; + signal: "elm,action,show,hbar"; + source: "elm"; + action: STATE_SET "default" 0.0; + transition: LINEAR 0.5; + target: "left_arrow"; + target: "right_arrow"; + } + program { name: "sb_hbar_hide"; + signal: "elm,action,hide,hbar"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "left_arrow"; + target: "right_arrow"; + transition: LINEAR 0.5; + } + } + } + + group { name: "elm/toolbar/item/default"; + images { + image: "toolbar_sel.png" COMP; + } + parts { + part { name: "label2"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 1.0; + fixed: 0 1; + rel1.to: "elm.text"; + rel2.to: "elm.text"; + color: 0 0 0 255; + text { + font: "Sans"; + text_source: "elm.text"; + size: 10; + min: 1 1; + align: 0.5 0.5; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "bg"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + image { + normal: "toolbar_sel.png"; + border: 3 3 0 0; + } + fill.smooth: 0; + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { name: "elm.swallow.icon"; + type: SWALLOW; + description { state: "default" 0.0; + align: 0.5 0.5; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + rel1 { + relative: 0.0 0.0; + offset: 2 2; + } + rel2 { + to_y: "elm.text"; + relative: 1.0 0.0; + offset: -3 -1; + } + color: 0 0 0 0; + } + } + part { name: "elm.text"; + type: TEXT; + effect: SOFT_SHADOW; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + align: 0.5 1.0; + fixed: 0 1; + rel1 { + relative: 0.0 1.0; + offset: 0 -1; + } + rel2 { + relative: 1.0 1.0; + offset: -1 -1; + } + visible: 0; + color: 224 224 224 255; + color3: 0 0 0 32; + text { + font: "Sans:style=Bold"; + size: 10; + min: 1 1; + align: 0.5 0.5; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "event"; + type: RECT; + mouse_events: 1; ignore_flags: ON_HOLD; - description { state: "default" 0.0; - image { - normal: "bt_shine.png"; - border: 7 7 7 7; - } - } - } + description { state: "default" 0.0; + color: 0 0 0 0; + } + } } + programs { + program { name: "go_active"; + signal: "elm,state,selected"; + source: "elm"; + action: STATE_SET "selected" 0.0; + target: "bg"; + target: "elm.text"; + target: "label2"; + transition: LINEAR 0.2; + } + program { name: "go_passive"; + signal: "elm,state,unselected"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "elm.text"; + target: "label2"; + transition: LINEAR 0.1; + } + program { name: "go"; + signal: "mouse,up,1"; + source: "event"; + action: SIGNAL_EMIT "elm,action,click" "elm"; + } + } } } Added: trunk/TMP/st/elementary/data/themes/icon_left_arrow.png Property changes on: trunk/TMP/st/elementary/data/themes/icon_left_arrow.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/icon_right_arrow.png Property changes on: trunk/TMP/st/elementary/data/themes/icon_right_arrow.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/toolbar_sel.png Property changes on: trunk/TMP/st/elementary/data/themes/toolbar_sel.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2008-12-18 13:04:23 UTC (rev 38208) +++ trunk/TMP/st/elementary/src/bin/test.c 2008-12-18 13:38:58 UTC (rev 38209) @@ -1248,6 +1248,63 @@ } static void +my_bt_18(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *bx, *tb, *ic; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "toolbar", ELM_WIN_BASIC); + elm_win_title_set(win, "Toolbar"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + elm_win_resize_object_add(win, bx); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + evas_object_show(bx); + + tb = elm_toolbar_add(win); + evas_object_size_hint_weight_set(tb, 0.0, 0.0); + evas_object_size_hint_align_set(tb, -1.0, 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, "World", 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, "Here", 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, "Comes", 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, "Elementary", NULL, NULL); + + elm_box_pack_end(bx, tb); + evas_object_show(tb); + + evas_object_resize(win, 320, 300); + + evas_object_show(win); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *bx, *bt, *sc, *fr; @@ -1459,6 +1516,13 @@ elm_box_pack_end(bx, bt); evas_object_show(bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "Toolbar"); + evas_object_smart_callback_add(bt, "clicked", my_bt_18, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + /* set an initial window size */ evas_object_resize(win, 320, 520); /* show the window */ Modified: trunk/TMP/st/elementary/src/lib/Elementary.h =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h 2008-12-18 13:04:23 UTC (rev 38208) +++ trunk/TMP/st/elementary/src/lib/Elementary.h 2008-12-18 13:38:58 UTC (rev 38209) @@ -326,7 +326,14 @@ EAPI void elm_hoversel_hover_end(Evas_Object *obj); EAPI Elm_Hoversel_Item *elm_hoversel_item_add(Evas_Object *obj, const char *label, const char *icon_file, Elm_Icon_Type icon_type, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data); EAPI void elm_hoversel_item_del(Elm_Hoversel_Item *item); - + + typedef struct _Elm_Toolbar_Item Elm_Toolbar_Item; + EAPI Evas_Object *elm_toolbar_add(Evas_Object *parent); + EAPI Elm_Toolbar_Item *elm_toolbar_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data); + EAPI void elm_toolbar_item_del(Elm_Toolbar_Item *item); + EAPI void elm_toolbar_item_select(Elm_Toolbar_Item *item); + EAPI void elm_toolbar_scrollable_set(Evas_Object *obj, Evas_Bool scrollable); + //////////////////////////////////////////////////////////////////////////// /// FIXME: TODO LIST /////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// @@ -372,6 +379,9 @@ // * dialpad widget - need one with a phone dialpad // //// (improvements - low priority) +// * somehow a pdf(ps) viewer widget that doesnt make it gpl (lgpl) +// * emotion widget? +// * ewebkit widget // * need url and path entry modes for vkbd // * return list of toplevel window objects // * widgets should show who is focused (not useful for touchscreen) Modified: trunk/TMP/st/elementary/src/lib/Makefile.am =================================================================== --- trunk/TMP/st/elementary/src/lib/Makefile.am 2008-12-18 13:04:23 UTC (rev 38208) +++ trunk/TMP/st/elementary/src/lib/Makefile.am 2008-12-18 13:38:58 UTC (rev 38209) @@ -35,6 +35,7 @@ elm_entry.c \ elm_bubble.c \ elm_photo.c \ +elm_toolbar.c \ \ elc_notepad.c \ elc_anchorview.c \ Modified: trunk/TMP/st/elementary/src/lib/elm_main.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_main.c 2008-12-18 13:04:23 UTC (rev 38208) +++ trunk/TMP/st/elementary/src/lib/elm_main.c 2008-12-18 13:38:58 UTC (rev 38209) @@ -127,19 +127,20 @@ int val = 1000; ecore_x_init(NULL); + if (!ecore_x_screen_is_composited(0)) + _elm_config->compositing = 0; _elm_atom_enlightenment_scale = ecore_x_atom_get("ENLIGHTENMENT_SCALE"); ecore_x_event_mask_set(ecore_x_window_root_first_get(), ECORE_X_EVENT_MASK_WINDOW_PROPERTY); _elm_event_property_change = ecore_event_handler_add (ECORE_X_EVENT_WINDOW_PROPERTY, _elm_window_property_change, NULL); + /* FIXME if quickstart this happens in child */ if (ecore_x_window_prop_card32_get(ecore_x_window_root_first_get(), _elm_atom_enlightenment_scale, &val, 1) > 0) { if (val > 0) _elm_config->scale = (double)val / 1000.0; } - if (!ecore_x_screen_is_composited(0)) - _elm_config->compositing = 0; #endif } @@ -147,6 +148,27 @@ { _elm_config->scale = atof(elm_scale); } + /* FIXME: implement quickstart below */ + /* if !quickstart return + * else + * set up fast-start-fifo (in $ELM_FAST_START_FIFO) + * sit on blocking read + * read 2 bytes == length of data in bytes including nulls + * read N bytes (must be < (page_size - 2)) + * format: exename\0exepath\0[arg1\0][arg2\0][...] + * dlopen exepath + * dlsym elm_main in exe + * if (elm_main ! exists) + * ecore_exe exename + * else + * fork() + * [child] + * call exit(elm_main()); + * [parent] + * close x fd the nasty way (with close()) + * ecore_x_shutdown() + * ecore_x_init() etc. etc. loop back to blocking on fifo read + */ } EAPI void Modified: trunk/TMP/st/elementary/src/lib/elm_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_scroller.c 2008-12-18 13:04:23 UTC (rev 38208) +++ trunk/TMP/st/elementary/src/lib/elm_scroller.c 2008-12-18 13:38:58 UTC (rev 38209) @@ -28,7 +28,7 @@ _theme_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); - elm_smart_scroller_theme_set(wd->scr, "default"); + elm_smart_scroller_theme_set(wd->scr, "scroller", "base", "default"); _sizing_eval(obj); } Added: trunk/TMP/st/elementary/src/lib/elm_toolbar.c Modified: trunk/TMP/st/elementary/src/lib/els_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/els_scroller.c 2008-12-18 13:04:23 UTC (rev 38208) +++ trunk/TMP/st/elementary/src/lib/els_scroller.c 2008-12-18 13:38:58 UTC (rev 38209) @@ -338,10 +338,10 @@ } void -elm_smart_scroller_theme_set(Evas_Object *obj, const char *style) +elm_smart_scroller_theme_set(Evas_Object *obj, const char *clas, const char *group, const char *style) { API_ENTRY return; - _elm_theme_set(sd->edje_obj, "scroller", "base", style); + _elm_theme_set(sd->edje_obj, clas, group, style); if (sd->pan_obj) edje_object_part_swallow(sd->edje_obj, "elm.swallow.content", sd->pan_obj); sd->vbar_visible = !sd->vbar_visible; Modified: trunk/TMP/st/elementary/src/lib/els_scroller.h =================================================================== --- trunk/TMP/st/elementary/src/lib/els_scroller.h 2008-12-18 13:04:23 UTC (rev 38208) +++ trunk/TMP/st/elementary/src/lib/els_scroller.h 2008-12-18 13:38:58 UTC (rev 38209) @@ -23,5 +23,4 @@ Evas_Object *elm_smart_scroller_edje_object_get (Evas_Object *obj); void elm_smart_scroller_single_dir_set (Evas_Object *obj, Evas_Bool single_dir); Evas_Bool elm_smart_scroller_single_dir_get (Evas_Object *obj); -void elm_smart_scroller_theme_set (Evas_Object *obj, const char *style); - +void elm_smart_scroller_theme_set (Evas_Object *obj, const char *clas, const char *group, const char *style); |
From: Enlightenment S. <no-...@en...> - 2009-01-07 13:49:13
|
Log: beginning of the list widget - includes a scroller and items inside. not meant for long long long lists of lots of items. not complete yet. Author: raster Date: 2009-01-07 05:49:08 -0800 (Wed, 07 Jan 2009) New Revision: 38488 Added: trunk/TMP/st/elementary/data/themes/ilist_1.png trunk/TMP/st/elementary/data/themes/ilist_2.png trunk/TMP/st/elementary/data/themes/ilist_item_shadow.png trunk/TMP/st/elementary/src/lib/elm_list.c Modified: trunk/TMP/st/elementary/data/themes/Makefile.am trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/Makefile.am trunk/TMP/st/elementary/src/lib/elc_hoversel.c Modified: trunk/TMP/st/elementary/data/themes/Makefile.am =================================================================== --- trunk/TMP/st/elementary/data/themes/Makefile.am 2009-01-07 12:59:34 UTC (rev 38487) +++ trunk/TMP/st/elementary/data/themes/Makefile.am 2009-01-07 13:49:08 UTC (rev 38488) @@ -94,7 +94,10 @@ icon_chat.png \ icon_clock.png \ icon_delete.png \ -icon_edit.png +icon_edit.png \ +ilist_1.png \ +ilist_2.png \ +ilist_item_shadow.png default.edj: Makefile $(EXTRA_DIST) $(EDJE_CC) $(EDJE_FLAGS) \ Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2009-01-07 12:59:34 UTC (rev 38487) +++ trunk/TMP/st/elementary/data/themes/default.edc 2009-01-07 13:49:08 UTC (rev 38488) @@ -4798,4 +4798,383 @@ } } +/////////////////////////////////////////////////////////////////////////////// + group { name: "elm/list/item/default"; + data.item: "stacking" "above"; + data.item: "selectraise" "on"; + images { + image: "bt_sm_base1.png" COMP; + image: "bt_sm_shine.png" COMP; + image: "bt_sm_hilight.png" COMP; + image: "ilist_1.png" COMP; + image: "ilist_item_shadow.png" COMP; + } + parts { + part { + name: "base_sh"; + mouse_events: 0; + description { + state: "default" 0.0; +// aspect: 6.4 6.4; +// aspect_preference: HORIZONTAL; + align: 0.0 0.0; + min: 0 10; + rel1 { + to: "base"; + relative: 0.0 1.0; + offset: 0 0; + } + rel2 { + to: "base"; + relative: 1.0 1.0; + offset: -1 0; + } + image { + normal: "ilist_item_shadow.png"; + } + fill.smooth: 0; + } + } + part { + name: "base"; + mouse_events: 0; + description { + state: "default" 0.0; + image { + normal: "ilist_1.png"; + border: 2 2 2 2; + } + fill.smooth: 0; + } + } + part { name: "bg"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1 { + relative: 0.0 0.0; + offset: -5 -5; + } + rel2 { + relative: 1.0 1.0; + offset: 4 4; + } + image { + normal: "bt_sm_base1.png"; + border: 6 6 6 6; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + rel1 { + relative: 0.0 0.0; + offset: -2 -2; + } + rel2 { + relative: 1.0 1.0; + offset: 1 1; + } + } + } + part { + name: "elm.swallow.icon"; + type: SWALLOW; + description { + state: "default" 0.0; + align: 0.0 0.5; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + rel1 { + relative: 0.0 0.0; + offset: 4 4; + } + rel2 { + relative: 0.0 1.0; + offset: 4 -5; + } + } + } + part { + name: "elm.text"; + type: TEXT; + effect: SOFT_SHADOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 16 16; + rel1 { + to_x: "elm.swallow.icon"; + relative: 1.0 0.0; + offset: 4 4; + } + rel2 { + relative: 1.0 1.0; + offset: -5 -5; + } + color: 0 0 0 255; + color3: 0 0 0 0; + text { + font: "Sans"; + size: 10; + min: 1 1; +// min: 0 1; + align: 0.0 0.5; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 224 224 224 255; + color3: 0 0 0 64; + } + } + part { name: "fg1"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1.to: "bg"; + rel2.relative: 1.0 0.5; + rel2.to: "bg"; + image { + normal: "bt_sm_hilight.png"; + border: 6 6 6 0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { name: "fg2"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1.to: "bg"; + rel2.to: "bg"; + image { + normal: "bt_sm_shine.png"; + border: 6 6 6 0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { + name: "event"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "go_active"; + signal: "elm,state,selected"; + source: "elm"; + action: STATE_SET "selected" 0.0; + target: "bg"; + target: "fg1"; + target: "fg2"; + target: "elm.text"; + } + program { + name: "go_passive"; + signal: "elm,state,unselected"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "fg1"; + target: "fg2"; + target: "elm.text"; + transition: LINEAR 0.1; + } + } + } + group { name: "elm/list/item_odd/default"; + data.item: "stacking" "below"; + data.item: "selectraise" "on"; + images { + image: "bt_sm_base1.png" COMP; + image: "bt_sm_shine.png" COMP; + image: "bt_sm_hilight.png" COMP; + image: "ilist_2.png" COMP; + } + parts { + part { + name: "base"; + mouse_events: 0; + description { + state: "default" 0.0; + image { + normal: "ilist_2.png"; + border: 2 2 2 2; + } + } + } + part { name: "bg"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1 { + relative: 0.0 0.0; + offset: -5 -5; + } + rel2 { + relative: 1.0 1.0; + offset: 4 4; + } + image { + normal: "bt_sm_base1.png"; + border: 6 6 6 6; + } + fill.smooth: 0; + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + rel1 { + relative: 0.0 0.0; + offset: -2 -2; + } + rel2 { + relative: 1.0 1.0; + offset: 1 1; + } + } + } + part { + name: "elm.swallow.icon"; + type: SWALLOW; + description { + state: "default" 0.0; + align: 0.0 0.5; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + rel1 { + relative: 0.0 0.0; + offset: 4 4; + } + rel2 { + relative: 0.0 1.0; + offset: 4 -5; + } + } + } + part { + name: "elm.text"; + type: TEXT; + effect: SOFT_SHADOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 16 16; + rel1 { + to_x: "elm.swallow.icon"; + relative: 1.0 0.0; + offset: 4 4; + } + rel2 { + relative: 1.0 1.0; + offset: -5 -5; + } + color: 0 0 0 255; + color3: 0 0 0 0; + text { + font: "Sans"; + size: 10; + min: 1 1; +// min: 0 1; + align: 0.0 0.5; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 224 224 224 255; + color3: 0 0 0 64; + } + } + part { name: "fg1"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1.to: "bg"; + rel2.relative: 1.0 0.5; + rel2.to: "bg"; + image { + normal: "bt_sm_hilight.png"; + border: 6 6 6 0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { name: "fg2"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1.to: "bg"; + rel2.to: "bg"; + image { + normal: "bt_sm_shine.png"; + border: 6 6 6 0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { + name: "event"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "go_active"; + signal: "elm,state,selected"; + source: "elm"; + action: STATE_SET "selected" 0.0; + target: "bg"; + target: "fg1"; + target: "fg2"; + target: "elm.text"; + } + program { + name: "go_passive"; + signal: "elm,state,unselected"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "fg1"; + target: "fg2"; + target: "elm.text"; + transition: LINEAR 0.1; + } + } + } } Added: trunk/TMP/st/elementary/data/themes/ilist_1.png Property changes on: trunk/TMP/st/elementary/data/themes/ilist_1.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/ilist_2.png Property changes on: trunk/TMP/st/elementary/data/themes/ilist_2.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/ilist_item_shadow.png Property changes on: trunk/TMP/st/elementary/data/themes/ilist_item_shadow.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-01-07 12:59:34 UTC (rev 38487) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-01-07 13:49:08 UTC (rev 38488) @@ -1484,6 +1484,42 @@ } static void +my_bt_20(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *li; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "list", ELM_WIN_BASIC); + elm_win_title_set(win, "List"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + li = elm_list_add(win); + elm_win_resize_object_add(win, li); + evas_object_size_hint_weight_set(li, 1.0, 1.0); + + elm_list_item_append(li, "Hello", NULL, NULL, NULL, NULL, NULL); + elm_list_item_append(li, "World", NULL, NULL, NULL, NULL, NULL); + elm_list_item_append(li, "How", NULL, NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Are", NULL, NULL, NULL, NULL, NULL); + elm_list_item_append(li, "You", NULL, NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Doing", NULL, NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Out", NULL, NULL, NULL, NULL, NULL); + elm_list_item_append(li, "There", NULL, NULL, NULL, NULL, NULL); + elm_list_item_append(li, "?", NULL, NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL, NULL, NULL); + + evas_object_show(li); + + evas_object_resize(win, 320, 300); + evas_object_show(win); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *bx, *bt, *sc, *fr; @@ -1709,6 +1745,13 @@ elm_box_pack_end(bx, bt); evas_object_show(bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "List"); + evas_object_smart_callback_add(bt, "clicked", my_bt_20, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + /* set an initial window size */ evas_object_resize(win, 320, 520); /* show the window */ Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-01-07 12:59:34 UTC (rev 38487) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-01-07 13:49:08 UTC (rev 38488) @@ -400,6 +400,19 @@ * "clicked" - when the user clicks on a toolbar item and becomes selected */ + typedef enum _Elementary_List_Mode + { + ELM_LIST_COMPRESS, + ELM_LIST_SCROLL, + ELM_LIST_LIMIT + } Elementary_List_Mode; + typedef struct _Elm_List_Item Elm_List_Item; + EAPI Evas_Object *elm_list_add(Evas_Object *parent); + EAPI Elm_List_Item *elm_list_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data); + /* smart callbacks called: + * "clicked" - when the user double-clicked an item + */ + //////////////////////////////////////////////////////////////////////////// /// FIXME: TODO LIST /////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// Modified: trunk/TMP/st/elementary/src/lib/Makefile.am =================================================================== --- trunk/TMP/st/elementary/src/lib/Makefile.am 2009-01-07 12:59:34 UTC (rev 38487) +++ trunk/TMP/st/elementary/src/lib/Makefile.am 2009-01-07 13:49:08 UTC (rev 38488) @@ -40,6 +40,7 @@ elm_bubble.c \ elm_photo.c \ elm_toolbar.c \ +elm_list.c \ \ elc_notepad.c \ elc_anchorview.c \ Modified: trunk/TMP/st/elementary/src/lib/elc_hoversel.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elc_hoversel.c 2009-01-07 12:59:34 UTC (rev 38487) +++ trunk/TMP/st/elementary/src/lib/elc_hoversel.c 2009-01-07 13:49:08 UTC (rev 38488) @@ -8,7 +8,7 @@ { Evas_Object *btn, *hover; Evas_Object *hover_parent; - Evas_List *items; + Eina_List *items; }; struct _Item Added: trunk/TMP/st/elementary/src/lib/elm_list.c |
From: Enlightenment S. <no-...@en...> - 2009-01-08 14:29:25
|
Log: more list work - also some minimal safety stuff. Author: raster Date: 2009-01-08 06:29:13 -0800 (Thu, 08 Jan 2009) New Revision: 38503 Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elc_hoversel.c trunk/TMP/st/elementary/src/lib/elm_button.c trunk/TMP/st/elementary/src/lib/elm_icon.c trunk/TMP/st/elementary/src/lib/elm_list.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2009-01-08 14:12:25 UTC (rev 38502) +++ trunk/TMP/st/elementary/data/themes/default.edc 2009-01-08 14:29:13 UTC (rev 38503) @@ -4411,47 +4411,47 @@ /////////////////////////////////////////////////////////////////////////////// group { name: "elm/icon/home/default"; min: 32 32; images.image: "icon_home.png" COMP; parts { part { name: "base"; - description { state: "default" 0.0; aspect: 1.0 1.0; + description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH; image.normal: "icon_home.png"; } } } } group { name: "elm/icon/close/default"; min: 32 32; images.image: "icon_close.png" COMP; parts { part { name: "base"; - description { state: "default" 0.0; aspect: 1.0 1.0; + description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH; image.normal: "icon_close.png"; } } } } group { name: "elm/icon/apps/default"; min: 32 32; images.image: "icon_apps.png" COMP; parts { part { name: "base"; - description { state: "default" 0.0; aspect: 1.0 1.0; + description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH; image.normal: "icon_apps.png"; } } } } group { name: "elm/icon/arrow_up/default"; min: 32 32; images.image: "icon_arrow_up.png" COMP; parts { part { name: "base"; - description { state: "default" 0.0; aspect: 1.0 1.0; + description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH; image.normal: "icon_arrow_up.png"; } } } } group { name: "elm/icon/arrow_down/default"; min: 32 32; images.image: "icon_arrow_down.png" COMP; parts { part { name: "base"; - description { state: "default" 0.0; aspect: 1.0 1.0; + description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH; image.normal: "icon_arrow_down.png"; } } } } group { name: "elm/icon/arrow_left/default"; min: 32 32; images.image: "icon_arrow_left.png" COMP; parts { part { name: "base"; - description { state: "default" 0.0; aspect: 1.0 1.0; + description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH; image.normal: "icon_arrow_left.png"; } } } } group { name: "elm/icon/arrow_right/default"; min: 32 32; images.image: "icon_arrow_right.png" COMP; parts { part { name: "base"; - description { state: "default" 0.0; aspect: 1.0 1.0; + description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH; image.normal: "icon_arrow_right.png"; } } } } group { name: "elm/icon/chat/default"; min: 32 32; images.image: "icon_chat.png" COMP; parts { part { name: "base"; - description { state: "default" 0.0; aspect: 1.0 1.0; + description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH; image.normal: "icon_chat.png"; } } } } group { name: "elm/icon/clock/default"; min: 32 32; images.image: "icon_clock.png" COMP; parts { part { name: "base"; - description { state: "default" 0.0; aspect: 1.0 1.0; + description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH; image.normal: "icon_clock.png"; } } } } group { name: "elm/icon/delete/default"; min: 32 32; images.image: "icon_delete.png" COMP; parts { part { name: "base"; - description { state: "default" 0.0; aspect: 1.0 1.0; + description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH; image.normal: "icon_delete.png"; } } } } group { name: "elm/icon/edit/default"; min: 32 32; images.image: "icon_edit.png" COMP; parts { part { name: "base"; - description { state: "default" 0.0; aspect: 1.0 1.0; + description { state: "default" 0.0; aspect: 1.0 1.0; aspect_preference: BOTH; image.normal: "icon_edit.png"; } } } } /////////////////////////////////////////////////////////////////////////////// @@ -4885,8 +4885,6 @@ description { state: "default" 0.0; align: 0.0 0.5; - aspect: 1.0 1.0; - aspect_preference: VERTICAL; rel1 { relative: 0.0 0.0; offset: 4 4; @@ -4898,6 +4896,22 @@ } } part { + name: "elm.swallow.end"; + type: SWALLOW; + description { + state: "default" 0.0; + align: 1.0 0.5; + rel1 { + relative: 1.0 0.0; + offset: -5 4; + } + rel2 { + relative: 1.0 1.0; + offset: -5 -5; + } + } + } + part { name: "elm.text"; type: TEXT; effect: SOFT_SHADOW; @@ -4909,11 +4923,12 @@ rel1 { to_x: "elm.swallow.icon"; relative: 1.0 0.0; - offset: 4 4; + offset: 0 4; } rel2 { - relative: 1.0 1.0; - offset: -5 -5; + to_x: "elm.swallow.end"; + relative: 0.0 1.0; + offset: -1 -5; } color: 0 0 0 255; color3: 0 0 0 0; @@ -4971,6 +4986,7 @@ part { name: "event"; type: RECT; + repeat_events: 1; description { state: "default" 0.0; color: 0 0 0 0; @@ -5020,6 +5036,7 @@ normal: "ilist_2.png"; border: 2 2 2 2; } + fill.smooth: 0; } } part { name: "bg"; @@ -5039,7 +5056,6 @@ normal: "bt_sm_base1.png"; border: 6 6 6 6; } - fill.smooth: 0; } description { state: "selected" 0.0; inherit: "default" 0.0; @@ -5061,8 +5077,6 @@ description { state: "default" 0.0; align: 0.0 0.5; - aspect: 1.0 1.0; - aspect_preference: VERTICAL; rel1 { relative: 0.0 0.0; offset: 4 4; @@ -5074,6 +5088,22 @@ } } part { + name: "elm.swallow.end"; + type: SWALLOW; + description { + state: "default" 0.0; + align: 1.0 0.5; + rel1 { + relative: 1.0 0.0; + offset: -5 4; + } + rel2 { + relative: 1.0 1.0; + offset: -5 -5; + } + } + } + part { name: "elm.text"; type: TEXT; effect: SOFT_SHADOW; @@ -5085,11 +5115,12 @@ rel1 { to_x: "elm.swallow.icon"; relative: 1.0 0.0; - offset: 4 4; + offset: 0 4; } rel2 { - relative: 1.0 1.0; - offset: -5 -5; + to_x: "elm.swallow.end"; + relative: 0.0 1.0; + offset: -1 -5; } color: 0 0 0 255; color3: 0 0 0 0; @@ -5147,6 +5178,7 @@ part { name: "event"; type: RECT; + repeat_events: 1; description { state: "default" 0.0; color: 0 0 0 0; Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-01-08 14:12:25 UTC (rev 38502) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-01-08 14:29:13 UTC (rev 38503) @@ -1486,7 +1486,7 @@ static void my_bt_20(void *data, Evas_Object *obj, void *event_info) { - Evas_Object *win, *bg, *li; + Evas_Object *win, *bg, *li, *ic, *ic2, *bx; char buf[PATH_MAX]; win = elm_win_add(NULL, "list", ELM_WIN_BASIC); @@ -1502,17 +1502,72 @@ elm_win_resize_object_add(win, li); evas_object_size_hint_weight_set(li, 1.0, 1.0); - elm_list_item_append(li, "Hello", NULL, NULL, NULL, NULL, NULL); - elm_list_item_append(li, "World", NULL, NULL, NULL, NULL, NULL); - elm_list_item_append(li, "How", NULL, NULL, NULL, NULL, NULL); - elm_list_item_append(li, "Are", NULL, NULL, NULL, NULL, NULL); - elm_list_item_append(li, "You", NULL, NULL, NULL, NULL, NULL); - elm_list_item_append(li, "Doing", NULL, NULL, NULL, NULL, NULL); - elm_list_item_append(li, "Out", NULL, NULL, NULL, NULL, NULL); - elm_list_item_append(li, "There", NULL, NULL, NULL, NULL, NULL); - elm_list_item_append(li, "?", NULL, NULL, NULL, NULL, NULL); - elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL, 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_list_item_append(li, "Hello", ic, NULL, NULL, NULL); + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + elm_icon_scale_set(ic, 0, 0); + elm_icon_file_set(ic, buf, NULL); + elm_list_item_append(li, "world", ic, NULL, NULL, NULL); + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "edit"); + elm_icon_scale_set(ic, 0, 0); + elm_list_item_append(li, ".", ic, NULL, NULL, NULL); + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "delete"); + elm_icon_scale_set(ic, 0, 0); + ic2 = elm_icon_add(win); + elm_icon_standard_set(ic2, "clock"); + elm_icon_scale_set(ic2, 0, 0); + elm_list_item_append(li, "How", ic, ic2, NULL, NULL); + + bx = elm_box_add(win); + elm_box_horizontal_set(bx, 1); + + 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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.5); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + 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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.0); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + 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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.0, 1.0); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + elm_list_item_append(li, "are", bx, NULL, NULL, NULL); + + elm_list_item_append(li, "you", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "out", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "there", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "today", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "?", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "are", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "some", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "more", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "items", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Maybe this one is even longer so we can test long long items.", NULL, NULL, NULL, NULL); + + elm_list_go(li); + evas_object_show(li); evas_object_resize(win, 320, 300); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-01-08 14:12:25 UTC (rev 38502) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-01-08 14:29:13 UTC (rev 38503) @@ -408,7 +408,7 @@ } Elementary_List_Mode; typedef struct _Elm_List_Item Elm_List_Item; EAPI Evas_Object *elm_list_add(Evas_Object *parent); - EAPI Elm_List_Item *elm_list_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data); + EAPI Elm_List_Item *elm_list_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data); /* smart callbacks called: * "clicked" - when the user double-clicked an item */ @@ -426,13 +426,13 @@ // //// (incomplete - medium priority) // * entry selection conflicts with finger scroll (make selection start/stop work on signals?) - // * disabled not supported // * tab widget focusing (not useful for touchscreen tho...) // * on the fly theme changes - test (should work) // * need a hold-scroll counter in elm_widget // * add fullscreen mode on/off for windows // * hoversel only vertical right now - make horizontal +// * set scaling per widget (and if scaling should be inheited by children) // //// (more widgets/features - medium priority) // * biglist widget (restricted format label + icon intended for massive lists) @@ -455,6 +455,7 @@ // * imageview widget (for large not iconic images) // * tiled image + zoom widget (tiled map viewer) // * dialpad widget - need one with a phone dialpad +// * file selector widget // //// (improvements - low priority) // * use evas's new box instead of a box smart Modified: trunk/TMP/st/elementary/src/lib/elc_hoversel.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elc_hoversel.c 2009-01-08 14:12:25 UTC (rev 38502) +++ trunk/TMP/st/elementary/src/lib/elc_hoversel.c 2009-01-08 14:29:13 UTC (rev 38503) @@ -18,7 +18,7 @@ const char *icon_file; Elm_Icon_Type icon_type; void (*func) (void *data, Evas_Object *obj, void *event_info); - const void *data; + void *data; }; static void _del_pre_hook(Evas_Object *obj); @@ -38,6 +38,7 @@ _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; elm_hoversel_hover_end(obj); free(wd); } @@ -46,6 +47,7 @@ _sizing_eval(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1; evas_object_size_hint_min_get(wd->btn, &minw, &minh); @@ -80,6 +82,7 @@ _button_clicked(void *data, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(data); + if (!wd) return; Evas_Object *bt, *bx, *ic; Eina_List *l; wd->hover = elm_hover_add(data); @@ -129,6 +132,7 @@ _parent_del(void *data, Evas *e, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(data); + if (!wd) return; wd->hover_parent = NULL; } @@ -160,6 +164,7 @@ elm_hoversel_hover_parent_set(Evas_Object *obj, Evas_Object *parent) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; if (wd->hover_parent) evas_object_event_callback_del(wd->hover_parent, EVAS_CALLBACK_DEL, _parent_del); wd->hover_parent = parent; @@ -171,6 +176,7 @@ elm_hoversel_label_set(Evas_Object *obj, const char *label) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; elm_button_label_set(wd->btn, label); } @@ -178,6 +184,7 @@ elm_hoversel_icon_set(Evas_Object *obj, Evas_Object *icon) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; elm_button_icon_set(wd->btn, icon); } @@ -185,6 +192,7 @@ elm_hoversel_hover_end(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; if (wd->hover) evas_object_del(wd->hover); wd->hover = NULL; evas_object_smart_callback_call(obj, "dismissed", NULL); @@ -194,6 +202,7 @@ elm_hoversel_item_add(Evas_Object *obj, const char *label, const char *icon_file, Elm_Icon_Type icon_type, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return NULL; Item *it = calloc(1, sizeof(Item)); if (!it) return NULL; wd->items = eina_list_append(wd->items, it); @@ -202,7 +211,7 @@ it->icon_file = eina_stringshare_add(icon_file); it->icon_type = icon_type; it->func = func; - it->data = data; + it->data = (void *)data; return (Elm_Hoversel_Item *)it; } @@ -211,6 +220,7 @@ { Item *it = (Item *)item; Widget_Data *wd = elm_widget_data_get(it->obj); + if (!wd) return; elm_hoversel_hover_end(it->obj); wd->items = eina_list_remove(wd->items, it); eina_stringshare_del(it->label); Modified: trunk/TMP/st/elementary/src/lib/elm_button.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_button.c 2009-01-08 14:12:25 UTC (rev 38502) +++ trunk/TMP/st/elementary/src/lib/elm_button.c 2009-01-08 14:29:13 UTC (rev 38503) @@ -22,6 +22,7 @@ _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; if (wd->label) eina_stringshare_del(wd->label); if (wd->style) eina_stringshare_del(wd->style); free(wd); @@ -31,6 +32,7 @@ _theme_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; if (wd->style) _elm_theme_set(wd->btn, "button", "base", wd->style); else _elm_theme_set(wd->btn, "button", "base", "default"); if (wd->icon) @@ -52,6 +54,7 @@ _sizing_eval(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1; edje_object_size_min_calc(wd->btn, &minw, &minh); @@ -63,6 +66,7 @@ _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(data); + if (!wd) return; if (obj != wd->icon) return; edje_object_part_swallow(wd->btn, "elm.swallow.content", obj); _sizing_eval(data); @@ -72,6 +76,7 @@ _sub_del(void *data, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; Evas_Object *sub = event_info; if (sub == wd->icon) { @@ -88,6 +93,7 @@ _signal_clicked(void *data, Evas_Object *obj, const char *emission, const char *source) { Widget_Data *wd = elm_widget_data_get(data); + if (!wd) return; evas_object_smart_callback_call(data, "clicked", NULL); } @@ -120,6 +126,7 @@ elm_button_label_set(Evas_Object *obj, const char *label) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; Evas_Coord mw, mh; if (wd->label) eina_stringshare_del(wd->label); @@ -143,6 +150,7 @@ elm_button_icon_set(Evas_Object *obj, Evas_Object *icon) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; if ((wd->icon != icon) && (wd->icon)) elm_widget_sub_object_del(obj, wd->icon); if ((icon) && (wd->icon != icon)) @@ -164,6 +172,7 @@ elm_button_style_set(Evas_Object *obj, const char *style) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; if (wd->style) eina_stringshare_del(wd->style); if (style) wd->style = eina_stringshare_add(style); else wd->style = NULL; Modified: trunk/TMP/st/elementary/src/lib/elm_icon.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_icon.c 2009-01-08 14:12:25 UTC (rev 38502) +++ trunk/TMP/st/elementary/src/lib/elm_icon.c 2009-01-08 14:29:13 UTC (rev 38503) @@ -23,6 +23,7 @@ _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; if (wd->stdicon) eina_stringshare_del(wd->stdicon); free(wd); } @@ -31,6 +32,7 @@ _theme_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; if (wd->stdicon) _elm_theme_icon_set(wd->img, wd->stdicon, "default"); _sizing_eval(obj); @@ -40,6 +42,7 @@ _sizing_eval(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1; int w, h; @@ -107,6 +110,7 @@ elm_icon_file_set(Evas_Object *obj, const char *file, const char *group) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; const char *p; if (!file) return; @@ -123,6 +127,7 @@ elm_icon_standard_set(Evas_Object *obj, const char *name) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; if (!name) return; if (wd->stdicon) eina_stringshare_del(wd->stdicon); @@ -135,6 +140,7 @@ elm_icon_smooth_set(Evas_Object *obj, Evas_Bool smooth) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; wd->smooth = smooth; _sizing_eval(obj); } @@ -143,6 +149,7 @@ elm_icon_no_scale_set(Evas_Object *obj, Evas_Bool no_scale) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; wd->no_scale = no_scale; _sizing_eval(obj); } @@ -151,6 +158,7 @@ elm_icon_scale_set(Evas_Object *obj, Evas_Bool scale_up, Evas_Bool scale_down) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; wd->scale_up = scale_up; wd->scale_down = scale_down; _sizing_eval(obj); @@ -160,6 +168,7 @@ elm_icon_fill_outside_set(Evas_Object *obj, Evas_Bool fill_outside) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; wd->fill_outside = fill_outside; _sizing_eval(obj); } Modified: trunk/TMP/st/elementary/src/lib/elm_list.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_list.c 2009-01-08 14:12:25 UTC (rev 38502) +++ trunk/TMP/st/elementary/src/lib/elm_list.c 2009-01-08 14:29:13 UTC (rev 38503) @@ -11,6 +11,7 @@ Eina_List *selected; Elementary_List_Mode mode; Evas_Bool on_hold : 1; + Evas_Coord minw[2], minh[2]; }; struct _Item @@ -18,7 +19,7 @@ Evas_Object *obj; Evas_Object *base; const char *label; - Evas_Object *icon, *indicator, *end; + Evas_Object *icon, *end; void (*func) (void *data, Evas_Object *obj, void *event_info); const void *data; Evas_Bool even : 1; @@ -78,7 +79,7 @@ if ((selectraise) && (!strcmp(selectraise, "on"))) evas_object_raise(it->base); it->selected = 1; - if (it->func) it->func(it->data, it->obj, it); + if (it->func) it->func((void *)it->data, it->obj, it); } static void @@ -120,7 +121,7 @@ } static Item * -_item_new(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data) +_item_new(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data) { Widget_Data *wd = elm_widget_data_get(obj); Item *it; @@ -129,7 +130,6 @@ it->obj = obj; it->label = eina_stringshare_add(label); it->icon = icon; - it->indicator = indicator; it->end = end; it->func = func; it->data = data; @@ -148,13 +148,41 @@ { Widget_Data *wd = elm_widget_data_get(obj); Eina_List *l; - int i; + Evas_Coord minw[2] = { 0, 0 }, minh[2] = { 0, 0 }; + int i, redo = 0; + for (l = wd->items; l; l = l->next) + { + Evas_Coord mw, mh; + Item *it = l->data; + if (it->icon) + { + evas_object_size_hint_min_get(it->icon, &mw, &mh); + if (mw > minw[0]) minw[0] = mw; + if (mh > minh[0]) minh[0] = mh; + } + if (it->end) + { + evas_object_size_hint_min_get(it->end, &mw, &mh); + if (mw > minw[1]) minw[1] = mw; + if (mh > minh[1]) minh[1] = mh; + } + } + if ((minw[0] != wd->minw[0]) || (minw[1] != wd->minw[1]) || + (minw[0] != wd->minh[0]) || (minh[1] != wd->minh[1])) + { + wd->minw[0] = minw[0]; + wd->minw[1] = minw[1]; + wd->minh[0] = minh[0]; + wd->minh[1] = minh[1]; + redo = 1; + } + printf("%ix%i | %ix%i\n", minw[0], minh[0], minw[1], minh[1]); for (i = 0, l = wd->items; l; l = l->next, i++) { Item *it = l->data; it->even = i & 0x1; - if ((it->even != it->is_even) || (!it->fixed)) + if ((it->even != it->is_even) || (!it->fixed) || (redo)) { const char *stacking; if (it->even) @@ -170,6 +198,27 @@ evas_object_raise(it->base); } edje_object_part_text_set(it->base, "elm.text", it->label); + if ((!it->icon) && (minw[0] > 0)) + { + it->icon = evas_object_rectangle_add(evas_object_evas_get(it->base)); + evas_object_color_set(it->icon, 0, 0, 0, 0); + } + if ((!it->end) && (minw[1] > 0)) + { + it->end = evas_object_rectangle_add(evas_object_evas_get(it->base)); + evas_object_color_set(it->end, 0, 0, 0, 0); + } + if (it->icon) + { + edje_extern_object_min_size_set(it->icon, minw[0], minh[0]); + printf("|%s| %ix%i\n", it->label, minw[0], minh[0]); + edje_object_part_swallow(it->base, "elm.swallow.icon", it->icon); + } + if (it->end) + { + edje_extern_object_min_size_set(it->end, minw[1], minh[1]); + edje_object_part_swallow(it->base, "elm.swallow.end", it->end); + } if (!it->fixed) { Evas_Coord minw, minh; @@ -177,6 +226,7 @@ edje_object_message_signal_process(it->base); edje_object_size_min_calc(it->base, &minw, &minh); if (wd->mode == ELM_LIST_COMPRESS) minw = 0; + printf("-- %ix%i\n", minw, minh); evas_object_size_hint_min_set(it->base, minw, minh); evas_object_show(it->base); } @@ -206,66 +256,85 @@ elm_widget_resize_object_set(obj, wd->scroller); wd->box = elm_box_add(parent); - + elm_box_homogenous_set(wd->box, 1); evas_object_size_hint_weight_set(wd->box, 1.0, 0.0); evas_object_size_hint_align_set(wd->box, -1.0, 0.0); elm_scroller_content_set(wd->scroller, wd->box); evas_object_show(wd->box); - wd->mode = ELM_LIST_COMPRESS; + wd->mode = ELM_LIST_SCROLL; _sizing_eval(obj); return obj; } EAPI Elm_List_Item * -elm_list_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data) +elm_list_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data) { Widget_Data *wd = elm_widget_data_get(obj); - Item *it = _item_new(obj, label, icon, indicator, end, func, data); + Item *it = _item_new(obj, label, icon, end, func, data); wd->items = eina_list_append(wd->items, it); elm_box_pack_end(wd->box, it->base); - _fix_items(obj); return (Elm_List_Item *)it; } EAPI Elm_List_Item * -elm_list_item_prepend(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data) +elm_list_item_prepend(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data) { Widget_Data *wd = elm_widget_data_get(obj); - return NULL; + Item *it = _item_new(obj, label, icon, end, func, data); + wd->items = eina_list_prepend(wd->items, it); + elm_box_pack_start(wd->box, it->base); + return (Elm_List_Item *)it; } EAPI Elm_List_Item * -elm_list_item_insert_before(Evas_Object *obj, Elm_List_Item *before, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data) +elm_list_item_insert_before(Evas_Object *obj, Elm_List_Item *before, const char *label, Evas_Object *icon, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data) { Widget_Data *wd = elm_widget_data_get(obj); - return NULL; + Item *it = _item_new(obj, label, icon, end, func, data); + wd->items = eina_list_prepend_relative(wd->items, it, before); + elm_box_pack_before(wd->box, it->base, ((Item *)before)->base); + return (Elm_List_Item *)it; } EAPI Elm_List_Item * -elm_list_item_insert_after(Evas_Object *obj, Elm_List_Item *after, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data) +elm_list_item_insert_after(Evas_Object *obj, Elm_List_Item *after, const char *label, Evas_Object *icon, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data) { Widget_Data *wd = elm_widget_data_get(obj); - return NULL; + Item *it = _item_new(obj, label, icon, end, func, data); + wd->items = eina_list_append_relative(wd->items, it, after); + elm_box_pack_after(wd->box, it->base, ((Item *)after)->base); + return (Elm_List_Item *)it; } EAPI void +elm_list_go(Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + _fix_items(obj); +} + +EAPI void elm_list_multi_select_set(Evas_Object *obj, Evas_Bool multi) { Widget_Data *wd = elm_widget_data_get(obj); + // FIXME: implement } EAPI void elm_list_horizontal_mode_set(Evas_Object *obj, Elementary_List_Mode mode) { Widget_Data *wd = elm_widget_data_get(obj); + if (wd->mode == mode) return; + wd->mode = mode; } EAPI const Elm_List_Item * elm_list_selected_item_get(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + // FIXME: implement return NULL; } @@ -273,26 +342,40 @@ elm_list_items_get(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); - return NULL; + if (wd->selected) return wd->selected; + return wd->items; } EAPI void elm_list_item_selected_set(Elm_List_Item *item, Evas_Bool selected) { + Item *it = (Item *)item; + Widget_Data *wd = elm_widget_data_get(it->obj); + Eina_List *l; + if (it->selected) return; + for (l = wd->items; l; l = l->next) + { + Item *it2 = l->data; + if ((it2 != it) && (it2->selected)) _item_unselect(it2); + } + _item_select(it); } EAPI void elm_list_item_show(Elm_List_Item *item) { + // FIXME: implement } EAPI void elm_list_item_del(Elm_List_Item *item) { + // FIXME: implement } EAPI const void * elm_list_item_data_get(Elm_List_Item *item) { - return NULL; + Item *it = (Item *)item; + return it->data; } |
From: Enlightenment S. <no-...@en...> - 2009-01-09 03:03:47
|
Log: more list stuff working Author: raster Date: 2009-01-08 19:03:36 -0800 (Thu, 08 Jan 2009) New Revision: 38508 Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/elm_list.c trunk/TMP/st/elementary/src/lib/elm_scroller.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2009-01-09 01:50:35 UTC (rev 38507) +++ trunk/TMP/st/elementary/data/themes/default.edc 2009-01-09 03:03:36 UTC (rev 38508) @@ -4815,8 +4815,6 @@ mouse_events: 0; description { state: "default" 0.0; -// aspect: 6.4 6.4; -// aspect_preference: HORIZONTAL; align: 0.0 0.0; min: 0 10; rel1 { @@ -5209,4 +5207,412 @@ } } } + group { name: "elm/list/item_compress/default"; + data.item: "stacking" "above"; + data.item: "selectraise" "on"; + images { + image: "bt_sm_base1.png" COMP; + image: "bt_sm_shine.png" COMP; + image: "bt_sm_hilight.png" COMP; + image: "ilist_1.png" COMP; + image: "ilist_item_shadow.png" COMP; + } + parts { + part { + name: "base_sh"; + mouse_events: 0; + description { + state: "default" 0.0; + align: 0.0 0.0; + min: 0 10; + rel1 { + to: "base"; + relative: 0.0 1.0; + offset: 0 0; + } + rel2 { + to: "base"; + relative: 1.0 1.0; + offset: -1 0; + } + image { + normal: "ilist_item_shadow.png"; + } + fill.smooth: 0; + } + } + part { + name: "base"; + mouse_events: 0; + description { + state: "default" 0.0; + image { + normal: "ilist_1.png"; + border: 2 2 2 2; + } + fill.smooth: 0; + } + } + part { name: "bg"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1 { + relative: 0.0 0.0; + offset: -5 -5; + } + rel2 { + relative: 1.0 1.0; + offset: 4 4; + } + image { + normal: "bt_sm_base1.png"; + border: 6 6 6 6; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + rel1 { + relative: 0.0 0.0; + offset: -2 -2; + } + rel2 { + relative: 1.0 1.0; + offset: 1 1; + } + } + } + part { + name: "elm.swallow.icon"; + type: SWALLOW; + description { + state: "default" 0.0; + align: 0.0 0.5; + rel1 { + relative: 0.0 0.0; + offset: 4 4; + } + rel2 { + relative: 0.0 1.0; + offset: 4 -5; + } + } + } + part { + name: "elm.swallow.end"; + type: SWALLOW; + description { + state: "default" 0.0; + align: 1.0 0.5; + rel1 { + relative: 1.0 0.0; + offset: -5 4; + } + rel2 { + relative: 1.0 1.0; + offset: -5 -5; + } + } + } + part { + name: "elm.text"; + type: TEXT; + effect: SOFT_SHADOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 16 16; + rel1 { + to_x: "elm.swallow.icon"; + relative: 1.0 0.0; + offset: 0 4; + } + rel2 { + to_x: "elm.swallow.end"; + relative: 0.0 1.0; + offset: -1 -5; + } + color: 0 0 0 255; + color3: 0 0 0 0; + text { + font: "Sans"; + size: 10; +// min: 1 1; + min: 0 1; + align: 0.0 0.5; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 224 224 224 255; + color3: 0 0 0 64; + } + } + part { name: "fg1"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1.to: "bg"; + rel2.relative: 1.0 0.5; + rel2.to: "bg"; + image { + normal: "bt_sm_hilight.png"; + border: 6 6 6 0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { name: "fg2"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1.to: "bg"; + rel2.to: "bg"; + image { + normal: "bt_sm_shine.png"; + border: 6 6 6 0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { + name: "event"; + type: RECT; + repeat_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "go_active"; + signal: "elm,state,selected"; + source: "elm"; + action: STATE_SET "selected" 0.0; + target: "bg"; + target: "fg1"; + target: "fg2"; + target: "elm.text"; + } + program { + name: "go_passive"; + signal: "elm,state,unselected"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "fg1"; + target: "fg2"; + target: "elm.text"; + transition: LINEAR 0.1; + } + } + } + group { name: "elm/list/item_compress_odd/default"; + data.item: "stacking" "below"; + data.item: "selectraise" "on"; + images { + image: "bt_sm_base1.png" COMP; + image: "bt_sm_shine.png" COMP; + image: "bt_sm_hilight.png" COMP; + image: "ilist_2.png" COMP; + } + parts { + part { + name: "base"; + mouse_events: 0; + description { + state: "default" 0.0; + image { + normal: "ilist_2.png"; + border: 2 2 2 2; + } + fill.smooth: 0; + } + } + part { name: "bg"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1 { + relative: 0.0 0.0; + offset: -5 -5; + } + rel2 { + relative: 1.0 1.0; + offset: 4 4; + } + image { + normal: "bt_sm_base1.png"; + border: 6 6 6 6; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + rel1 { + relative: 0.0 0.0; + offset: -2 -2; + } + rel2 { + relative: 1.0 1.0; + offset: 1 1; + } + } + } + part { + name: "elm.swallow.icon"; + type: SWALLOW; + description { + state: "default" 0.0; + align: 0.0 0.5; + rel1 { + relative: 0.0 0.0; + offset: 4 4; + } + rel2 { + relative: 0.0 1.0; + offset: 4 -5; + } + } + } + part { + name: "elm.swallow.end"; + type: SWALLOW; + description { + state: "default" 0.0; + align: 1.0 0.5; + rel1 { + relative: 1.0 0.0; + offset: -5 4; + } + rel2 { + relative: 1.0 1.0; + offset: -5 -5; + } + } + } + part { + name: "elm.text"; + type: TEXT; + effect: SOFT_SHADOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 16 16; + rel1 { + to_x: "elm.swallow.icon"; + relative: 1.0 0.0; + offset: 0 4; + } + rel2 { + to_x: "elm.swallow.end"; + relative: 0.0 1.0; + offset: -1 -5; + } + color: 0 0 0 255; + color3: 0 0 0 0; + text { + font: "Sans"; + size: 10; +// min: 1 1; + min: 0 1; + align: 0.0 0.5; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 224 224 224 255; + color3: 0 0 0 64; + } + } + part { name: "fg1"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1.to: "bg"; + rel2.relative: 1.0 0.5; + rel2.to: "bg"; + image { + normal: "bt_sm_hilight.png"; + border: 6 6 6 0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { name: "fg2"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1.to: "bg"; + rel2.to: "bg"; + image { + normal: "bt_sm_shine.png"; + border: 6 6 6 0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { + name: "event"; + type: RECT; + repeat_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "go_active"; + signal: "elm,state,selected"; + source: "elm"; + action: STATE_SET "selected" 0.0; + target: "bg"; + target: "fg1"; + target: "fg2"; + target: "elm.text"; + } + program { + name: "go_passive"; + signal: "elm,state,unselected"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "fg1"; + target: "fg2"; + target: "elm.text"; + transition: LINEAR 0.1; + } + } + } } Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-01-09 01:50:35 UTC (rev 38507) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-01-09 03:03:36 UTC (rev 38508) @@ -1575,6 +1575,181 @@ } static void +my_bt_21(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *li, *ic, *ic2, *bx; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "list-2", ELM_WIN_BASIC); + elm_win_title_set(win, "List 2"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + li = elm_list_add(win); + elm_win_resize_object_add(win, li); + evas_object_size_hint_weight_set(li, 1.0, 1.0); + elm_list_horizontal_mode_set(li, ELM_LIST_LIMIT); + + 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_list_item_append(li, "Hello", ic, NULL, NULL, NULL); + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + elm_icon_scale_set(ic, 0, 0); + elm_icon_file_set(ic, buf, NULL); + elm_list_item_append(li, "world", ic, NULL, NULL, NULL); + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "edit"); + elm_icon_scale_set(ic, 0, 0); + elm_list_item_append(li, ".", ic, NULL, NULL, NULL); + + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "delete"); + elm_icon_scale_set(ic, 0, 0); + ic2 = elm_icon_add(win); + elm_icon_standard_set(ic2, "clock"); + elm_icon_scale_set(ic2, 0, 0); + elm_list_item_append(li, "How", ic, ic2, NULL, NULL); + + bx = elm_box_add(win); + elm_box_horizontal_set(bx, 1); + + 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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.5); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + 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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.0); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + elm_list_item_append(li, "are", bx, NULL, NULL, NULL); + + elm_list_item_append(li, "you", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "out", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "there", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "today", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "?", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "are", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "some", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "more", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "items", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Longer label.", NULL, NULL, NULL, NULL); + + elm_list_go(li); + + evas_object_show(li); + + evas_object_resize(win, 320, 300); + evas_object_show(win); +} + +static void +my_bt_22(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *li, *ic, *ic2, *bx; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "list-3", ELM_WIN_BASIC); + elm_win_title_set(win, "List 3"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + li = elm_list_add(win); + elm_win_resize_object_add(win, li); + evas_object_size_hint_weight_set(li, 1.0, 1.0); + elm_list_horizontal_mode_set(li, ELM_LIST_COMPRESS); + + 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_list_item_append(li, "Hello", ic, NULL, NULL, NULL); + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + elm_icon_scale_set(ic, 0, 0); + elm_icon_file_set(ic, buf, NULL); + elm_list_item_append(li, "world", ic, NULL, NULL, NULL); + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "edit"); + elm_icon_scale_set(ic, 0, 0); + elm_list_item_append(li, ".", ic, NULL, NULL, NULL); + + ic = elm_icon_add(win); + elm_icon_standard_set(ic, "delete"); + elm_icon_scale_set(ic, 0, 0); + ic2 = elm_icon_add(win); + elm_icon_standard_set(ic2, "clock"); + elm_icon_scale_set(ic2, 0, 0); + elm_list_item_append(li, "How", ic, ic2, NULL, NULL); + + bx = elm_box_add(win); + elm_box_horizontal_set(bx, 1); + + 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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.5); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + 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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.5, 0.0); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + + 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_icon_scale_set(ic, 0, 0); + evas_object_size_hint_align_set(ic, 0.0, 1.0); + elm_box_pack_end(bx, ic); + evas_object_show(ic); + elm_list_item_append(li, "are", bx, NULL, NULL, NULL); + + elm_list_item_append(li, "you", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "doing", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "out", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "there", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "today", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "?", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Here", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "are", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "some", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "more", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "items", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL, NULL); + elm_list_item_append(li, "Maybe this one is even longer so we can test long long items.", NULL, NULL, NULL, NULL); + + elm_list_go(li); + + evas_object_show(li); + + evas_object_resize(win, 320, 300); + evas_object_show(win); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *bx, *bt, *sc, *fr; @@ -1807,6 +1982,20 @@ elm_box_pack_end(bx, bt); evas_object_show(bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "List 2"); + evas_object_smart_callback_add(bt, "clicked", my_bt_21, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "List 3"); + evas_object_smart_callback_add(bt, "clicked", my_bt_22, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + /* set an initial window size */ evas_object_resize(win, 320, 520); /* show the window */ Modified: trunk/TMP/st/elementary/src/lib/elm_list.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_list.c 2009-01-09 01:50:35 UTC (rev 38507) +++ trunk/TMP/st/elementary/src/lib/elm_list.c 2009-01-09 03:03:36 UTC (rev 38508) @@ -26,6 +26,8 @@ Evas_Bool is_even : 1; Evas_Bool fixed : 1; Evas_Bool selected : 1; + Evas_Bool dummy_icon : 1; + Evas_Bool dummy_end : 1; }; static void _del_hook(Evas_Object *obj); @@ -45,6 +47,8 @@ Widget_Data *wd = elm_widget_data_get(obj); Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1; + evas_object_size_hint_min_get(wd->scroller, &minw, &minh); + evas_object_size_hint_max_get(wd->scroller, &maxw, &maxh); evas_object_size_hint_min_set(obj, minw, minh); evas_object_size_hint_max_set(obj, maxw, maxh); } @@ -149,6 +153,7 @@ Widget_Data *wd = elm_widget_data_get(obj); Eina_List *l; Evas_Coord minw[2] = { 0, 0 }, minh[2] = { 0, 0 }; + Evas_Coord mw, mh; int i, redo = 0; for (l = wd->items; l; l = l->next) @@ -177,7 +182,6 @@ wd->minh[1] = minh[1]; redo = 1; } - printf("%ix%i | %ix%i\n", minw[0], minh[0], minw[1], minh[1]); for (i = 0, l = wd->items; l; l = l->next, i++) { Item *it = l->data; @@ -185,10 +189,21 @@ if ((it->even != it->is_even) || (!it->fixed) || (redo)) { const char *stacking; - if (it->even) - _elm_theme_set(it->base, "list", "item", "default"); + + if (wd->mode == ELM_LIST_COMPRESS) + { + if (it->even) + _elm_theme_set(it->base, "list", "item_compress", "default"); + else + _elm_theme_set(it->base, "list", "item_compress_odd", "default"); + } else - _elm_theme_set(it->base, "list", "item_odd", "default"); + { + if (it->even) + _elm_theme_set(it->base, "list", "item", "default"); + else + _elm_theme_set(it->base, "list", "item_odd", "default"); + } stacking = edje_object_data_get(it->base, "stacking"); if (stacking) { @@ -198,20 +213,21 @@ evas_object_raise(it->base); } edje_object_part_text_set(it->base, "elm.text", it->label); - if ((!it->icon) && (minw[0] > 0)) + if ((!it->icon) && (minh[0] > 0)) { it->icon = evas_object_rectangle_add(evas_object_evas_get(it->base)); evas_object_color_set(it->icon, 0, 0, 0, 0); + it->dummy_icon = 1; } - if ((!it->end) && (minw[1] > 0)) + if ((!it->end) && (minh[1] > 0)) { it->end = evas_object_rectangle_add(evas_object_evas_get(it->base)); evas_object_color_set(it->end, 0, 0, 0, 0); + it->dummy_end = 1; } if (it->icon) { edje_extern_object_min_size_set(it->icon, minw[0], minh[0]); - printf("|%s| %ix%i\n", it->label, minw[0], minh[0]); edje_object_part_swallow(it->base, "elm.swallow.icon", it->icon); } if (it->end) @@ -221,19 +237,21 @@ } if (!it->fixed) { - Evas_Coord minw, minh; - edje_object_message_signal_process(it->base); - edje_object_size_min_calc(it->base, &minw, &minh); - if (wd->mode == ELM_LIST_COMPRESS) minw = 0; - printf("-- %ix%i\n", minw, minh); - evas_object_size_hint_min_set(it->base, minw, minh); + edje_object_size_min_calc(it->base, &mw, &mh); + evas_object_size_hint_min_set(it->base, mw, mh); evas_object_show(it->base); } it->fixed = 1; it->is_even = it->even; } } + 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->scroller, 1, 0); + else + elm_scroller_content_min_limit(wd->scroller, 0, 0); _sizing_eval(obj); } @@ -328,6 +346,10 @@ Widget_Data *wd = elm_widget_data_get(obj); if (wd->mode == mode) return; wd->mode = mode; + if (wd->mode == ELM_LIST_LIMIT) + elm_scroller_content_min_limit(wd->scroller, 1, 0); + else + elm_scroller_content_min_limit(wd->scroller, 0, 0); } EAPI const Elm_List_Item * @@ -343,6 +365,7 @@ { Widget_Data *wd = elm_widget_data_get(obj); if (wd->selected) return wd->selected; + // FIXME: implement return wd->items; } @@ -379,3 +402,19 @@ Item *it = (Item *)item; return it->data; } + +EAPI Evas_Object * +elm_list_item_icon_get(Elm_List_Item *item) +{ + Item *it = (Item *)item; + if (it->dummy_icon) return NULL; + return it->icon; +} + +EAPI Evas_Object * +elm_list_item_end_get(Elm_List_Item *item) +{ + Item *it = (Item *)item; + if (it->dummy_end) return NULL; + return it->end; +} Modified: trunk/TMP/st/elementary/src/lib/elm_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_scroller.c 2009-01-09 01:50:35 UTC (rev 38507) +++ trunk/TMP/st/elementary/src/lib/elm_scroller.c 2009-01-09 03:03:36 UTC (rev 38508) @@ -70,6 +70,7 @@ 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; + printf("%i : %i + %i\n",wd->min_w, vmw, minw); evas_object_size_hint_min_set(obj, w, h); } |
From: Enlightenment S. <no-...@en...> - 2009-01-15 13:43:46
|
Log: fix list slowness with edje complaints on min size. also handle sizing icons down when icon allowed to down-scale. Author: raster Date: 2009-01-15 03:34:39 -0800 (Thu, 15 Jan 2009) New Revision: 38593 Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_carousel.c trunk/TMP/st/elementary/src/lib/elm_list.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2009-01-15 11:16:51 UTC (rev 38592) +++ trunk/TMP/st/elementary/data/themes/default.edc 2009-01-15 11:34:39 UTC (rev 38593) @@ -4817,6 +4817,7 @@ state: "default" 0.0; align: 0.0 0.0; min: 0 10; + fixed: 1 1; rel1 { to: "base"; relative: 0.0 1.0; Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-01-15 11:16:51 UTC (rev 38592) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-01-15 11:34:39 UTC (rev 38593) @@ -1751,6 +1751,25 @@ } static void +my_bt_23(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "carousel", ELM_WIN_BASIC); + elm_win_title_set(win, "Carousel"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + evas_object_resize(win, 320, 240); + evas_object_show(win); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *bx, *bt, *sc, *fr; @@ -1997,6 +2016,13 @@ elm_box_pack_end(bx, bt); evas_object_show(bt); + bt = elm_button_add(win); + elm_button_label_set(bt, "Carousel"); + evas_object_smart_callback_add(bt, "clicked", my_bt_23, NULL); + evas_object_size_hint_align_set(bt, -1.0, 0.0); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + /* set an initial window size */ evas_object_resize(win, 320, 520); /* show the window */ Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-01-15 11:16:51 UTC (rev 38592) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-01-15 11:34:39 UTC (rev 38593) @@ -487,6 +487,7 @@ // * file selector widget // //// (improvements - low priority) +// * need a way to set a preferred size of a widget (but not min or max). // * merge with gurana // * use evas's new box instead of a box smart // * use evas's table instead of a table smart Modified: trunk/TMP/st/elementary/src/lib/elm_carousel.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_carousel.c 2009-01-15 11:16:51 UTC (rev 38592) +++ trunk/TMP/st/elementary/src/lib/elm_carousel.c 2009-01-15 11:34:39 UTC (rev 38593) @@ -11,7 +11,6 @@ Evas_Object *scr, *bx; Eina_List *items; int icon_size; - Evas_Bool scrollable : 1; }; struct _Item @@ -113,16 +112,8 @@ evas_object_size_hint_min_get(wd->bx, &minw, &minh); evas_object_resize(wd->bx, minw, minh); elm_smart_scroller_child_viewport_size_get(wd->scr, &vw, &vh); - if (wd->scrollable) - { - minw = 500 - vw; - minh = minh + (500 - vh); - } - else - { - minw = minw + (500 - vw); - minh = minh + (500 - vh); - } + minw = minw + (500 - vw); + minh = minh + (500 - vh); evas_object_size_hint_min_set(obj, minw, minh); evas_object_size_hint_max_set(obj, maxw, maxh); } @@ -183,7 +174,6 @@ ELM_SMART_SCROLLER_POLICY_OFF); wd->icon_size = 32; - wd->scrollable = 1; wd->bx = _els_smart_box_add(e); _els_smart_box_orientation_set(wd->bx, 1); Modified: trunk/TMP/st/elementary/src/lib/elm_list.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_list.c 2009-01-15 11:16:51 UTC (rev 38592) +++ trunk/TMP/st/elementary/src/lib/elm_list.c 2009-01-15 11:34:39 UTC (rev 38593) @@ -256,11 +256,13 @@ } if (it->icon) { + edje_extern_object_aspect_set(it->icon, EDJE_ASPECT_CONTROL_VERTICAL, minw[0], minh[0]); edje_extern_object_min_size_set(it->icon, minw[0], minh[0]); edje_object_part_swallow(it->base, "elm.swallow.icon", it->icon); } if (it->end) { + edje_extern_object_aspect_set(it->end, EDJE_ASPECT_CONTROL_VERTICAL, minw[1], minh[1]); edje_extern_object_min_size_set(it->end, minw[1], minh[1]); edje_object_part_swallow(it->base, "elm.swallow.end", it->end); } |
From: Enlightenment S. <no-...@en...> - 2009-02-08 12:35:01
|
Log: slider... horizontal only done right now - but complete. looks decent methinks. Author: raster Date: 2009-02-08 04:34:58 -0800 (Sun, 08 Feb 2009) New Revision: 38972 Added: trunk/TMP/st/elementary/data/themes/sl_bg.png trunk/TMP/st/elementary/data/themes/sl_bg_over.png trunk/TMP/st/elementary/data/themes/sl_bt2_0_0.png trunk/TMP/st/elementary/data/themes/sl_bt2_0_1.png trunk/TMP/st/elementary/data/themes/sl_bt2_0_2.png trunk/TMP/st/elementary/data/themes/sl_bt2_1.png trunk/TMP/st/elementary/data/themes/sl_bt2_2.png trunk/TMP/st/elementary/data/themes/sl_bt_0.png trunk/TMP/st/elementary/data/themes/sl_bt_1.png trunk/TMP/st/elementary/data/themes/sl_bt_2.png trunk/TMP/st/elementary/data/themes/sl_units.png trunk/TMP/st/elementary/src/lib/elm_slider.c Modified: trunk/TMP/st/elementary/data/themes/Makefile.am trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/Makefile.am Modified: trunk/TMP/st/elementary/data/themes/Makefile.am =================================================================== --- trunk/TMP/st/elementary/data/themes/Makefile.am 2009-02-08 10:21:52 UTC (rev 38971) +++ trunk/TMP/st/elementary/data/themes/Makefile.am 2009-02-08 12:34:58 UTC (rev 38972) @@ -97,7 +97,18 @@ icon_edit.png \ ilist_1.png \ ilist_2.png \ -ilist_item_shadow.png +ilist_item_shadow.png \ +sl_bg.png \ +sl_bg_over.png \ +sl_bt_0.png \ +sl_bt_1.png \ +sl_bt_2.png \ +sl_bt2_0_0.png \ +sl_bt2_0_1.png \ +sl_bt2_0_2.png \ +sl_bt2_1.png \ +sl_bt2_2.png \ +sl_units.png default.edj: Makefile $(EXTRA_DIST) $(EDJE_CC) $(EDJE_FLAGS) \ Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2009-02-08 10:21:52 UTC (rev 38971) +++ trunk/TMP/st/elementary/data/themes/default.edc 2009-02-08 12:34:58 UTC (rev 38972) @@ -5948,4 +5948,516 @@ } } } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "elm/slider/horizontal/default"; + // FIXME: do this element properly theme-wise. this is just testing here + images { + image: "sl_bg.png" COMP; + image: "sl_bg_over.png" COMP; + image: "sl_bt_0.png" COMP; + image: "sl_bt_1.png" COMP; + image: "sl_bt_2.png" COMP; + image: "sl_bt2_0_0.png" COMP; + image: "sl_bt2_0_1.png" COMP; + image: "sl_bt2_0_2.png" COMP; + image: "sl_bt2_1.png" COMP; + image: "sl_bt2_2.png" COMP; + image: "sl_units.png" COMP; + } + parts { + part { name: "base"; + mouse_events: 0; + description { state: "default" 0.0; + max: 99999 6; + min: 0 6; + rel1 { to: "bg"; + offset: 1 0; + } + rel2 { to: "bg"; + offset: -2 -1; + } + image.normal: "sl_bg.png"; + fill.smooth: 0; + } + } + part { name: "level"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "base"; + rel2 { + to_y: "base"; + to_x: "elm.dragable.slider"; + relative: 0.5 1.0; + } + color: 255 0 0 200; + } + description { state: "inverted" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "level2"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + rel1 { + to_y: "base"; + to_x: "elm.dragable.slider"; + relative: 0.5 0.0; + } + rel2.to: "base"; + color: 255 0 0 200; + } + description { state: "inverted" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "base_over"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "base"; + rel1.offset: -1 -1; + rel2.to: "base"; + rel2.offset: 0 0; + image { + normal: "sl_bg_over.png"; + border: 3 3 3 3; + } + fill.smooth: 0; + } + } + part { name: "bg"; + type: RECT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + rel1.to: "elm.swallow.bar"; + rel2.to: "elm.swallow.bar"; + color: 0 0 0 0; + } + } + part { name: "elm.swallow.bar"; + type: SWALLOW; + scale: 1; + description { state: "default" 0.0; + min: 48 24; + max: 99999 24; + align: 1.0 0.5; + rel1 { + to_x: "elm.text"; + relative: 1.0 0.0; + offset: 2 0; + } + rel2 { + to_x: "elm.units"; + relative: 0.0 1.0; + offset: -3 -1; + } + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + description { state: "default" 0.0; + visible: 0; + align: 0.0 0.5; + rel1 { + offset: 4 0; + to_y: "elm.swallow.bar"; + } + rel2 { + offset: 3 -1; + relative: 0.0 1.0; + to_y: "elm.swallow.bar"; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + rel2.offset: 4 -5; + } + } + part { name: "elm.text"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + fixed: 1 1; + align: 0.0 0.5; + rel1.to_x: "elm.swallow.content"; + rel1.relative: 1.0 0.0; + rel1.offset: -1 4; + rel2.to_x: "elm.swallow.content"; + rel2.relative: 1.0 1.0; + rel2.offset: -1 -5; + color: 0 0 0 255; + text { + font: "Sans,Edje-Vera"; + size: 10; + min: 0 0; + align: 0.0 0.5; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + text.min: 1 1; + rel1.offset: 0 4; + rel2.offset: 0 -5; + } + } + part { name: "units"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + rel1 { + to_x: "elm.units"; + offset: 0 5; + } + image { + normal: "sl_units.png"; + border: 0 5 3 8; + } + fill.smooth: 0; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "elm.units"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + fixed: 1 1; + align: 1.0 0.5; + rel1.relative: 1.0 0.0; + rel1.offset: 0 8; + rel2.relative: 1.0 1.0; + rel2.offset: 0 -9; + color: 0 0 0 255; + text { + font: "Sans,Edje-Vera"; + size: 10; + min: 0 0; + align: 0.0 0.5; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + fixed: 1 1; + visible: 1; + text.min: 1 1; + rel1.offset: -5 0; + rel2.offset: -5 -1; + } + } + part { name: "elm.dragable.slider"; + type: RECT; + mouse_events: 1; + scale: 1; + dragable { + x: 1 1 0; + y: 0 0 0; + confine: "bg"; + } + description { state: "default" 0.0; + min: 24 24; + max: 24 24; + fixed: 1 1; + rel1 { + relative: 0.5 0.5; + to: "bg"; + } + rel2 { + relative: 0.5 0.5; + to: "bg"; + } + color: 0 0 0 0; + } + } + part { name: "button0"; + mouse_events: 0; + description { state: "default" 0.0; + max: 17 999; + min: 17 24; + rel1.to: "elm.dragable.slider"; + rel2.to: "elm.dragable.slider"; + image { + normal: "sl_bt_0.png"; + border: 5 5 5 10; + } + fill.smooth: 0; + } + } + part { name: "button1"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "button0"; + rel2 { + to: "button0"; + relative: 1.0 0.5; + offset: -1 -5; + } + image { + normal: "sl_bt_1.png"; + border: 5 5 5 0; + } + } + } + part { name: "button2"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "button0"; + rel2.to: "button0"; + image { + normal: "sl_bt_2.png"; + border: 5 5 5 10; + } + fill.smooth: 0; + } + } + part { name: "button3"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + min: 8 32; + align: 1.0 0.5; + rel1 { + to_x: "elm.indicator"; + to_y: "button4"; + relative: 0.0 0.0; + offset: -7 0; + } + rel2 { + to: "button4"; + relative: 0.0 1.0; + offset: 0 -1; + } + image { + normal: "sl_bt2_0_0.png"; + border: 6 0 6 12; + } + fill.smooth: 0; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "button4"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + max: 15 999; + min: 15 32; + rel1 { + to_x: "elm.dragable.slider"; + to_y: "elm.indicator"; + offset: 0 -7; + } + rel2.to: "elm.dragable.slider"; + image { + normal: "sl_bt2_0_1.png"; + border: 0 0 6 12; + } + fill.smooth: 0; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "button5"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + min: 8 32; + align: 1.0 0.5; + rel1 { + to: "button4"; + relative: 1.0 0.0; + offset: 0 0; + } + rel2 { + to_x: "elm.indicator"; + to_y: "button4"; + relative: 1.0 1.0; + offset: 6 -1; + } + image { + normal: "sl_bt2_0_2.png"; + border: 0 6 6 12; + } + fill.smooth: 0; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "elm.indicator"; + type: TEXT; + mouse_events: 0; + effect: SOFT_SHADOW; + scale: 1; + description { state: "default" 0.0; + visible: 0; + fixed: 1 1; + align: 0.5 1.0; + rel1 { + to: "elm.dragable.slider"; + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + to_x: "elm.dragable.slider"; + relative: 1.0 0.0; + offset: -1 0; + } + color: 224 224 224 255; + color3: 0 0 0 64; + text { + font: "Sans,Edje-Vera"; + size: 10; + min: 0 0; + align: 0.5 0.5; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + text.min: 1 1; + rel1.offset: 0 -1; + rel2.offset: -1 -1; + } + } + part { name: "button6"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + rel1.to: "button3"; + rel2 { + to: "button5"; + relative: 1.0 0.3; + offset: -1 -1; + } + image { + normal: "sl_bt2_1.png"; + border: 5 5 5 0; + } + fill.smooth: 0; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "button7"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + rel1.to: "button3"; + rel2.to: "button5"; + image { + normal: "sl_bt2_2.png"; + border: 5 5 5 0; + middle: 0; + } + fill.smooth: 0; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { name: "text_show"; + signal: "elm,state,text,visible"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "elm.text"; + } + program { name: "text_hide"; + signal: "elm,state,text,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.text"; + } + program { name: "icon_show"; + signal: "elm,state,icon,visible"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "elm.swallow.content"; + } + program { name: "icon_hide"; + signal: "elm,state,icon,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + } + program { name: "units_show"; + signal: "elm,state,units,visible"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "elm.units"; + target: "units"; + } + program { name: "units_hide"; + signal: "elm,state,units,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.units"; + target: "units"; + } + program { name: "invert_on"; + signal: "elm,state,inverted,on"; + source: "elm"; + action: STATE_SET "inverted" 0.0; + target: "level"; + target: "level2"; + } + program { name: "invert_off"; + signal: "elm,state,inverted,off"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "level"; + target: "level2"; + } + program { name: "val_show"; + signal: "mouse,down,*"; + source: "elm.dragable.slider"; + action: STATE_SET "visible" 0.0; + target: "elm.indicator"; + target: "button3"; + target: "button4"; + target: "button5"; + target: "button6"; + target: "button7"; + } + program { name: "val_hide"; + signal: "mouse,up,*"; + source: "elm.dragable.slider"; + action: STATE_SET "default" 0.0; + target: "elm.indicator"; + target: "button3"; + target: "button4"; + target: "button5"; + target: "button6"; + target: "button7"; + } + } + } + } Added: trunk/TMP/st/elementary/data/themes/sl_bg.png Property changes on: trunk/TMP/st/elementary/data/themes/sl_bg.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/sl_bg_over.png Property changes on: trunk/TMP/st/elementary/data/themes/sl_bg_over.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/sl_bt2_0_0.png Property changes on: trunk/TMP/st/elementary/data/themes/sl_bt2_0_0.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/sl_bt2_0_1.png Property changes on: trunk/TMP/st/elementary/data/themes/sl_bt2_0_1.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/sl_bt2_0_2.png Property changes on: trunk/TMP/st/elementary/data/themes/sl_bt2_0_2.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/sl_bt2_1.png Property changes on: trunk/TMP/st/elementary/data/themes/sl_bt2_1.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/sl_bt2_2.png Property changes on: trunk/TMP/st/elementary/data/themes/sl_bt2_2.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/sl_bt_0.png Property changes on: trunk/TMP/st/elementary/data/themes/sl_bt_0.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/sl_bt_1.png Property changes on: trunk/TMP/st/elementary/data/themes/sl_bt_1.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/sl_bt_2.png Property changes on: trunk/TMP/st/elementary/data/themes/sl_bt_2.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/sl_units.png Property changes on: trunk/TMP/st/elementary/data/themes/sl_units.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-08 10:21:52 UTC (rev 38971) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-08 12:34:58 UTC (rev 38972) @@ -1898,8 +1898,8 @@ Evas_Object *win, *bg, *bx, *fr, *lb; char buf[PATH_MAX]; - win = elm_win_add(NULL, "scaling", ELM_WIN_BASIC); - elm_win_title_set(win, "Scaling"); + win = elm_win_add(NULL, "scaling-2", ELM_WIN_BASIC); + elm_win_title_set(win, "Scaling 2"); elm_win_autodel_set(win, 1); bg = elm_bg_add(win); @@ -1956,6 +1956,74 @@ } static void +my_bt_28(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *bx, *sl, *ic; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "slider", ELM_WIN_BASIC); + elm_win_title_set(win, "Slider"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + sl = elm_slider_add(win); + elm_slider_label_set(sl, "Label"); + elm_slider_icon_set(sl, ic); + elm_slider_unit_format_set(sl, "%1.1f units"); + elm_slider_span_size_set(sl, 400); + evas_object_size_hint_align_set(sl, -1.0, -1.0); + evas_object_size_hint_weight_set(sl, 1.0, 1.0); + elm_box_pack_end(bx, sl); + evas_object_show(ic); + evas_object_show(sl); + + sl = elm_slider_add(win); + elm_slider_label_set(sl, "Label 2"); + elm_slider_span_size_set(sl, 200); + evas_object_size_hint_align_set(sl, -1.0, -1.0); + evas_object_size_hint_weight_set(sl, 1.0, 1.0); + elm_slider_indicator_format_set(sl, "%3.0f"); + elm_slider_min_max_set(sl, 50, 150); + elm_slider_value_set(sl, 80); + elm_slider_inverted_set(sl, 1); + evas_object_size_hint_align_set(sl, 0.5, 0.5); + evas_object_size_hint_weight_set(sl, 0.0, 0.0); + elm_box_pack_end(bx, sl); + evas_object_show(ic); + evas_object_show(sl); + + sl = elm_slider_add(win); + elm_slider_label_set(sl, "Label 3"); + elm_slider_unit_format_set(sl, "units"); + elm_slider_span_size_set(sl, 200); + evas_object_size_hint_align_set(sl, -1.0, -1.0); + evas_object_size_hint_weight_set(sl, 1.0, 1.0); + elm_slider_indicator_format_set(sl, "%3.0f"); + elm_slider_min_max_set(sl, 50, 150); + elm_slider_value_set(sl, 80); + elm_slider_inverted_set(sl, 1); + elm_object_scale_set(sl, 2.0); + elm_box_pack_end(bx, sl); + evas_object_show(ic); + evas_object_show(sl); + + evas_object_show(win); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *li, *fr; @@ -2057,11 +2125,12 @@ elm_list_item_append(li, "Inwin 2", NULL, NULL, my_bt_25, NULL); elm_list_item_append(li, "Scaling", NULL, NULL, my_bt_26, NULL); elm_list_item_append(li, "Scaling 2", NULL, NULL, my_bt_27, NULL); + elm_list_item_append(li, "Slider", NULL, NULL, my_bt_28, NULL); elm_list_go(li); /* set an initial window size */ - evas_object_resize(win, 320, 520); + evas_object_resize(win, 312, 480); /* show the window */ evas_object_show(win); } Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-08 10:21:52 UTC (rev 38971) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-08 12:34:58 UTC (rev 38972) @@ -474,6 +474,25 @@ /* smart callbacks called: * "clicked" - when the user clicks on a carousel item and becomes selected */ + + EAPI Evas_Object *elm_slider_add(Evas_Object *parent); + EAPI void elm_slider_label_set(Evas_Object *obj, const char *label); + EAPI void elm_slider_icon_set(Evas_Object *obj, Evas_Object *icon); + EAPI void elm_slider_span_size_set(Evas_Object *obj, Evas_Coord size); + EAPI void elm_slider_unit_format_set(Evas_Object *obj, const char *format); + EAPI void elm_slider_indicator_format_set(Evas_Object *obj, const char *indicator); + EAPI void elm_slider_horizontal_set(Evas_Object *obj, Evas_Bool horizontal); + EAPI void elm_slider_min_max_set(Evas_Object *obj, double min, double max); + EAPI void elm_slider_value_set(Evas_Object *obj, double val); + EAPI double elm_slider_value_get(Evas_Object *obj); + EAPI void elm_slider_inverted_set(Evas_Object *obj, Evas_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). + */ + #ifdef __cplusplus } @@ -527,6 +546,7 @@ // * progress bar widget // * generic "tacho" widget (set min/max labels - and up to 3 intermediate labels) // * status widget (busy, stalled, running, etc.) +// * full window in window widget (so move/resize of window object does as you'd expect a child window to do within the canvas) // //// (improvements - low priority) // * need another sample theme Modified: trunk/TMP/st/elementary/src/lib/Makefile.am =================================================================== --- trunk/TMP/st/elementary/src/lib/Makefile.am 2009-02-08 10:21:52 UTC (rev 38971) +++ trunk/TMP/st/elementary/src/lib/Makefile.am 2009-02-08 12:34:58 UTC (rev 38972) @@ -47,6 +47,7 @@ elm_toolbar.c \ elm_list.c \ elm_carousel.c \ +elm_slider.c \ \ elc_notepad.c \ elc_anchorview.c \ Added: trunk/TMP/st/elementary/src/lib/elm_slider.c |
From: Enlightenment S. <no-...@en...> - 2009-02-09 11:24:05
|
Log: more work on slider - i think its complete now vertical mode works. might be some buglts to clear up though. fix scroller to scroll only at animator framerate.. using an animator making scrolling much better. begin genlist (geeric but complicated) list. Author: raster Date: 2009-02-09 03:23:59 -0800 (Mon, 09 Feb 2009) New Revision: 38979 Added: trunk/TMP/st/elementary/src/lib/elm_genlist.c Modified: trunk/TMP/st/elementary/data/themes/Makefile.am trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/Makefile.am trunk/TMP/st/elementary/src/lib/els_scroller.c Modified: trunk/TMP/st/elementary/data/themes/Makefile.am =================================================================== --- trunk/TMP/st/elementary/data/themes/Makefile.am 2009-02-09 11:16:56 UTC (rev 38978) +++ trunk/TMP/st/elementary/data/themes/Makefile.am 2009-02-09 11:23:59 UTC (rev 38979) @@ -108,7 +108,10 @@ sl_bt2_0_2.png \ sl_bt2_1.png \ sl_bt2_2.png \ -sl_units.png +sl_units.png \ +slv_bg.png \ +slv_bg_over.png \ +slv_units.png default.edj: Makefile $(EXTRA_DIST) $(EDJE_CC) $(EDJE_FLAGS) \ Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2009-02-09 11:16:56 UTC (rev 38978) +++ trunk/TMP/st/elementary/data/themes/default.edc 2009-02-09 11:23:59 UTC (rev 38979) @@ -6080,7 +6080,7 @@ visible: 1; aspect: 1.0 1.0; aspect_preference: VERTICAL; - rel2.offset: 4 -5; + rel2.offset: 4 -1; } } part { name: "elm.text"; @@ -6461,8 +6461,9 @@ group { name: "elm/slider/vertical/default"; images { - image: "sl_bg.png" COMP; - image: "sl_bg_over.png" COMP; + image: "slv_bg.png" COMP; + image: "slv_bg_over.png" COMP; + image: "sl_bt_0.png" COMP; image: "sl_bt_1.png" COMP; image: "sl_bt_2.png" COMP; @@ -6471,21 +6472,22 @@ image: "sl_bt2_0_2.png" COMP; image: "sl_bt2_1.png" COMP; image: "sl_bt2_2.png" COMP; - image: "sl_units.png" COMP; + + image: "slv_units.png" COMP; } parts { part { name: "base"; mouse_events: 0; description { state: "default" 0.0; - max: 99999 6; - min: 0 6; + max: 6 99999; + min: 6 0; rel1 { to: "bg"; offset: 1 0; } rel2 { to: "bg"; offset: -2 -1; } - image.normal: "sl_bg.png"; + image.normal: "slv_bg.png"; fill.smooth: 0; } } @@ -6495,9 +6497,9 @@ description { state: "default" 0.0; rel1.to: "base"; rel2 { - to_y: "base"; - to_x: "elm.dragable.slider"; - relative: 0.5 1.0; + to_x: "base"; + to_y: "elm.dragable.slider"; + relative: 1.0 0.5; } color: 255 0 0 200; } @@ -6512,9 +6514,9 @@ description { state: "default" 0.0; visible: 0; rel1 { - to_y: "base"; - to_x: "elm.dragable.slider"; - relative: 0.5 0.0; + to_x: "base"; + to_y: "elm.dragable.slider"; + relative: 0.0 0.5; } rel2.to: "base"; color: 255 0 0 200; @@ -6533,7 +6535,7 @@ rel2.to: "base"; rel2.offset: 0 0; image { - normal: "sl_bg_over.png"; + normal: "slv_bg_over.png"; border: 3 3 3 3; } fill.smooth: 0; @@ -6554,18 +6556,18 @@ type: SWALLOW; scale: 1; description { state: "default" 0.0; - min: 48 24; - max: 99999 24; + min: 24 48; + max: 24 9999; align: 1.0 0.5; rel1 { - to_x: "elm.text"; - relative: 1.0 0.0; - offset: 2 0; + to_y: "elm.text"; + relative: 0.0 1.0; + offset: 0 2; } rel2 { - to_x: "elm.units"; - relative: 0.0 1.0; - offset: -3 -1; + to_y: "elm.units"; + relative: 1.0 0.0; + offset: -1 -3; } } } @@ -6573,23 +6575,23 @@ type: SWALLOW; description { state: "default" 0.0; visible: 0; - align: 0.0 0.5; + align: 0.5 0.0; rel1 { - offset: 4 0; - to_y: "elm.swallow.bar"; + offset: 0 4; + to_x: "elm.swallow.bar"; } rel2 { - offset: 3 -1; - relative: 0.0 1.0; - to_y: "elm.swallow.bar"; + offset: -1 3; + relative: 1.0 0.0; + to_x: "elm.swallow.bar"; } } description { state: "visible" 0.0; inherit: "default" 0.0; visible: 1; aspect: 1.0 1.0; - aspect_preference: VERTICAL; - rel2.offset: 4 -5; + aspect_preference: HORIZONTAL; + rel2.offset: -1 4; } } part { name: "elm.text"; @@ -6599,27 +6601,27 @@ description { state: "default" 0.0; visible: 0; fixed: 1 1; - align: 0.0 0.5; - rel1.to_x: "elm.swallow.content"; - rel1.relative: 1.0 0.0; - rel1.offset: -1 4; - rel2.to_x: "elm.swallow.content"; - rel2.relative: 1.0 1.0; - rel2.offset: -1 -5; + align: 0.5 0.0; + rel1.to_y: "elm.swallow.content"; + rel1.relative: 0.5 1.0; + rel1.offset: 0 -1; + rel2.to_y: "elm.swallow.content"; + rel2.relative: 0.5 1.0; + rel2.offset: -1 -1; color: 0 0 0 255; text { font: "Sans,Edje-Vera"; size: 10; min: 0 0; - align: 0.0 0.5; + align: 0.5 0.0; } } description { state: "visible" 0.0; inherit: "default" 0.0; visible: 1; text.min: 1 1; - rel1.offset: 0 4; - rel2.offset: 0 -5; + rel1.offset: 4 0; + rel2.offset: -5 0; } } part { name: "units"; @@ -6627,12 +6629,16 @@ description { state: "default" 0.0; visible: 0; rel1 { - to_x: "elm.units"; - offset: 0 5; + to: "elm.units"; + offset: -8 0; } + rel2 { + to: "elm.units"; + offset: 7 8; + } image { - normal: "sl_units.png"; - border: 0 5 3 8; + normal: "slv_units.png"; + border: 8 8 0 9; } fill.smooth: 0; } @@ -6648,17 +6654,17 @@ description { state: "default" 0.0; visible: 0; fixed: 1 1; - align: 1.0 0.5; - rel1.relative: 1.0 0.0; - rel1.offset: 0 8; + align: 0.5 1.0; + rel1.relative: 0.0 1.0; + rel1.offset: 8 0; rel2.relative: 1.0 1.0; - rel2.offset: 0 -9; + rel2.offset: -9 0; color: 0 0 0 255; text { font: "Sans,Edje-Vera"; size: 10; min: 0 0; - align: 0.0 0.5; + align: 0.5 0.0; } } description { state: "visible" 0.0; @@ -6666,8 +6672,8 @@ fixed: 1 1; visible: 1; text.min: 1 1; - rel1.offset: -5 0; - rel2.offset: -5 -1; + rel1.offset: 8 -9; + rel2.offset: -9 -9; } } part { name: "elm.dragable.slider"; @@ -6769,6 +6775,7 @@ visible: 0; max: 15 999; min: 15 32; + fixed: 1 1; rel1 { to_x: "elm.dragable.slider"; to_y: "elm.indicator"; @@ -6829,7 +6836,7 @@ offset: 0 0; } rel2 { - to_x: "elm.dragable.slider"; + to: "elm.dragable.slider"; relative: 1.0 0.0; offset: -1 0; } Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-09 11:16:56 UTC (rev 38978) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-09 11:23:59 UTC (rev 38979) @@ -2020,12 +2020,17 @@ evas_object_show(ic); evas_object_show(sl); + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1); sl = elm_slider_add(win); + elm_slider_icon_set(sl, ic); elm_slider_label_set(sl, "Label 4"); elm_slider_unit_format_set(sl, "units"); elm_slider_span_size_set(sl, 200); - evas_object_size_hint_align_set(sl, -1.0, -1.0); - evas_object_size_hint_weight_set(sl, 1.0, 1.0); + evas_object_size_hint_align_set(sl, 0.5, -1.0); + evas_object_size_hint_weight_set(sl, 0.0, 1.0); elm_slider_indicator_format_set(sl, "%1.1f"); elm_slider_value_set(sl, 0.2); elm_object_scale_set(sl, 1.0); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-09 11:16:56 UTC (rev 38978) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-09 11:23:59 UTC (rev 38979) @@ -466,6 +466,7 @@ * "unselected" - when the user selected an item */ + // FIXME: incomplete - carousel typedef struct _Elm_Carousel_Item Elm_Carousel_Item; EAPI Evas_Object *elm_carousel_add(Evas_Object *parent); EAPI Elm_Carousel_Item *elm_carousel_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data); @@ -476,24 +477,43 @@ */ EAPI Evas_Object *elm_slider_add(Evas_Object *parent); - EAPI void elm_slider_label_set(Evas_Object *obj, const char *label); - EAPI void elm_slider_icon_set(Evas_Object *obj, Evas_Object *icon); - EAPI void elm_slider_span_size_set(Evas_Object *obj, Evas_Coord size); - EAPI void elm_slider_unit_format_set(Evas_Object *obj, const char *format); - EAPI void elm_slider_indicator_format_set(Evas_Object *obj, const char *indicator); - EAPI void elm_slider_horizontal_set(Evas_Object *obj, Evas_Bool horizontal); - EAPI void elm_slider_min_max_set(Evas_Object *obj, double min, double max); - EAPI void elm_slider_value_set(Evas_Object *obj, double val); - EAPI double elm_slider_value_get(Evas_Object *obj); - EAPI void elm_slider_inverted_set(Evas_Object *obj, Evas_Bool inverted); - - + EAPI void elm_slider_label_set(Evas_Object *obj, const char *label); + EAPI void elm_slider_icon_set(Evas_Object *obj, Evas_Object *icon); + EAPI void elm_slider_span_size_set(Evas_Object *obj, Evas_Coord size); + EAPI void elm_slider_unit_format_set(Evas_Object *obj, const char *format); + EAPI void elm_slider_indicator_format_set(Evas_Object *obj, const char *indicator); + EAPI void elm_slider_horizontal_set(Evas_Object *obj, Evas_Bool horizontal); + EAPI void elm_slider_min_max_set(Evas_Object *obj, double min, double max); + EAPI void elm_slider_value_set(Evas_Object *obj, double val); + EAPI double elm_slider_value_get(Evas_Object *obj); + EAPI void elm_slider_inverted_set(Evas_Object *obj, Evas_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). */ + typedef enum _Elm_Genlist_Item_Flags + { + ELM_GENLIST_ITEM_DISABLED, + ELM_GENLIST_ITEM_EXPANDED + } Elm_Genlist_Item_Flags; + typedef struct _Elm_Genlist_Item_Class Elm_Genlist_Item_Class; + typedef struct _Elm_Genlist_Item Elm_Genlist_Item; + struct _Elm_Genlist_Item_Class + { + const char *style; + struct { + char *(*label_get) (const void *data, const char *part); + Evas_Object *(*icon_get) (const void *data, const char *part); + Evas_Bool (*state_get) (const void *data, const char *part); + } func; + }; + EAPI Evas_Object *elm_genlist_add(Evas_Object *parent); + EAPI Elm_Genlist_Item *elm_genlist_item_add(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags); + /* smart callbacks called: + */ + #ifdef __cplusplus } #endif @@ -520,18 +540,22 @@ // * when entries are in a scroller and change size, the scroller shows scrollbars. fix. same for selecting. for 1 line entries in a scroller should only have scroll arrow indicators. // //// (more widgets/features - medium priority) -// * slider widget -// * <evas scale cache> +// * biglist widget (restricted format label + icon intended for massive lists) +// * treeview widget (like biglist - but items can expand to sub-items) // * radio + group handling // * checkbox (like toggle) // * pager (for pushing/popping pages and going back and forward and flipping) // * <edje copy & paste fixed> -// * biglist widget (restricted format label + icon intended for massive lists) -// * treeview widget (like biglist - but items can expand to sub-items) +// * <evas scale cache> // * <evas shared cache> // // * carousel selector widget // * auto-size label/text that adapts text size to its allocated region +// * [ scrollable dropdown combo box ] +// * [ notepad widget ] +// * [ toggle with 2x labelled button for 2 states ] +// * [ poker spinner with numbers + labels ] +// * [ wrapping text button bar ] // * separator widget (h/v) // * slide-open "panel" that can hold stuff and optionally scroll // * calendar widget (select date) Modified: trunk/TMP/st/elementary/src/lib/Makefile.am =================================================================== --- trunk/TMP/st/elementary/src/lib/Makefile.am 2009-02-09 11:16:56 UTC (rev 38978) +++ trunk/TMP/st/elementary/src/lib/Makefile.am 2009-02-09 11:23:59 UTC (rev 38979) @@ -48,6 +48,7 @@ elm_list.c \ elm_carousel.c \ elm_slider.c \ +elm_genlist.c \ \ elc_notepad.c \ elc_anchorview.c \ Added: trunk/TMP/st/elementary/src/lib/elm_genlist.c Modified: trunk/TMP/st/elementary/src/lib/els_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/els_scroller.c 2009-02-09 11:16:56 UTC (rev 38978) +++ trunk/TMP/st/elementary/src/lib/els_scroller.c 2009-02-09 11:23:59 UTC (rev 38979) @@ -27,6 +27,8 @@ double timestamp; } history[20]; double anim_start; + Evas_Coord hold_x, hold_y; + Ecore_Animator *hold_animator; Ecore_Animator *momentum_animator; Evas_Coord locked_x, locked_y; unsigned char now : 1; @@ -63,6 +65,7 @@ static void _smart_pan_pan_changed_hook(void *data, Evas_Object *obj, void *event_info); static void _smart_event_wheel(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _smart_event_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); +static int _smart_hold_animator(void *data); static int _smart_momentum_animator(void *data); static void _smart_event_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _smart_event_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info); @@ -431,6 +434,11 @@ ev = event_info; if (_elm_config->thumbscroll_enable) { + if (sd->down.hold_animator) + { + ecore_animator_del(sd->down.hold_animator); + sd->down.hold_animator = NULL; + } if (sd->down.momentum_animator) { ecore_animator_del(sd->down.momentum_animator); @@ -457,6 +465,17 @@ } static int +_smart_hold_animator(void *data) +{ + Smart_Data *sd; + + sd = data; + sd->down.hold_animator = NULL; + elm_smart_scroller_child_pos_set(sd->smart_obj, sd->down.hold_x, sd->down.hold_y); + return 0; +} + +static int _smart_momentum_animator(void *data) { Smart_Data *sd; @@ -533,6 +552,11 @@ { if (!sd->down.momentum_animator) sd->down.momentum_animator = ecore_animator_add(_smart_momentum_animator, sd); + if (sd->down.hold_animator) + { + ecore_animator_del(sd->down.hold_animator); + sd->down.hold_animator = NULL; + } sd->down.dx = ((double)dx / at); sd->down.dy = ((double)dy / at); sd->down.anim_start = t; @@ -614,7 +638,11 @@ if (sd->down.dir_x) y = sd->down.locked_y; else x = sd->down.locked_x; } - elm_smart_scroller_child_pos_set(sd->smart_obj, x, y); + 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); +// elm_smart_scroller_child_pos_set(sd->smart_obj, x, y); } } } @@ -975,6 +1003,7 @@ if (!sd->extern_pan) evas_object_del(sd->pan_obj); evas_object_del(sd->edje_obj); evas_object_del(sd->event_obj); + if (sd->down.hold_animator) ecore_animator_del(sd->down.hold_animator); if (sd->down.momentum_animator) ecore_animator_del(sd->down.momentum_animator); free(sd); evas_object_smart_data_set(obj, NULL); |
From: Enlightenment S. <no-...@en...> - 2009-02-10 12:30:30
|
Log: adjust slider theme a bit and test app. some skleton work on genlist. Author: raster Date: 2009-02-10 03:57:47 -0800 (Tue, 10 Feb 2009) New Revision: 38992 Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_genlist.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2009-02-10 11:56:56 UTC (rev 38991) +++ trunk/TMP/st/elementary/data/themes/default.edc 2009-02-10 11:57:47 UTC (rev 38992) @@ -5984,6 +5984,7 @@ type: RECT; mouse_events: 0; description { state: "default" 0.0; + fixed: 1 1; rel1.to: "base"; rel2 { to_y: "base"; @@ -6001,6 +6002,7 @@ type: RECT; mouse_events: 0; description { state: "default" 0.0; + fixed: 1 1; visible: 0; rel1 { to_y: "base"; @@ -6163,7 +6165,7 @@ } part { name: "elm.dragable.slider"; type: RECT; - mouse_events: 1; + mouse_events: 0; scale: 1; dragable { x: 1 1 0; @@ -6171,8 +6173,8 @@ confine: "bg"; } description { state: "default" 0.0; - min: 24 24; - max: 24 24; + min: 0 24; + max: 0 24; fixed: 1 1; rel1 { relative: 0.5 0.5; @@ -6185,9 +6187,26 @@ color: 0 0 0 0; } } + part { name: "button_events"; + type: RECT; + dragable { + events: "elm.dragable.slider"; + } + mouse_events: 1; + scale: 1; + description { state: "default" 0.0; + fixed: 1 1; + min: 32 32; + max: 32 32; + rel1.to: "elm.dragable.slider"; + rel2.to: "elm.dragable.slider"; + color: 0 0 0 0; + } + } part { name: "button0"; mouse_events: 0; description { state: "default" 0.0; + fixed: 1 1; max: 17 999; min: 17 24; rel1.to: "elm.dragable.slider"; @@ -6229,6 +6248,7 @@ part { name: "button3"; mouse_events: 0; description { state: "default" 0.0; + fixed: 1 1; visible: 0; min: 8 32; align: 1.0 0.5; @@ -6241,7 +6261,7 @@ rel2 { to: "button4"; relative: 0.0 1.0; - offset: 0 -1; + offset: -1 -1; } image { normal: "sl_bt2_0_0.png"; @@ -6261,11 +6281,11 @@ max: 15 999; min: 15 32; rel1 { - to_x: "elm.dragable.slider"; + to_x: "button0"; to_y: "elm.indicator"; - offset: 0 -7; + offset: 0 0; } - rel2.to: "elm.dragable.slider"; + rel2.to: "button0"; image { normal: "sl_bt2_0_1.png"; border: 0 0 6 12; @@ -6280,9 +6300,10 @@ part { name: "button5"; mouse_events: 0; description { state: "default" 0.0; + fixed: 1 1; visible: 0; min: 8 32; - align: 1.0 0.5; + align: 0.0 0.5; rel1 { to: "button4"; relative: 1.0 0.0; @@ -6315,13 +6336,13 @@ fixed: 1 1; align: 0.5 1.0; rel1 { - to: "elm.dragable.slider"; - relative: 0.0 0.0; + to: "button0"; + relative: 0.0 -0.25; offset: 0 0; } rel2 { - to_x: "elm.dragable.slider"; - relative: 1.0 0.0; + to_x: "button0"; + relative: 1.0 -0.25; offset: -1 0; } color: 224 224 224 255; @@ -6495,6 +6516,7 @@ type: RECT; mouse_events: 0; description { state: "default" 0.0; + fixed: 1 1; rel1.to: "base"; rel2 { to_x: "base"; @@ -6512,6 +6534,7 @@ type: RECT; mouse_events: 0; description { state: "default" 0.0; + fixed: 1 1; visible: 0; rel1 { to_x: "base"; @@ -6678,7 +6701,7 @@ } part { name: "elm.dragable.slider"; type: RECT; - mouse_events: 1; + mouse_events: 0; scale: 1; dragable { x: 0 0 0; @@ -6686,8 +6709,8 @@ confine: "bg"; } description { state: "default" 0.0; - min: 24 24; - max: 24 24; + min: 24 0; + max: 24 0; fixed: 1 1; rel1 { relative: 0.5 0.5; @@ -6700,13 +6723,30 @@ color: 0 0 0 0; } } + part { name: "button_events"; + type: RECT; + dragable { + events: "elm.dragable.slider"; + } + mouse_events: 1; + scale: 1; + description { state: "default" 0.0; + fixed: 1 1; + min: 32 32; + max: 32 32; + rel1.to: "elm.dragable.slider"; + rel2.to: "elm.dragable.slider"; + color: 0 0 0 0; + } + } part { name: "button0"; mouse_events: 0; description { state: "default" 0.0; + fixed: 1 1; max: 17 999; min: 17 24; - rel1.to: "elm.dragable.slider"; - rel2.to: "elm.dragable.slider"; + rel1.to: "button_events"; + rel2.to: "button_events"; image { normal: "sl_bt_0.png"; border: 5 5 5 10; @@ -6756,7 +6796,7 @@ rel2 { to: "button4"; relative: 0.0 1.0; - offset: 0 -1; + offset: -1 -1; } image { normal: "sl_bt2_0_0.png"; @@ -6777,11 +6817,11 @@ min: 15 32; fixed: 1 1; rel1 { - to_x: "elm.dragable.slider"; + to_x: "button0"; to_y: "elm.indicator"; offset: 0 -7; } - rel2.to: "elm.dragable.slider"; + rel2.to: "button0"; image { normal: "sl_bt2_0_1.png"; border: 0 0 6 12; @@ -6798,7 +6838,7 @@ description { state: "default" 0.0; visible: 0; min: 8 32; - align: 1.0 0.5; + align: 0.0 0.5; rel1 { to: "button4"; relative: 1.0 0.0; @@ -6831,13 +6871,13 @@ fixed: 1 1; align: 0.5 1.0; rel1 { - to: "elm.dragable.slider"; - relative: 0.0 0.0; + to: "button0"; + relative: 0.0 -0.25; offset: 0 0; } rel2 { - to: "elm.dragable.slider"; - relative: 1.0 0.0; + to: "button0"; + relative: 1.0 -0.25; offset: -1 0; } color: 224 224 224 255; Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-10 11:56:56 UTC (rev 38991) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-10 11:57:47 UTC (rev 38992) @@ -1983,7 +1983,7 @@ elm_slider_label_set(sl, "Label"); elm_slider_icon_set(sl, ic); elm_slider_unit_format_set(sl, "%1.1f units"); - elm_slider_span_size_set(sl, 400); + elm_slider_span_size_set(sl, 120); evas_object_size_hint_align_set(sl, -1.0, -1.0); evas_object_size_hint_weight_set(sl, 1.0, 1.0); elm_box_pack_end(bx, sl); @@ -1992,7 +1992,7 @@ sl = elm_slider_add(win); elm_slider_label_set(sl, "Label 2"); - elm_slider_span_size_set(sl, 200); + elm_slider_span_size_set(sl, 80); evas_object_size_hint_align_set(sl, -1.0, -1.0); evas_object_size_hint_weight_set(sl, 1.0, 1.0); elm_slider_indicator_format_set(sl, "%3.0f"); @@ -2008,7 +2008,7 @@ sl = elm_slider_add(win); elm_slider_label_set(sl, "Label 3"); elm_slider_unit_format_set(sl, "units"); - elm_slider_span_size_set(sl, 200); + elm_slider_span_size_set(sl, 40); evas_object_size_hint_align_set(sl, -1.0, -1.0); evas_object_size_hint_weight_set(sl, 1.0, 1.0); elm_slider_indicator_format_set(sl, "%3.0f"); @@ -2028,7 +2028,7 @@ elm_slider_icon_set(sl, ic); elm_slider_label_set(sl, "Label 4"); elm_slider_unit_format_set(sl, "units"); - elm_slider_span_size_set(sl, 200); + elm_slider_span_size_set(sl, 60); evas_object_size_hint_align_set(sl, 0.5, -1.0); evas_object_size_hint_weight_set(sl, 0.0, 1.0); elm_slider_indicator_format_set(sl, "%1.1f"); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-10 11:56:56 UTC (rev 38991) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-10 11:57:47 UTC (rev 38992) @@ -494,8 +494,7 @@ typedef enum _Elm_Genlist_Item_Flags { - ELM_GENLIST_ITEM_DISABLED, - ELM_GENLIST_ITEM_EXPANDED + ELM_GENLIST_ITEM_SUBITEMS } Elm_Genlist_Item_Flags; typedef struct _Elm_Genlist_Item_Class Elm_Genlist_Item_Class; typedef struct _Elm_Genlist_Item Elm_Genlist_Item; @@ -506,11 +505,16 @@ char *(*label_get) (const void *data, const char *part); Evas_Object *(*icon_get) (const void *data, const char *part); Evas_Bool (*state_get) (const void *data, const char *part); + void (*del) (const void *data); } func; }; EAPI Evas_Object *elm_genlist_add(Evas_Object *parent); - EAPI Elm_Genlist_Item *elm_genlist_item_add(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags); + EAPI Elm_Genlist_Item * + elm_genlist_item_append(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, + const void *data, Elm_Genlist_Item *parent, + Elm_Genlist_Item_Flags flags, + void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data); /* smart callbacks called: */ Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-10 11:56:56 UTC (rev 38991) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-10 11:57:47 UTC (rev 38992) @@ -2,15 +2,53 @@ #include "elm_priv.h" typedef struct _Widget_Data Widget_Data; +typedef struct _Item Item; +typedef struct _Item_Block Item_Block; struct _Widget_Data { Evas_Object *scr; + Evas_Object *pan_smart; Evas_Object *content; + Eina_Inlist *items; + Eina_Inlist *blocks; Evas_Bool min_w : 1; Evas_Bool min_h : 1; }; +struct _Item_Block +{ + Eina_Inlist __header; + int count; + Evas_Object *obj; + Eina_List *items; + Evas_Coord x, y, w, h; + Evas_Bool realized : 1; +}; + +struct _Item +{ + Eina_Inlist __header; + Item_Block *block; + Eina_Inlist *subblocks; // not done yet + Eina_List *subitems; // not done yet + + Evas_Coord x, y, w, h; + Evas_Bool realized : 1; + Evas_Bool selected : 1; + Evas_Bool expanded : 1; // not done yet + Evas_Bool disabled : 1; + + const Elm_Genlist_Item_Class *itc; + const void *data; + Elm_Genlist_Item *parent; // not done yet + Elm_Genlist_Item_Flags flags; + struct { + void (*func) (void *data, Evas_Object *obj, void *event_info); + const void *data; + } func; +}; + static void _del_hook(Evas_Object *obj); static void _theme_hook(Evas_Object *obj); static void _show_region_hook(void *data, Evas_Object *obj); @@ -101,6 +139,72 @@ _sizing_eval(data); } +typedef struct _Pan Pan; + +struct _Pan { + int x; +}; + +static Evas_Smart_Class _pan_sc = {NULL}; + +static void +_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ +} + +static void +_pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) +{ +} + +static void +_pan_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) +{ +} + +static void +_pan_child_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) +{ +} + +static void +_pan_add(Evas_Object *obj) +{ + Pan *sd; + + sd = calloc(1, sizeof(Pan)); + if (!sd) return; + // FIXME: setup sd + evas_object_smart_data_set(obj, sd); + _pan_sc.add(obj); +} + +static void +_pan_del(Evas_Object *obj) +{ + Pan *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + // FIXME: del smart stuff + free(sd); +} + +static void +_pan_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) +{ + Evas_Coord ow, oh; + evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); + if ((ow == w) && (oh == h)) return; + evas_object_smart_changed(obj); +} + +static void +_pan_calculate(Evas_Object *obj) +{ + // FIXME: calcualte new geom +} + EAPI Evas_Object * elm_genlist_add(Evas_Object *parent) { @@ -108,6 +212,7 @@ Evas *e; Widget_Data *wd; Evas_Coord vw, vh, minw, minh; + static Evas_Smart *smart = NULL; wd = ELM_NEW(Widget_Data); e = evas_object_evas_get(parent); @@ -119,6 +224,33 @@ wd->scr = elm_smart_scroller_add(e); elm_widget_resize_object_set(obj, wd->scr); + if (!smart) + { + static Evas_Smart_Class sc = { "Elm_Genlist_Pan", EVAS_SMART_CLASS_VERSION, }; + + evas_object_smart_clipped_smart_set(&_pan_sc); + sc.add = _pan_add; + sc.del = _pan_del; + sc.move = _pan_sc.move; + sc.resize = _pan_resize; + sc.show = _pan_sc.show; + sc.hide = _pan_sc.hide; + sc.color_set = _pan_sc.color_set; + sc.clip_set = _pan_sc.clip_set; + sc.clip_unset = _pan_sc.clip_unset; + sc.calculate = _pan_calculate; + sc.member_add = _pan_sc.member_add; + sc.member_del = _pan_sc.member_del; + smart = evas_smart_class_new(&sc); + } + + wd->pan_smart = evas_object_smart_add(e, smart); + // FIXME: init the pan + + elm_smart_scroller_extern_pan_set(wd->scr, wd->pan_smart, + _pan_set, _pan_get, + _pan_max_get, _pan_child_size_get); + edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr), &minw, &minh); evas_object_size_hint_min_set(obj, minw, minh); evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize, obj); @@ -129,8 +261,114 @@ return obj; } +static Item * +_item_new(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, + const void *data, Elm_Genlist_Item *parent, + Elm_Genlist_Item_Flags flags, + void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) +{ + Item *it; + + it = calloc(1, sizeof(Item)); + if (!it) return NULL; + it->itc = itc; + it->data = data; + it->parent = parent; + it->flags = flags; + it->func.func = func; + it->func.data = func_data; + return it; +} + EAPI Elm_Genlist_Item * -elm_genlist_item_add(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags) +elm_genlist_item_append(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, + const void *data, Elm_Genlist_Item *parent, + Elm_Genlist_Item_Flags flags, + void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) { Widget_Data *wd = elm_widget_data_get(obj); + Item *it = _item_new(obj, itc, data, parent, flags, func, func_data); + if (!it) return NULL; + wd->items = eina_inlist_append(wd->items, (Eina_Inlist *)it); + return (Elm_Genlist_Item *)it; } + +EAPI Elm_Genlist_Item * +elm_genlist_item_prepend(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, + const void *data, Elm_Genlist_Item *parent, + Elm_Genlist_Item_Flags flags, + void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) +{ +} + +EAPI Elm_Genlist_Item * +elm_genlist_item_insert_before(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, + const void *data, Elm_Genlist_Item *before, + Elm_Genlist_Item_Flags flags, + void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) +{ +} + +EAPI Elm_Genlist_Item * +elm_genlist_item_insert_after(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, + const void *data, Elm_Genlist_Item *after, + Elm_Genlist_Item_Flags flags, + void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) +{ +} + +EAPI void +elm_genlist_multi_select_set(Evas_Object *obj, Evas_Bool multi) +{ +} + +EAPI const Eina_List * +elm_genlist_items_get(Evas_Object *obj) +{ +} + +EAPI const Elm_Genlist_Item * +elm_genlist_selected_item_get(Evas_Object *obj) +{ +} + +EAPI const Eina_List * +elm_genlist_selected_items_get(Evas_Object *obj) +{ +} + +EAPI const Eina_List * +elm_genlist_item_items_get(Elm_Genlist_Item *item) +{ +} + +EAPI void +elm_genlist_item_selected_set(Elm_Genlist_Item *item, Evas_Bool selected) +{ +} + +EAPI void +elm_genlist_item_expanded_set(Elm_Genlist_Item *item, Evas_Bool expanded) +{ + // not done yet +} + +EAPI void +elm_genlist_item_disabld_set(Elm_Genlist_Item *item, Evas_Bool disabld) +{ +} + +EAPI void +elm_genlist_item_show(Elm_Genlist_Item *item) +{ +} + +EAPI void +elm_genlist_item_del(Elm_Genlist_Item *item) +{ +} + +EAPI const void * +elm_genlist_item_data_get(Elm_Genlist_Item *item) +{ +} |
From: Enlightenment S. <no-...@en...> - 2009-02-11 12:40:32
|
Log: fix some min size calc issues. fix some theme size calc issues make all widgets able to... do finger size! this way a ui can be tweaked with 1 value (finger size) if it is to be finger or mouse/stylus driven. and it was so simple to add in. work on genlist - beginning to display items and scroll. Author: raster Date: 2009-02-11 03:49:43 -0800 (Wed, 11 Feb 2009) New Revision: 38995 Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c 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_clock.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_main.c trunk/TMP/st/elementary/src/lib/elm_photo.c trunk/TMP/st/elementary/src/lib/elm_priv.h trunk/TMP/st/elementary/src/lib/elm_slider.c trunk/TMP/st/elementary/src/lib/elm_toggle.c trunk/TMP/st/elementary/src/lib/elm_toolbar.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2009-02-11 11:48:15 UTC (rev 38994) +++ trunk/TMP/st/elementary/data/themes/default.edc 2009-02-11 11:49:43 UTC (rev 38995) @@ -463,6 +463,7 @@ part { name: "elm.swallow.content"; type: SWALLOW; description { state: "default" 0.0; + fixed: 1 0; visible: 0; align: 0.0 0.5; rel1.offset: 4 4; @@ -471,6 +472,7 @@ } description { state: "visible" 0.0; inherit: "default" 0.0; + fixed: 1 0; visible: 1; aspect: 1.0 1.0; aspect_preference: VERTICAL; @@ -478,6 +480,7 @@ } description { state: "icononly" 0.0; inherit: "default" 0.0; + fixed: 0 0; visible: 1; align: 0.5 0.5; aspect: 1.0 1.0; @@ -672,6 +675,7 @@ part { name: "elm.swallow.content"; type: SWALLOW; description { state: "default" 0.0; + fixed: 1 0; visible: 0; align: 0.0 0.5; rel1 { @@ -687,6 +691,7 @@ } description { state: "visible" 0.0; inherit: "default" 0.0; + fixed: 0 0; visible: 1; aspect: 1.0 1.0; aspect_preference: VERTICAL; @@ -694,6 +699,7 @@ } description { state: "icononly" 0.0; inherit: "default" 0.0; + fixed: 0 0; visible: 1; align: 0.5 0.5; aspect: 1.0 1.0; @@ -1037,8 +1043,8 @@ rel1.offset: -4 3; rel2.offset: -4 -4; align: 1.0 0.5; - min: 96 24; - max: 96 24; + min: 96 16; + max: 96 16; aspect: 4.0 4.0; aspect_preference: VERTICAL; color: 255 255 255 255; @@ -1067,8 +1073,8 @@ fixed: 1 1; rel1.to: "bg"; rel2.to: "bg"; - min: 24 24; - max: 24 24; + min: 16 16; + max: 16 16; aspect: 1.0 1.0; aspect_preference: VERTICAL; color: 0 0 0 0; @@ -1080,12 +1086,12 @@ events: "button"; } description { state: "default" 0.0; - rel1.to: "bg"; - rel1.offset: -8 -8; - rel1.relative: -0.1 -0.1; - rel2.to: "bg"; - rel2.offset: 7 7; - rel2.relative: 1.1 1.1; + rel1.to_x: "bg"; + rel1.offset: 0 0; + rel1.relative: 0.0 0.0; + rel2.to_x: "bg"; + rel2.offset: -1 -1; + rel2.relative: 1.0 1.0; color: 0 0 0 0; } } @@ -1096,7 +1102,7 @@ mouse_events: 0; description { state: "default" 0.0; rel1.to: "button"; - rel1.relative: -3.0 0.0; + rel1.relative: -5.0 0.0; rel2.to: "button"; rel2.relative: 0.0 1.0; color: 0 0 0 0; @@ -1111,7 +1117,7 @@ rel1.to: "button"; rel1.relative: 1.0 0.0; rel2.to: "button"; - rel2.relative: 4.0 1.0; + rel2.relative: 6.0 1.0; color: 0 0 0 0; } } @@ -1130,8 +1136,9 @@ scale: 1; clip_to: "clipper"; description { state: "default" 0.0; - rel1.to: "offrect"; - rel2.to: "offrect"; + fixed: 1 1; + rel1.to_x: "offrect"; + rel2.to_x: "offrect"; color: 0 0 0 255; text { font: "Sans,Edje-Vera"; @@ -1149,9 +1156,10 @@ scale: 1; clip_to: "clipper"; description { state: "default" 0.0; - rel1.to: "onrect"; + fixed: 1 1; + rel1.to_x: "onrect"; rel1.offset: 1 1; - rel2.to: "onrect"; + rel2.to_x: "onrect"; rel2.offset: 0 0; color: 224 224 224 255; color3: 0 0 0 64; @@ -1224,24 +1232,25 @@ part { name: "elm.swallow.content"; type: SWALLOW; description { state: "default" 0.0; +// fixed: 1 1; visible: 0; align: 0.0 0.5; rel1.offset: 4 4; + rel2.relative: 0.0 1.0; rel2.offset: 3 -5; - rel2.relative: 0.0 1.0; } description { state: "visible" 0.0; inherit: "default" 0.0; +// fixed: 0 0; visible: 1; aspect: 1.0 1.0; aspect_preference: VERTICAL; rel2.offset: 4 -5; } } - part { - name: "elm.text"; - type: TEXT; - mouse_events: 0; + part { name: "elm.text"; + type: TEXT; + mouse_events: 0; scale: 1; description { state: "default" 0.0; visible: 0; @@ -1253,10 +1262,10 @@ rel2.offset: -5 -5; color: 0 0 0 255; text { - font: "Sans,Edje-Vera"; - size: 10; - min: 0 0; - align: 0.0 0.5; + font: "Sans,Edje-Vera"; + size: 10; + min: 0 0; + align: 0.0 0.5; } } description { state: "visible" 0.0; @@ -1434,7 +1443,8 @@ // FIXME 48x96 should be the native pixel design, right now // its 80x160. fix int he artwork later min: 24 48; - max: 24 48; + aspect: 0.5 0.5; +// max: 24 48; image.normal: "flip_base.png"; } } @@ -2004,8 +2014,9 @@ rel2.offset: -5 -5; // FIXME 48x96 should be the native pixel design, right now // its 80x160. fix int he artwork later + aspect: 0.5 0.5; min: 24 48; - max: 24 48; +// max: 24 48; image.normal: "flip_base.png"; } } @@ -3337,7 +3348,7 @@ group { name: "elm/hover/base/hoversel_vertical"; images { - image: "shad_circ.png" COMP; +// image: "shad_circ.png" COMP; image: "bt_base2.png" COMP; image: "bt_hilight.png" COMP; image: "bt_shine.png" COMP; @@ -3363,7 +3374,7 @@ rel2.relative: 1.0 1.0; } } - +/* part { name: "shad"; mouse_events: 0; description { state: "default" 0.0; @@ -3375,6 +3386,7 @@ fill.smooth: 0; } } + */ part { name: "button_image"; mouse_events: 1; description { state: "default" 0.0; @@ -5210,12 +5222,11 @@ } } } - part { - name: "elm.swallow.icon"; - type: SWALLOW; - description { - state: "default" 0.0; - align: 0.0 0.5; + part { name: "elm.swallow.icon"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 0.0 0.5; rel1 { relative: 0.0 0.0; offset: 4 4; @@ -5226,12 +5237,13 @@ } } } - part { - name: "elm.swallow.end"; - type: SWALLOW; - description { - state: "default" 0.0; - align: 1.0 0.5; + part { name: "elm.swallow.end"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 1.0 0.5; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; rel1 { relative: 1.0 0.0; offset: -5 4; @@ -5242,15 +5254,14 @@ } } } - part { - name: "elm.text"; + part { name: "elm.text"; type: TEXT; effect: SOFT_SHADOW; mouse_events: 0; scale: 1; description { state: "default" 0.0; - min: 16 16; +// min: 16 16; rel1 { to_x: "elm.swallow.icon"; relative: 1.0 0.0; @@ -5405,8 +5416,8 @@ part { name: "elm.swallow.icon"; type: SWALLOW; - description { - state: "default" 0.0; + description { state: "default" 0.0; + fixed: 1 0; align: 0.0 0.5; rel1 { relative: 0.0 0.0; @@ -5421,8 +5432,8 @@ part { name: "elm.swallow.end"; type: SWALLOW; - description { - state: "default" 0.0; + description { state: "default" 0.0; + fixed: 1 0; align: 1.0 0.5; rel1 { relative: 1.0 0.0; @@ -5442,7 +5453,7 @@ scale: 1; description { state: "default" 0.0; - min: 16 16; +// min: 16 16; rel1 { to_x: "elm.swallow.icon"; relative: 1.0 0.0; @@ -5554,8 +5565,8 @@ part { name: "base_sh"; mouse_events: 0; - description { - state: "default" 0.0; + description { state: "default" 0.0; + fixed: 1 1; align: 0.0 0.0; min: 0 10; rel1 { @@ -5618,11 +5629,10 @@ } } } - part { - name: "elm.swallow.icon"; + part { name: "elm.swallow.icon"; type: SWALLOW; - description { - state: "default" 0.0; + description { state: "default" 0.0; + fixed: 1 0; align: 0.0 0.5; rel1 { relative: 0.0 0.0; @@ -5634,11 +5644,10 @@ } } } - part { - name: "elm.swallow.end"; + part { name: "elm.swallow.end"; type: SWALLOW; - description { - state: "default" 0.0; + description { state: "default" 0.0; + fixed: 1 0; align: 1.0 0.5; rel1 { relative: 1.0 0.0; @@ -5656,9 +5665,8 @@ effect: SOFT_SHADOW; mouse_events: 0; scale: 1; - description { - state: "default" 0.0; - min: 16 16; + description { state: "default" 0.0; +// min: 16 16; rel1 { to_x: "elm.swallow.icon"; relative: 1.0 0.0; @@ -5810,11 +5818,10 @@ } } } - part { - name: "elm.swallow.icon"; + part { name: "elm.swallow.icon"; type: SWALLOW; - description { - state: "default" 0.0; + description { state: "default" 0.0; + fixed: 1 0; align: 0.0 0.5; rel1 { relative: 0.0 0.0; @@ -5826,11 +5833,10 @@ } } } - part { - name: "elm.swallow.end"; + part { name: "elm.swallow.end"; type: SWALLOW; - description { - state: "default" 0.0; + description { state: "default" 0.0; + fixed: 1 0; align: 1.0 0.5; rel1 { relative: 1.0 0.0; @@ -5850,7 +5856,7 @@ scale: 1; description { state: "default" 0.0; - min: 16 16; +// min: 16 16; rel1 { to_x: "elm.swallow.icon"; relative: 1.0 0.0; @@ -6177,14 +6183,14 @@ max: 0 24; fixed: 1 1; rel1 { - relative: 0.5 0.5; - to: "bg"; + relative: 0.5 0.0; + to_x: "bg"; } rel2 { - relative: 0.5 0.5; - to: "bg"; + relative: 0.5 1.0; + to_x: "bg"; } - color: 0 0 0 0; + color: 255 0 0 100; } } part { name: "button_events"; @@ -6193,13 +6199,13 @@ events: "elm.dragable.slider"; } mouse_events: 1; - scale: 1; description { state: "default" 0.0; fixed: 1 1; - min: 32 32; - max: 32 32; - rel1.to: "elm.dragable.slider"; - rel2.to: "elm.dragable.slider"; + min: 16 16; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + rel1.to_x: "elm.dragable.slider"; + rel2.to_x: "elm.dragable.slider"; color: 0 0 0 0; } } @@ -6581,7 +6587,7 @@ description { state: "default" 0.0; min: 24 48; max: 24 9999; - align: 1.0 0.5; + align: 0.5 1.0; rel1 { to_y: "elm.text"; relative: 0.0 1.0; @@ -6713,12 +6719,12 @@ max: 24 0; fixed: 1 1; rel1 { - relative: 0.5 0.5; - to: "bg"; + relative: 0.5 0.0; + to_y: "bg"; } rel2 { - relative: 0.5 0.5; - to: "bg"; + relative: 0.5 1.0; + to_y: "bg"; } color: 0 0 0 0; } @@ -6729,13 +6735,13 @@ events: "elm.dragable.slider"; } mouse_events: 1; - scale: 1; description { state: "default" 0.0; fixed: 1 1; - min: 32 32; - max: 32 32; - rel1.to: "elm.dragable.slider"; - rel2.to: "elm.dragable.slider"; + min: 16 16; + aspect: 1.0 1.0; + aspect_preference: HORIZONTAL; + rel1.to_y: "elm.dragable.slider"; + rel2.to_y: "elm.dragable.slider"; color: 0 0 0 0; } } @@ -6745,8 +6751,8 @@ fixed: 1 1; max: 17 999; min: 17 24; - rel1.to: "button_events"; - rel2.to: "button_events"; + rel1.to: "elm.dragable.slider"; + rel2.to: "elm.dragable.slider"; image { normal: "sl_bt_0.png"; border: 5 5 5 10; @@ -6872,12 +6878,12 @@ align: 0.5 1.0; rel1 { to: "button0"; - relative: 0.0 -0.25; + relative: 0.0 -1.0; offset: 0 0; } rel2 { to: "button0"; - relative: 1.0 -0.25; + relative: 1.0 -1.0; offset: -1 0; } color: 224 224 224 255; Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-11 11:48:15 UTC (rev 38994) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-11 11:49:43 UTC (rev 38995) @@ -265,6 +265,8 @@ elm_icon_file_set(ic, buf, NULL); evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); tg = elm_toggle_add(win); + evas_object_size_hint_weight_set(tg, 1.0, 1.0); + evas_object_size_hint_align_set(tg, -1.0, 0.5); elm_toggle_label_set(tg, "Icon sized to toggle"); elm_toggle_icon_set(tg, ic); elm_toggle_state_set(tg, 1); @@ -283,13 +285,13 @@ elm_box_pack_end(bx, tg); evas_object_show(tg); evas_object_show(ic); - + tg = elm_toggle_add(win); elm_toggle_label_set(tg, "Label Only"); - elm_toggle_states_labels_set(tg, "Big", "Small"); + elm_toggle_states_labels_set(tg, "Big long fun times label", "Small long happy fun label"); elm_box_pack_end(bx, tg); evas_object_show(tg); - + ic = elm_icon_add(win); snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); elm_icon_file_set(ic, buf, NULL); @@ -1500,6 +1502,7 @@ 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_icon_scale_set(ic, 1, 1); elm_list_item_append(li, "Hello", ic, NULL, NULL, NULL); ic = elm_icon_add(win); snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); @@ -1984,7 +1987,7 @@ elm_slider_icon_set(sl, ic); elm_slider_unit_format_set(sl, "%1.1f units"); elm_slider_span_size_set(sl, 120); - evas_object_size_hint_align_set(sl, -1.0, -1.0); + evas_object_size_hint_align_set(sl, -1.0, 0.5); evas_object_size_hint_weight_set(sl, 1.0, 1.0); elm_box_pack_end(bx, sl); evas_object_show(ic); @@ -1993,7 +1996,7 @@ sl = elm_slider_add(win); elm_slider_label_set(sl, "Label 2"); elm_slider_span_size_set(sl, 80); - evas_object_size_hint_align_set(sl, -1.0, -1.0); + evas_object_size_hint_align_set(sl, -1.0, 0.5); evas_object_size_hint_weight_set(sl, 1.0, 1.0); elm_slider_indicator_format_set(sl, "%3.0f"); elm_slider_min_max_set(sl, 50, 150); @@ -2009,7 +2012,7 @@ elm_slider_label_set(sl, "Label 3"); elm_slider_unit_format_set(sl, "units"); elm_slider_span_size_set(sl, 40); - evas_object_size_hint_align_set(sl, -1.0, -1.0); + evas_object_size_hint_align_set(sl, -1.0, 0.5); evas_object_size_hint_weight_set(sl, 1.0, 1.0); elm_slider_indicator_format_set(sl, "%3.0f"); elm_slider_min_max_set(sl, 50, 150); @@ -2042,7 +2045,64 @@ evas_object_show(win); } +static Elm_Genlist_Item_Class itc1; +char *gl_label_get(const void *data, const char *part) +{ + char buf[256]; + snprintf(buf, sizeof(buf), "Item # %i", (int)data); + return strdup(buf); +} +Evas_Object *gl_icon_get(const void *data, const char *part) +{ + return NULL; +} +Evas_Bool gl_state_get(const void *data, const char *part) +{ + return 0; +} +void gl_del(const void *data) +{ +} + + static void +my_bt_29(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *gl; + Elm_Genlist_Item *gli; + int i; + + win = elm_win_add(NULL, "genlist", ELM_WIN_BASIC); + elm_win_title_set(win, "Genlist"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + gl = elm_genlist_add(win); + elm_win_resize_object_add(win, gl); + evas_object_size_hint_weight_set(gl, 1.0, 1.0); + evas_object_show(gl); + + itc1.style = "default"; + itc1.func.label_get = gl_label_get; + itc1.func.icon_get = gl_icon_get; + itc1.func.state_get = gl_state_get; + itc1.func.del = gl_del; + + for (i = 0; i < 2000; i++) + { + gli = elm_genlist_item_append(gl, &itc1, (void *)i/* item data */, + NULL/* parent */, ELM_GENLIST_ITEM_NONE, + NULL/* func */, NULL/* func data */); + } + evas_object_resize(win, 320, 320); + evas_object_show(win); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *li, *fr; @@ -2145,6 +2205,7 @@ elm_list_item_append(li, "Scaling", NULL, NULL, my_bt_26, NULL); elm_list_item_append(li, "Scaling 2", NULL, NULL, my_bt_27, NULL); elm_list_item_append(li, "Slider", NULL, NULL, my_bt_28, NULL); + elm_list_item_append(li, "Genlist", NULL, NULL, my_bt_29, NULL); elm_list_go(li); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-11 11:48:15 UTC (rev 38994) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-11 11:49:43 UTC (rev 38995) @@ -112,6 +112,8 @@ extern "C" { #endif +#define ELM_RECTS_INTERSECT(x, y, w, h, xx, yy, ww, hh) (((x) < ((xx) + (ww))) && ((y) < ((yy) + (hh))) && (((x) + (w)) > (xx)) && (((y) + (h)) > (yy))) + /**************************************************************************/ /* Objects */ typedef enum _Elm_Win_Type @@ -146,6 +148,8 @@ EAPI void elm_object_scale_set(Evas_Object *obj, double scale); EAPI double elm_object_scale_get(Evas_Object *obj); EAPI void elm_object_focus(Evas_Object *obj); + + EAPI void elm_coords_finger_size_adjust(int times_w, Evas_Coord *w, int times_h, Evas_Coord *h); 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); @@ -494,7 +498,8 @@ typedef enum _Elm_Genlist_Item_Flags { - ELM_GENLIST_ITEM_SUBITEMS + ELM_GENLIST_ITEM_NONE = 0, + ELM_GENLIST_ITEM_SUBITEMS = (1 << 0) } Elm_Genlist_Item_Flags; typedef struct _Elm_Genlist_Item_Class Elm_Genlist_Item_Class; typedef struct _Elm_Genlist_Item Elm_Genlist_Item; Modified: trunk/TMP/st/elementary/src/lib/elm_button.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_button.c 2009-02-11 11:48:15 UTC (rev 38994) +++ trunk/TMP/st/elementary/src/lib/elm_button.c 2009-02-11 11:49:43 UTC (rev 38995) @@ -58,7 +58,9 @@ if (!wd) return; Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1; - edje_object_size_min_calc(wd->btn, &minw, &minh); + elm_coords_finger_size_adjust(1, &minw, 1, &minh); + edje_object_size_min_restricted_calc(wd->btn, &minw, &minh, minw, minh); + elm_coords_finger_size_adjust(1, &minw, 1, &minh); evas_object_size_hint_min_set(obj, minw, minh); evas_object_size_hint_max_set(obj, maxw, maxh); } Modified: trunk/TMP/st/elementary/src/lib/elm_clock.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_clock.c 2009-02-11 11:48:15 UTC (rev 38994) +++ trunk/TMP/st/elementary/src/lib/elm_clock.c 2009-02-11 11:49:43 UTC (rev 38995) @@ -221,7 +221,10 @@ _signal_clock_val_up, obj); edje_object_signal_callback_add(wd->digit[i], "elm,action,down", "", _signal_clock_val_down, obj); - edje_object_size_min_calc(wd->digit[i], &mw, &mh); + mw = mh = -1; + elm_coords_finger_size_adjust(1, &mw, 2, &mh); + edje_object_size_min_restricted_calc(wd->digit[i], &mw, &mh, mw, mh); + elm_coords_finger_size_adjust(1, &mw, 2, &mh); edje_extern_object_min_size_set(wd->digit[i], mw, mh); snprintf(buf, sizeof(buf), "d%i", i); edje_object_part_swallow(wd->clk , buf, wd->digit[i]); @@ -238,7 +241,10 @@ _signal_clock_val_up, obj); edje_object_signal_callback_add(wd->ampm, "elm,action,down", "", _signal_clock_val_down, obj); - edje_object_size_min_calc(wd->ampm, &mw, &mh); + mw = mh = -1; + elm_coords_finger_size_adjust(1, &mw, 2, &mh); + edje_object_size_min_restricted_calc(wd->ampm, &mw, &mh, mw, mh); + elm_coords_finger_size_adjust(1, &mw, 2, &mh); edje_extern_object_min_size_set(wd->ampm, mw, mh); edje_object_part_swallow(wd->clk , "ampm", wd->ampm); evas_object_show(wd->ampm); Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-11 11:48:15 UTC (rev 38994) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-11 11:49:43 UTC (rev 38995) @@ -4,6 +4,7 @@ typedef struct _Widget_Data Widget_Data; typedef struct _Item Item; typedef struct _Item_Block Item_Block; +typedef struct _Pan Pan; struct _Widget_Data { @@ -12,6 +13,8 @@ Evas_Object *content; Eina_Inlist *items; Eina_Inlist *blocks; + Pan *pan; + Evas_Coord pan_x, pan_y, minw, minh; Evas_Bool min_w : 1; Evas_Bool min_h : 1; }; @@ -20,10 +23,12 @@ { Eina_Inlist __header; int count; + Widget_Data *wd; Evas_Object *obj; Eina_List *items; - Evas_Coord x, y, w, h; + Evas_Coord x, y, w, h, minw, minh; Evas_Bool realized : 1; + Evas_Bool changed : 1; }; struct _Item @@ -31,13 +36,14 @@ Eina_Inlist __header; Item_Block *block; Eina_Inlist *subblocks; // not done yet - Eina_List *subitems; // not done yet + Eina_Inlist *subitems; // not done yet - Evas_Coord x, y, w, h; + Evas_Coord x, y, w, h, minw, minh; Evas_Bool realized : 1; Evas_Bool selected : 1; Evas_Bool expanded : 1; // not done yet Evas_Bool disabled : 1; + Evas_Bool mincalcd : 1; const Elm_Genlist_Item_Class *itc; const void *data; @@ -47,14 +53,23 @@ void (*func) (void *data, Evas_Object *obj, void *event_info); const void *data; } func; + + Evas_Object *base; }; +struct _Pan { + Evas_Object_Smart_Clipped_Data __clipped_data; + 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); static void _sizing_eval(Evas_Object *obj); static void _sub_del(void *data, Evas_Object *obj, void *event_info); +static Evas_Smart_Class _pan_sc = {NULL}; + static void _del_hook(Evas_Object *obj) { @@ -139,55 +154,77 @@ _sizing_eval(data); } -typedef struct _Pan Pan; - -struct _Pan { - int x; -}; - -static Evas_Smart_Class _pan_sc = {NULL}; - static void _pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y) { + Pan *sd = evas_object_smart_data_get(obj); + Evas_Coord ow, oh; + if ((x == sd->wd->pan_x) && (y == sd->wd->pan_y)) return; + evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); + ow = sd->wd->minw - ow; + if (ow < 0) ow = 0; + oh = sd->wd->minh - oh; + if (oh < 0) oh = 0; + if (x < 0) x = 0; + if (y < 0) y = 0; + if (x > ow) x = ow; + if (y > oh) y = oh; + sd->wd->pan_x = x; + sd->wd->pan_y = y; + evas_object_smart_changed(obj); } static void _pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) { + Pan *sd = evas_object_smart_data_get(obj); + if (x) *x = sd->wd->pan_x; + if (y) *y = sd->wd->pan_y; } static void _pan_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) { + Pan *sd = evas_object_smart_data_get(obj); + Evas_Coord ow, oh; + evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); + ow = sd->wd->minw - ow; + if (ow < 0) ow = 0; + oh = sd->wd->minh - oh; + if (oh < 0) oh = 0; + if (x) *x = ow; + if (y) *y = oh; } static void _pan_child_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) -{ +{ + Pan *sd = evas_object_smart_data_get(obj); + if (w) *w = sd->wd->minw; + if (h) *h = sd->wd->minh; } static void _pan_add(Evas_Object *obj) { Pan *sd; - + Evas_Object_Smart_Clipped_Data *cd; + + _pan_sc.add(obj); + cd = evas_object_smart_data_get(obj); sd = calloc(1, sizeof(Pan)); if (!sd) return; - // FIXME: setup sd + sd->__clipped_data = *cd; + free(cd); evas_object_smart_data_set(obj, sd); - _pan_sc.add(obj); } static void _pan_del(Evas_Object *obj) { - Pan *sd; - - sd = evas_object_smart_data_get(obj); + Pan *sd = evas_object_smart_data_get(obj); if (!sd) return; - // FIXME: del smart stuff - free(sd); + _pan_sc.del(obj); } static void @@ -198,11 +235,204 @@ if ((ow == w) && (oh == h)) return; evas_object_smart_changed(obj); } + + + + + + +static void +_item_realize(Item *it, int in) +{ + const char *stacking; + + if (it->realized) return; + it->base = edje_object_add(evas_object_evas_get(it->block->obj)); +// FIXME: hook callbacks +// evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_DOWN, +// _mouse_down, it); +// evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_UP, +// _mouse_up, it); + evas_object_smart_member_add(it->base, it->block->wd->pan_smart); + elm_widget_sub_object_add(it->block->obj, it->base); + if (in & 0x1) + _elm_theme_set(it->base, "list", "item_odd", "default"); + else + _elm_theme_set(it->base, "list", "item", "default"); + stacking = edje_object_data_get(it->base, "stacking"); + if (stacking) + { + if (!strcmp(stacking, "below")) + evas_object_lower(it->base); + else if (!strcmp(stacking, "above")) + evas_object_raise(it->base); + } + if (it->itc->func.label_get) + { + char *s = it->itc->func.label_get(it->data, "xxx"); + if (s) + { + edje_object_part_text_set(it->base, "elm.text", s); + free(s); + } + } + // FIXME: need to get all labels, all icons and all states and all labels + evas_object_show(it->base); + if (!it->mincalcd) + { + Evas_Coord mw, mh; + mw = mh = -1; + elm_coords_finger_size_adjust(1, &mw, 1, &mh); + edje_object_size_min_restricted_calc(it->base, &mw, &mh, mw, mh); + elm_coords_finger_size_adjust(1, &mw, 1, &mh); + it->minw = mw; + it->minh = mh; + it->mincalcd = 1; + } + it->realized = 1; +} + static void +_item_unrealize(Item *it) +{ + if (!it->realized) return; + evas_object_del(it->base); + it->base = NULL; + it->realized = 0; +} + +static void +_item_block_recalc(Item_Block *itb, int in) +{ + Eina_List *l; + Evas_Coord minw = 0, minh = 0; + + for (l = itb->items; l; l = l->next) + { + Item *it = l->data; + _item_realize(it, in); + if (!itb->realized) _item_unrealize(it); + minh += it->minh; + if (minw < it->minw) minw = it->minw; + in++; + } + itb->minw = minw; + itb->minh = minh; + itb->changed = 0; +} + +static void +_item_block_realize(Item_Block *itb, int in) +{ + Eina_List *l; + if (itb->realized) return; + for (l = itb->items; l; l = l->next) + { + Item *it = l->data; + _item_realize(it, in); + in++; + } + itb->realized = 1; +} + +static void +_item_block_unrealize(Item_Block *itb) +{ + Eina_List *l; + + if (!itb->realized) return; + for (l = itb->items; l; l = l->next) + { + Item *it = l->data; + _item_unrealize(it); + } + itb->realized = 0; +} + +static void +_item_block_position(Item_Block *itb) +{ + Eina_List *l; + Evas_Coord y = 0, ox, oy; + + evas_object_geometry_get(itb->wd->pan_smart, &ox, &oy, NULL, NULL); + for (l = itb->items; l; l = l->next) + { + Item *it = l->data; + + it->x = 0; + it->y = y; + it->w = itb->w; + it->h = it->minh; + evas_object_resize(it->base, it->w, it->h); + evas_object_move(it->base, + ox + itb->x + it->x - itb->wd->pan_x, + oy + itb->y + it->y - itb->wd->pan_y); + y += it->h; + } + itb->realized = 1; +} + +static void _pan_calculate(Evas_Object *obj) { + Pan *sd = evas_object_smart_data_get(obj); + Eina_Inlist *il; + Evas_Coord minw = 0, minh = 0, x = 0, y = 0, ow, oh; + int bn, in; + + for (bn = 0, in = 0, il = sd->wd->blocks; il; il = il->next, bn++) + { + Item_Block *itb = (Item_Block *)il; + if (itb->changed) + _item_block_recalc(itb, in); + itb->y = y; + itb->x = 0; + itb->w = itb->minw; + itb->h = itb->minh; + minh += itb->minh; + if (minw < itb->minw) minw = itb->minw; + itb->h = itb->minh; + y += itb->minh; + in += itb->count; + } + evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); + if (minw < ow) minw = ow; + if ((minw != sd->wd->minw) || (minh != sd->wd->minh)) + { + sd->wd->minw = minw; + sd->wd->minh = minh; + evas_object_smart_callback_call(obj, "changed", NULL); + } // FIXME: calcualte new geom + + for (bn = 0, in = 0, il = sd->wd->blocks; il; il = il->next, bn++) + { + Item_Block *itb = (Item_Block *)il; + itb->w = minw; + if (ELM_RECTS_INTERSECT(itb->x - sd->wd->pan_x, + itb->y - sd->wd->pan_y, + itb->w, itb->h, + 0, 0, ow, oh)) + { + if (!itb->realized) + { + printf("REALIZE BN # %i [%i %i, %ix%i]\n", bn, itb->x, itb->y, itb->w, itb->h); + _item_block_realize(itb, in); + } + _item_block_position(itb); + } + else + { + if (itb->realized) + { + printf("UNREALIZE BN # %i [%i %i, %ix%i]\n", bn, itb->x, itb->y, itb->w, itb->h); + _item_block_unrealize(itb); + } + } + in += itb->count; + } } EAPI Evas_Object * @@ -226,26 +456,23 @@ if (!smart) { - static Evas_Smart_Class sc = { "Elm_Genlist_Pan", EVAS_SMART_CLASS_VERSION, }; - + static Evas_Smart_Class sc; evas_object_smart_clipped_smart_set(&_pan_sc); + sc = _pan_sc; + sc.name = "Elm_Genlist_Pan"; + sc.version = EVAS_SMART_CLASS_VERSION; sc.add = _pan_add; sc.del = _pan_del; - sc.move = _pan_sc.move; sc.resize = _pan_resize; - sc.show = _pan_sc.show; - sc.hide = _pan_sc.hide; - sc.color_set = _pan_sc.color_set; - sc.clip_set = _pan_sc.clip_set; - sc.clip_unset = _pan_sc.clip_unset; sc.calculate = _pan_calculate; - sc.member_add = _pan_sc.member_add; - sc.member_del = _pan_sc.member_del; smart = evas_smart_class_new(&sc); } - - wd->pan_smart = evas_object_smart_add(e, smart); - // FIXME: init the pan + if (smart) + { + wd->pan_smart = evas_object_smart_add(e, smart); + wd->pan = evas_object_smart_data_get(wd->pan_smart); + wd->pan->wd = wd; + } elm_smart_scroller_extern_pan_set(wd->scr, wd->pan_smart, _pan_set, _pan_get, @@ -280,6 +507,32 @@ return it; } +static void +_item_block_add(Widget_Data *wd, Evas_Object *obj, Item *it, Item *itpar, Item *itrel) +{ + Item_Block *itb; + + if (!itrel) /* new block */ + { + newblock: + itb = calloc(1, sizeof(Item_Block)); + if (!itb) return; + wd->blocks = eina_inlist_append(wd->blocks, (Eina_Inlist *)itb); + itb->obj = obj; + itb->wd = wd; + } + else + { + itb = itrel->block; + if (itb->count > 32) goto newblock; + } + itb->items = eina_list_append(itb->items, it); + itb->count++; + itb->changed = 1; + it->block = itb; + evas_object_smart_changed(wd->pan_smart); +} + EAPI Elm_Genlist_Item * elm_genlist_item_append(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, @@ -287,9 +540,21 @@ void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) { Widget_Data *wd = elm_widget_data_get(obj); + Item *itpar, *itrel; Item *it = _item_new(obj, itc, data, parent, flags, func, func_data); if (!it) return NULL; - wd->items = eina_inlist_append(wd->items, (Eina_Inlist *)it); + if (!parent) + { + wd->items = eina_inlist_append(wd->items, (Eina_Inlist *)it); + itrel = (Item *)(((Eina_Inlist *)it)->prev); + _item_block_add(wd, obj, it, NULL, itrel); + } + else + { + // FIXME: tree. not done yet + itpar = (Item *)parent; + itpar->subitems = eina_inlist_append(itpar->subitems, (Eina_Inlist *)it); + } return (Elm_Genlist_Item *)it; } Modified: trunk/TMP/st/elementary/src/lib/elm_list.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_list.c 2009-02-11 11:48:15 UTC (rev 38994) +++ trunk/TMP/st/elementary/src/lib/elm_list.c 2009-02-11 11:49:43 UTC (rev 38995) @@ -84,8 +84,8 @@ _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(data); - _fix_items(data); - _sizing_eval(data); +// _fix_items(data); +// _sizing_eval(data); } static void @@ -304,20 +304,23 @@ } if (it->icon) { - edje_extern_object_aspect_set(it->icon, EDJE_ASPECT_CONTROL_VERTICAL, minw[0], minh[0]); - edje_extern_object_min_size_set(it->icon, minw[0], minh[0]); + evas_object_size_hint_min_set(it->icon, minw[0], minh[0]); + evas_object_size_hint_max_set(it->icon, 99999, 99999); edje_object_part_swallow(it->base, "elm.swallow.icon", it->icon); } if (it->end) { - edje_extern_object_aspect_set(it->end, EDJE_ASPECT_CONTROL_VERTICAL, minw[1], minh[1]); - edje_extern_object_min_size_set(it->end, minw[1], minh[1]); + evas_object_size_hint_min_set(it->end, minw[1], minh[1]); + evas_object_size_hint_max_set(it->end, 99999, 99999); edje_object_part_swallow(it->base, "elm.swallow.end", it->end); } if (!it->fixed) { edje_object_message_signal_process(it->base); - edje_object_size_min_calc(it->base, &mw, &mh); + mw = mh = -1; + elm_coords_finger_size_adjust(1, &mw, 1, &mh); + edje_object_size_min_restricted_calc(it->base, &mw, &mh, mw, mh); + elm_coords_finger_size_adjust(1, &mw, 1, &mh); evas_object_size_hint_min_set(it->base, mw, mh); evas_object_show(it->base); } Modified: trunk/TMP/st/elementary/src/lib/elm_main.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_main.c 2009-02-11 11:48:15 UTC (rev 38994) +++ trunk/TMP/st/elementary/src/lib/elm_main.c 2009-02-11 11:49:43 UTC (rev 38995) @@ -78,7 +78,8 @@ { int i; const char *elm_engine, *elm_scale, *elm_theme, *elm_prefix, *elm_data_dir; - const char *elm_font_hinting, *elm_font_path, *elm_image_cache, *elm_font_cache; + const char *elm_font_hinting, *elm_font_path, *elm_image_cache; + const char *elm_font_cache, *elm_finger_size; char buf[PATH_MAX]; eet_init(); @@ -102,6 +103,7 @@ elm_font_path = getenv("ELM_FONT_PATH"); elm_image_cache = getenv("ELM_IMAGE_CACHE"); elm_font_cache = getenv("ELM_FONT_CACHE"); + elm_finger_size = getenv("ELM_FINGER_SIZE"); if (!_elm_data_dir) { @@ -197,6 +199,7 @@ _elm_config->font_dirs = NULL; _elm_config->image_cache = 4096; _elm_config->font_cache = 512; + _elm_config->finger_size = 40; _elm_config->bgpixmap = 0; _elm_config->compositing = 1; @@ -283,6 +286,12 @@ if (elm_font_cache) _elm_config->font_cache = atoi(elm_font_cache); + + _elm_config->finger_size = + (double)_elm_config->finger_size * _elm_config->scale; + if (elm_finger_size) + _elm_config->finger_size = + (double)(atoi(elm_finger_size)) * _elm_config->scale; /* FIXME: implement quickstart below */ /* if !quickstart return @@ -374,3 +383,12 @@ { elm_widget_focus_set(obj, 1); } + +EAPI void +elm_coords_finger_size_adjust(int times_w, Evas_Coord *w, int times_h, Evas_Coord *h) +{ + if ((w) && (*w < (_elm_config->finger_size * times_w))) + *w = _elm_config->finger_size * times_w; + if ((h) && (*h < (_elm_config->finger_size * times_h))) + *h = _elm_config->finger_size * times_h; +} Modified: trunk/TMP/st/elementary/src/lib/elm_photo.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_photo.c 2009-02-11 11:48:15 UTC (rev 38994) +++ trunk/TMP/st/elementary/src/lib/elm_photo.c 2009-02-11 11:49:43 UTC (rev 38995) @@ -40,7 +40,9 @@ wd->size * elm_widget_scale_get(obj) * _elm_config->scale, wd->size * elm_widget_scale_get(obj) * _elm_config->scale); edje_object_part_swallow(wd->frm, "elm.swallow.content", wd->img); - edje_object_size_min_calc(wd->frm, &minw, &minh); + elm_coords_finger_size_adjust(1, &minw, 1, &minh); + edje_object_size_min_restricted_calc(wd->frm, &minw, &minh, minw, minh); + elm_coords_finger_size_adjust(1, &minw, 1, &minh); maxw = minw; maxh = minh; evas_object_size_hint_min_set(obj, minw, minh); Modified: trunk/TMP/st/elementary/src/lib/elm_priv.h =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_priv.h 2009-02-11 11:48:15 UTC (rev 38994) +++ trunk/TMP/st/elementary/src/lib/elm_priv.h 2009-02-11 11:49:43 UTC (rev 38995) @@ -48,6 +48,7 @@ int font_hinting; int image_cache; int font_cache; + Evas_Coord finger_size; }; #define ELM_NEW(t) calloc(1, sizeof(t)) Modified: trunk/TMP/st/elementary/src/lib/elm_slider.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_slider.c 2009-02-11 11:48:15 UTC (rev 38994) +++ trunk/TMP/st/elementary/src/lib/elm_slider.c 2009-02-11 11:49:43 UTC (rev 38995) @@ -78,7 +78,9 @@ Widget_Data *wd = elm_widget_data_get(obj); Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1; - edje_object_size_min_calc(wd->slider, &minw, &minh); + elm_coords_finger_size_adjust(1, &minw, 1, &minh); + edje_object_size_min_restricted_calc(wd->slider, &minw, &minh, minw, minh); + elm_coords_finger_size_adjust(1, &minw, 1, &minh); evas_object_size_hint_min_set(obj, minw, minh); evas_object_size_hint_max_set(obj, maxw, maxh); } Modified: trunk/TMP/st/elementary/src/lib/elm_toggle.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_toggle.c 2009-02-11 11:48:15 UTC (rev 38994) +++ trunk/TMP/st/elementary/src/lib/elm_toggle.c 2009-02-11 11:49:43 UTC (rev 38995) @@ -62,7 +62,9 @@ Widget_Data *wd = elm_widget_data_get(obj); Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1; - edje_object_size_min_calc(wd->tgl, &minw, &minh); + elm_coords_finger_size_adjust(1, &minw, 1, &minh); + edje_object_size_min_restricted_calc(wd->tgl, &minw, &minh, minw, minh); + elm_coords_finger_size_adjust(1, &minw, 1, &minh); evas_object_size_hint_min_set(obj, minw, minh); evas_object_size_hint_max_set(obj, maxw, maxh); } @@ -73,6 +75,8 @@ Widget_Data *wd = elm_widget_data_get(data); if (obj != wd->icon) return; edje_object_part_swallow(wd->tgl, "elm.swallow.content", obj); + Evas_Coord mw, mh; + evas_object_size_hint_min_get(obj, &mw, &mh); _sizing_eval(data); } @@ -173,6 +177,9 @@ { elm_widget_sub_object_add(obj, icon); edje_object_part_swallow(wd->tgl, "elm.swallow.content", icon); + Evas_Coord mw, mh; + evas_object_size_hint_min_get(wd->icon, &mw, &mh); + printf("%ix%i\n", mw, mh); edje_object_signal_emit(wd->tgl, "elm,state,icon,visible", "elm"); evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints, obj); Modified: trunk/TMP/st/elementary/src/lib/elm_toolbar.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_toolbar.c 2009-02-11 11:48:15 UTC (rev 38994) +++ trunk/TMP/st/elementary/src/lib/elm_toolbar.c 2009-02-11 11:49:43 UTC (rev 38995) @@ -101,7 +101,10 @@ edje_object_part_swallow(it->base, "elm.swallow.icon", it->icon); } edje_object_part_text_set(it->base, "elm.text", it->label); - edje_object_size_min_calc(it->base, &mw, &mh); + mw = mh = -1; + elm_coords_finger_size_adjust(1, &mw, 1, &mh); + edje_object_size_min_restricted_calc(it->base, &mw, &mh, mw, mh); + elm_coords_finger_size_adjust(1, &mw, 1, &mh); evas_object_size_hint_min_set(it->base, mw, mh); evas_object_size_hint_max_set(it->base, 9999, mh); } @@ -234,7 +237,10 @@ elm_widget_sub_object_add(obj, it->icon); } edje_object_part_text_set(it->base, "elm.text", it->label); - edje_object_size_min_calc(it->base, &mw, &mh); + mw = mh = -1; + elm_coords_finger_size_adjust(1, &mw, 1, &mh); + edje_object_size_min_restricted_calc(it->base, &mw, &mh, mw, mh); + elm_coords_finger_size_adjust(1, &mw, 1, &mh); evas_object_size_hint_weight_set(it->base, 0.0, 0.0); evas_object_size_hint_align_set(it->base, -1.0, -1.0); evas_object_size_hint_min_set(it->base, mw, mh); |
From: Enlightenment S. <no-...@en...> - 2009-02-12 13:39:51
|
Log: more work on genlist! Author: raster Date: 2009-02-12 05:39:43 -0800 (Thu, 12 Feb 2009) New Revision: 39002 Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_genlist.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2009-02-12 13:39:15 UTC (rev 39001) +++ trunk/TMP/st/elementary/data/themes/default.edc 2009-02-12 13:39:43 UTC (rev 39002) @@ -7021,4 +7021,419 @@ } } +/////////////////////////////////////////////////////////////////////////////// + group { name: "elm/genlist/item/default/default"; + data.item: "stacking" "above"; + data.item: "selectraise" "on"; + data.item: "labels" "elm.text"; + data.item: "icons" "elm.swallow.icon elm.swallow.end"; +// data.item: "states" ""; + images { + image: "bt_sm_base1.png" COMP; + image: "bt_sm_shine.png" COMP; + image: "bt_sm_hilight.png" COMP; + image: "ilist_1.png" COMP; + image: "ilist_item_shadow.png" COMP; + } + parts { + part { + name: "base_sh"; + mouse_events: 0; + description { + state: "default" 0.0; + align: 0.0 0.0; + min: 0 10; + fixed: 1 1; + rel1 { + to: "base"; + relative: 0.0 1.0; + offset: 0 0; + } + rel2 { + to: "base"; + relative: 1.0 1.0; + offset: -1 0; + } + image { + normal: "ilist_item_shadow.png"; + } + fill.smooth: 0; + } + } + part { + name: "base"; + mouse_events: 0; + description { + state: "default" 0.0; + image { + normal: "ilist_1.png"; + border: 2 2 2 2; + } + fill.smooth: 0; + } + } + part { name: "bg"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1 { + relative: 0.0 0.0; + offset: -5 -5; + } + rel2 { + relative: 1.0 1.0; + offset: 4 4; + } + image { + normal: "bt_sm_base1.png"; + border: 6 6 6 6; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + rel1 { + relative: 0.0 0.0; + offset: -2 -2; + } + rel2 { + relative: 1.0 1.0; + offset: 1 1; + } + } + } + part { name: "elm.swallow.icon"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 0.0 0.5; + rel1 { + relative: 0.0 0.0; + offset: 4 4; + } + rel2 { + relative: 0.0 1.0; + offset: 4 -5; + } + } + } + part { name: "elm.swallow.end"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 1.0 0.5; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + rel1 { + relative: 1.0 0.0; + offset: -5 4; + } + rel2 { + relative: 1.0 1.0; + offset: -5 -5; + } + } + } + part { name: "elm.text"; + type: TEXT; + effect: SOFT_SHADOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; +// min: 16 16; + rel1 { + to_x: "elm.swallow.icon"; + relative: 1.0 0.0; + offset: 0 4; + } + rel2 { + to_x: "elm.swallow.end"; + relative: 0.0 1.0; + offset: -1 -5; + } + color: 0 0 0 255; + color3: 0 0 0 0; + text { + font: "Sans"; + size: 10; + min: 1 1; +// min: 0 1; + align: 0.0 0.5; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 224 224 224 255; + color3: 0 0 0 64; + } + } + part { name: "fg1"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1.to: "bg"; + rel2.relative: 1.0 0.5; + rel2.to: "bg"; + image { + normal: "bt_sm_hilight.png"; + border: 6 6 6 0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { name: "fg2"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1.to: "bg"; + rel2.to: "bg"; + image { + normal: "bt_sm_shine.png"; + border: 6 6 6 0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { + name: "event"; + type: RECT; + repeat_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "go_active"; + signal: "elm,state,selected"; + source: "elm"; + action: STATE_SET "selected" 0.0; + target: "bg"; + target: "fg1"; + target: "fg2"; + target: "elm.text"; + } + program { + name: "go_passive"; + signal: "elm,state,unselected"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "fg1"; + target: "fg2"; + target: "elm.text"; + transition: LINEAR 0.1; + } + } + } + group { name: "elm/genlist/item_odd/default/default"; + data.item: "stacking" "below"; + data.item: "selectraise" "on"; + data.item: "labels" "elm.text"; + data.item: "icons" "elm.swallow.icon elm.swallow.end"; +// data.item: "states" ""; + images { + image: "bt_sm_base1.png" COMP; + image: "bt_sm_shine.png" COMP; + image: "bt_sm_hilight.png" COMP; + image: "ilist_2.png" COMP; + } + parts { + part { + name: "base"; + mouse_events: 0; + description { + state: "default" 0.0; + image { + normal: "ilist_2.png"; + border: 2 2 2 2; + } + fill.smooth: 0; + } + } + part { name: "bg"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1 { + relative: 0.0 0.0; + offset: -5 -5; + } + rel2 { + relative: 1.0 1.0; + offset: 4 4; + } + image { + normal: "bt_sm_base1.png"; + border: 6 6 6 6; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + rel1 { + relative: 0.0 0.0; + offset: -2 -2; + } + rel2 { + relative: 1.0 1.0; + offset: 1 1; + } + } + } + part { + name: "elm.swallow.icon"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 0.0 0.5; + rel1 { + relative: 0.0 0.0; + offset: 4 4; + } + rel2 { + relative: 0.0 1.0; + offset: 4 -5; + } + } + } + part { + name: "elm.swallow.end"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 1.0 0.5; + rel1 { + relative: 1.0 0.0; + offset: -5 4; + } + rel2 { + relative: 1.0 1.0; + offset: -5 -5; + } + } + } + part { + name: "elm.text"; + type: TEXT; + effect: SOFT_SHADOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; +// min: 16 16; + rel1 { + to_x: "elm.swallow.icon"; + relative: 1.0 0.0; + offset: 0 4; + } + rel2 { + to_x: "elm.swallow.end"; + relative: 0.0 1.0; + offset: -1 -5; + } + color: 0 0 0 255; + color3: 0 0 0 0; + text { + font: "Sans"; + size: 10; + min: 1 1; +// min: 0 1; + align: 0.0 0.5; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 224 224 224 255; + color3: 0 0 0 64; + } + } + part { name: "fg1"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1.to: "bg"; + rel2.relative: 1.0 0.5; + rel2.to: "bg"; + image { + normal: "bt_sm_hilight.png"; + border: 6 6 6 0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { name: "fg2"; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + rel1.to: "bg"; + rel2.to: "bg"; + image { + normal: "bt_sm_shine.png"; + border: 6 6 6 0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + part { + name: "event"; + type: RECT; + repeat_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "go_active"; + signal: "elm,state,selected"; + source: "elm"; + action: STATE_SET "selected" 0.0; + target: "bg"; + target: "fg1"; + target: "fg2"; + target: "elm.text"; + } + program { + name: "go_passive"; + signal: "elm,state,unselected"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "fg1"; + target: "fg2"; + target: "elm.text"; + transition: LINEAR 0.1; + } + } + } } Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-12 13:39:15 UTC (rev 39001) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-12 13:39:43 UTC (rev 39002) @@ -2086,13 +2086,13 @@ evas_object_size_hint_weight_set(gl, 1.0, 1.0); evas_object_show(gl); - itc1.style = "default"; + itc1.style = "default"; itc1.func.label_get = gl_label_get; - itc1.func.icon_get = gl_icon_get; + itc1.func.icon_get = gl_icon_get; itc1.func.state_get = gl_state_get; - itc1.func.del = gl_del; + itc1.func.del = gl_del; - for (i = 0; i < 2000; i++) + for (i = 0; i < 10000; i++) { gli = elm_genlist_item_append(gl, &itc1, (void *)i/* item data */, NULL/* parent */, ELM_GENLIST_ITEM_NONE, Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-12 13:39:15 UTC (rev 39001) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-12 13:39:43 UTC (rev 39002) @@ -540,17 +540,15 @@ //// (incomplete - medium priority) // * entry selection conflicts with finger scroll (make selection start/stop work on signals?) // * disabled not supported -// * tab widget focusing (not useful for touchscreen tho...) // * on the fly theme changes - test (should work) // * need a hold-scroll counter in elm_widget // * add fullscreen mode on/off for windows // * hoversel only vertical right now - make horizontal -// * set scaling per widget (and if scaling should be inherited by children) // * when entries are in a scroller and change size, the scroller shows scrollbars. fix. same for selecting. for 1 line entries in a scroller should only have scroll arrow indicators. // //// (more widgets/features - medium priority) -// * biglist widget (restricted format label + icon intended for massive lists) -// * treeview widget (like biglist - but items can expand to sub-items) +// * genlist widget (complex list widget - harder to use than normal simple list, but handles huge lists of items etc.) +// * tree feature fir genlist widget (like biglist - but items can expand to sub-items) // * radio + group handling // * checkbox (like toggle) // * pager (for pushing/popping pages and going back and forward and flipping) @@ -577,7 +575,7 @@ // * dialpad widget - need one with a phone dialpad // * file selector widget // * progress bar widget -// * generic "tacho" widget (set min/max labels - and up to 3 intermediate labels) +// * generic "tacho" widget (set min/max labels - and up to 3 intermediate labels etc.) // * status widget (busy, stalled, running, etc.) // * full window in window widget (so move/resize of window object does as you'd expect a child window to do within the canvas) // @@ -588,19 +586,24 @@ // * use evas's new box instead of a box smart // * use evas's table instead of a table smart // * use stack for win widget +// * prepend or append theme files from code for an app to allow an app to augment the theme eithe rby forcibly overriding things with its own theme file (so it can ship some custom elements that always override user theme) and so it can also provide a final (even after default) fallback for "extended" styles of its own (but thus allowing themes to overried its extensions if they want) +// * determine prefix of app dynamically and export calls to get prefix info +// * load config from file +// * load config from x prpoerty +// * handle finger size property and on-the-fly changes like scaling does // * somehow a pdf(ps) viewer widget that doesnt make it gpl (lgpl) -// * emotion widget? +// * emotion widget // * ewebkit widget +// * flash (gnash) widget // * need url and path entry modes for vkbd // * return list of toplevel window objects -// * widgets should show who is focused (not useful for touchscreen) // * focus should have an object that is layered above all others (definable layer) that moves + resizes (slides about - animated) from one focused widget to the next for focus. also emit focus/unfocus signals too // * scroller could do with page up/down/left/right buttons and and idea of a page size // * current sizing tree inefficient // * need a way to filter entry data for entry (eg for phone numbers) // * win should emit signals based on vkbd type - if it gets a message and is a vkbd win // * win needs a way of setting aspect too -// * use the wrong call on the wrong widget and *BOOM* +// * use the wrong call on the wrong widget and *BOOM* ... crashland // ////////////////////////////////////////////////////////////////////////////// #endif Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-12 13:39:15 UTC (rev 39001) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-12 13:39:43 UTC (rev 39002) @@ -8,6 +8,7 @@ struct _Widget_Data { + Evas_Object *obj; Evas_Object *scr; Evas_Object *pan_smart; Evas_Object *content; @@ -15,6 +16,9 @@ Eina_Inlist *blocks; Pan *pan; Evas_Coord pan_x, pan_y, minw, minh; + Ecore_Job *calc_job; + Ecore_Idler *queue_idler; + Eina_List *queue; Evas_Bool min_w : 1; Evas_Bool min_h : 1; }; @@ -24,7 +28,6 @@ Eina_Inlist __header; int count; Widget_Data *wd; - Evas_Object *obj; Eina_List *items; Evas_Coord x, y, w, h, minw, minh; Evas_Bool realized : 1; @@ -34,17 +37,11 @@ struct _Item { Eina_Inlist __header; + Widget_Data *wd; Item_Block *block; - Eina_Inlist *subblocks; // not done yet - Eina_Inlist *subitems; // not done yet - + Eina_Inlist *subblocks; // FIXME: not done yet + Eina_Inlist *subitems; // FIXME: not done yet Evas_Coord x, y, w, h, minw, minh; - Evas_Bool realized : 1; - Evas_Bool selected : 1; - Evas_Bool expanded : 1; // not done yet - Evas_Bool disabled : 1; - Evas_Bool mincalcd : 1; - const Elm_Genlist_Item_Class *itc; const void *data; Elm_Genlist_Item *parent; // not done yet @@ -55,6 +52,15 @@ } func; Evas_Object *base; + Eina_List *labels, *icons, *states; + + Evas_Bool realized : 1; + Evas_Bool selected : 1; + Evas_Bool expanded : 1; // FIXME: not done yet + Evas_Bool disabled : 1; + Evas_Bool mincalcd : 1; + Evas_Bool queued : 1; + }; struct _Pan { @@ -154,135 +160,90 @@ _sizing_eval(data); } -static void -_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +static Eina_List * +_stringlist_get(const char *str) { - Pan *sd = evas_object_smart_data_get(obj); - Evas_Coord ow, oh; - if ((x == sd->wd->pan_x) && (y == sd->wd->pan_y)) return; - evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); - ow = sd->wd->minw - ow; - if (ow < 0) ow = 0; - oh = sd->wd->minh - oh; - if (oh < 0) oh = 0; - if (x < 0) x = 0; - if (y < 0) y = 0; - if (x > ow) x = ow; - if (y > oh) y = oh; - sd->wd->pan_x = x; - sd->wd->pan_y = y; - evas_object_smart_changed(obj); + Eina_List *list = NULL; + const char *s, *b; + if (!str) return NULL; + for (b = s = str; 1; s++) + { + if ((*s == ' ') || (*s == 0)) + { + char *t = malloc(s - b + 1); + if (t) + { + strncpy(t, b, s - b); + t[s - b] = 0; + list = eina_list_append(list, eina_stringshare_add(t)); + free(t); + } + b = s + 1; + } + if (*s == 0) break; + } + return list; } static void -_pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) +_stringlist_free(Eina_List *list) { - Pan *sd = evas_object_smart_data_get(obj); - if (x) *x = sd->wd->pan_x; - if (y) *y = sd->wd->pan_y; + while (list) + { + eina_stringshare_del(list->data); + list = eina_list_remove_list(list, list); + } } static void -_pan_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) -{ - Pan *sd = evas_object_smart_data_get(obj); - Evas_Coord ow, oh; - evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); - ow = sd->wd->minw - ow; - if (ow < 0) ow = 0; - oh = sd->wd->minh - oh; - if (oh < 0) oh = 0; - if (x) *x = ow; - if (y) *y = oh; -} - -static void -_pan_child_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) +_item_realize(Item *it, int in, int calc) { - Pan *sd = evas_object_smart_data_get(obj); - if (w) *w = sd->wd->minw; - if (h) *h = sd->wd->minh; -} - -static void -_pan_add(Evas_Object *obj) -{ - Pan *sd; - Evas_Object_Smart_Clipped_Data *cd; - - _pan_sc.add(obj); - cd = evas_object_smart_data_get(obj); - sd = calloc(1, sizeof(Pan)); - if (!sd) return; - sd->__clipped_data = *cd; - free(cd); - evas_object_smart_data_set(obj, sd); -} - -static void -_pan_del(Evas_Object *obj) -{ - Pan *sd = evas_object_smart_data_get(obj); - if (!sd) return; - _pan_sc.del(obj); -} - -static void -_pan_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) -{ - Evas_Coord ow, oh; - evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); - if ((ow == w) && (oh == h)) return; - evas_object_smart_changed(obj); -} - - - - - - -static void -_item_realize(Item *it, int in) -{ const char *stacking; + char buf[1024]; if (it->realized) return; - it->base = edje_object_add(evas_object_evas_get(it->block->obj)); + it->base = edje_object_add(evas_object_evas_get(it->wd->obj)); + evas_object_smart_member_add(it->base, it->wd->pan_smart); + elm_widget_sub_object_add(it->wd->obj, it->base); + if (in & 0x1) + snprintf(buf, sizeof(buf), "%s/%s", "item_odd", it->itc->style); + else + snprintf(buf, sizeof(buf), "%s/%s", "item", it->itc->style); + _elm_theme_set(it->base, "genlist", buf, "default"); + if (!calc) + { + stacking = edje_object_data_get(it->base, "stacking"); + if (stacking) + { + if (!strcmp(stacking, "below")) evas_object_lower(it->base); + else if (!strcmp(stacking, "above")) evas_object_raise(it->base); + } // FIXME: hook callbacks // evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_DOWN, // _mouse_down, it); // evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_UP, // _mouse_up, it); - evas_object_smart_member_add(it->base, it->block->wd->pan_smart); - elm_widget_sub_object_add(it->block->obj, it->base); - if (in & 0x1) - _elm_theme_set(it->base, "list", "item_odd", "default"); - else - _elm_theme_set(it->base, "list", "item", "default"); - stacking = edje_object_data_get(it->base, "stacking"); - if (stacking) - { - if (!strcmp(stacking, "below")) - evas_object_lower(it->base); - else if (!strcmp(stacking, "above")) - evas_object_raise(it->base); } + if (it->itc->func.label_get) { - char *s = it->itc->func.label_get(it->data, "xxx"); - if (s) + Eina_List *l; + + it->labels = _stringlist_get(edje_object_data_get(it->base, "labels")); + for (l = it->labels; l; l = l->next) { - edje_object_part_text_set(it->base, "elm.text", s); - free(s); + const char *key = l->data; + char *s = it->itc->func.label_get(it->data, l->data); + if (s) + { + edje_object_part_text_set(it->base, l->data, s); + free(s); + } } } - // FIXME: need to get all labels, all icons and all states and all labels - evas_object_show(it->base); if (!it->mincalcd) { - Evas_Coord mw, mh; - - mw = mh = -1; + Evas_Coord mw = -1, mh = -1; elm_coords_finger_size_adjust(1, &mw, 1, &mh); edje_object_size_min_restricted_calc(it->base, &mw, &mh, mw, mh); elm_coords_finger_size_adjust(1, &mw, 1, &mh); @@ -290,6 +251,7 @@ it->minh = mh; it->mincalcd = 1; } + if (!calc) evas_object_show(it->base); it->realized = 1; } @@ -299,6 +261,12 @@ if (!it->realized) return; evas_object_del(it->base); it->base = NULL; + _stringlist_free(it->labels); + it->labels = NULL; + _stringlist_free(it->icons); + it->icons = NULL; + _stringlist_free(it->states); + it->states = NULL; it->realized = 0; } @@ -307,12 +275,17 @@ { Eina_List *l; Evas_Coord minw = 0, minh = 0; - + for (l = itb->items; l; l = l->next) { Item *it = l->data; - _item_realize(it, in); - if (!itb->realized) _item_unrealize(it); + if (!itb->realized) + { + _item_realize(it, in, 1); + _item_unrealize(it); + } + else + _item_realize(it, in, 0); minh += it->minh; if (minw < it->minw) minw = it->minw; in++; @@ -320,6 +293,8 @@ itb->minw = minw; itb->minh = minh; itb->changed = 0; + /* force an evas norender to garbage collect deleted objects */ + evas_norender(evas_object_evas_get(itb->wd->obj)); } static void @@ -330,7 +305,7 @@ for (l = itb->items; l; l = l->next) { Item *it = l->data; - _item_realize(it, in); + _item_realize(it, in, 0); in++; } itb->realized = 1; @@ -369,20 +344,21 @@ evas_object_move(it->base, ox + itb->x + it->x - itb->wd->pan_x, oy + itb->y + it->y - itb->wd->pan_y); + evas_object_show(it->base); y += it->h; } itb->realized = 1; } static void -_pan_calculate(Evas_Object *obj) +_calc_job(void *data) { - Pan *sd = evas_object_smart_data_get(obj); + Widget_Data *wd = data; Eina_Inlist *il; Evas_Coord minw = 0, minh = 0, x = 0, y = 0, ow, oh; int bn, in; - for (bn = 0, in = 0, il = sd->wd->blocks; il; il = il->next, bn++) + for (bn = 0, in = 0, il = wd->blocks; il; il = il->next, bn++) { Item_Block *itb = (Item_Block *)il; if (itb->changed) @@ -397,28 +373,122 @@ y += itb->minh; in += itb->count; } - evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); + evas_object_geometry_get(wd->pan_smart, NULL, NULL, &ow, &oh); if (minw < ow) minw = ow; - if ((minw != sd->wd->minw) || (minh != sd->wd->minh)) + if ((minw != wd->minw) || (minh != wd->minh)) { - sd->wd->minw = minw; - sd->wd->minh = minh; - evas_object_smart_callback_call(obj, "changed", NULL); + wd->minw = minw; + wd->minh = minh; + evas_object_smart_callback_call(wd->pan_smart, "changed", NULL); } - // FIXME: calcualte new geom + wd->calc_job = NULL; + evas_object_smart_changed(wd->pan_smart); +} + +static void +_pan_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + Pan *sd = evas_object_smart_data_get(obj); + Evas_Coord ow, oh; + if ((x == sd->wd->pan_x) && (y == sd->wd->pan_y)) return; + evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); + ow = sd->wd->minw - ow; + if (ow < 0) ow = 0; + oh = sd->wd->minh - oh; + if (oh < 0) oh = 0; + if (x < 0) x = 0; + if (y < 0) y = 0; + if (x > ow) x = ow; + if (y > oh) y = oh; + sd->wd->pan_x = x; + sd->wd->pan_y = y; + evas_object_smart_changed(obj); +} + +static void +_pan_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) +{ + Pan *sd = evas_object_smart_data_get(obj); + if (x) *x = sd->wd->pan_x; + if (y) *y = sd->wd->pan_y; +} + +static void +_pan_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) +{ + Pan *sd = evas_object_smart_data_get(obj); + Evas_Coord ow, oh; + evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); + ow = sd->wd->minw - ow; + if (ow < 0) ow = 0; + oh = sd->wd->minh - oh; + if (oh < 0) oh = 0; + if (x) *x = ow; + if (y) *y = oh; +} + +static void +_pan_child_size_get(Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) +{ + Pan *sd = evas_object_smart_data_get(obj); + if (w) *w = sd->wd->minw; + if (h) *h = sd->wd->minh; +} + +static void +_pan_add(Evas_Object *obj) +{ + Pan *sd; + Evas_Object_Smart_Clipped_Data *cd; + + _pan_sc.add(obj); + cd = evas_object_smart_data_get(obj); + sd = calloc(1, sizeof(Pan)); + if (!sd) return; + sd->__clipped_data = *cd; + free(cd); + evas_object_smart_data_set(obj, sd); +} +static void +_pan_del(Evas_Object *obj) +{ + Pan *sd = evas_object_smart_data_get(obj); + if (!sd) return; + _pan_sc.del(obj); +} + +static void +_pan_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) +{ + Pan *sd = evas_object_smart_data_get(obj); + Evas_Coord ow, oh; + evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); + if ((ow == w) && (oh == h)) return; + 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 +_pan_calculate(Evas_Object *obj) +{ + Pan *sd = evas_object_smart_data_get(obj); + Eina_Inlist *il; + Evas_Coord ow, oh; + int bn, in; + + evas_object_geometry_get(obj, NULL, NULL, &ow, &oh); for (bn = 0, in = 0, il = sd->wd->blocks; il; il = il->next, bn++) { Item_Block *itb = (Item_Block *)il; - itb->w = minw; + itb->w = sd->wd->minw; if (ELM_RECTS_INTERSECT(itb->x - sd->wd->pan_x, itb->y - sd->wd->pan_y, itb->w, itb->h, 0, 0, ow, oh)) { - if (!itb->realized) + if ((!itb->realized) || (itb->changed)) { - printf("REALIZE BN # %i [%i %i, %ix%i]\n", bn, itb->x, itb->y, itb->w, itb->h); _item_block_realize(itb, in); } _item_block_position(itb); @@ -427,7 +497,6 @@ { if (itb->realized) { - printf("UNREALIZE BN # %i [%i %i, %ix%i]\n", bn, itb->x, itb->y, itb->w, itb->h); _item_block_unrealize(itb); } } @@ -453,6 +522,8 @@ wd->scr = elm_smart_scroller_add(e); elm_widget_resize_object_set(obj, wd->scr); + + wd->obj = obj; if (!smart) { @@ -489,7 +560,7 @@ } static Item * -_item_new(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, +_item_new(Widget_Data *wd, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) @@ -498,6 +569,7 @@ it = calloc(1, sizeof(Item)); if (!it) return NULL; + it->wd = wd; it->itc = itc; it->data = data; it->parent = parent; @@ -508,7 +580,7 @@ } static void -_item_block_add(Widget_Data *wd, Evas_Object *obj, Item *it, Item *itpar, Item *itrel) +_item_block_add(Widget_Data *wd, Item *it, Item *itpar, Item *itrel, int before) { Item_Block *itb; @@ -517,9 +589,28 @@ newblock: itb = calloc(1, sizeof(Item_Block)); if (!itb) return; - wd->blocks = eina_inlist_append(wd->blocks, (Eina_Inlist *)itb); - itb->obj = obj; itb->wd = wd; + if (!it->parent) + { + if (itrel) + { + if (!itrel->block) + printf("EEEK itrel has no block!\n"); + else + { + if (before) + wd->blocks = eina_inlist_prepend_relative(wd->blocks, (Eina_Inlist *)itb, (Eina_Inlist *)(itrel->block)); + else + wd->blocks = eina_inlist_append_relative(wd->blocks, (Eina_Inlist *)itb, (Eina_Inlist *)(itrel->block)); + } + } + else + wd->blocks = eina_inlist_append(wd->blocks, (Eina_Inlist *)itb); + } + else + { + // FIXME: tree not handled. + } } else { @@ -530,9 +621,64 @@ itb->count++; itb->changed = 1; it->block = itb; - evas_object_smart_changed(wd->pan_smart); + if (itb->wd->calc_job) ecore_job_del(itb->wd->calc_job); + itb->wd->calc_job = ecore_job_add(_calc_job, itb->wd); } +static int +_item_idler(void *data) +{ + Widget_Data *wd = data; + int n; + + for (n = 0; (wd->queue) && (n < 16); n++) + { + Item *itrel, *it; + + it = wd->queue->data; + wd->queue = eina_list_remove_list(wd->queue, wd->queue); + it->queued = 0; + if (!it->parent) + { + itrel = (Item *)(((Eina_Inlist *)it)->prev); + if (itrel) _item_block_add(wd, it, NULL, itrel, 0); + else + { + itrel = (Item *)(((Eina_Inlist *)it)->next); + if (itrel && itrel->queued) + _item_block_add(wd, it, NULL, NULL, 0); + else + _item_block_add(wd, it, NULL, itrel, 1); + } + } + else + { + // FIXME: tree. not done yet + } + } + if (n > 0) + { + // queue a draw + if (wd->calc_job) ecore_job_del(wd->calc_job); + wd->calc_job = ecore_job_add(_calc_job, wd); + } + if (!wd->queue) + { + wd->queue_idler = NULL; + return 0; + } + return 1; +} + +static void +_item_queue(Widget_Data *wd, Item *it) +{ + if (it->queued) return; + if (!wd->queue_idler) wd->queue_idler = ecore_idler_add(_item_idler, wd); + it->queued = 1; + wd->queue = eina_list_append(wd->queue, it); +} + EAPI Elm_Genlist_Item * elm_genlist_item_append(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, @@ -540,21 +686,16 @@ void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) { Widget_Data *wd = elm_widget_data_get(obj); - Item *itpar, *itrel; - Item *it = _item_new(obj, itc, data, parent, flags, func, func_data); + Item *itpar; + Item *it = _item_new(wd, itc, data, parent, flags, func, func_data); if (!it) return NULL; - if (!parent) - { - wd->items = eina_inlist_append(wd->items, (Eina_Inlist *)it); - itrel = (Item *)(((Eina_Inlist *)it)->prev); - _item_block_add(wd, obj, it, NULL, itrel); - } + if (!it->parent) + wd->items = eina_inlist_append(wd->items, (Eina_Inlist *)it); else { // FIXME: tree. not done yet - itpar = (Item *)parent; - itpar->subitems = eina_inlist_append(itpar->subitems, (Eina_Inlist *)it); } + _item_queue(wd, it); return (Elm_Genlist_Item *)it; } |
From: Enlightenment S. <no-...@en...> - 2009-02-15 02:54:01
|
Log: use new fill mode, fix bug in object tracking and deletion - nasty one. more genlist work too. Author: raster Date: 2009-02-14 18:53:56 -0800 (Sat, 14 Feb 2009) New Revision: 39021 Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_genlist.c trunk/TMP/st/elementary/src/lib/elm_widget.c trunk/TMP/st/elementary/src/lib/elm_win.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2009-02-15 02:53:24 UTC (rev 39020) +++ trunk/TMP/st/elementary/data/themes/default.edc 2009-02-15 02:53:56 UTC (rev 39021) @@ -201,6 +201,7 @@ normal: "bt_sm_base2.png"; border: 6 6 6 6; } + image.middle: SOLID; } } part { name: "sb_vbar_over1"; @@ -298,6 +299,7 @@ normal: "bt_sm_base2.png"; border: 6 6 6 6; } + image.middle: SOLID; } } part { name: "sb_hbar_over1"; @@ -454,10 +456,12 @@ normal: "bt_base2.png"; border: 7 7 7 7; } + image.middle: SOLID; } description { state: "clicked" 0.0; inherit: "default" 0.0; image.normal: "bt_base1.png"; + image.middle: SOLID; } } part { name: "elm.swallow.content"; @@ -654,10 +658,12 @@ normal: "bt_base2.png"; border: 7 7 7 7; } + image.middle: SOLID; } description { state: "clicked" 0.0; inherit: "default" 0.0; image.normal: "bt_base1.png"; + image.middle: SOLID; } } part { name: "arrow"; @@ -1199,6 +1205,7 @@ normal: "bt_bases.png"; border: 11 11 11 11; } + image.middle: SOLID; color: 255 255 255 128; } } @@ -1214,6 +1221,7 @@ normal: "bt_basew.png"; border: 7 7 7 7; } + image.middle: SOLID; } } part { name: "button3"; @@ -3000,6 +3008,7 @@ normal: "bt_dis_base.png"; border: 4 4 4 4; } + image.middle: SOLID; } description { state: "visible" 0.0; inherit: "default" 0.0; @@ -3058,6 +3067,7 @@ normal: "bt_dis_base.png"; border: 4 4 4 4; } + image.middle: SOLID; } description { state: "visible" 0.0; inherit: "default" 0.0; @@ -3116,6 +3126,7 @@ normal: "bt_dis_base.png"; border: 4 4 4 4; } + image.middle: SOLID; } description { state: "visible" 0.0; inherit: "default" 0.0; @@ -3175,6 +3186,7 @@ normal: "bt_dis_base.png"; border: 4 4 4 4; } + image.middle: SOLID; } description { state: "visible" 0.0; inherit: "default" 0.0; @@ -3235,6 +3247,7 @@ normal: "bt_dis_base.png"; border: 4 4 4 4; } + image.middle: SOLID; } } part { name: "elm.swallow.slot.middle"; @@ -3398,6 +3411,7 @@ normal: "bt_base2.png"; border: 7 7 7 7; } + image.middle: SOLID; } } @@ -4106,6 +4120,7 @@ normal: "bubble_3.png"; border: 36 11 18 9; } + image.middle: SOLID; fill.smooth: 0; } } @@ -4232,6 +4247,7 @@ normal: "bubble_4.png"; border: 11 36 18 9; } + image.middle: SOLID; fill.smooth: 0; } } @@ -4358,6 +4374,7 @@ normal: "bubble_1.png"; border: 36 11 10 19; } + image.middle: SOLID; fill.smooth: 0; } } @@ -4484,6 +4501,7 @@ normal: "bubble_2.png"; border: 11 36 10 19; } + image.middle: SOLID; fill.smooth: 0; } } @@ -4658,6 +4676,7 @@ normal: "bt_dis_base.png"; border: 4 4 4 4; } + image.middle: SOLID; } } part { name: "clipper"; @@ -4806,6 +4825,7 @@ normal: "toolbar_sel.png"; border: 3 3 0 0; } + image.middle: SOLID; fill.smooth: 0; } description { state: "selected" 0.0; @@ -4940,6 +4960,7 @@ normal: "bt_dis_base.png"; border: 4 4 4 4; } + image.middle: SOLID; } } part { name: "popover"; @@ -5020,6 +5041,7 @@ normal: "bt_dis_base.png"; border: 4 4 4 4; } + image.middle: SOLID; } } part { name: "popover"; @@ -5101,6 +5123,7 @@ normal: "bt_dis_base.png"; border: 4 4 4 4; } + image.middle: SOLID; } } part { name: "popover"; @@ -5207,6 +5230,7 @@ normal: "bt_sm_base1.png"; border: 6 6 6 6; } + image.middle: SOLID; } description { state: "selected" 0.0; inherit: "default" 0.0; @@ -5398,6 +5422,7 @@ normal: "bt_sm_base1.png"; border: 6 6 6 6; } + image.middle: SOLID; } description { state: "selected" 0.0; inherit: "default" 0.0; @@ -5614,6 +5639,7 @@ normal: "bt_sm_base1.png"; border: 6 6 6 6; } + image.middle: SOLID; } description { state: "selected" 0.0; inherit: "default" 0.0; @@ -5803,6 +5829,7 @@ normal: "bt_sm_base1.png"; border: 6 6 6 6; } + image.middle: SOLID; } description { state: "selected" 0.0; inherit: "default" 0.0; @@ -7089,6 +7116,7 @@ normal: "bt_sm_base1.png"; border: 6 6 6 6; } + image.middle: SOLID; } description { state: "selected" 0.0; inherit: "default" 0.0; @@ -7283,6 +7311,7 @@ normal: "bt_sm_base1.png"; border: 6 6 6 6; } + image.middle: SOLID; } description { state: "selected" 0.0; inherit: "default" 0.0; Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-15 02:53:24 UTC (rev 39020) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-15 02:53:56 UTC (rev 39021) @@ -2046,25 +2046,36 @@ } static Elm_Genlist_Item_Class itc1; -char *gl_label_get(const void *data, const char *part) +char *gl_label_get(const void *data, Evas_Object *obj, const char *part) { char buf[256]; snprintf(buf, sizeof(buf), "Item # %i", (int)data); return strdup(buf); } -Evas_Object *gl_icon_get(const void *data, const char *part) +Evas_Object *gl_icon_get(const void *data, Evas_Object *obj, const char *part) { - return NULL; + char buf[PATH_MAX]; +#if 1 + Evas_Object *ic = elm_icon_add(obj); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic, buf, NULL); +#else + Evas_Object *ic = evas_object_image_filled_add(evas_object_evas_get(obj)); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + evas_object_image_file_set(ic, buf, NULL); +#endif + + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + return ic; } -Evas_Bool gl_state_get(const void *data, const char *part) +Evas_Bool gl_state_get(const void *data, Evas_Object *obj, const char *part) { return 0; } -void gl_del(const void *data) +void gl_del(const void *data, Evas_Object *obj) { } - static void my_bt_29(void *data, Evas_Object *obj, void *event_info) { @@ -2210,7 +2221,7 @@ elm_list_go(li); /* set an initial window size */ - evas_object_resize(win, 312, 480); + evas_object_resize(win, 240, 480); /* show the window */ evas_object_show(win); } Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-15 02:53:24 UTC (rev 39020) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-15 02:53:56 UTC (rev 39021) @@ -507,10 +507,10 @@ { const char *style; struct { - char *(*label_get) (const void *data, const char *part); - Evas_Object *(*icon_get) (const void *data, const char *part); - Evas_Bool (*state_get) (const void *data, const char *part); - void (*del) (const void *data); + char *(*label_get) (const void *data, Evas_Object *obj, const char *part); + Evas_Object *(*icon_get) (const void *data, Evas_Object *obj, const char *part); + Evas_Bool (*state_get) (const void *data, Evas_Object *obj, const char *part); + void (*del) (const void *data, Evas_Object *obj); } func; }; Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-15 02:53:24 UTC (rev 39020) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-15 02:53:56 UTC (rev 39021) @@ -11,7 +11,6 @@ Evas_Object *obj; Evas_Object *scr; Evas_Object *pan_smart; - Evas_Object *content; Eina_Inlist *items; Eina_Inlist *blocks; Pan *pan; @@ -53,6 +52,7 @@ Evas_Object *base; Eina_List *labels, *icons, *states; + Eina_List *icon_objs; Evas_Bool realized : 1; Evas_Bool selected : 1; @@ -80,6 +80,20 @@ _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); +/* + while (wd->blocks) + { + Item_Block *itb = wd->blocks; + while (itb->items) + { + Item *it = itb->items->data; + + } + free(itb); + } + */ + evas_object_del(wd->pan_smart); + wd->pan_smart = NULL; free(wd); } @@ -107,7 +121,8 @@ Widget_Data *wd = elm_widget_data_get(obj); Evas_Coord vw, vh, minw, minh, maxw, maxh, w, h, vmw, vmh; double xw, xy; - + + /* 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); @@ -131,6 +146,7 @@ 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 @@ -138,7 +154,7 @@ { _sizing_eval(data); } - +/* static void _sub_del(void *data, Evas_Object *obj, void *event_info) { @@ -153,7 +169,7 @@ _sizing_eval(obj); } } - +*/ static void _resize(void *data, Evas *e, Evas_Object *obj, void *event_info) { @@ -233,7 +249,7 @@ for (l = it->labels; l; l = l->next) { const char *key = l->data; - char *s = it->itc->func.label_get(it->data, l->data); + char *s = it->itc->func.label_get(it->data, it->wd->obj, l->data); if (s) { edje_object_part_text_set(it->base, l->data, s); @@ -241,6 +257,39 @@ } } } + if (it->itc->func.icon_get) + { + Eina_List *l; + + it->icons = _stringlist_get(edje_object_data_get(it->base, "icons")); + for (l = it->icons; l; l = l->next) + { + const char *key = l->data; + Evas_Object *ic = it->itc->func.icon_get(it->data, it->wd->obj, l->data); + if (ic) + { + it->icon_objs = eina_list_append(it->icon_objs, ic); + edje_object_part_swallow(it->base, key, ic); + evas_object_show(ic); + elm_widget_sub_object_add(it->wd->obj, ic); + } + } + } + if (it->itc->func.state_get) + { + Eina_List *l; + + it->states = _stringlist_get(edje_object_data_get(it->base, "states")); + for (l = it->states; l; l = l->next) + { + const char *key = l->data; + Evas_Bool on = it->itc->func.state_get(it->data, it->wd->obj, l->data); + if (on) + { + // FIXME: emit to base + } + } + } if (!it->mincalcd) { Evas_Coord mw = -1, mh = -1; @@ -266,6 +315,11 @@ _stringlist_free(it->icons); it->icons = NULL; _stringlist_free(it->states); + while (it->icon_objs) + { + evas_object_del(it->icon_objs->data); + it->icon_objs = eina_list_remove_list(it->icon_objs, it->icon_objs); + } it->states = NULL; it->realized = 0; } @@ -530,7 +584,7 @@ static Evas_Smart_Class sc; evas_object_smart_clipped_smart_set(&_pan_sc); sc = _pan_sc; - sc.name = "Elm_Genlist_Pan"; + sc.name = "elm_genlist_pan"; sc.version = EVAS_SMART_CLASS_VERSION; sc.add = _pan_add; sc.del = _pan_del; @@ -552,9 +606,9 @@ edje_object_size_min_calc(elm_smart_scroller_edje_object_get(wd->scr), &minw, &minh); evas_object_size_hint_min_set(obj, minw, minh); evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize, obj); - -// evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); - +/* + evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj); + */ _sizing_eval(obj); return obj; } @@ -756,7 +810,7 @@ EAPI void elm_genlist_item_expanded_set(Elm_Genlist_Item *item, Evas_Bool expanded) { - // not done yet + // FIXME: not done yet } EAPI void @@ -778,3 +832,14 @@ elm_genlist_item_data_get(Elm_Genlist_Item *item) { } + +EAPI const Evas_Object * +elm_genlist_item_icon_get(Elm_Genlist_Item *item) +{ +} + +EAPI void +elm_genlist_item_update(Elm_Genlist_Item *item) +{ + // call all the class get funcs again - re realize if realized. +} Modified: trunk/TMP/st/elementary/src/lib/elm_widget.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_widget.c 2009-02-15 02:53:24 UTC (rev 39020) +++ trunk/TMP/st/elementary/src/lib/elm_widget.c 2009-02-15 02:53:56 UTC (rev 39021) @@ -1,7 +1,7 @@ #include <Elementary.h> #include "elm_priv.h" -#define SMART_NAME "e_widget" +#define SMART_NAME "elm_widget" #define API_ENTRY \ Smart_Data *sd = evas_object_smart_data_get(obj); \ if ((!obj) || (!sd) || \ @@ -766,17 +766,19 @@ if (sd->del_pre_func) sd->del_pre_func(obj); if (sd->resize_obj) { - evas_object_event_callback_del(sd->resize_obj, EVAS_CALLBACK_DEL, _sub_obj_del); + sobj = sd->resize_obj; sd->resize_obj = NULL; + evas_object_event_callback_del(sobj, EVAS_CALLBACK_DEL, _sub_obj_del); evas_object_smart_callback_call(sd->obj, "sub-object-del", sd->resize_obj); - evas_object_del(sd->resize_obj); + evas_object_del(sobj); } if (sd->hover_obj) { - evas_object_event_callback_del(sd->hover_obj, EVAS_CALLBACK_DEL, _sub_obj_del); + sobj = sd->resize_obj; sd->hover_obj = NULL; - evas_object_smart_callback_call(sd->obj, "sub-object-del", sd->hover_obj); - evas_object_del(sd->hover_obj); + evas_object_event_callback_del(sobj, EVAS_CALLBACK_DEL, _sub_obj_del); + evas_object_smart_callback_call(sd->obj, "sub-object-del", sobj); + evas_object_del(sobj); } while (sd->subobjs) { Modified: trunk/TMP/st/elementary/src/lib/elm_win.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_win.c 2009-02-15 02:53:24 UTC (rev 39020) +++ trunk/TMP/st/elementary/src/lib/elm_win.c 2009-02-15 02:53:56 UTC (rev 39021) @@ -62,10 +62,14 @@ if (win->deferred_child_eval_job) ecore_job_del(win->deferred_child_eval_job); while (evas_object_bottom_get(win->evas) && (evas_object_bottom_get(win->evas) != obj)) - evas_object_del(evas_object_bottom_get(win->evas)); + { + evas_object_del(evas_object_bottom_get(win->evas)); + } while (evas_object_top_get(win->evas) && (evas_object_top_get(win->evas) != obj)) - evas_object_del(evas_object_top_get(win->evas)); + { + evas_object_del(evas_object_top_get(win->evas)); + } // 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); |
From: Enlightenment S. <no-...@en...> - 2009-02-18 04:51:27
|
Log: genlist items can enable/disable Author: raster Date: 2009-02-17 20:51:22 -0800 (Tue, 17 Feb 2009) New Revision: 39074 Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_genlist.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2009-02-18 04:27:49 UTC (rev 39073) +++ trunk/TMP/st/elementary/data/themes/default.edc 2009-02-18 04:51:22 UTC (rev 39074) @@ -7100,6 +7100,7 @@ } } part { name: "bg"; + clip_to: "disclip"; mouse_events: 0; description { state: "default" 0.0; visible: 0; @@ -7133,6 +7134,7 @@ } } part { name: "elm.swallow.icon"; + clip_to: "disclip"; type: SWALLOW; description { state: "default" 0.0; fixed: 1 0; @@ -7148,6 +7150,7 @@ } } part { name: "elm.swallow.end"; + clip_to: "disclip"; type: SWALLOW; description { state: "default" 0.0; fixed: 1 0; @@ -7165,6 +7168,7 @@ } } part { name: "elm.text"; + clip_to: "disclip"; type: TEXT; effect: SOFT_SHADOW; mouse_events: 0; @@ -7199,6 +7203,7 @@ } } part { name: "fg1"; + clip_to: "disclip"; mouse_events: 0; description { state: "default" 0.0; visible: 0; @@ -7218,6 +7223,7 @@ } } part { name: "fg2"; + clip_to: "disclip"; mouse_events: 0; description { state: "default" 0.0; visible: 0; @@ -7235,6 +7241,17 @@ color: 255 255 255 255; } } + part { name: "disclip"; + type: RECT; + description { state: "default" 0.0; + rel1.to: "bg"; + rel2.to: "bg"; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color: 255 255 255 64; + } + } part { name: "event"; type: RECT; @@ -7246,6 +7263,11 @@ } } programs { + // signal: elm,state,%s,active + // a "check" item named %s went active + // signal: elm,state,%s,passive + // a "check" item named %s went passive + // default is passive program { name: "go_active"; signal: "elm,state,selected"; @@ -7267,6 +7289,20 @@ target: "elm.text"; transition: LINEAR 0.1; } + program { + name: "go_disabled"; + signal: "elm,state,disabled"; + source: "elm"; + action: STATE_SET "disabled" 0.0; + target: "disclip"; + } + program { + name: "go_enabled"; + signal: "elm,state,enabled"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "disclip"; + } } } group { name: "elm/genlist/item_odd/default/default"; @@ -7295,6 +7331,7 @@ } } part { name: "bg"; + clip_to: "disclip"; mouse_events: 0; description { state: "default" 0.0; visible: 0; @@ -7329,6 +7366,7 @@ } part { name: "elm.swallow.icon"; + clip_to: "disclip"; type: SWALLOW; description { state: "default" 0.0; fixed: 1 0; @@ -7345,6 +7383,7 @@ } part { name: "elm.swallow.end"; + clip_to: "disclip"; type: SWALLOW; description { state: "default" 0.0; fixed: 1 0; @@ -7359,8 +7398,8 @@ } } } - part { - name: "elm.text"; + part { name: "elm.text"; + clip_to: "disclip"; type: TEXT; effect: SOFT_SHADOW; mouse_events: 0; @@ -7395,6 +7434,7 @@ } } part { name: "fg1"; + clip_to: "disclip"; mouse_events: 0; description { state: "default" 0.0; visible: 0; @@ -7414,6 +7454,7 @@ } } part { name: "fg2"; + clip_to: "disclip"; mouse_events: 0; description { state: "default" 0.0; visible: 0; @@ -7431,9 +7472,19 @@ color: 255 255 255 255; } } - part { - name: "event"; - type: RECT; + part { name: "disclip"; + type: RECT; + description { state: "default" 0.0; + rel1.to: "bg"; + rel2.to: "bg"; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color: 255 255 255 64; + } + } + part { name: "event"; + type: RECT; repeat_events: 1; description { state: "default" 0.0; @@ -7442,6 +7493,11 @@ } } programs { + // signal: elm,state,%s,active + // a "check" item named %s went active + // signal: elm,state,%s,passive + // a "check" item named %s went passive + // default is passive program { name: "go_active"; signal: "elm,state,selected"; @@ -7463,6 +7519,20 @@ target: "elm.text"; transition: LINEAR 0.1; } + program { + name: "go_disabled"; + signal: "elm,state,disabled"; + source: "elm"; + action: STATE_SET "disabled" 0.0; + target: "disclip"; + } + program { + name: "go_enabled"; + signal: "elm,state,enabled"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "disclip"; + } } } } Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-18 04:27:49 UTC (rev 39073) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-18 04:51:22 UTC (rev 39074) @@ -2165,6 +2165,21 @@ } static void +my_gl_disable(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *gl = data; + Elm_Genlist_Item *gli = elm_genlist_selected_item_get(gl); + if (!gli) + { + printf("no item selected\n"); + return; + } + elm_genlist_item_disabled_set(gli, 1); + elm_genlist_item_selected_set(gli, 0); +} + + +static void my_gl_first(void *data, Evas_Object *obj, void *event_info) { Evas_Object *gl = data; @@ -2243,6 +2258,14 @@ evas_object_show(bt); bt = elm_button_add(win); + elm_button_label_set(bt, "[.]"); + evas_object_smart_callback_add(bt, "clicked", my_gl_disable, gl); + evas_object_size_hint_align_set(bt, -1.0, -1.0); + evas_object_size_hint_weight_set(bt, 1.0, 0.0); + elm_box_pack_end(bx2, bt); + evas_object_show(bt); + + bt = elm_button_add(win); elm_button_label_set(bt, "[+]"); evas_object_smart_callback_add(bt, "clicked", my_gl_add, gl); evas_object_size_hint_align_set(bt, -1.0, -1.0); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-18 04:27:49 UTC (rev 39073) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-18 04:51:22 UTC (rev 39074) @@ -524,6 +524,7 @@ EAPI const Elm_Genlist_Item *elm_genlist_item_next_get(Elm_Genlist_Item *item); EAPI const Elm_Genlist_Item *elm_genlist_item_prev_get(Elm_Genlist_Item *item); EAPI void elm_genlist_item_selected_set(Elm_Genlist_Item *item, Evas_Bool selected); + EAPI void elm_genlist_item_disabled_set(Elm_Genlist_Item *item, Evas_Bool disabled); EAPI void elm_genlist_item_show(Elm_Genlist_Item *item); EAPI void elm_genlist_item_del(Elm_Genlist_Item *item); EAPI const void *elm_genlist_item_data_get(Elm_Genlist_Item *item); Modified: trunk/TMP/st/elementary/src/lib/elm_genlist.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-18 04:27:49 UTC (rev 39073) +++ trunk/TMP/st/elementary/src/lib/elm_genlist.c 2009-02-18 04:51:22 UTC (rev 39074) @@ -98,7 +98,7 @@ Widget_Data *wd = elm_widget_data_get(obj); elm_smart_scroller_theme_set(wd->scr, "scroller", "base", "default"); edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale); - // FIXME: redo items + // fixme - now redo items _sizing_eval(obj); } @@ -118,6 +118,7 @@ Evas_Coord vw, vh, minw, minh, maxw, maxh, w, h, vmw, vmh; double xw, xy; + // fixme - now handle scroll hinting etc. /* evas_object_size_hint_min_get(wd->content, &minw, &minh); evas_object_size_hint_max_get(wd->content, &maxw, &maxh); @@ -249,6 +250,7 @@ it->wd->on_hold = 0; return; } + if (it->disabled) return; if (it->wd->multi) { if (!it->selected) _item_select(it); @@ -295,6 +297,8 @@ _mouse_up, it); if (it->selected) edje_object_signal_emit(it->base, "elm,state,selected", "elm"); + if (it->disabled) + edje_object_signal_emit(it->base, "elm,state,disabled", "elm"); } if (it->itc->func.label_get) @@ -342,7 +346,8 @@ Evas_Bool on = it->itc->func.state_get(it->data, it->wd->obj, l->data); if (on) { - // FIXME: emit to base + snprintf(buf, sizeof(buf), "elm,state,%s,active", key); + edje_object_signal_emit(it->base, buf, "elm"); } } } @@ -490,7 +495,6 @@ { if (itb->realized) _item_block_unrealize(itb); showme = _item_block_recalc(itb, in); - printf("change block %i\n", bn); chb = itb; } itb->y = y; @@ -750,11 +754,6 @@ itb->changed = 1; if (it->wd->calc_job) ecore_job_del(it->wd->calc_job); it->wd->calc_job = ecore_job_add(_calc_job, it->wd); -// for (il = (Eina_Inlist *)(itb); il; il = il->next) -// { -// Item_Block *itb2 = (Item_Block *)il; -// _item_block_unrealize(itb2); -// } if (itb->count < 1) { it->wd->blocks = eina_inlist_remove(it->wd->blocks, (Eina_Inlist *)itb); @@ -768,8 +767,6 @@ Item_Block *itbn = (Item_Block *)(((Eina_Inlist *)(itb))->next); if ((itbp) && ((itbp->count + itb->count) < 48)) { - printf("merge with prev\n"); - // merge prev + itb while (itb->items) { Item *it2 = itb->items->data; @@ -784,8 +781,6 @@ } else if ((itbn) && ((itbn->count + itb->count) < 48)) { - printf("merge with next\n"); - // merge next + itb while (itb->items) { Eina_List *last = eina_list_last(itb->items); @@ -811,8 +806,8 @@ if (it->itc->func.del) it->itc->func.del(it->data, it->wd->obj); if (it->realized) _item_unrealize(it); if (it->block) _item_block_del(it); - // FIXME: del it->subblocks - // FIXME: del it->subitems + // FIXME: tree. del it->subblocks + // FIXME: tree. del it->subitems if (it->queued) { it->wd->queue = eina_list_remove(it->wd->queue, it); @@ -900,7 +895,6 @@ } if (n > 0) { - // queue a draw if (wd->calc_job) ecore_job_del(wd->calc_job); wd->calc_job = ecore_job_add(_calc_job, wd); } @@ -947,7 +941,7 @@ Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) { - // fixme + // fixme - now } EAPI Elm_Genlist_Item * @@ -956,7 +950,7 @@ Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) { - // fixme + // fixme - now } EAPI Elm_Genlist_Item * @@ -965,7 +959,7 @@ Elm_Genlist_Item_Flags flags, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *func_data) { - // fixme + // fixme - now } EAPI void @@ -1087,18 +1081,47 @@ _item_unselect(it); } +EAPI Evas_Bool +elm_genlist_item_selected_get(Elm_Genlist_Item *item) +{ + Item *it = (Item *)item; + return it->selected; +} + EAPI void elm_genlist_item_expanded_set(Elm_Genlist_Item *item, Evas_Bool expanded) { - // FIXME: not done yet + // FIXME: tree. not done yet } +EAPI Evas_Bool +elm_genlist_item_expanded_get(Elm_Genlist_Item *item) +{ + // FIXME: tree. not done yet +} + EAPI void elm_genlist_item_disabled_set(Elm_Genlist_Item *item, Evas_Bool disabled) { - // call this to set the disabled flag and update + Item *it = (Item *)item; + if (it->disabled == disabled) return; + it->disabled = disabled; + if (it->realized) + { + if (it->disabled) + edje_object_signal_emit(it->base, "elm,state,disabled", "elm"); + else + edje_object_signal_emit(it->base, "elm,state,enabled", "elm"); + } } +EAPI Evas_Bool +elm_genlist_item_disabled_get(Elm_Genlist_Item *item) +{ + Item *it = (Item *)item; + return it->disabled; +} + EAPI void elm_genlist_item_show(Elm_Genlist_Item *item) { @@ -1114,10 +1137,6 @@ it->wd->show_item->showme = 0; it->wd->show_item = NULL; } - printf("%i %i | %ix%i\n", - it->x + it->block->x, - it->y + it->block->y, - it->block->w, it->h); elm_smart_scroller_child_region_show(it->wd->scr, it->x + it->block->x, it->y + it->block->y, @@ -1142,5 +1161,5 @@ EAPI void elm_genlist_item_update(Elm_Genlist_Item *item) { - // call all the class get funcs again - re realize if realized. + // fixme - now do call all the class get funcs again - re realize if realized. } |
From: Enlightenment S. <no-...@en...> - 2009-02-23 12:35:41
|
Log: todo stuff scroller segv fix (list showed it). check theme item placeholder. doing gfx. Author: raster Date: 2009-02-23 03:40:24 -0800 (Mon, 23 Feb 2009) New Revision: 39161 Modified: trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/elm_scroller.c Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2009-02-23 11:05:37 UTC (rev 39160) +++ trunk/TMP/st/elementary/data/themes/default.edc 2009-02-23 11:40:24 UTC (rev 39161) @@ -7535,4 +7535,317 @@ } } } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "elm/check/base/default"; + images { + image: "shelf_inset.png" COMP; + image: "bt_basew.png" COMP; + image: "bt_bases.png" COMP; + image: "bt_hilightw.png" COMP; + image: "tog_base.png" COMP; + } + parts { + part { name: "bg"; + type: RECT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.relative: 1.0 0.0; + rel1.offset: -4 3; + rel2.offset: -4 -4; + align: 1.0 0.5; + min: 96 16; + max: 96 16; + aspect: 4.0 4.0; + aspect_preference: VERTICAL; + color: 255 255 255 255; + } + } + part { name: "clipper"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "bg"; + rel2.to: "bg"; + color: 255 255 255 255; + } + } + part { name: "button"; + type: RECT; + scale: 1; + clip_to: "clipper"; + mouse_events: 1; + dragable { + x: 1 1 0; + y: 0 0 0; + confine: "bg"; + } + description { state: "default" 0.0; + fixed: 1 1; + rel1.to: "bg"; + rel2.to: "bg"; + min: 16 16; + max: 16 16; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + color: 0 0 0 0; + } + } + part { name: "button_events"; + type: RECT; + dragable { + events: "button"; + } + description { state: "default" 0.0; + rel1.to_x: "bg"; + rel1.offset: 0 0; + rel1.relative: 0.0 0.0; + rel2.to_x: "bg"; + rel2.offset: -1 -1; + rel2.relative: 1.0 1.0; + color: 0 0 0 0; + } + } + part { name: "onrect"; + type: RECT; + scale: 1; + clip_to: "clipper"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "button"; + rel1.relative: -5.0 0.0; + rel2.to: "button"; + rel2.relative: 0.0 1.0; + color: 0 0 0 0; + } + } + part { name: "offrect"; + type: RECT; + scale: 1; + clip_to: "clipper"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.to: "button"; + rel1.relative: 1.0 0.0; + rel2.to: "button"; + rel2.relative: 6.0 1.0; + color: 0 0 0 0; + } + } + part { name: "togbase"; + mouse_events: 0; + clip_to: "clipper"; + description { state: "default" 0.0; + rel1.to: "onrect"; + rel2.to: "offrect"; + image.normal: "tog_base.png"; + } + } + part { name: "elm.offtext"; + type: TEXT; + mouse_events: 0; + scale: 1; + clip_to: "clipper"; + description { state: "default" 0.0; + fixed: 1 1; + rel1.to_x: "offrect"; + rel2.to_x: "offrect"; + color: 0 0 0 255; + text { + font: "Sans,Edje-Vera"; + size: 10; + min: 0 1; + align: 0.5 0.5; + text: "OFF"; + } + } + } + part { name: "elm.ontext"; + type: TEXT; + effect: SOFT_SHADOW; + mouse_events: 0; + scale: 1; + clip_to: "clipper"; + description { state: "default" 0.0; + fixed: 1 1; + rel1.to_x: "onrect"; + rel1.offset: 1 1; + rel2.to_x: "onrect"; + rel2.offset: 0 0; + color: 224 224 224 255; + color3: 0 0 0 64; + text { + font: "Sans,Edje-Vera"; + size: 10; + min: 0 1; + align: 0.5 0.5; + text: "ON"; + } + } + } + part { name: "conf_over"; + mouse_events: 0; + description { state: "default" 0.0; + rel1.offset: -1 -1; + rel1.to: "bg"; + rel2.offset: 0 0; + rel2.to: "bg"; + image { + normal: "shelf_inset.png"; + border: 7 7 7 7; + middle: 0; + } + fill.smooth : 0; + } + } + part { name: "button0"; + mouse_events: 0; + clip_to: "clipper"; + description { state: "default" 0.0; + rel1.to: "button2"; + rel1.offset: -4 -4; + rel2.to: "button2"; + rel2.offset: 3 3; + image { + normal: "bt_bases.png"; + border: 11 11 11 11; + } + image.middle: SOLID; + color: 255 255 255 128; + } + } + part { name: "button2"; + mouse_events: 0; + clip_to: "clipper"; + description { state: "default" 0.0; + rel1.to: "button"; + rel1.offset: -2 -2; + rel2.to: "button"; + rel2.offset: 1 1; + image { + normal: "bt_basew.png"; + border: 7 7 7 7; + } + image.middle: SOLID; + } + } + part { name: "button3"; + mouse_events: 0; + clip_to: "clipper"; + description { state: "default" 0.0; + rel1.to: "button2"; + rel2.to: "button2"; + rel2.relative: 1.0 0.5; + image { + normal: "bt_hilightw.png"; + border: 4 4 4 0; + } + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + description { state: "default" 0.0; +// fixed: 1 1; + visible: 0; + align: 0.0 0.5; + rel1.offset: 4 4; + rel2.relative: 0.0 1.0; + rel2.offset: 3 -5; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; +// fixed: 0 0; + visible: 1; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + rel2.offset: 4 -5; + } + } + part { name: "elm.text"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + rel1.to_x: "elm.swallow.content"; + rel1.relative: 1.0 0.0; + rel1.offset: 0 4; + rel2.to_x: "bg"; + rel2.relative: 0.0 1.0; + rel2.offset: -5 -5; + color: 0 0 0 255; + text { + font: "Sans,Edje-Vera"; + size: 10; + min: 0 0; + align: 0.0 0.5; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + text.min: 1 1; + } + } + } + programs { + program { name: "drag_end"; + signal: "mouse,up,1"; + source: "button"; + script { + new Float:dx, Float:dy; + get_drag(PART:"button", dx, dy); + if (dx > 0.5) + { + set_drag(PART:"button", 1.0, 0.0); + emit("elm,action,check,on", ""); + } + else + { + set_drag(PART:"button", 0.0, 0.0); + emit("elm,action,check,off", ""); + } + } + } + program { name: "check_on"; + signal: "elm,state,check,on"; + source: "elm"; + script { + set_drag(PART:"button", 100.0, 0.0); + } + } + program { name: "check_off"; + signal: "elm,state,check,off"; + source: "elm"; + script { + set_drag(PART:"button", 0.0, 0.0); + } + } + program { name: "text_show"; + signal: "elm,state,text,visible"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "elm.text"; + } + program { name: "text_hide"; + signal: "elm,state,text,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.text"; + } + program { name: "icon_show"; + signal: "elm,state,icon,visible"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "elm.swallow.content"; + } + program { name: "icon_hide"; + signal: "elm,state,icon,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + } + } + } } Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-23 11:05:37 UTC (rev 39160) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-23 11:40:24 UTC (rev 39161) @@ -2102,7 +2102,7 @@ itc1.func.state_get = gl_state_get; itc1.func.del = gl_del; - for (i = 0; i < 10000; i++) + for (i = 0; i < 2000; i++) { gli = elm_genlist_item_append(gl, &itc1, (void *)i/* item data */, @@ -2458,6 +2458,69 @@ } static void +my_bt_32(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *bx, *ic, *tg; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "check", ELM_WIN_BASIC); + elm_win_title_set(win, "Checks"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + tg = elm_check_add(win); + evas_object_size_hint_weight_set(tg, 1.0, 1.0); + evas_object_size_hint_align_set(tg, -1.0, 0.5); + elm_check_label_set(tg, "Icon sized to check"); + elm_check_icon_set(tg, ic); + elm_check_state_set(tg, 1); + elm_box_pack_end(bx, tg); + evas_object_show(tg); + evas_object_show(ic); + + 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_icon_scale_set(ic, 0, 0); + tg = elm_check_add(win); + elm_check_label_set(tg, "Icon no scale"); + elm_check_icon_set(tg, ic); + elm_box_pack_end(bx, tg); + evas_object_show(tg); + evas_object_show(ic); + + tg = elm_check_add(win); + elm_check_label_set(tg, "Label Only"); + elm_box_pack_end(bx, tg); + evas_object_show(tg); + + 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_icon_scale_set(ic, 0, 0); + tg = elm_check_add(win); + elm_check_icon_set(tg, ic); + elm_box_pack_end(bx, tg); + evas_object_show(tg); + evas_object_show(ic); + + evas_object_show(win); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *li, *fr; @@ -2563,6 +2626,7 @@ elm_list_item_append(li, "Genlist", NULL, NULL, my_bt_29, NULL); elm_list_item_append(li, "Genlist 2", NULL, NULL, my_bt_30, NULL); elm_list_item_append(li, "Genlist 3", NULL, NULL, my_bt_31, NULL); + elm_list_item_append(li, "Checks", NULL, NULL, my_bt_32, NULL); elm_list_go(li); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-23 11:05:37 UTC (rev 39160) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-23 11:40:24 UTC (rev 39161) @@ -586,6 +586,7 @@ // * <evas scale cache> // * <evas shared cache> // +// * multiple genlist item styles (multi-label, 1 icon + 2 line label, header etc.) // * carousel selector widget // * auto-size label/text that adapts text size to its allocated region // * [ scrollable dropdown combo box ] @@ -610,13 +611,17 @@ // * full window in window widget (so move/resize of window object does as you'd expect a child window to do within the canvas) // //// (improvements - low priority) +// * test for all bubble styles +// * test for all frame styles +// * test for all genlist item styles +// * need a way to attach a "dnd detector" to any object +// * need a dnd handler (able to hook to dnd detector) // * need another sample theme // * need a way to set a preferred size of a widget (but not min or max). // * merge with gurana // * use evas's new box instead of a box smart // * use evas's table instead of a table smart // * use stack for win widget -// * prepend or append theme files from code for an app to allow an app to augment the theme eithe rby forcibly overriding things with its own theme file (so it can ship some custom elements that always override user theme) and so it can also provide a final (even after default) fallback for "extended" styles of its own (but thus allowing themes to overried its extensions if they want) // * determine prefix of app dynamically and export calls to get prefix info // * load config from file // * load config from x property Modified: trunk/TMP/st/elementary/src/lib/elm_scroller.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_scroller.c 2009-02-23 11:05:37 UTC (rev 39160) +++ trunk/TMP/st/elementary/src/lib/elm_scroller.c 2009-02-23 11:40:24 UTC (rev 39161) @@ -21,6 +21,7 @@ _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; free(wd); } @@ -28,6 +29,7 @@ _theme_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; elm_smart_scroller_theme_set(wd->scr, "scroller", "base", "default"); edje_object_scale_set(wd->scr, elm_widget_scale_get(obj) * _elm_config->scale); _sizing_eval(obj); @@ -38,6 +40,7 @@ { Widget_Data *wd = elm_widget_data_get(data); 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); } @@ -48,7 +51,7 @@ Widget_Data *wd = elm_widget_data_get(obj); Evas_Coord vw, vh, minw, minh, maxw, maxh, w, h, vmw, vmh; double xw, xy; - + if (!wd) return; 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); @@ -85,6 +88,7 @@ { Widget_Data *wd = elm_widget_data_get(obj); Evas_Object *sub = event_info; + if (!wd) return; if (sub == wd->content) { elm_widget_on_show_region_hook_set(wd->content, NULL, NULL); @@ -133,6 +137,7 @@ elm_scroller_content_set(Evas_Object *obj, Evas_Object *content) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; if ((wd->content != content) && (wd->content)) elm_widget_sub_object_del(obj, wd->content); wd->content = content; @@ -151,6 +156,7 @@ elm_scroller_content_min_limit(Evas_Object *obj, Evas_Bool w, Evas_Bool h) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; wd->min_w = w; wd->min_h = h; _sizing_eval(obj); @@ -160,5 +166,6 @@ elm_scroller_region_show(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) { Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; elm_smart_scroller_child_region_show(wd->scr, x, y, w, h); } |
From: Enlightenment S. <no-...@en...> - 2009-02-24 09:24:06
|
Log: radio widget working. Author: raster Date: 2009-02-24 01:23:51 -0800 (Tue, 24 Feb 2009) New Revision: 39173 Added: trunk/TMP/st/elementary/data/themes/radio.png trunk/TMP/st/elementary/data/themes/radio2.png trunk/TMP/st/elementary/data/themes/radio_base.png trunk/TMP/st/elementary/src/lib/elm_radio.c Modified: trunk/TMP/st/elementary/data/themes/Makefile.am trunk/TMP/st/elementary/data/themes/default.edc trunk/TMP/st/elementary/src/bin/test.c trunk/TMP/st/elementary/src/lib/Elementary.h.in trunk/TMP/st/elementary/src/lib/Makefile.am trunk/TMP/st/elementary/src/lib/elm_check.c trunk/TMP/st/elementary/src/lib/elm_toggle.c Modified: trunk/TMP/st/elementary/data/themes/Makefile.am =================================================================== --- trunk/TMP/st/elementary/data/themes/Makefile.am 2009-02-24 08:31:31 UTC (rev 39172) +++ trunk/TMP/st/elementary/data/themes/Makefile.am 2009-02-24 09:23:51 UTC (rev 39173) @@ -114,7 +114,10 @@ slv_units.png \ check_base.png \ check.png \ -check2.png +check2.png \ +radio_base.png \ +radio.png \ +radio2.png default.edj: Makefile $(EXTRA_DIST) $(EDJE_CC) $(EDJE_FLAGS) \ Modified: trunk/TMP/st/elementary/data/themes/default.edc =================================================================== --- trunk/TMP/st/elementary/data/themes/default.edc 2009-02-24 08:31:31 UTC (rev 39172) +++ trunk/TMP/st/elementary/data/themes/default.edc 2009-02-24 09:23:51 UTC (rev 39173) @@ -1240,7 +1240,7 @@ part { name: "elm.swallow.content"; type: SWALLOW; description { state: "default" 0.0; -// fixed: 1 1; + fixed: 1 0; visible: 0; align: 0.0 0.5; rel1.offset: 4 4; @@ -1249,7 +1249,7 @@ } description { state: "visible" 0.0; inherit: "default" 0.0; -// fixed: 0 0; + fixed: 1 1; visible: 1; aspect: 1.0 1.0; aspect_preference: VERTICAL; @@ -7587,7 +7587,7 @@ part { name: "elm.swallow.content"; type: SWALLOW; description { state: "default" 0.0; -// fixed: 1 1; + fixed: 1 0; visible: 0; align: 0.0 0.5; rel1.to_x: "bg"; @@ -7599,7 +7599,7 @@ } description { state: "visible" 0.0; inherit: "default" 0.0; -// fixed: 0 0; + fixed: 1 1; visible: 1; aspect: 1.0 1.0; aspect_preference: VERTICAL; @@ -7682,4 +7682,140 @@ } } } + +/////////////////////////////////////////////////////////////////////////////// + group { name: "elm/radio/base/default"; + images { + image: "radio_base.png" COMP; + image: "radio.png" COMP; + image: "radio2.png" COMP; + } + parts { + part { name: "bg"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.offset: 1 1; + rel2.relative: 0.0 1.0; + rel2.offset: 1 -2; + align: 0.0 0.5; + min: 16 16; + max: 16 16; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + image.normal: "radio_base.png"; + } + } + part { name: "radio"; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.to: "bg"; + rel2.to: "bg"; + visible: 0; + image.normal: "radio.png"; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + visible: 0; + align: 0.0 0.5; + rel1.to_x: "bg"; + rel1.relative: 1.0 0.0; + rel1.offset: 1 1; + rel2.to_x: "bg"; + rel2.relative: 1.0 1.0; + rel2.offset: 2 -2; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + fixed: 1 1; + visible: 1; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + } + } + part { name: "elm.text"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + visible: 0; + rel1.to_x: "elm.swallow.content"; + rel1.relative: 1.0 0.0; + rel1.offset: 1 1; + rel2.relative: 1.0 1.0; + rel2.offset: -2 -2; + color: 0 0 0 255; + text { + font: "Sans,Edje-Vera"; + size: 10; + min: 0 0; + align: 0.0 0.5; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + text.min: 1 1; + } + } + part { name: "events"; + type: RECT; + ignore_flags: ON_HOLD; + description { state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { name: "click"; + signal: "mouse,up,1"; + source: "events"; + action: SIGNAL_EMIT "elm,action,radio,toggle" ""; + } + program { name: "radio_on"; + signal: "elm,state,radio,on"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "radio"; + } + program { name: "radio_off"; + signal: "elm,state,radio,off"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "radio"; + } + program { name: "text_show"; + signal: "elm,state,text,visible"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "elm.text"; + } + program { name: "text_hide"; + signal: "elm,state,text,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.text"; + } + program { name: "icon_show"; + signal: "elm,state,icon,visible"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "elm.swallow.content"; + } + program { name: "icon_hide"; + signal: "elm,state,icon,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + } + } + } } Added: trunk/TMP/st/elementary/data/themes/radio.png Property changes on: trunk/TMP/st/elementary/data/themes/radio.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/radio2.png Property changes on: trunk/TMP/st/elementary/data/themes/radio2.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/TMP/st/elementary/data/themes/radio_base.png Property changes on: trunk/TMP/st/elementary/data/themes/radio_base.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/TMP/st/elementary/src/bin/test.c =================================================================== --- trunk/TMP/st/elementary/src/bin/test.c 2009-02-24 08:31:31 UTC (rev 39172) +++ trunk/TMP/st/elementary/src/bin/test.c 2009-02-24 09:23:51 UTC (rev 39173) @@ -2460,7 +2460,7 @@ static void my_bt_32(void *data, Evas_Object *obj, void *event_info) { - Evas_Object *win, *bg, *bx, *ic, *tg; + Evas_Object *win, *bg, *bx, *ic, *ck; char buf[PATH_MAX]; win = elm_win_add(NULL, "check", ELM_WIN_BASIC); @@ -2481,46 +2481,118 @@ snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); elm_icon_file_set(ic, buf, NULL); evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - tg = elm_check_add(win); - evas_object_size_hint_weight_set(tg, 1.0, 1.0); - evas_object_size_hint_align_set(tg, -1.0, 0.5); - elm_check_label_set(tg, "Icon sized to check"); - elm_check_icon_set(tg, ic); - elm_check_state_set(tg, 1); - elm_box_pack_end(bx, tg); - evas_object_show(tg); + ck = elm_check_add(win); + evas_object_size_hint_weight_set(ck, 1.0, 1.0); + evas_object_size_hint_align_set(ck, -1.0, 0.5); + elm_check_label_set(ck, "Icon sized to check"); + elm_check_icon_set(ck, ic); + elm_check_state_set(ck, 1); + elm_box_pack_end(bx, ck); + evas_object_show(ck); evas_object_show(ic); 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_icon_scale_set(ic, 0, 0); - tg = elm_check_add(win); - elm_check_label_set(tg, "Icon no scale"); - elm_check_icon_set(tg, ic); - elm_box_pack_end(bx, tg); - evas_object_show(tg); + ck = elm_check_add(win); + elm_check_label_set(ck, "Icon no scale"); + elm_check_icon_set(ck, ic); + elm_box_pack_end(bx, ck); + evas_object_show(ck); evas_object_show(ic); - tg = elm_check_add(win); - elm_check_label_set(tg, "Label Only"); - elm_box_pack_end(bx, tg); - evas_object_show(tg); + ck = elm_check_add(win); + elm_check_label_set(ck, "Label Only"); + elm_box_pack_end(bx, ck); + evas_object_show(ck); 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_icon_scale_set(ic, 0, 0); - tg = elm_check_add(win); - elm_check_icon_set(tg, ic); - elm_box_pack_end(bx, tg); - evas_object_show(tg); + ck = elm_check_add(win); + elm_check_icon_set(ck, ic); + elm_box_pack_end(bx, ck); + evas_object_show(ck); evas_object_show(ic); evas_object_show(win); } static void +my_bt_33(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *bx, *ic, *rd, *rdg; + char buf[PATH_MAX]; + + win = elm_win_add(NULL, "radio", ELM_WIN_BASIC); + elm_win_title_set(win, "Radios"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + evas_object_show(bg); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, 1.0, 1.0); + elm_win_resize_object_add(win, bx); + evas_object_show(bx); + + ic = elm_icon_add(win); + snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR); + elm_icon_file_set(ic, buf, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 0); + evas_object_size_hint_weight_set(rd, 1.0, 1.0); + evas_object_size_hint_align_set(rd, -1.0, 0.5); + elm_radio_label_set(rd, "Icon sized to radio"); + elm_radio_icon_set(rd, ic); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + evas_object_show(ic); + rdg = rd; + + 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_icon_scale_set(ic, 0, 0); + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 1); + elm_radio_group_add(rd, rdg); + elm_radio_label_set(rd, "Icon no scale"); + elm_radio_icon_set(rd, ic); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + evas_object_show(ic); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 2); + elm_radio_group_add(rd, rdg); + elm_radio_label_set(rd, "Label Only"); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + + 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_icon_scale_set(ic, 0, 0); + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 3); + elm_radio_group_add(rd, rdg); + elm_radio_icon_set(rd, ic); + elm_box_pack_end(bx, rd); + evas_object_show(rd); + evas_object_show(ic); + + elm_radio_value_set(rdg, 2); + + evas_object_show(win); +} + +static void my_win_main(void) { Evas_Object *win, *bg, *bx0, *lb, *li, *fr; @@ -2627,6 +2699,7 @@ elm_list_item_append(li, "Genlist 2", NULL, NULL, my_bt_30, NULL); elm_list_item_append(li, "Genlist 3", NULL, NULL, my_bt_31, NULL); elm_list_item_append(li, "Checks", NULL, NULL, my_bt_32, NULL); + elm_list_item_append(li, "Radios", NULL, NULL, my_bt_33, NULL); elm_list_go(li); Modified: trunk/TMP/st/elementary/src/lib/Elementary.h.in =================================================================== --- trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-24 08:31:31 UTC (rev 39172) +++ trunk/TMP/st/elementary/src/lib/Elementary.h.in 2009-02-24 09:23:51 UTC (rev 39173) @@ -556,6 +556,18 @@ * "changed" - the user toggled the state */ + EAPI Evas_Object *elm_radio_add(Evas_Object *parent); + EAPI void elm_radio_label_set(Evas_Object *obj, const char *label); + EAPI void elm_radio_icon_set(Evas_Object *obj, Evas_Object *icon); + EAPI void elm_radio_group_add(Evas_Object *obj, Evas_Object *group); + EAPI void elm_radio_state_value_set(Evas_Object *obj, int value); + EAPI void elm_radio_value_set(Evas_Object *obj, int value); + EAPI int elm_radio_value_get(Evas_Object *obj); + EAPI void elm_radio_value_pointer_set(Evas_Object *obj, int *valuep); + /* smart callbacks called: + * "changed" - the user toggled the state + */ + #ifdef __cplusplus } #endif @@ -581,8 +593,6 @@ // //// (more widgets/features - medium priority) // * tree feature for genlist widget (like biglist - but items can expand to sub-items) -// * radio + group handling -// * checkbox (like toggle) // * pager (for pushing/popping pages and going back and forward and flipping) // * <edje copy & paste fixed> // * <evas scale cache> Modified: trunk/TMP/st/elementary/src/lib/Makefile.am =================================================================== --- trunk/TMP/st/elementary/src/lib/Makefile.am 2009-02-24 08:31:31 UTC (rev 39172) +++ trunk/TMP/st/elementary/src/lib/Makefile.am 2009-02-24 09:23:51 UTC (rev 39173) @@ -50,6 +50,7 @@ elm_slider.c \ elm_genlist.c \ elm_check.c \ +elm_radio.c \ \ elc_notepad.c \ elc_anchorview.c \ Modified: trunk/TMP/st/elementary/src/lib/elm_check.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_check.c 2009-02-24 08:31:31 UTC (rev 39172) +++ trunk/TMP/st/elementary/src/lib/elm_check.c 2009-02-24 09:23:51 UTC (rev 39173) @@ -19,6 +19,7 @@ static void _sub_del(void *data, Evas_Object *obj, void *event_info); static void _signal_check_off(void *data, Evas_Object *obj, const char *emission, const char *source); static void _signal_check_on(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _signal_check_toggle(void *data, Evas_Object *obj, const char *emission, const char *source); static void _del_hook(Evas_Object *obj) @@ -230,4 +231,8 @@ edje_object_signal_emit(wd->chk, "elm,state,check,off", "elm"); } } + else + { + wd->statep = NULL; + } } Added: trunk/TMP/st/elementary/src/lib/elm_radio.c Modified: trunk/TMP/st/elementary/src/lib/elm_toggle.c =================================================================== --- trunk/TMP/st/elementary/src/lib/elm_toggle.c 2009-02-24 08:31:31 UTC (rev 39172) +++ trunk/TMP/st/elementary/src/lib/elm_toggle.c 2009-02-24 09:23:51 UTC (rev 39173) @@ -238,4 +238,8 @@ edje_object_signal_emit(wd->tgl, "elm,state,toggle,off", "elm"); } } + else + { + wd->statep = NULL; + } } |