jpeg pushed a commit to branch master.

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

commit ba3afc74a8b03b96c3ea43855b09362d32b47cd2
Author: smohanty <[email protected]>
Date:   Thu Sep 21 10:11:53 2017 +0900

    elementary_test: Added gesture_framework test to the elementary test suit.
---
 src/Makefile_Elementary.am                  |   1 +
 src/bin/elementary/Makefile.am              |   1 +
 src/bin/elementary/test.c                   |   4 +
 src/bin/elementary/test_gesture_framework.c | 419 ++++++++++++++++++++++++++++
 4 files changed, 425 insertions(+)

diff --git a/src/Makefile_Elementary.am b/src/Makefile_Elementary.am
index 4020195635..e7e5f97ddd 100644
--- a/src/Makefile_Elementary.am
+++ b/src/Makefile_Elementary.am
@@ -911,6 +911,7 @@ bin/elementary/test_win_dialog.c \
 bin/elementary/test_win_modal.c \
 bin/elementary/test_efl_ui_text.c \
 bin/elementary/test_win_stack.c \
+bin/elementary/test_gesture_framework.c \
 bin/elementary/test.h
 
 bin_elementary_elementary_test_LDADD = @USE_ELEMENTARY_LIBS@
diff --git a/src/bin/elementary/Makefile.am b/src/bin/elementary/Makefile.am
index 63a0bf86b0..df71027a38 100644
--- a/src/bin/elementary/Makefile.am
+++ b/src/bin/elementary/Makefile.am
@@ -148,6 +148,7 @@ test_win_plug.c \
 test_win_state.c \
 test_win_wm_rotation.c \
 test_win_dialog.c \
+test_gesture_framework.c \
 test.h
 
 elementary_test_LDADD = $(top_builddir)/src/lib/libelementary.la \
diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c
index bd22de4ba5..2abfdf8799 100644
--- a/src/bin/elementary/test.c
+++ b/src/bin/elementary/test.c
@@ -339,6 +339,9 @@ void test_efl_anim_repeat(void *data, Evas_Object *obj, 
void *event_info);
 void test_efl_anim_start_delay(void *data, Evas_Object *obj, void *event_info);
 void test_efl_anim_interpolator(void *data, Evas_Object *obj, void 
*event_info);
 
+void test_gesture_framework(void *data, Evas_Object *obj, void *event_info);
+
+
 Evas_Object *win, *tbx; // TODO: refactoring
 void *tt;
 Eina_List *tests;
@@ -1082,6 +1085,7 @@ add_tests:
    ADD_TEST(NULL, "Evas", "Snapshot", test_evas_snapshot);
    ADD_TEST(NULL, "Evas", "Map", test_evas_map);
    ADD_TEST(NULL, "Evas", "Gfx Map", test_efl_gfx_map);
+   ADD_TEST(NULL, "Evas", "Gesture", test_gesture_framework);
 
    //------------------------------//
    ADD_TEST(NULL, "Widgets Disable/Enable", "Box", test_box_disable);
diff --git a/src/bin/elementary/test_gesture_framework.c 
b/src/bin/elementary/test_gesture_framework.c
new file mode 100644
index 0000000000..e09bfa1bed
--- /dev/null
+++ b/src/bin/elementary/test_gesture_framework.c
@@ -0,0 +1,419 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+#include <Elementary.h>
+
+#define TAP_NAME "tap"
+#define DOUBLE_TAP_NAME "double_tap"
+#define TRIPLE_TAP_NAME "triple_tap"
+#define LONG_TAP_NAME "long_tap"
+#define FLICK_NAME "flick"
+#define LINE_NAME "line"
+#define MOMENTUM_NAME "momentum"
+#define ROTATE_NAME "rotate"
+#define ZOOM_NAME "zoom"
+
+#define N_GESTURE_TYPE 9
+#define MAX_DOUBLE_TAP 5
+#define MAX_FLICK 5
+#define MAX_LINE 5
+#define MAX_LONG_TAP 5
+#define MAX_MOMENTUM 5
+#define MAX_ROTATE 1
+#define MAX_TAP 5
+#define MAX_TRIPLE_TAP 5
+#define MAX_ZOOM 1
+
+#define TB_PADDING_X 4
+#define TB_PADDING_Y 12
+
+#define BX_PADDING_X 0
+#define BX_PADDING_Y 2
+
+/* Define initial RGBA values for icons */
+#define INI_R 60
+#define INI_G 66
+#define INI_B 64
+#define INI_A 128
+#define COLOR_STEP 4
+
+#define START_COLOR 220, 220, 200, 255
+#define UPDATE_COLOR 255, 255, 0, 255
+#define ABORT_COLOR 255, 0, 0, 255
+#define END_COLOR 0, 255, 0, 255
+
+struct _icon_properties
+{
+   Evas_Object *icon;
+   int r; /* current r */
+   int g;
+   int b;
+   int a;
+
+   const char *name;
+};
+typedef struct _icon_properties icon_properties;
+
+struct _infra_data
+{  /* Some data that is passed aroung between callbacks (replacing globals) */
+   icon_properties *icons;
+   Ecore_Timer *colortimer;
+   char buf[1024];
+   int long_tap_count;
+};
+typedef struct _infra_data infra_data;
+
+static void
+_infra_data_free(infra_data *infra)
+{
+   if (infra)
+     {
+        if (infra->colortimer)
+          ecore_timer_del(infra->colortimer);
+
+        if (infra->icons)
+          free(infra->icons);
+
+        free (infra);
+     }
+}
+
+static infra_data *
+_infra_data_alloc(void)
+{
+   infra_data *infra = malloc(sizeof(infra_data));
+   if (!infra) return NULL;
+
+   infra->icons = calloc(N_GESTURE_TYPE, sizeof(icon_properties ));
+   infra->colortimer = NULL;
+
+   return infra;
+}
+
+static void
+my_win_del(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
+{  /* called when my_win_main is requested to be deleted */
+   _infra_data_free(data);
+}
+
+static icon_properties *
+_icon_properties_find(icon_properties *icons, char *name)
+{
+   int n;
+
+   for (n = 0; n < N_GESTURE_TYPE; n++)
+     if (!strcmp(icons[n].name, name))
+       return &icons[n];
+
+   return NULL;
+}
+
+static void
+_icon_color_set(icon_properties *i, int r, int g, int b, int a)
+{
+   i->r =  r;
+   i->g =  g;
+   i->b =  b;
+   i->a =  a;
+   evas_object_color_set(i->icon, i->r,  i->g,  i->b,  i->a);
+}
+
+static Eina_Bool
+_icon_color_set_cb(void *data)
+{
+#define INC_COLOR(C, NC) \
+   do { \
+        if (abs(i->C - NC) < COLOR_STEP) \
+        i->C = NC; \
+        else \
+        i->C += ((i->C < NC) ? COLOR_STEP : (-COLOR_STEP)); \
+   } while (0)
+
+   int n;
+   icon_properties *icons = data;
+   icon_properties *i;
+
+   for (n = 0; n < N_GESTURE_TYPE; n++)
+     {
+        i = &icons[n];
+
+        INC_COLOR(r,INI_R);
+        INC_COLOR(g,INI_G);
+        INC_COLOR(b,INI_B);
+        INC_COLOR(a,INI_A);
+
+        /* Change Icon color */
+        evas_object_color_set(i->icon, i->r,  i->g,  i->b,  i->a);
+    }
+
+   return ECORE_CALLBACK_RENEW;
+}
+
+static void
+_color_and_icon_set(infra_data *infra, char *name, int n, int max,
+      int r, int g, int b, int a)
+{
+   icon_properties *i;
+   int nn = n;
+   i = _icon_properties_find(infra->icons, name);
+   if (i)
+     {
+        if (n < 1)
+          nn = 1;
+
+        if (n > max)
+          nn = max;
+
+        snprintf(infra->buf, sizeof(infra->buf),
+              "%s/images/g_layer/%s_%d.png", elm_app_data_dir_get(), i->name, 
nn);
+        elm_image_file_set(i->icon, infra->buf, NULL);
+        _icon_color_set(i, r, g, b, a);
+     }
+}
+
+/* START - Callbacks for gestures */
+static void
+finger_tap_start(void *data , Efl_Gesture *tap)
+{
+   Eina_Vector2 pos = efl_gesture_tap_position_get(tap);
+
+   _color_and_icon_set(data, TAP_NAME, 1, MAX_TAP, START_COLOR);
+   printf("Tap Gesture started x,y=<%f,%f> \n", pos.x, pos.y);
+}
+
+static void
+finger_tap_update(void *data , Efl_Gesture *tap EINA_UNUSED)
+{
+   _color_and_icon_set(data, TAP_NAME, 1, MAX_TAP, UPDATE_COLOR);
+}
+
+static void
+finger_tap_end(void *data , Efl_Gesture *tap)
+{
+   Eina_Vector2 pos = efl_gesture_tap_position_get(tap);
+
+   _color_and_icon_set(data, TAP_NAME, 1, MAX_TAP, END_COLOR);
+   printf("Tap Gesture ended x,y=<%f,%f> \n", pos.x, pos.y);
+}
+
+static void
+finger_tap_abort(void *data , Efl_Gesture *tap EINA_UNUSED)
+{
+   _color_and_icon_set(data, TAP_NAME, 1, MAX_TAP, ABORT_COLOR);
+   printf("Tap Aborted\n");
+}
+
+static void
+tap_gesture_cb(void *data , const Efl_Event *ev)
+{
+   Efl_Gesture *g = ev->info;
+   switch(efl_gesture_state_get(g))
+   {
+      case EFL_GESTURE_STARTED:
+         finger_tap_start(data, g);
+         break;
+      case EFL_GESTURE_UPDATED:
+         finger_tap_update(data, g);
+         break;
+      case EFL_GESTURE_CANCELED:
+         finger_tap_abort(data, g);
+         break;
+      case EFL_GESTURE_FINISHED:
+         finger_tap_end(data, g);
+         break;
+      default:
+         break;
+   }
+}
+
+/* END   - Callbacks for gestures */
+
+static Evas_Object *
+create_gesture_box(Evas_Object *win, icon_properties *icons,
+                   int idx, const char *name, const char *lb_txt)
+{  /* Creates a box with icon and label, later placed in a table */
+   Evas_Object *lb, *bx = elm_box_add(win);
+   char buf[1024];
+
+   elm_box_padding_set(bx, BX_PADDING_X, BX_PADDING_Y);
+   icons[idx].icon = elm_icon_add(win);
+   icons[idx].name = name;
+   snprintf(buf, sizeof(buf), "%s/images/g_layer/%s_1.png",
+         elm_app_data_dir_get(), icons[idx].name);
+   elm_image_file_set(icons[idx].icon, buf, NULL);
+   elm_image_resizable_set(icons[idx].icon, EINA_FALSE, EINA_FALSE);
+   evas_object_size_hint_align_set(icons[idx].icon, 0.5, 0.5);
+   _icon_color_set(&icons[idx], INI_R, INI_G, INI_B, INI_A);
+   elm_box_pack_end(bx, icons[idx].icon);
+   evas_object_show(icons[idx].icon);
+
+   lb = elm_label_add(win);
+   elm_object_text_set(lb, lb_txt);
+   evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(lb, 0.5, 0.5);
+   elm_box_pack_end(bx, lb);
+   evas_object_show(lb);
+   evas_object_show(bx);
+
+   return bx;
+}
+
+void
+test_gesture_framework(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
+      void *event_info EINA_UNUSED)
+{
+   Evas_Object *win, *tb, *lb, *bx;
+   Evas_Object *r; /* Gesture layer transparent object */
+
+   infra_data *infra = _infra_data_alloc();
+
+   win = elm_win_util_standard_add("gesture-layer2", "Gesture Layer 2");
+   elm_win_autodel_set(win, EINA_TRUE);
+   evas_object_smart_callback_add(win, "delete,request", my_win_del, infra);
+
+   /* START - Building icons table */
+   bx = elm_box_add(win);
+   tb = elm_table_add(win);
+   elm_box_pack_end(bx, tb);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(tb, 0.5, 0.5);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(tb);
+   evas_object_show(bx);
+
+   /* Box of Tap icon and label */
+   bx = create_gesture_box(win, infra->icons, 0, TAP_NAME, "Tap");
+   elm_table_pack(tb, bx, 0, 0, 1, 1);
+
+   /* Box of Double Tap icon and label */
+   bx = create_gesture_box(win, infra->icons, 1, DOUBLE_TAP_NAME, "Double 
Tap");
+   elm_table_pack(tb, bx, 1, 0, 1, 1);
+
+   /* Box of Triple Tap icon and label */
+   bx = create_gesture_box(win, infra->icons, 2, TRIPLE_TAP_NAME, "Triple 
Tap");
+   elm_table_pack(tb, bx, 2, 0, 1, 1);
+
+   /* Box of Long Tap icon and label */
+   bx = create_gesture_box(win, infra->icons, 3, LONG_TAP_NAME, "Long Tap");
+   elm_table_pack(tb, bx, 3, 0, 1, 1);
+
+   /* Box of Momentum icon and label */
+   bx = create_gesture_box(win, infra->icons, 4, MOMENTUM_NAME, "Momentum");
+   elm_table_pack(tb, bx, 0, 2, 1, 1);
+
+   /* Box of Line icon and label */
+   bx = create_gesture_box(win, infra->icons, 5, LINE_NAME, "Line");
+   elm_table_pack(tb, bx, 1, 2, 1, 1);
+
+   /* Box of Flick icon and label */
+   bx = create_gesture_box(win, infra->icons, 6, FLICK_NAME, "Flick");
+   elm_table_pack(tb, bx, 2, 2, 1, 1);
+
+   /* Box of Zoom icon and label */
+   bx = create_gesture_box(win, infra->icons, 7, ZOOM_NAME, "Zoom");
+   elm_table_pack(tb, bx, 0, 3, 1, 1);
+
+   /* Box of Rotate icon and label */
+   bx = create_gesture_box(win, infra->icons, 8, ROTATE_NAME, "Rotate");
+   elm_table_pack(tb, bx, 1, 3, 1, 1);
+
+   /* Legend of gestures - states */
+   lb = elm_label_add(win);
+   elm_object_text_set(lb, "<b>Gesture States</b>");
+   evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_table_pack(tb, lb, 0, 6, 4, 2);
+   evas_object_show(lb);
+
+   r = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_resize(r, 64, 64);
+   evas_object_color_set(r, INI_R, INI_G, INI_B, INI_A);
+   evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_table_pack(tb, r, 0, 7, 1, 1);
+   evas_object_show(r);
+
+   lb = elm_label_add(win);
+   elm_object_text_set(lb, "Not Started");
+   evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_table_pack(tb, lb, 1, 7, 3, 1);
+   evas_object_show(lb);
+
+   r = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_resize(r, 64, 64);
+   evas_object_color_set(r, START_COLOR);
+   evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_table_pack(tb, r, 0, 8, 1, 1);
+   evas_object_show(r);
+
+   lb = elm_label_add(win);
+   elm_object_text_set(lb, "Gesture START");
+   evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_table_pack(tb, lb, 1, 8, 3, 1);
+   evas_object_show(lb);
+
+   r = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_resize(r, 64, 64);
+   evas_object_color_set(r, UPDATE_COLOR);
+   evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_table_pack(tb, r, 0, 9, 1, 1);
+   evas_object_show(r);
+
+   lb = elm_label_add(win);
+   elm_object_text_set(lb, "Gesture UPDATE");
+   evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_table_pack(tb, lb, 1, 9, 3, 1);
+   evas_object_show(lb);
+
+   r = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_resize(r, 64, 64);
+   evas_object_color_set(r, END_COLOR);
+   evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_table_pack(tb, r, 0, 10, 1, 1);
+   evas_object_show(r);
+
+   lb = elm_label_add(win);
+   elm_object_text_set(lb, "Gesture END");
+   evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_table_pack(tb, lb, 1, 10, 3, 1);
+   evas_object_show(lb);
+
+   r = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_resize(r, 64, 64);
+   evas_object_color_set(r, ABORT_COLOR);
+   evas_object_size_hint_weight_set(r, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(r, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_table_pack(tb, r, 0, 11, 1, 1);
+   evas_object_show(r);
+
+   lb = elm_label_add(win);
+   elm_object_text_set(lb, "Gesture ABORT");
+   evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_table_pack(tb, lb, 1, 11, 3, 1);
+
+   elm_table_padding_set(tb, TB_PADDING_X, TB_PADDING_Y);
+   evas_object_show(lb);
+   /* END   - Building icons table */
+
+   r = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_move(r, 250, 300);
+   evas_object_color_set(r, 0, 0, 255, 255);
+   evas_object_resize(r, 70, 70);
+   evas_object_show(r);
+
+   // LISTEN FOR TAP GESTURE
+   efl_event_callback_add(r, EFL_EVENT_GESTURE_TAP, tap_gesture_cb, infra);
+
+   /* Update color state 20 times a second */
+   infra->colortimer = ecore_timer_add(0.05, _icon_color_set_cb, infra->icons);
+
+   evas_object_show(win);
+}

-- 


Reply via email to