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