raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=7c16765e1be277ec47698f2b12a6856ea8d2a700

commit 7c16765e1be277ec47698f2b12a6856ea8d2a700
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Sun Apr 18 00:57:00 2021 +0100

    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<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);
 }
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

-- 


Reply via email to