jpeg pushed a commit to branch master.

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

commit d29f01e5ee53dac79f2685996a9958ef88e38b98
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Thu Dec 14 18:03:21 2017 +0900

    tests: Add an example test case for shadows
    
    This is fun.
---
 src/Makefile_Elementary.am            |   1 +
 src/bin/elementary/test.c             |   4 +-
 src/bin/elementary/test_part_shadow.c | 194 ++++++++++++++++++++++++++++++++++
 3 files changed, 198 insertions(+), 1 deletion(-)

diff --git a/src/Makefile_Elementary.am b/src/Makefile_Elementary.am
index 7f3d733ebd..d674d299c0 100644
--- a/src/Makefile_Elementary.am
+++ b/src/Makefile_Elementary.am
@@ -905,6 +905,7 @@ bin/elementary/test_panel.c \
 bin/elementary/test_panes.c \
 bin/elementary/test_ui_panes.c \
 bin/elementary/test_part_bg.c \
+bin/elementary/test_part_shadow.c \
 bin/elementary/test_photo.c \
 bin/elementary/test_photocam.c \
 bin/elementary/test_popup.c \
diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c
index 8a592ab7d2..114cd7927a 100644
--- a/src/bin/elementary/test.c
+++ b/src/bin/elementary/test.c
@@ -314,6 +314,7 @@ void test_win_modal(void *data, Evas_Object *obj, void 
*event_info);
 void test_box_disable(void *data, Evas_Object *obj, void *event_info);
 void test_layout_disable(void *data, Evas_Object *obj, void *event_info);
 void test_part_background(void *data, Evas_Object *obj, void *event_info);
+void test_part_shadow(void *data, Evas_Object *obj, void *event_info);
 
 void test_colorclass(void *data, Evas_Object *obj, void *event_info);
 
@@ -1148,7 +1149,7 @@ add_tests:
    ADD_TEST(NULL, "Evas", "Gfx Filters", test_gfx_filters);
    ADD_TEST(NULL, "Evas", "Snapshot", test_evas_snapshot);
    ADD_TEST(NULL, "Evas", "Map", test_evas_map);
-   ADD_TEST_EO(NULL, "Evas", "Gfx Map", test_efl_gfx_map);
+   ADD_TEST_EO(NULL, "Evas", "Efl.Gfx.Map", test_efl_gfx_map);
 
    //------------------------------//
    ADD_TEST(NULL, "Widgets Disable/Enable", "Box", test_box_disable);
@@ -1156,6 +1157,7 @@ add_tests:
 
    //------------------------------//
    ADD_TEST_EO(NULL, "Widgets Part", "Part Background", test_part_background);
+   ADD_TEST_EO(NULL, "Widgets Part", "Part Shadow", test_part_shadow);
 #undef ADD_TEST
 
    if (autorun)
diff --git a/src/bin/elementary/test_part_shadow.c 
b/src/bin/elementary/test_part_shadow.c
new file mode 100644
index 0000000000..a1eee81a4d
--- /dev/null
+++ b/src/bin/elementary/test_part_shadow.c
@@ -0,0 +1,194 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#define ELM_WIDGET_PROTECTED
+#include <Elementary.h>
+
+typedef struct Test_Data
+{
+   Evas_Object *pb1;
+   Evas_Object *pb2;
+   Evas_Object *pb3;
+   Evas_Object *pb4;
+   Evas_Object *pb5;
+   Evas_Object *ico;
+   Evas_Object *btn_start;
+   Evas_Object *btn_stop;
+   int loop;
+} Test_Data;
+
+static void
+animate(void *data, const Efl_Event *ev EINA_UNUSED)
+{
+   Test_Data *td = data;
+   int loop = td->loop++;
+   double radius;
+
+   loop = (loop % 120) < 60 ? (loop % 60) : (60 - (loop % 60));
+   radius = 3.0 + (loop * 32.0 / 60.0);
+   radius *= elm_config_scale_get() / elm_app_base_scale_get();
+   efl_gfx_blur_radius_set(efl_part(td->ico, "shadow"), radius, radius);
+}
+
+static void
+pulse_start(void *data, const Efl_Event *ev EINA_UNUSED)
+{
+   Test_Data *td = data;
+
+   efl_ui_progressbar_pulse_set(td->pb1, EINA_TRUE);
+   efl_ui_progressbar_pulse_set(td->pb2, EINA_TRUE);
+   efl_ui_progressbar_pulse_set(td->pb3, EINA_TRUE);
+   efl_ui_progressbar_pulse_set(td->pb4, EINA_TRUE);
+   efl_ui_progressbar_pulse_set(td->pb5, EINA_TRUE);
+
+   efl_ui_widget_disabled_set(td->btn_start, EINA_TRUE);
+   efl_ui_widget_disabled_set(td->btn_stop, EINA_FALSE);
+
+   efl_event_callback_add(td->ico, EFL_EVENT_ANIMATOR_TICK, animate, td);
+}
+
+static void
+pulse_stop(void *data, const Efl_Event *ev EINA_UNUSED)
+{
+   Test_Data *td = data;
+
+   efl_ui_progressbar_pulse_set(td->pb1, EINA_FALSE);
+   efl_ui_progressbar_pulse_set(td->pb2, EINA_FALSE);
+   efl_ui_progressbar_pulse_set(td->pb3, EINA_FALSE);
+   efl_ui_progressbar_pulse_set(td->pb4, EINA_FALSE);
+   efl_ui_progressbar_pulse_set(td->pb5, EINA_FALSE);
+
+   efl_ui_widget_disabled_set(td->btn_start, EINA_FALSE);
+   efl_ui_widget_disabled_set(td->btn_stop, EINA_TRUE);
+
+   efl_event_callback_del(td->ico, EFL_EVENT_ANIMATOR_TICK, animate, td);
+}
+
+static void
+_delete_cb(void *data, const Efl_Event *ev)
+{
+   Test_Data *td = data;
+
+   pulse_stop(td, NULL);
+   efl_del(ev->object);
+   free(td);
+}
+
+void
+test_part_shadow(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
+{
+   Evas_Object *win, *pb, *bx, *hbx, *bt, *bt_bx, *ic, *shadow;
+   char buf[PATH_MAX];
+   Test_Data *td;
+   char loops[32];
+
+   td = calloc(1, sizeof(*td));
+
+   win = efl_add(EFL_UI_WIN_CLASS, NULL,
+                 efl_ui_win_name_set(efl_added, "shadow"),
+                 efl_text_set(efl_added, "Shadow effects"));
+   efl_event_callback_add(win, EFL_UI_WIN_EVENT_DELETE_REQUEST, _delete_cb, 
td);
+
+   bx = efl_add(EFL_UI_BOX_CLASS, win);
+   efl_content_set(win, bx);
+
+   pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win);
+   efl_gfx_size_hint_weight_set(pb, EFL_GFX_SIZE_HINT_EXPAND, 0);
+   efl_ui_progressbar_pulse_mode_set(pb, EINA_TRUE);
+   efl_pack(bx, pb);
+   td->pb1 = pb;
+
+   // A black drop-down shadow
+   shadow = efl_ref(efl_part(pb, "shadow"));
+   efl_gfx_color_set(shadow, 0, 0, 0, 255);
+   efl_gfx_blur_grow_set(shadow, ELM_SCALE_SIZE(1));
+   efl_gfx_blur_radius_set(shadow, ELM_SCALE_SIZE(8), ELM_SCALE_SIZE(8));
+   efl_gfx_blur_offset_set(shadow, ELM_SCALE_SIZE(5), ELM_SCALE_SIZE(5));
+   efl_unref(shadow);
+
+   ic = efl_add(EFL_UI_IMAGE_CLASS, win);
+   snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get());
+   efl_file_set(ic, buf, NULL);
+   efl_pack(bx, ic);
+   td->ico = ic;
+
+   // A red glow
+   shadow = efl_ref(efl_part(ic, "shadow"));
+   efl_gfx_color_set(shadow, 255, 0, 0, 255);
+   efl_gfx_blur_grow_set(shadow, ELM_SCALE_SIZE(3));
+   efl_gfx_blur_radius_set(shadow, ELM_SCALE_SIZE(5), ELM_SCALE_SIZE(5));
+   efl_unref(shadow);
+
+   pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win);
+   efl_ui_progressbar_pulse_mode_set(pb, EINA_TRUE);
+   efl_gfx_size_hint_weight_set(pb, EFL_GFX_SIZE_HINT_EXPAND, 0);
+   efl_pack(bx, pb);
+   td->pb4 = pb;
+
+   // A custom 3D shadow effect
+   static const char *filter_code =
+         "for i = 1,loops,1 do\n"
+         "  local offset = i - loops - 1\n"
+         "  local alpha = i * 128/loops\n"
+         "  blend { ox = offset, oy = offset, color = color(255, 255, 255, 
alpha) }\n"
+         "end"
+         ;
+
+   sprintf(loops, "%f", (double) ELM_SCALE_SIZE(12));
+   shadow = efl_ref(efl_part(pb, "shadow"));
+   efl_gfx_filter_data_set(shadow, "loops", loops, EINA_TRUE);
+   efl_gfx_filter_program_set(shadow, filter_code, "custom");
+   efl_unref(shadow);
+
+   hbx = efl_add(EFL_UI_BOX_CLASS, win);
+   efl_ui_direction_set(hbx, EFL_UI_DIR_HORIZONTAL);
+   efl_gfx_size_hint_weight_set(hbx, EFL_GFX_SIZE_HINT_EXPAND, 0);
+   efl_pack(bx, hbx);
+
+   // FIXME: Needs wheel progressbar class
+   pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win,
+                efl_ui_widget_style_set(efl_added, "wheel"));
+   efl_ui_progressbar_pulse_mode_set(pb, EINA_TRUE);
+   efl_pack(hbx, pb);
+   td->pb2 = pb;
+
+   // A cyan glow
+   shadow = efl_ref(efl_part(pb, "shadow"));
+   efl_gfx_color_set(shadow, 0, 255, 255, 255);
+   efl_gfx_blur_grow_set(shadow, ELM_SCALE_SIZE(5));
+   efl_gfx_blur_radius_set(shadow, ELM_SCALE_SIZE(8), ELM_SCALE_SIZE(8));
+   efl_unref(shadow);
+
+   pb = efl_add(EFL_UI_PROGRESSBAR_CLASS, win,
+                efl_ui_widget_style_set(efl_added, "wheel"));
+   efl_ui_progressbar_pulse_mode_set(pb, EINA_TRUE);
+   efl_pack(hbx, pb);
+   td->pb3 = pb;
+
+   // A black drop-down shadow
+   shadow = efl_ref(efl_part(pb, "shadow"));
+   efl_gfx_color_set(shadow, 0, 0, 0, 255);
+   efl_gfx_blur_grow_set(shadow, ELM_SCALE_SIZE(1));
+   efl_gfx_blur_radius_set(shadow, ELM_SCALE_SIZE(8), ELM_SCALE_SIZE(8));
+   efl_gfx_blur_offset_set(shadow, ELM_SCALE_SIZE(6), ELM_SCALE_SIZE(6));
+   efl_unref(shadow);
+
+   bt_bx = efl_add(EFL_UI_BOX_CLASS, win);
+   efl_ui_direction_set(bt_bx, EFL_UI_DIR_HORIZONTAL);
+   efl_gfx_size_hint_weight_set(bt_bx, EFL_GFX_SIZE_HINT_EXPAND, 0);
+   efl_pack(bx, bt_bx);
+
+   bt = efl_add(EFL_UI_BUTTON_CLASS, win, efl_text_set(efl_added, "Start"));
+   efl_event_callback_add(bt, EFL_UI_EVENT_CLICKED, pulse_start, td);
+   efl_pack(bt_bx, bt);
+   td->btn_start = bt;
+
+   bt = efl_add(EFL_UI_BUTTON_CLASS, win, efl_text_set(efl_added, "Stop"));
+   efl_event_callback_add(bt, EFL_UI_EVENT_CLICKED, pulse_stop, td);
+   efl_ui_widget_disabled_set(bt, EINA_TRUE);
+   efl_pack(bt_bx, bt);
+   td->btn_stop = bt;
+
+   efl_gfx_size_set(win, EINA_SIZE2D(240, 320));
+}

-- 


Reply via email to