From a07877bd57f07b6ea11f58a2f5ae37716d5579c4 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Fri, 16 Dec 2016 18:59:05 +0900 Subject: [PATCH] elm: Add a test case for evas masking This tests masks of masks in a genlist, with maybe a map. Nothing crazy. --- data/Makefile.am | 6 + data/elementary/images/Makefile.am | 1 + data/elementary/images/pm_fill.png | Bin 0 -> 254 bytes data/elementary/objects/Makefile.am | 4 +- data/elementary/objects/roundedrect.png | Bin 0 -> 528 bytes data/elementary/objects/test_masking.edc | 70 +++++++++ src/Makefile_Elementary.am | 1 + src/bin/elementary/test.c | 6 +- src/bin/elementary/test_evas_mask.c | 175 +++++++++++++++++++++++ 9 files changed, 261 insertions(+), 2 deletions(-) create mode 100644 data/elementary/images/pm_fill.png create mode 100644 data/elementary/objects/roundedrect.png create mode 100644 data/elementary/objects/test_masking.edc create mode 100644 src/bin/elementary/test_evas_mask.c diff --git a/data/Makefile.am b/data/Makefile.am index ce131378fc..db5822f260 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -210,6 +210,7 @@ elementaryobjectsdir = $(datadir)/elementary/objects elementaryobjects_DATA = \ elementary/objects/test.edj \ elementary/objects/test_external.edj \ +elementary/objects/test_masking.edj \ elementary/objects/multip.edj \ elementary/objects/cursors.edj \ elementary/objects/font_preview.edj \ @@ -232,6 +233,11 @@ elementary/objects/test_external.edj: elementary/objects/test_external.edc $(MKDIR_P) elementary/objects/; \ $(EDJE_CC) $(EDJE_CC_FLAGS) $< $@ +elementary/objects/test_masking.edj: elementary/objects/test_masking.edc + $(AM_V_EDJ) \ + $(MKDIR_P) elementary/objects/; \ + $(EDJE_CC) $(EDJE_CC_FLAGS) $< $@ + elementary/objects/multip.edj: elementary/objects/multip.edc $(AM_V_EDJ) \ $(MKDIR_P) elementary/objects/; \ diff --git a/data/elementary/images/Makefile.am b/data/elementary/images/Makefile.am index 9909d82abe..83701fd52e 100644 --- a/data/elementary/images/Makefile.am +++ b/data/elementary/images/Makefile.am @@ -46,6 +46,7 @@ elementary_images_files = \ elementary/images/mystrale.jpg \ elementary/images/mystrale_2.jpg \ elementary/images/twofish.jpg \ + elementary/images/pm_fill.png \ elementary/images/pt.png \ elementary/images/earth_normal.png \ elementary/images/space.png diff --git a/data/elementary/images/pm_fill.png b/data/elementary/images/pm_fill.png new file mode 100644 index 0000000000000000000000000000000000000000..8ef098f1079934e4613aa1be1eb2bd3bbb5c2f0b GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$#^NA%Cx&(BWL^R}J3L(+Lo)8Y zy}FU}r~!}bMRiw!M~p!!|8H(;as9$=9_RSy_RQB_A0FJ0IDA*N_WpMpe;1EaXTH}) zf9c>bp8Vw9%$YMMsce0jw$1KZ;p^DY*k6V7p05gh`YtUjwD_E5dbiy7+U>Xh-dp_i y-F7+I^8Mc*?^;*3`~L2S415pBMhD_8J}_stxKF(LDsCFk4-B5JelF{r5}E)<$Z4zq literal 0 HcmV?d00001 diff --git a/data/elementary/objects/Makefile.am b/data/elementary/objects/Makefile.am index 186bc65439..e5de55cc66 100644 --- a/data/elementary/objects/Makefile.am +++ b/data/elementary/objects/Makefile.am @@ -3,6 +3,7 @@ EDJE_CC_FLAGS += -id $(top_srcdir)/data/elementary/objects -fd $(top_srcdir)/dat EXTRA_DIST += \ elementary/objects/test.edc \ elementary/objects/test_external.edc \ +elementary/objects/test_masking.edc \ elementary/objects/test_prefs.edc \ elementary/objects/test_prefs.epc \ elementary/objects/multip.edc \ @@ -21,4 +22,5 @@ elementary/objects/border2.png \ elementary/objects/border3.png \ elementary/objects/border4.png \ elementary/objects/border5.png \ -elementary/objects/border6.png +elementary/objects/border6.png \ +elementary/objects/roundedrect.png diff --git a/data/elementary/objects/roundedrect.png b/data/elementary/objects/roundedrect.png new file mode 100644 index 0000000000000000000000000000000000000000..21b5aba2a8c9836c6bfa5a48e562155588e71f68 GIT binary patch literal 528 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkEUnfx)>bHL)Z$ zMWH;iBtya7(>EYRFO{8vfw9EX#WAGf*4x<|^O_w5T+)Ms)QTjto;(p2(EXow{h9Zh zL%OHbCuo$$xOu)T3wq*ZFh@9gU+S`Fe9!LQ+33No;5o@8`Q}b$&wI=oj8_=67|w^+ zedBZBPT+rV^vu5XMd6dYCq>_zw@qdGbdz}#?|k^SRdMFu*J27kIUdM5OgnMSj!EOp zn-A#>2miP)N{_K)J9sRK|AFzssqeiH9XiwJEPkigXM^7jn?sw|pZ9XG2#lY*=iU4> zZ*t5L@?iW@L`+ zgE%Gy2ExdooMEo>`dFTZYl;nKYzOWsHpKa7O?V=wdP zvlD(!=H$?vQNB7yB0^=)ucMluCu<$NkUN)smgd?TyQQ&pL7FmZQ7T1hCW_zMyU)CP iJ6-axi7GI-(*H7~CE4kCMsJb=MU1DbpUXO@geCyUmBIc1 literal 0 HcmV?d00001 diff --git a/data/elementary/objects/test_masking.edc b/data/elementary/objects/test_masking.edc new file mode 100644 index 0000000000..4a1beabb76 --- /dev/null +++ b/data/elementary/objects/test_masking.edc @@ -0,0 +1,70 @@ +collections { + images { + image: "roundedrect.png" COMP; + } + filters { + filter { name: "aura"; + script { + padding_set { 5 } + fill { color = '#2228' } + blur { 5, color = 'red' } + blur { 2, color = 'orange' } + blend {} + } + } + } + group { "masking"; + parts { + rect { "clip"; norender; } + image { "mask"; + norender; + desc { "default"; + image { + normal: "roundedrect.png"; + border: 22 22 22 22; + } + } + } + swallow { "content"; + desc { "default"; + clip_to: "mask"; + } + desc { "unclipped"; + clip_to: "clip"; + } + } + } + programs { + program { + signal: "unclip"; + source: "*"; + action: STATE_SET "unclipped"; + target: "content"; + } + program { + signal: "clip"; + source: "*"; + action: STATE_SET "default"; + target: "content"; + } + } + } + group { "text"; + parts { + text { "text"; + desc { "default"; + text { + font: "Sans"; + size: 32; + text: "HELLO"; + ellipsis: -1; + } + fixed: 1 1; + filter.code: "aura"; + rel1.offset: -5 -5; + rel2.offset: 4 4; + } + } + } + } +} diff --git a/src/Makefile_Elementary.am b/src/Makefile_Elementary.am index a50cc8be57..6e4122b443 100644 --- a/src/Makefile_Elementary.am +++ b/src/Makefile_Elementary.am @@ -758,6 +758,7 @@ bin/elementary/test_entry.c \ bin/elementary/test_entry_anchor.c \ bin/elementary/test_entry_anchor2.c \ bin/elementary/test_events.c \ +bin/elementary/test_evas_mask.c \ bin/elementary/test_external.c \ bin/elementary/test_fileselector_button.c \ bin/elementary/test_fileselector.c \ diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c index 2f53a1059d..d94d070e66 100644 --- a/src/bin/elementary/test.c +++ b/src/bin/elementary/test.c @@ -299,6 +299,7 @@ void test_code_diff_inline(void *data, Evas_Object *obj, void *event_info); void test_efl_ui_text(void *data, Evas_Object *obj, void *event_info); void test_efl_ui_text_label(void *data, Evas_Object *obj, void *event_info); +void test_evas_mask(void *data, Edje_Object *obj, void *event_info); void test_gfx_filters(void *data, Evas_Object *obj, void *event_info); Evas_Object *win, *tbx; // TODO: refactoring @@ -998,7 +999,10 @@ add_tests: ADD_TEST(NULL, "Miscellaneous", "Accessibility2", test_access2); ADD_TEST(NULL, "Miscellaneous", "Accessibility3", test_access3); ADD_TEST(NULL, "Miscellaneous", "Font overlay", test_config_font_overlay); - ADD_TEST(NULL, "Miscellaneous", "Gfx Filters", test_gfx_filters); + + //------------------------------// + ADD_TEST(NULL, "Evas", "Masking", test_evas_mask); + ADD_TEST(NULL, "Evas", "Gfx Filters", test_gfx_filters); //------------------------------// ADD_TEST(NULL, "Widgets Disable/Enable", "Box", test_box_disable); diff --git a/src/bin/elementary/test_evas_mask.c b/src/bin/elementary/test_evas_mask.c new file mode 100644 index 0000000000..575fe050ec --- /dev/null +++ b/src/bin/elementary/test_evas_mask.c @@ -0,0 +1,175 @@ +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif +#include + + +static Evas_Object * +_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + const int size = ELM_SCALE_SIZE(48); + + Evas_Object *content, *ly; + int num = (int)(uintptr_t)data; + char buf[PATH_MAX], bufimg[PATH_MAX], buftxt[256]; + + snprintf(buf, sizeof(buf), "%s/objects/test_masking.edj", elm_app_data_dir_get()); + + ly = elm_layout_add(obj); + elm_layout_file_set(ly, buf, "masking"); + if (!strcmp(part, "elm.swallow.icon")) + { + content = elm_icon_add(ly); + //elm_image_async_open_set(icon, 1); + snprintf(bufimg, sizeof(bufimg), "%s/images/%s", + elm_app_data_dir_get(), (num&1) ? "sky_01.jpg" : "rock_01.jpg"); + elm_image_file_set(content, bufimg, NULL); + evas_object_size_hint_min_set(content, size, size); + evas_object_size_hint_max_set(content, size, size); + } + else // if (!strcmp(part, "elm.swallow.end")) + { + content = elm_layout_add(obj); + elm_layout_file_set(content, buf, "text"); + sprintf(buftxt, "# %d #", num); + elm_layout_text_set(content, "text", buftxt); + } + elm_object_part_content_set(ly, "content", content); + + return ly; +} + +static char * +_gl_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED) +{ + char buf[64]; + sprintf(buf, "Genlist item %u", (unsigned)(uintptr_t)data); + return strdup(buf); +} + +static Eina_Bool +_gl_state_get(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED) +{ + return EINA_FALSE; +} + +static void +_gl_del(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED) +{ + +} + +static void +_toggle_mask(void *data, const Efl_Event *ev EINA_UNUSED) +{ + Eo *ly = data; + + if (!efl_key_data_get(ly, "unclipped")) + { + elm_layout_signal_emit(ly, "unclip", "elm_test"); + efl_key_data_set(ly, "unclipped", "yup"); + } + else + { + elm_layout_signal_emit(ly, "clip", "elm_test"); + efl_key_data_set(ly, "unclipped", NULL); + } +} + +static void +_toggle_map(void *data, const Efl_Event *ev EINA_UNUSED) +{ + Eo *ly = data; + + if (!efl_gfx_map_enable_get(ly)) + { + int x, y, w, h; + efl_gfx_geometry_get(ly, &x, &y, &w, &h); + efl_gfx_map_populate(ly, 0.0); + efl_gfx_map_zoom(ly, 0.8, 0.8, x + w / 2, y + h / 2); + efl_gfx_map_enable_set(ly, 1); + } + else + { + efl_gfx_map_enable_set(ly, 0); + } +} + +void +test_evas_mask(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Eo *win, *box, *o, *gl, *ly, *box2; + Elm_Genlist_Item_Class *itc; + char buf[PATH_MAX]; + + win = efl_add(EFL_UI_WIN_STANDARD_CLASS, NULL, + efl_text_set(efl_added, "Evas masking demo"), + efl_ui_win_autodel_set(efl_added, 1)); + + box = efl_add(EFL_UI_BOX_CLASS, win, + efl_orientation_set(efl_added, EFL_ORIENT_DOWN), + efl_gfx_size_hint_weight_set(efl_added, 1.0, 1.0)); + efl_content_set(win, box); + + // FIXME: No API to set background as "tile" :( + snprintf(buf, sizeof(buf), "%s/images/pm_fill.png", elm_app_data_dir_get()); + efl_file_set(efl_part(win, "background"), buf, NULL); + + // FIXME: layout EO API + snprintf(buf, sizeof(buf), "%s/objects/test_masking.edj", elm_app_data_dir_get()); + ly = efl_add(ELM_LAYOUT_CLASS, win, + efl_file_set(efl_added, buf, "masking"), + efl_gfx_size_hint_weight_set(efl_added, 1.0, 1.0), + efl_gfx_size_hint_align_set(efl_added, -1.0, -1.0), + efl_gfx_visible_set(efl_added, 1)); + efl_pack(box, ly); + + // FIXME: No genlist in EO API + o = gl = elm_genlist_add(win); + elm_genlist_homogeneous_set(gl, 1); + efl_gfx_size_hint_align_set(o, -1, -1); + efl_gfx_size_hint_weight_set(o, 1, 1); + + itc = elm_genlist_item_class_new(); + itc->item_style = "default"; + itc->func.content_get = _gl_content_get; + itc->func.text_get = _gl_text_get; + itc->func.state_get = _gl_state_get; + itc->func.del = _gl_del; + + for (int i = 0; i < 64; i++) + { + elm_genlist_item_append(gl, itc, + (void *)(uintptr_t)i, + NULL, // parent + ELM_GENLIST_ITEM_NONE, + NULL, // func + NULL); // data + } + + elm_genlist_item_class_free(itc); + efl_content_set(efl_part(ly, "content"), gl); + + box2 = efl_add(EFL_UI_BOX_CLASS, win, + efl_orientation_set(efl_added, EFL_ORIENT_RIGHT), + efl_gfx_size_hint_weight_set(efl_added, 1.0, 0.0), + efl_gfx_size_hint_align_set(efl_added, -1.0, -1.0), + efl_pack(box, efl_added), + efl_gfx_visible_set(efl_added, 1)); + + // FIXME: button EO API + efl_add(ELM_BUTTON_CLASS, win, + efl_text_set(efl_added, "Toggle mask"), + efl_event_callback_add(efl_added, EFL_UI_EVENT_CLICKED, _toggle_mask, ly), + efl_pack(box2, efl_added), + efl_gfx_visible_set(efl_added, 1)); + + efl_add(ELM_BUTTON_CLASS, win, + efl_text_set(efl_added, "Toggle map"), + efl_event_callback_add(efl_added, EFL_UI_EVENT_CLICKED, _toggle_map, ly), + efl_pack(box2, efl_added), + efl_gfx_visible_set(efl_added, 1)); + + efl_gfx_size_set(win, 500, 600); + efl_gfx_visible_set(win, 1); +}