elm frame - add more styles (icon, border and overlay variants)

this shoulpd have been day 0, but now add new styles that add an
elm.swallow.icon spot for an icon in the frame and a style that looks
like a border (also with icon as borders have them) and a close button
too. overlay variants are for overlaying so might be semi-transparent
This commit is contained in:
Carsten Haitzler 2021-04-18 00:57:00 +01:00
parent 6a657acf13
commit 7c16765e1b
4 changed files with 177 additions and 5 deletions

View File

@ -11,15 +11,20 @@ group { name: "elm/frame/base/default";
}
}
WIN_SHAD("base", "shadow", "win_shad_flat.png", 10, 10, 7, 14, 0.25);
part { name: "base"; type: RECT;
part { name: "base"; type: SPACER;
scale: 1;
description { state: "default" 0.0;
rel1.offset: 6 6;
rel2.offset: -7 -7;
color: 80 80 80 255;
offscale;
}
}
part { name: "top_bg"; type: RECT;
description { state: "default" 0.0;
rel.to: "top";
color: 80 80 80 255;
}
}
part { name: "top"; type: SPACER;
scale: 1;
description { state: "default" 0.0;
@ -33,15 +38,14 @@ group { name: "elm/frame/base/default";
part { name: "elm.text"; type: TEXT;
scale: 1;
description { state: "default" 0.0;
rel.to: "base";
rel1.offset: 4 4;
rel1.to: "base";
rel2.relative: 1.0 0.0;
rel2.offset: -5 4;
rel2.to: "base";
align: 0.0 0.0;
color: 255 255 255 255;
text { font: FNBD; size: 10;
align: 0.0 0.0;
align: 0.0 0.5;
min: 0 1;
}
fixed: 0 1;
@ -133,6 +137,117 @@ group { name: "elm/frame/base/default";
}
}
group { name: "elm/frame/base/icon";
inherit: "elm/frame/base/default";
parts {
part { name: "elm.swallow.icon"; type: SWALLOW;
insert_after: "top_bg";
scale: 1;
description { state: "default" 0.0;
rel.to: "base";
rel1.to_y: "elm.text";
rel2.to_y: "elm.text";
rel1.offset: 4 0;
rel2.relative: 0.0 0.0;
rel2.offset: 4 -1;
align: 0.0 0.5;
min: 15 15;
offscale;
}
}
part { name: "elm.text";
description { state: "default" 0.0;
rel1.to_x: "elm.swallow.icon";
rel1.relative: 1.0 0.0;
min: 0 15;
}
}
}
}
group { name: "elm/frame/base/border";
inherit: "elm/frame/base/icon";
parts {
part { name: "top_bg";
description { state: "default" 0.0;
color: 32 32 32 255;
}
}
part { name: "elm.text";
description { state: "default" 0.0;
rel2.to_x: "close";
rel2.relative: 0.0 0.0;
min: 0 15;
}
}
part { name: "close";
scale: 1;
description { state: "default" 0.0;
rel.to: "base";
rel1.to_y: "elm.text";
rel2.to_y: "elm.text";
rel1.offset: -5 0;
rel1.relative: 1.0 0.0;
rel2.offset: -5 -1;
align: 1.0 0.5;
min: 15 15;
max: 15 15;
offscale;
image.normal: "i-close";
color: 255 255 255 255;
}
description { state: "clicked" 0.0;
inherit: "default" 0.0;
color: 220 220 220 255;
}
}
program { signal: "mouse,down,1"; source: "close";
action: STATE_SET "clicked" 0.0;
target: "close";
}
program { signal: "mouse,up,1"; source: "close";
action: STATE_SET "default" 0.0;
target: "close";
}
program { signal: "mouse,clicked,1"; source: "close";
action: SIGNAL_EMIT "elm,action,click,close" "elm";
}
}
}
group { name: "elm/frame/base/overlay";
inherit: "elm/frame/base/default";
parts {
part { name: "bg";
description { state: "default" 0.0;
color: 0 0 0 160;
}
}
}
}
group { name: "elm/frame/base/icon_overlay";
inherit: "elm/frame/base/icon";
parts {
part { name: "bg";
description { state: "default" 0.0;
color: 0 0 0 160;
}
}
}
}
group { name: "elm/frame/base/border_overlay";
inherit: "elm/frame/base/border";
parts {
part { name: "bg";
description { state: "default" 0.0;
color: 0 0 0 160;
}
}
}
}
group { name: "elm/frame/base/pad_small";
parts {
part { name: "b0"; type: SPACER;

View File

@ -89,6 +89,21 @@ test_scaling2(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_
evas_object_show(fr);
fr = elm_frame_add(win);
elm_object_style_set(fr, "icon");
elm_object_text_set(fr, "Scale: 0.75");
lb = elm_label_add(win);
elm_object_text_set(lb,
"Parent frame scale<br/>"
"is 0.75. Child should<br/>"
"inherit it.");
elm_object_content_set(fr, lb);
elm_object_scale_set(fr, 0.75);
evas_object_show(lb);
elm_box_pack_end(bx, fr);
evas_object_show(fr);
fr = elm_frame_add(win);
elm_object_style_set(fr, "border");
elm_object_text_set(fr, "Scale: 1.0");
lb = elm_label_add(win);
elm_object_text_set(lb,
@ -102,6 +117,21 @@ test_scaling2(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_
evas_object_show(fr);
fr = elm_frame_add(win);
elm_object_style_set(fr, "overlay");
elm_object_text_set(fr, "Scale: 1.5");
lb = elm_label_add(win);
elm_object_text_set(lb,
"Parent frame scale<br/>"
"is 1.5. Child should<br/>"
"inherit it.");
elm_object_content_set(fr, lb);
evas_object_show(lb);
elm_object_scale_set(fr, 1.5);
elm_box_pack_end(bx, fr);
evas_object_show(fr);
fr = elm_frame_add(win);
elm_object_style_set(fr, "icon_overlay");
elm_object_text_set(fr, "Scale: 2.0");
lb = elm_label_add(win);
elm_object_text_set(lb,
@ -114,6 +144,20 @@ test_scaling2(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_
elm_box_pack_end(bx, fr);
evas_object_show(fr);
fr = elm_frame_add(win);
elm_object_style_set(fr, "border_overlay");
elm_object_text_set(fr, "Scale: 3.0");
lb = elm_label_add(win);
elm_object_text_set(lb,
"Parent frame scale<br/>"
"is 3.0. Child should<br/>"
"inherit it.");
elm_object_content_set(fr, lb);
evas_object_show(lb);
elm_object_scale_set(fr, 3.0);
elm_box_pack_end(bx, fr);
evas_object_show(fr);
evas_object_resize(win, 320, 320);
evas_object_show(win);
}

View File

@ -94,6 +94,15 @@ _on_frame_clicked(void *data,
evas_object_smart_callback_call(data, "clicked", NULL);
}
static void
_on_frame_close(void *data,
Evas_Object *obj EINA_UNUSED,
const char *sig EINA_UNUSED,
const char *src EINA_UNUSED)
{
evas_object_smart_callback_call(data, "close", NULL);
}
/* using deferred sizing evaluation, just like the parent */
EOLIAN static void
_efl_ui_frame_efl_canvas_group_group_calculate(Eo *obj, Efl_Ui_Frame_Data *sd)
@ -139,6 +148,9 @@ _efl_ui_frame_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Frame_Data *_pd EINA_UN
edje_object_signal_callback_add
(wd->resize_obj, "elm,action,click", "elm",
_on_frame_clicked, obj);
edje_object_signal_callback_add
(wd->resize_obj, "elm,action,close", "elm",
_on_frame_close, obj);
}
else
{

View File

@ -29,6 +29,7 @@
* @ref Elm_Layout :
* - @c "clicked" - The user has clicked the frame's label
* - @c "language,changed" - the program's language changed (since 1.9)
* - @c "close" - The user has clicked the close button if there is one
*
* Default content parts of the frame widget that you can use for are:
* @li "default" - A content of the frame