diff --git a/legacy/elementary/data/themes/default.edc b/legacy/elementary/data/themes/default.edc index 5a801823f3..8bdd5ba5bb 100644 --- a/legacy/elementary/data/themes/default.edc +++ b/legacy/elementary/data/themes/default.edc @@ -18691,6 +18691,14 @@ collections { } } programs { + program { name: "push_start"; + signal: "elm,action,push"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "base"; + target: "clip"; + after: "show_start2"; + } program { name: "show_start"; signal: "elm,action,show"; source: "elm"; @@ -18709,6 +18717,14 @@ collections { program { name: "show_end"; action: SIGNAL_EMIT "elm,action,show,finished" ""; } + program { name: "pop_start"; + signal: "elm,action,pop"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "base"; + target: "clip"; + after: "hide_start2"; + } program { name: "hide_start"; signal: "elm,action,hide"; source: "elm"; @@ -18737,6 +18753,320 @@ collections { } } + group { name: "elm/pager/base/slide"; + images { + image: "frame_1.png" COMP; + image: "frame_2.png" COMP; + image: "dia_grad.png" COMP; + } + parts { + part { name: "clip"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + rel1 { + to: "base"; + offset: -9999 -9999; + } + rel2 { + to: "base"; + offset: 9999 9999; + } + color: 255 255 255 255; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + visible: 0; + } + description { state: "hidden2" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + visible: 0; + } + } + part { name: "base0"; + mouse_events: 0; + clip_to: "clip"; + 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; + } + } + } + } + part { name: "base"; + mouse_events: 0; + clip_to: "clip"; + description { state: "default" 0.0; + image { + normal: "frame_2.png"; + border: 5 5 32 26; + middle: 0; + } + fill.smooth : 0; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + rel1.relative: -1.0 0.0; + rel2.relative: 0.0 1.0; + } + description { state: "hidden2" 0.0; + inherit: "default" 0.0; + rel1.relative: 1.0 0.0; + rel2.relative: 2.0 1.0; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { name: "over"; + mouse_events: 0; + clip_to: "clip"; + description { state: "default" 0.0; + rel1 { + to: "base"; + offset: 4 4; + } + rel2 { + to: "base"; + offset: -5 -5; + } + image { + normal: "frame_1.png"; + border: 2 2 28 22; + middle: 0; + } + fill.smooth : 0; + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + clip_to: "clip"; + description { state: "default" 0.0; + rel1 { + to: "base"; + offset: 8 8; + } + rel2 { + to: "base"; + offset: -9 -9; + } + } + } + } + programs { + program { name: "push_start"; + signal: "elm,action,push"; + source: "elm"; + action: STATE_SET "hidden2" 0.0; + target: "base"; + target: "clip"; + after: "show_start2"; + } + program { name: "show_start"; + signal: "elm,action,show"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "base"; + target: "clip"; + after: "show_start2"; + } + program { name: "show_start2"; + action: STATE_SET "visible" 0.0; + transition: DECELERATE 0.5; + target: "base"; + target: "clip"; + after: "show_end"; + } + program { name: "show_end"; + action: SIGNAL_EMIT "elm,action,show,finished" ""; + } + program { name: "pop_start"; + signal: "elm,action,pop"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "base"; + target: "clip"; + after: "pop_start2"; + } + program { name: "pop_start2"; + action: STATE_SET "hidden2" 0.0; + transition: DECELERATE 0.5; + target: "base"; + target: "clip"; + after: "hide_end"; + } + program { name: "hide_start"; + signal: "elm,action,hide"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "base"; + target: "clip"; + after: "hide_start2"; + } + program { name: "hide_start2"; + action: STATE_SET "hidden" 0.0; + transition: DECELERATE 0.5; + target: "base"; + target: "clip"; + after: "hide_end"; + } + program { name: "hide_end"; + action: SIGNAL_EMIT "elm,action,hide,finished" ""; + } + program { name: "reset"; + signal: "elm,action,reset"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "base"; + target: "clip"; + } + } + } + group { name: "elm/pager/base/slide_invisible"; + parts { + part { name: "clip"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + rel1 { + to: "base"; + offset: -9999 -9999; + } + rel2 { + to: "base"; + offset: 9999 9999; + } + color: 255 255 255 255; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + visible: 0; + } + description { state: "hidden2" 0.0; + inherit: "default" 0.0; + color: 255 255 255 0; + visible: 0; + } + } + part { name: "base"; + type: RECT; + mouse_events: 0; + clip_to: "clip"; + description { state: "default" 0.0; + color: 0 0 0 0; + } + description { state: "hidden" 0.0; + color: 0 0 0 0; + rel1.relative: -1.0 0.0; + rel2.relative: 0.0 1.0; + } + description { state: "hidden2" 0.0; + color: 0 0 0 0; + rel1.relative: 1.0 0.0; + rel2.relative: 2.0 1.0; + } + description { state: "visible" 0.0; + color: 0 0 0 0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + clip_to: "clip"; + description { state: "default" 0.0; + rel1.to: "base"; + rel2.to: "base"; + } + } + } + programs { + program { name: "push_start"; + signal: "elm,action,push"; + source: "elm"; + action: STATE_SET "hidden2" 0.0; + target: "base"; + target: "clip"; + after: "show_start2"; + } + program { name: "show_start"; + signal: "elm,action,show"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "base"; + target: "clip"; + after: "show_start2"; + } + program { name: "show_start2"; + action: STATE_SET "visible" 0.0; + transition: DECELERATE 0.5; + target: "base"; + target: "clip"; + after: "show_end"; + } + program { name: "show_end"; + action: SIGNAL_EMIT "elm,action,show,finished" ""; + } + program { name: "pop_start"; + signal: "elm,action,pop"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "base"; + target: "clip"; + after: "pop_start2"; + } + program { name: "pop_start2"; + action: STATE_SET "hidden2" 0.0; + transition: DECELERATE 0.5; + target: "base"; + target: "clip"; + after: "hide_end"; + } + program { name: "hide_start"; + signal: "elm,action,hide"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "base"; + target: "clip"; + after: "hide_start2"; + } + program { name: "hide_start2"; + action: STATE_SET "hidden" 0.0; + transition: DECELERATE 0.5; + target: "base"; + target: "clip"; + after: "hide_end"; + } + program { name: "hide_end"; + action: SIGNAL_EMIT "elm,action,hide,finished" ""; + } + program { name: "reset"; + signal: "elm,action,reset"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "base"; + target: "clip"; + } + } + } + group { name: "elm/pager/base/fade"; data.item: "onshow" "raise"; // other options @@ -18858,6 +19188,14 @@ collections { } } programs { + program { name: "push_start"; + signal: "elm,action,push"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "clip"; + target: "clip_base"; + after: "show_start2"; + } program { name: "show_start"; signal: "elm,action,show"; source: "elm"; @@ -18876,6 +19214,14 @@ collections { program { name: "show_end"; action: SIGNAL_EMIT "elm,action,show,finished" ""; } + program { name: "pop_start"; + signal: "elm,action,pop"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "clip"; + target: "clip_base"; + after: "hide_start2"; + } program { name: "hide_start"; signal: "elm,action,hide"; source: "elm"; @@ -19024,6 +19370,14 @@ collections { } } programs { + program { name: "push_start"; + signal: "elm,action,push"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "clip"; + target: "clip_base"; + after: "show_start2"; + } program { name: "show_start"; signal: "elm,action,show"; source: "elm"; @@ -19042,6 +19396,14 @@ collections { program { name: "show_end"; action: SIGNAL_EMIT "elm,action,show,finished" ""; } + program { name: "pop_start"; + signal: "elm,action,pop"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "clip"; + target: "clip_base"; + after: "hide_start2"; + } program { name: "hide_start"; signal: "elm,action,hide"; source: "elm"; @@ -19110,6 +19472,13 @@ collections { } } programs { + program { name: "push_start"; + signal: "elm,action,push"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "clip"; + after: "show_start2"; + } program { name: "show_start"; signal: "elm,action,show"; source: "elm"; @@ -19126,6 +19495,13 @@ collections { program { name: "show_end"; action: SIGNAL_EMIT "elm,action,show,finished" ""; } + program { name: "pop_start"; + signal: "elm,action,pop"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "clip"; + after: "hide_start2"; + } program { name: "hide_start"; signal: "elm,action,hide"; source: "elm"; diff --git a/legacy/elementary/src/bin/test.c b/legacy/elementary/src/bin/test.c index 5211f76b39..e49c7e514f 100644 --- a/legacy/elementary/src/bin/test.c +++ b/legacy/elementary/src/bin/test.c @@ -45,6 +45,7 @@ void test_genlist6(void *data, Evas_Object *obj, void *event_info); void test_table(void *data, Evas_Object *obj, void *event_info); void test_gengrid(void *data, Evas_Object *obj, void *event_info); void test_pager(void *data, Evas_Object *obj, void *event_info); +void test_pager_slide(void *data, Evas_Object *obj, void *event_info); void test_win_state(void *data, Evas_Object *obj, void *event_info); void test_win_state2(void *data, Evas_Object *obj, void *event_info); void test_progressbar(void *data, Evas_Object *obj, void *event_info); @@ -242,6 +243,7 @@ my_win_main(void) ADD_TEST("Checks", test_check); ADD_TEST("Radios", test_radio); ADD_TEST("Pager", test_pager); + ADD_TEST("Pager Slide", test_pager_slide); ADD_TEST("Window States", test_win_state); ADD_TEST("Window States 2", test_win_state2); ADD_TEST("Progressbar", test_progressbar); diff --git a/legacy/elementary/src/bin/test_pager.c b/legacy/elementary/src/bin/test_pager.c index 477fc9ad0e..335dde5354 100644 --- a/legacy/elementary/src/bin/test_pager.c +++ b/legacy/elementary/src/bin/test_pager.c @@ -4,7 +4,7 @@ typedef struct _Pginfo Pginfo; struct _Pginfo { - Evas_Object *pager, *pg1, *pg2, *pg3; + Evas_Object *win, *pager, *pg1, *pg2, *pg3; }; static void @@ -44,6 +44,7 @@ test_pager(void *data, Evas_Object *obj, void *event_info) win = elm_win_add(NULL, "pager", ELM_WIN_BASIC); elm_win_title_set(win, "Pager"); elm_win_autodel_set(win, 1); + info.win = win; bg = elm_bg_add(win); elm_win_resize_object_add(win, bg); @@ -148,4 +149,91 @@ test_pager(void *data, Evas_Object *obj, void *event_info) evas_object_show(win); } + +static void +my_pager_push(void *data, Evas_Object *obj, void *event_info) +{ + Pginfo *info = data; + Evas_Object *bx, *bt, *lb; + static int count = 2; + char *buf[32]; + + bx = elm_box_add(info->win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + lb = elm_label_add(info->win); + snprintf(buf, sizeof(buf), "This is page %d in the slide pager

", count++); + elm_label_label_set(lb, buf); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(info->win); + elm_button_label_set(bt, "Push a new page"); + evas_object_smart_callback_add(bt, "clicked", my_pager_push, info); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(info->win); + elm_button_label_set(bt, "Go back (pop)"); + evas_object_smart_callback_add(bt, "clicked", my_pager_pop, info); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + elm_pager_content_push(info->pager, bx); +} + +void +test_pager_slide(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *pg, *bx, *lb, *bt; + static Pginfo info; + + win = elm_win_add(NULL, "pager", ELM_WIN_BASIC); + elm_win_title_set(win, "Pager Slide"); + elm_win_autodel_set(win, 1); + info.win = win; + + bg = elm_bg_add(win); + elm_win_resize_object_add(win, bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + pg = elm_pager_add(win); + elm_win_resize_object_add(win, pg); + elm_object_style_set(pg, "slide"); + evas_object_show(pg); + info.pager = pg; + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bx); + + lb = elm_label_add(win); + elm_label_label_set(lb, + "This is page 1 in a slide pager.
" + "
" + "The slide pager style is usefull for browsing
" + "a hierarchy of objects, as it makes clear
" + "the direction of the browse.
" + "This is the 'slide' style, also available
" + "a fully transparent style named 'slide_invisble'.
" + "
"); + elm_box_pack_end(bx, lb); + evas_object_show(lb); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Push a new page"); + evas_object_smart_callback_add(bt, "clicked", my_pager_push, &info); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + + bt = elm_button_add(win); + elm_button_label_set(bt, "Go back (pop)"); + evas_object_smart_callback_add(bt, "clicked", my_pager_pop, &info); + elm_box_pack_end(bx, bt); + evas_object_show(bt); + elm_pager_content_push(pg, bx); + + evas_object_show(win); +} #endif diff --git a/legacy/elementary/src/lib/elm_pager.c b/legacy/elementary/src/lib/elm_pager.c index b1c029917b..b04e533da1 100644 --- a/legacy/elementary/src/lib/elm_pager.c +++ b/legacy/elementary/src/lib/elm_pager.c @@ -111,7 +111,10 @@ _eval_top(Evas_Object *obj) if (wd->top) { o = wd->top->base; - edje_object_signal_emit(o, "elm,action,hide", "elm"); + if (wd->top->popme) + edje_object_signal_emit(o, "elm,action,pop", "elm"); + else + edje_object_signal_emit(o, "elm,action,hide", "elm"); onhide = edje_object_data_get(o, "onhide"); if (onhide) { @@ -119,10 +122,14 @@ _eval_top(Evas_Object *obj) else if (!strcmp(onhide, "lower")) evas_object_lower(o); } } + wd->oldtop = wd->top; wd->top = ittop; o = wd->top->base; evas_object_show(o); - edje_object_signal_emit(o, "elm,action,show", "elm"); + if (wd->oldtop && wd->oldtop->popme) + edje_object_signal_emit(o, "elm,action,show", "elm"); + else + edje_object_signal_emit(o, "elm,action,push", "elm"); onshow = edje_object_data_get(o, "onshow"); if (onshow) { @@ -271,7 +278,7 @@ elm_pager_content_push(Evas_Object *obj, Evas_Object *content) _signal_hide_finished, it); evas_object_event_callback_add(it->content, EVAS_CALLBACK_CHANGED_SIZE_HINTS, - _changed_size_hints, it); + _changed_size_hints, it); edje_object_part_swallow(it->base, "elm.swallow.content", it->content); edje_object_size_min_calc(it->base, &it->minw, &it->minh); evas_object_show(it->content); @@ -313,7 +320,7 @@ elm_pager_content_pop(Evas_Object *obj) wd->top = it; o = wd->top->base; - edje_object_signal_emit(o, "elm,action,hide", "elm"); + edje_object_signal_emit(o, "elm,action,pop", "elm"); onhide = edje_object_data_get(o, "onhide"); if (onhide) {