forked from enlightenment/efl
naviframe improvements:
- fixed theme to look less like an arse: - overlap theme is translucent - naviframe title visibility toggle is now animated - item pop/push animation now applies to title area as well - icon without title label is now centered (see Naviframe 2 test) - title label and subtitle are now centered among the free space, should not overlap buttons anymore. - title will use a font-size range, trying to not overlap buttons anymore. - title will use ellipsis, trying to not overlap buttons anymore. - prev/next buttons do not have a fixed min/max size anymore - emit signals elm,state,title_label,show and elm,state,title_label,hide - by default the previous button label is the title of the previous page however by using a regular elm_button with an icon and long label exposes a bug with button theme. And there is a conceptual issue: if the previous button label is too big, it will look horrible. We should have a maximum size that, if reached, should have ellipsis. This should be a different elm_button style, with elm/button/base/naviframe/back_btn/default being an alias to it. SVN revision: 74403
This commit is contained in:
parent
8f730decf1
commit
51e2c4e18b
|
@ -332,7 +332,8 @@ pointer_glint_12.png \
|
||||||
pointer_glow.png \
|
pointer_glow.png \
|
||||||
pointer.png \
|
pointer.png \
|
||||||
map_circle.png \
|
map_circle.png \
|
||||||
map_scale.png
|
map_scale.png \
|
||||||
|
naviframe-base.jpg
|
||||||
|
|
||||||
default.edj: Makefile $(EXTRA_DIST)
|
default.edj: Makefile $(EXTRA_DIST)
|
||||||
$(EDJE_CC) $(EDJE_FLAGS) \
|
$(EDJE_CC) $(EDJE_FLAGS) \
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 441 B |
File diff suppressed because it is too large
Load Diff
|
@ -176,6 +176,7 @@ void test_glview_simple(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_glview(void *data, Evas_Object *obj, void *event_info);
|
void test_glview(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_3d(void *data, Evas_Object *obj, void *event_info);
|
void test_3d(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_naviframe(void *data, Evas_Object *obj, void *event_info);
|
void test_naviframe(void *data, Evas_Object *obj, void *event_info);
|
||||||
|
void test_naviframe2(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_naviframe_complex(void *data, Evas_Object *obj, void *event_info);
|
void test_naviframe_complex(void *data, Evas_Object *obj, void *event_info);
|
||||||
//void test_factory(void *data, Evas_Object *obj, void *event_info);
|
//void test_factory(void *data, Evas_Object *obj, void *event_info);
|
||||||
void test_datetime(void *data, Evas_Object *obj, void *event_info);
|
void test_datetime(void *data, Evas_Object *obj, void *event_info);
|
||||||
|
@ -664,6 +665,7 @@ add_tests:
|
||||||
|
|
||||||
//------------------------------//
|
//------------------------------//
|
||||||
ADD_TEST(NULL, "Naviframe", "Naviframe", test_naviframe);
|
ADD_TEST(NULL, "Naviframe", "Naviframe", test_naviframe);
|
||||||
|
ADD_TEST(NULL, "Naviframe", "Naviframe 2", test_naviframe2);
|
||||||
ADD_TEST(NULL, "Naviframe", "Naviframe: Complex", test_naviframe_complex);
|
ADD_TEST(NULL, "Naviframe", "Naviframe: Complex", test_naviframe_complex);
|
||||||
|
|
||||||
//------------------------------//
|
//------------------------------//
|
||||||
|
|
|
@ -167,15 +167,10 @@ _page4(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
void
|
void
|
||||||
_page3(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
_page3(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
{
|
{
|
||||||
Evas_Object *bt, *bt2, *ic, *content, *nf = data;
|
Evas_Object *bt2, *ic, *content, *nf = data;
|
||||||
char buf[PATH_MAX];
|
char buf[PATH_MAX];
|
||||||
Elm_Object_Item *it;
|
Elm_Object_Item *it;
|
||||||
|
|
||||||
bt = elm_button_add(nf);
|
|
||||||
evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
|
||||||
BUTTON_TEXT_SET(bt, "Prev");
|
|
||||||
evas_object_smart_callback_add(bt, "clicked", _navi_pop, nf);
|
|
||||||
|
|
||||||
bt2 = elm_button_add(nf);
|
bt2 = elm_button_add(nf);
|
||||||
evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
evas_object_size_hint_align_set(bt2, EVAS_HINT_FILL, EVAS_HINT_FILL);
|
||||||
BUTTON_TEXT_SET(bt2, "Next");
|
BUTTON_TEXT_SET(bt2, "Next");
|
||||||
|
@ -185,7 +180,7 @@ _page3(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
|
|
||||||
it = elm_naviframe_item_push(nf,
|
it = elm_naviframe_item_push(nf,
|
||||||
"Page 3",
|
"Page 3",
|
||||||
bt,
|
NULL,
|
||||||
bt2,
|
bt2,
|
||||||
content,
|
content,
|
||||||
NULL);
|
NULL);
|
||||||
|
@ -214,7 +209,8 @@ _page2(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
|
|
||||||
content = _content_new(nf, img2);
|
content = _content_new(nf, img2);
|
||||||
|
|
||||||
it = elm_naviframe_item_push(nf, "Page 2", NULL, bt, content, NULL);
|
it = elm_naviframe_item_push(nf, "Page 2 - Long Title Here",
|
||||||
|
NULL, bt, content, NULL);
|
||||||
elm_object_item_part_text_set(it, "subtitle", "Here is sub-title part!");
|
elm_object_item_part_text_set(it, "subtitle", "Here is sub-title part!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,4 +243,39 @@ test_naviframe(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_i
|
||||||
evas_object_resize(win, 400, 600);
|
evas_object_resize(win, 400, 600);
|
||||||
evas_object_show(win);
|
evas_object_show(win);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_naviframe2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
|
{
|
||||||
|
Evas_Object *win, *nf, *sc, *btn, *ico, *content;
|
||||||
|
Elm_Object_Item *it;
|
||||||
|
|
||||||
|
win = elm_win_util_standard_add("naviframe", "Naviframe");
|
||||||
|
elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
|
||||||
|
elm_win_autodel_set(win, EINA_TRUE);
|
||||||
|
|
||||||
|
nf = elm_naviframe_add(win);
|
||||||
|
evas_object_size_hint_weight_set(nf, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||||
|
elm_win_resize_object_add(win, nf);
|
||||||
|
evas_object_show(nf);
|
||||||
|
|
||||||
|
sc = elm_segment_control_add(nf);
|
||||||
|
elm_segment_control_item_add(sc, NULL, "Show All");
|
||||||
|
elm_segment_control_item_add(sc, NULL, "Just Filtered");
|
||||||
|
|
||||||
|
btn = elm_button_add(nf);
|
||||||
|
ico = elm_icon_add(btn);
|
||||||
|
elm_icon_standard_set(ico, "refresh");
|
||||||
|
elm_layout_content_set(btn, "icon", ico);
|
||||||
|
|
||||||
|
|
||||||
|
content = _content_new(nf, img1);
|
||||||
|
it = elm_naviframe_item_push(nf, NULL, NULL, btn, content, NULL);
|
||||||
|
evas_object_data_set(nf, "page1", it);
|
||||||
|
|
||||||
|
elm_object_item_part_content_set(it, "icon", sc);
|
||||||
|
|
||||||
|
evas_object_resize(win, 400, 600);
|
||||||
|
evas_object_show(win);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -191,6 +191,11 @@ _item_content_signals_emit(Elm_Naviframe_Item *it)
|
||||||
edje_object_signal_emit(VIEW(it), "elm,state,icon,show", "elm");
|
edje_object_signal_emit(VIEW(it), "elm,state,icon,show", "elm");
|
||||||
else
|
else
|
||||||
edje_object_signal_emit(VIEW(it), "elm,state,icon,hide", "elm");
|
edje_object_signal_emit(VIEW(it), "elm,state,icon,hide", "elm");
|
||||||
|
|
||||||
|
if ((it->title_label) && (it->title_label[0]))
|
||||||
|
edje_object_signal_emit(VIEW(it), "elm,state,title_label,show", "elm");
|
||||||
|
else
|
||||||
|
edje_object_signal_emit(VIEW(it), "elm,state,title_label,hide", "elm");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: we need to handle the case when this function is called
|
/* FIXME: we need to handle the case when this function is called
|
||||||
|
@ -261,10 +266,18 @@ _item_text_set_hook(Elm_Object_Item *it,
|
||||||
Elm_Naviframe_Item *nit = (Elm_Naviframe_Item *)it;
|
Elm_Naviframe_Item *nit = (Elm_Naviframe_Item *)it;
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
|
|
||||||
if (!part || !strcmp(part, "default"))
|
if ((!part) || (!strcmp(part, "default")) ||
|
||||||
|
(!strcmp(part, "elm.text.title")))
|
||||||
{
|
{
|
||||||
eina_stringshare_replace(&nit->title_label, label);
|
eina_stringshare_replace(&nit->title_label, label);
|
||||||
snprintf(buf, sizeof(buf), "elm.text.title");
|
snprintf(buf, sizeof(buf), "elm.text.title");
|
||||||
|
|
||||||
|
if ((label) && (label[0]))
|
||||||
|
edje_object_signal_emit(VIEW(it), "elm,state,title_label,show",
|
||||||
|
"elm");
|
||||||
|
else
|
||||||
|
edje_object_signal_emit(VIEW(it), "elm,state,title_label,hide",
|
||||||
|
"elm");
|
||||||
}
|
}
|
||||||
else if (!strcmp("subtitle", part))
|
else if (!strcmp("subtitle", part))
|
||||||
snprintf(buf, sizeof(buf), "elm.text.subtitle");
|
snprintf(buf, sizeof(buf), "elm.text.subtitle");
|
||||||
|
@ -811,6 +824,7 @@ _on_item_size_hints_changed(void *data,
|
||||||
|
|
||||||
static Elm_Naviframe_Item *
|
static Elm_Naviframe_Item *
|
||||||
_item_new(Evas_Object *obj,
|
_item_new(Evas_Object *obj,
|
||||||
|
const Elm_Naviframe_Item *prev_it,
|
||||||
const char *title_label,
|
const char *title_label,
|
||||||
Evas_Object *prev_btn,
|
Evas_Object *prev_btn,
|
||||||
Evas_Object *next_btn,
|
Evas_Object *next_btn,
|
||||||
|
@ -856,18 +870,18 @@ _item_new(Evas_Object *obj,
|
||||||
_item_text_set_hook((Elm_Object_Item *)it, "elm.text.title", title_label);
|
_item_text_set_hook((Elm_Object_Item *)it, "elm.text.title", title_label);
|
||||||
|
|
||||||
//title buttons
|
//title buttons
|
||||||
if ((!prev_btn) && sd->auto_pushed && sd->stack)
|
if ((!prev_btn) && sd->auto_pushed && prev_it)
|
||||||
{
|
{
|
||||||
Elm_Naviframe_Item *previt = EINA_INLIST_CONTAINER_GET
|
const char *prev_title = prev_it->title_label;
|
||||||
(sd->stack->last, Elm_Naviframe_Item);
|
|
||||||
const char *prev_title = previt->title_label;
|
|
||||||
prev_btn = _back_btn_new(obj, prev_title);
|
prev_btn = _back_btn_new(obj, prev_title);
|
||||||
_item_title_prev_btn_set(it, prev_btn);
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
_item_title_prev_btn_set(it, prev_btn);
|
|
||||||
|
|
||||||
_item_title_next_btn_set(it, next_btn);
|
if (prev_btn)
|
||||||
|
_item_content_set_hook((Elm_Object_Item *)it, PREV_BTN_PART, prev_btn);
|
||||||
|
|
||||||
|
if (next_btn)
|
||||||
|
_item_content_set_hook((Elm_Object_Item *)it, NEXT_BTN_PART, next_btn);
|
||||||
|
|
||||||
_item_content_set(it, content);
|
_item_content_set(it, content);
|
||||||
it->title_visible = EINA_TRUE;
|
it->title_visible = EINA_TRUE;
|
||||||
|
|
||||||
|
@ -989,13 +1003,14 @@ elm_naviframe_item_push(Evas_Object *obj,
|
||||||
|
|
||||||
ELM_NAVIFRAME_DATA_GET(obj, sd);
|
ELM_NAVIFRAME_DATA_GET(obj, sd);
|
||||||
|
|
||||||
it = _item_new(obj, title_label, prev_btn, next_btn, content, item_style);
|
prev_it = (Elm_Naviframe_Item *)elm_naviframe_top_item_get(obj);
|
||||||
|
it = _item_new(obj, prev_it,
|
||||||
|
title_label, prev_btn, next_btn, content, item_style);
|
||||||
if (!it) return NULL;
|
if (!it) return NULL;
|
||||||
|
|
||||||
evas_object_show(VIEW(it));
|
evas_object_show(VIEW(it));
|
||||||
elm_widget_resize_object_set(obj, VIEW(it));
|
elm_widget_resize_object_set(obj, VIEW(it));
|
||||||
|
|
||||||
prev_it = (Elm_Naviframe_Item *)elm_naviframe_top_item_get(obj);
|
|
||||||
if (prev_it)
|
if (prev_it)
|
||||||
{
|
{
|
||||||
/* re-add as smart member */
|
/* re-add as smart member */
|
||||||
|
@ -1040,13 +1055,22 @@ elm_naviframe_item_insert_before(Evas_Object *obj,
|
||||||
Evas_Object *content,
|
Evas_Object *content,
|
||||||
const char *item_style)
|
const char *item_style)
|
||||||
{
|
{
|
||||||
Elm_Naviframe_Item *it;
|
Elm_Naviframe_Item *it, *prev_it;
|
||||||
|
|
||||||
ELM_NAVIFRAME_CHECK(obj) NULL;
|
ELM_NAVIFRAME_CHECK(obj) NULL;
|
||||||
ELM_NAVIFRAME_ITEM_CHECK_OR_RETURN(before, NULL);
|
ELM_NAVIFRAME_ITEM_CHECK_OR_RETURN(before, NULL);
|
||||||
ELM_NAVIFRAME_DATA_GET(obj, sd);
|
ELM_NAVIFRAME_DATA_GET(obj, sd);
|
||||||
|
|
||||||
it = _item_new(obj, title_label, prev_btn, next_btn, content, item_style);
|
prev_it = NULL;
|
||||||
|
if (before)
|
||||||
|
{
|
||||||
|
it = (Elm_Naviframe_Item *)before;
|
||||||
|
prev_it = EINA_INLIST_CONTAINER_GET(EINA_INLIST_GET(it)->prev,
|
||||||
|
Elm_Naviframe_Item);
|
||||||
|
}
|
||||||
|
|
||||||
|
it = _item_new(obj, prev_it,
|
||||||
|
title_label, prev_btn, next_btn, content, item_style);
|
||||||
if (!it) return NULL;
|
if (!it) return NULL;
|
||||||
|
|
||||||
sd->stack = eina_inlist_prepend_relative
|
sd->stack = eina_inlist_prepend_relative
|
||||||
|
@ -1073,7 +1097,8 @@ elm_naviframe_item_insert_after(Evas_Object *obj,
|
||||||
ELM_NAVIFRAME_ITEM_CHECK_OR_RETURN(after, NULL);
|
ELM_NAVIFRAME_ITEM_CHECK_OR_RETURN(after, NULL);
|
||||||
ELM_NAVIFRAME_DATA_GET(obj, sd);
|
ELM_NAVIFRAME_DATA_GET(obj, sd);
|
||||||
|
|
||||||
it = _item_new(obj, title_label, prev_btn, next_btn, content, item_style);
|
it = _item_new(obj, (Elm_Naviframe_Item *)after,
|
||||||
|
title_label, prev_btn, next_btn, content, item_style);
|
||||||
if (!it) return NULL;
|
if (!it) return NULL;
|
||||||
|
|
||||||
/* let's share that whole logic, if it goes to the top */
|
/* let's share that whole logic, if it goes to the top */
|
||||||
|
|
Loading…
Reference in New Issue