diff --git a/src/Makefile_Edje.am b/src/Makefile_Edje.am index 8f2ae778ad..47ae3739c2 100644 --- a/src/Makefile_Edje.am +++ b/src/Makefile_Edje.am @@ -282,6 +282,7 @@ tests/edje/data/test_box.edc \ tests/edje/data/test_table.edc \ tests/edje/data/test_combine_keywords.edc \ tests/edje/data/test_messages.edc \ +tests/edje/data/test_signals.edc \ tests/edje/data/filter.lua @@ -323,6 +324,7 @@ EDJE_TEST_FILES = tests/edje/data/test_layout.edj \ tests/edje/data/test_table.edj \ tests/edje/data/test_combine_keywords.edj \ tests/edje/data/test_messages.edj \ + tests/edje/data/test_signals.edj \ $(NULL) CLEANFILES += $(EDJE_TEST_FILES) diff --git a/src/tests/edje/data/test_messages.edc b/src/tests/edje/data/test_messages.edc index bd207cd81f..fe5195640b 100644 --- a/src/tests/edje/data/test_messages.edc +++ b/src/tests/edje/data/test_messages.edc @@ -65,3 +65,5 @@ collections { } } } +} + diff --git a/src/tests/edje/data/test_signals.edc b/src/tests/edje/data/test_signals.edc new file mode 100644 index 0000000000..185b9d4443 --- /dev/null +++ b/src/tests/edje/data/test_signals.edc @@ -0,0 +1,124 @@ +// compile: edje_cc edje_signal_test.edc +collections { + group { + name: "level1"; + + parts { + part { + name: "group"; + type: GROUP; + source: "level2"; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + relative: 1.0 1.0; + offset: -1 -1; + } + } + } + } + } + group { + name: "level2"; + + parts { + part { + name: "group"; + type: GROUP; + source: "level3"; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + relative: 1.0 1.0; + offset: -1 -1; + } + } + } + } + } + group { + name: "level3"; // must be the same as in edje_example.c + + parts { + part { + name: "background"; + type: RECT; // plain boring rectangle + mouse_events: 0; // we don't need any mouse event on the background + + // just one state "default" + description { + state: "default" 0.0; // must always exist + color: 255 255 255 255; // white + + // define part coordinates: + + rel1 { // top-left point at (0, 0) [WIDTH * 0 + 0, HEIGHT * 0 + 0] + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { // bottom-right point at (WIDTH * 1.0 - 1, HEIGHT * 1.0 - 1) + relative: 1.0 1.0; + offset: -1 -1; + } + } + } + + part { + name: "text"; + type: TEXT; + mouse_events: 1; // we want to change the color on mouse-over + + // 2 states, one "default" and another "over" to be used + // on mouse over effect + + description { + state: "default" 0.0; + color: 255 0 0 255; // red + + // define part coordinates: + + rel1 { // top-left at (WIDTH * 0.1 + 5, HEIGHT * 0.2 + 10) + relative: 0.1 0.2; + offset: 5 10; + } + rel2 { // bottom-right at (WIDTH * 0.9 - 6, HEIGHT * 0.8 - 11) + relative: 0.9 0.8; + offset: -6 -11; + } + + // define text specific state details + text { + font: "Sans"; // using fontconfig name! + size: 10; + text: "hello world"; + } + } + + description { + state: "over" 0.0; + inherit: "default" 0.0; // copy everything from "default" at this point + + color: 0 255 0 255; // override color, now it is green + } + } + + programs { + program { + signal: "mouse,in"; + source: "text"; + + action: STATE_SET "over" 0.0; + target: "text"; + } + } + } + } +} diff --git a/src/tests/edje/edje_test_edje.c b/src/tests/edje/edje_test_edje.c index 9d31544fd6..af88fa8d84 100644 --- a/src/tests/edje/edje_test_edje.c +++ b/src/tests/edje/edje_test_edje.c @@ -867,6 +867,39 @@ START_TEST(edje_test_message_send_eo) } END_TEST +START_TEST(edje_test_signals) +{ + Evas *evas; + Evas_Object *obj; + const char *state; + + evas = EDJE_TEST_INIT_EVAS(); + + obj = efl_add(EDJE_OBJECT_CLASS, evas, + efl_file_set(efl_added, test_layout_get("test_signals.edj"), "level1"), + efl_gfx_size_set(efl_added, 320, 240), + efl_gfx_visible_set(efl_added, 1)); + + edje_object_signal_emit(obj, "mouse,in", "text"); + + edje_object_message_signal_process(obj); + state = edje_object_part_state_get(obj, "group:group:text", NULL); + ck_assert_str_eq(state, "default"); + + edje_object_message_signal_process(obj); + state = edje_object_part_state_get(obj, "group:group:text", NULL); + ck_assert_str_eq(state, "default"); + + edje_object_message_signal_recursive_process(obj); + state = edje_object_part_state_get(obj, "group:group:text", NULL); + ck_assert_str_eq(state, "over"); + + efl_del(obj); + + EDJE_TEST_FREE_EVAS(); +} +END_TEST + void edje_test_edje(TCase *tc) { tcase_add_test(tc, edje_test_edje_init); @@ -890,4 +923,5 @@ void edje_test_edje(TCase *tc) tcase_add_test(tc, edje_test_combine_keywords); tcase_add_test(tc, edje_test_message_send_legacy); tcase_add_test(tc, edje_test_message_send_eo); + tcase_add_test(tc, edje_test_signals); }