From 7c16765e1be277ec47698f2b12a6856ea8d2a700 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Sun, 18 Apr 2021 00:57:00 +0100 Subject: [PATCH] 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 --- data/elementary/themes/edc/elm/frame.edc | 125 ++++++++++++++++++++++- src/bin/elementary/test_scaling.c | 44 ++++++++ src/lib/elementary/efl_ui_frame.c | 12 +++ src/lib/elementary/elm_frame.h | 1 + 4 files changed, 177 insertions(+), 5 deletions(-) diff --git a/data/elementary/themes/edc/elm/frame.edc b/data/elementary/themes/edc/elm/frame.edc index 3000d906b2..fe7bb800e7 100644 --- a/data/elementary/themes/edc/elm/frame.edc +++ b/data/elementary/themes/edc/elm/frame.edc @@ -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; diff --git a/src/bin/elementary/test_scaling.c b/src/bin/elementary/test_scaling.c index 84b20c6130..d616fe12fb 100644 --- a/src/bin/elementary/test_scaling.c +++ b/src/bin/elementary/test_scaling.c @@ -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
" + "is 0.75. Child should
" + "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
" + "is 1.5. Child should
" + "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
" + "is 3.0. Child should
" + "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); } diff --git a/src/lib/elementary/efl_ui_frame.c b/src/lib/elementary/efl_ui_frame.c index 0e6f230d5b..c7ac5c2232 100644 --- a/src/lib/elementary/efl_ui_frame.c +++ b/src/lib/elementary/efl_ui_frame.c @@ -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 { diff --git a/src/lib/elementary/elm_frame.h b/src/lib/elementary/elm_frame.h index a5c3c921c0..f57ae667ba 100644 --- a/src/lib/elementary/elm_frame.h +++ b/src/lib/elementary/elm_frame.h @@ -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