evas: add radius, radius_x, radius_y, pressure, and angle to mouse event structs 48/66948/15 submit/tizen/20160502.041901
authorDuna Oh <duna.oh@samsung.com>
Fri, 22 Apr 2016 06:36:01 +0000 (15:36 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Mon, 2 May 2016 04:17:29 +0000 (21:17 -0700)
Evas Mouse events are used for mouse and also the first touch point.
In order not to lose touch information of first touch,
we add extended members to Evas_Event_Mouse_XXXwq structs.
The values of these members come from Ecore_Event_Mouse_XXX.

Signed-off-by: Duna Oh <duna.oh@samsung.com>
Change-Id: I66f4abdb733c1aec1b34c86b24e183f2706751ae

18 files changed:
src/lib/ecore_evas/Ecore_Evas.h
src/lib/ecore_evas/ecore_evas.c
src/lib/ecore_evas/ecore_evas_private.h
src/lib/ecore_input_evas/Ecore_Input_Evas.h
src/lib/ecore_input_evas/ecore_input_evas.c
src/lib/evas/Evas_Common.h
src/lib/evas/canvas/evas_canvas.eo
src/lib/evas/canvas/evas_events.c
src/lib/evas/include/evas_private.h
src/modules/ecore_evas/engines/cocoa/ecore_evas_cocoa.c
src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
src/modules/ecore_evas/engines/fb/ecore_evas_fb.c
src/modules/ecore_evas/engines/psl1ght/ecore_evas_psl1ght.c
src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c
src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c
src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
src/modules/ecore_evas/engines/x/ecore_evas_x.c

index 5d2b5f4..adcbd89 100644 (file)
@@ -2312,6 +2312,23 @@ EAPI Eina_Bool   ecore_evas_manual_render_get(const Ecore_Evas *ee);
  * @since 1.1
  */
 EAPI void        ecore_evas_input_event_register(Ecore_Evas *ee);
+
+// TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+/**
+ * @brief Register an @c Ecore_Evas to receive events through ecore_input_evas.
+ *
+ * @param ee The @c Ecore_Evas handle.
+ *
+ * This function calls ecore_event_window_register_with_multi() with the @p ee as its @c
+ * id argument, @c window argument, and uses its @c Evas too. It is useful when
+ * no @c window information is available on a given @c Ecore_Evas backend.
+ *
+ * @see ecore_evas_input_event_unregister()
+ * @since 1.1
+ */
+EAPI void        ecore_evas_input_event_register_with_multi(Ecore_Evas *ee);
+//
+
 /**
  * @brief Unregister an @c Ecore_Evas receiving events through ecore_input_evas.
  *
index 856fb0d..b2d25b0 100644 (file)
@@ -3368,6 +3368,47 @@ _ecore_evas_mouse_move_process(Ecore_Evas *ee, int x, int y, unsigned int timest
      evas_event_input_mouse_move(ee->evas, y, ee->w + fh - x - 1, timestamp, NULL);
 }
 
+// TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+EAPI void
+_ecore_evas_mouse_move_with_multi_info_process(Ecore_Evas *ee, int x, int y, unsigned int timestamp, double radius, double radius_x, double radius_y, double pressure, double angle)
+{
+   int fx, fy, fw, fh;
+   ee->mouse.x = x;
+   ee->mouse.y = y;
+
+   evas_output_framespace_get(ee->evas, &fx, &fy, &fw, &fh);
+
+   if (ee->prop.cursor.object)
+     {
+        evas_object_show(ee->prop.cursor.object);
+        if (ee->rotation == 0)
+          evas_object_move(ee->prop.cursor.object,
+                           x - fx - ee->prop.cursor.hot.x,
+                           y - fy - ee->prop.cursor.hot.y);
+        else if (ee->rotation == 90)
+          evas_object_move(ee->prop.cursor.object,
+                           ee->h + fw - y - fx - 1 - ee->prop.cursor.hot.x,
+                           x - fy - ee->prop.cursor.hot.y);
+        else if (ee->rotation == 180)
+          evas_object_move(ee->prop.cursor.object,
+                           ee->w + fw - x - fx - 1 - ee->prop.cursor.hot.x,
+                           ee->h + fh - y - fy - 1 - ee->prop.cursor.hot.y);
+        else if (ee->rotation == 270)
+          evas_object_move(ee->prop.cursor.object,
+                           y - fx - ee->prop.cursor.hot.x,
+                           ee->w + fh - x - fy - 1 - ee->prop.cursor.hot.y);
+     }
+   if (ee->rotation == 0)
+     evas_event_input_mouse_move_with_multi_info(ee->evas, x, y, timestamp, NULL, radius, radius_x, radius_y, pressure, angle);
+   else if (ee->rotation == 90)
+     evas_event_input_mouse_move_with_multi_info(ee->evas, ee->h + fw - y - 1, x, timestamp, NULL, radius, radius_x, radius_y, pressure, angle);
+   else if (ee->rotation == 180)
+     evas_event_input_mouse_move_with_multi_info(ee->evas, ee->w + fw - x - 1, ee->h + fh - y - 1, timestamp, NULL, radius, radius_x, radius_y, pressure, angle);
+   else if (ee->rotation == 270)
+     evas_event_input_mouse_move_with_multi_info(ee->evas, y, ee->w + fh - x - 1, timestamp, NULL, radius, radius_x, radius_y, pressure, angle);
+}
+//
+
 EAPI void
 _ecore_evas_mouse_multi_move_process(Ecore_Evas *ee, int device,
                                      int x, int y,
@@ -3575,6 +3616,18 @@ ecore_evas_input_event_register(Ecore_Evas *ee)
                                (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
 }
 
+// TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+EAPI void
+ecore_evas_input_event_register_with_multi(Ecore_Evas *ee)
+{
+   ecore_event_window_register_with_multi((Ecore_Window)ee, ee, ee->evas,
+                                          (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                          (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                          (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                          (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+}
+//
+
 EAPI void
 ecore_evas_input_event_unregister(Ecore_Evas *ee)
 {
index 256eca5..a01a18e 100644 (file)
@@ -373,6 +373,10 @@ EAPI void _ecore_evas_register(Ecore_Evas *ee);
 EAPI void _ecore_evas_free(Ecore_Evas *ee);
 EAPI void _ecore_evas_idle_timeout_update(Ecore_Evas *ee);
 EAPI void _ecore_evas_mouse_move_process(Ecore_Evas *ee, int x, int y, unsigned int timestamp);
+// TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+EAPI void _ecore_evas_mouse_move_with_multi_info_process(Ecore_Evas *ee, int x, int y, unsigned int timestamp,
+                                                    double radius, double radius_x, double radius_y, double pressure, double angle);
+//
 EAPI void _ecore_evas_mouse_multi_move_process(Ecore_Evas *ee, int device,
                                           int x, int y,
                                           double radius,
index 184d0c8..2543259 100644 (file)
@@ -37,6 +37,9 @@ typedef void (*Ecore_Event_Mouse_Move_Cb)(void *window, int x, int y, unsigned i
 typedef void (*Ecore_Event_Multi_Move_Cb)(void *window, int device, int x, int y, double radius, double radius_x, double radius_y, double pressure, double angle, double mx, double my, unsigned int timestamp);
 typedef void (*Ecore_Event_Multi_Down_Cb)(void *window, int device, int x, int y, double radius, double radius_x, double radius_y, double pressure, double angle, double mx, double my, Evas_Button_Flags flags, unsigned int timestamp);
 typedef void (*Ecore_Event_Multi_Up_Cb)(void *window, int device, int x, int y, double radius, double radius_x, double radius_y, double pressure, double angle, double mx, double my, Evas_Button_Flags flags, unsigned int timestamp);
+// TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+typedef void (*Ecore_Event_Mouse_Move_With_Multi_Cb)(void *window, int x, int y, unsigned int timestamp, double radius, double radius_x, double radius_y, double pressure, double angle);
+//
       
 EAPI int       ecore_event_evas_init(void);
 EAPI int       ecore_event_evas_shutdown(void);
@@ -55,6 +58,9 @@ EAPI Eina_Bool ecore_event_evas_device_add(void *data, int type, void *event);
 EAPI Eina_Bool ecore_event_evas_device_del(void *data, int type, void *event);
 
 EAPI void      ecore_event_window_register(Ecore_Window id, void *window, Evas *evas, Ecore_Event_Mouse_Move_Cb move_mouse, Ecore_Event_Multi_Move_Cb move_multi, Ecore_Event_Multi_Down_Cb down_multi, Ecore_Event_Multi_Up_Cb up_multi);
+// TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+EAPI void      ecore_event_window_register_with_multi(Ecore_Window id, void *window, Evas *evas, Ecore_Event_Mouse_Move_With_Multi_Cb move_mouse, Ecore_Event_Multi_Move_Cb move_multi, Ecore_Event_Multi_Down_Cb down_multi, Ecore_Event_Multi_Up_Cb up_multi);
+//
 EAPI void      ecore_event_window_unregister(Ecore_Window id);
 EAPI void     *ecore_event_window_match(Ecore_Window id);
 EAPI void      ecore_event_window_ignore_events(Ecore_Window id, int ignore_event);
index fd44a7a..606e6cc 100644 (file)
@@ -22,6 +22,9 @@ struct _Ecore_Input_Window
    Ecore_Event_Multi_Move_Cb move_multi;
    Ecore_Event_Multi_Down_Cb down_multi;
    Ecore_Event_Multi_Up_Cb up_multi;
+// TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   Ecore_Event_Mouse_Move_With_Multi_Cb move_mouse_with_multi;
+//
    int ignore_event;
 };
 
@@ -353,6 +356,42 @@ ecore_event_window_register(Ecore_Window id, void *window, Evas *evas,
    evas_key_lock_add(evas, "Scroll_Lock");
 }
 
+// TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+EAPI void
+ecore_event_window_register_with_multi(Ecore_Window id, void *window, Evas *evas,
+                            Ecore_Event_Mouse_Move_With_Multi_Cb move_mouse_with_multi,
+                            Ecore_Event_Multi_Move_Cb move_multi,
+                            Ecore_Event_Multi_Down_Cb down_multi,
+                            Ecore_Event_Multi_Up_Cb up_multi)
+{
+   Ecore_Input_Window *w;
+
+   w = calloc(1, sizeof(Ecore_Input_Window));
+   if (!w) return;
+
+   w->evas = evas;
+   w->window = window;
+   w->move_mouse_with_multi = move_mouse_with_multi;
+   w->move_multi = move_multi;
+   w->down_multi = down_multi;
+   w->up_multi = up_multi;
+   w->ignore_event = 0;
+
+   eina_hash_add(_window_hash, &id, w);
+
+   evas_key_modifier_add(evas, "Shift");
+   evas_key_modifier_add(evas, "Control");
+   evas_key_modifier_add(evas, "Alt");
+   evas_key_modifier_add(evas, "Meta");
+   evas_key_modifier_add(evas, "Hyper");
+   evas_key_modifier_add(evas, "Super");
+   evas_key_modifier_add(evas, "AltGr");
+   evas_key_lock_add(evas, "Caps_Lock");
+   evas_key_lock_add(evas, "Num_Lock");
+   evas_key_lock_add(evas, "Scroll_Lock");
+}
+//
+
 EAPI void
 ecore_event_window_unregister(Ecore_Window id)
 {
@@ -531,13 +570,29 @@ _ecore_event_evas_mouse_button(Ecore_Event_Mouse_Button *e, Ecore_Event_Press pr
         ecore_event_evas_modifier_lock_update(lookup->evas, e->modifiers);
         if (press == ECORE_DOWN)
           {
+#if 0
              evas_event_feed_mouse_down(lookup->evas, e->buttons, flags,
                                         e->timestamp, NULL);
+#endif
+             // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+             evas_event_feed_mouse_down_with_multi_info(lookup->evas, e->buttons, flags,
+                                        e->timestamp, NULL,
+                                        e->multi.radius, e->multi.radius_x, e->multi.radius_y,
+                                        e->multi.pressure, e->multi.angle);
+             //
           }
         else
           {
+#if 0
              evas_event_feed_mouse_up(lookup->evas, e->buttons, flags,
-                                      e->timestamp, NULL);
+                                        e->timestamp, NULL);
+#endif
+             // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+             evas_event_feed_mouse_up_with_multi_info(lookup->evas, e->buttons, flags,
+                                      e->timestamp, NULL,
+                                      e->multi.radius, e->multi.radius_x, e->multi.radius_y,
+                                      e->multi.pressure, e->multi.angle);
+             //
           }
      }
    else
@@ -600,11 +655,24 @@ ecore_event_evas_mouse_move(void *data EINA_UNUSED, int type EINA_UNUSED, void *
         _ecore_event_evas_push_mouse_move(e);
         ecore_event_evas_modifier_lock_update(lookup->evas, e->modifiers);
 
+#if 0
         if (lookup->move_mouse)
            lookup->move_mouse(lookup->window, e->x, e->y, e->timestamp);
         else
            evas_event_input_mouse_move(lookup->evas, e->x, e->y, e->timestamp,
                                       NULL);
+#endif
+        // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+        if (lookup->move_mouse_with_multi)
+          lookup->move_mouse_with_multi(lookup->window, e->x, e->y, e->timestamp,
+                                        e->multi.radius, e->multi.radius_x, e->multi.radius_y, e->multi.pressure, e->multi.angle);
+        else if (lookup->move_mouse)
+          lookup->move_mouse(lookup->window, e->x, e->y, e->timestamp);
+        else
+          evas_event_input_mouse_move_with_multi_info(lookup->evas, e->x, e->y, e->timestamp, NULL,
+                                                      e->multi.radius, e->multi.radius_x, e->multi.radius_y,
+                                                      e->multi.pressure, e->multi.angle);
+        //
      }
    else
      {
@@ -670,7 +738,15 @@ _ecore_event_evas_mouse_io(Ecore_Event_Mouse_IO *e, Ecore_Event_IO io)
          break;
      }
 
+#if 0
    lookup->move_mouse(lookup->window, e->x, e->y, e->timestamp);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   if (lookup->move_mouse_with_multi)
+     lookup->move_mouse_with_multi(lookup->window, e->x, e->y, e->timestamp, 0, 0, 0, 0, 0);
+   else if (lookup->move_mouse)
+     lookup->move_mouse(lookup->window, e->x, e->y, e->timestamp);
+   //
    evas_device_pop(lookup->evas);
    return ECORE_CALLBACK_PASS_ON;
 }
index ff09f13..2da81fb 100755 (executable)
@@ -517,6 +517,11 @@ struct _Evas_Event_Mouse_Down /** Mouse button press event */
    Evas_Event_Flags  event_flags;
    Evas_Device      *dev;
    Evas_Object      *event_src; /**< The Evas Object which actually triggered the event, used in cases of proxy event propagation */
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   double            radius;
+   double            radius_x, radius_y;
+   double            pressure, angle;
+   //
 };
 
 struct _Evas_Event_Mouse_Up /** Mouse button release event */
@@ -535,6 +540,11 @@ struct _Evas_Event_Mouse_Up /** Mouse button release event */
    Evas_Event_Flags  event_flags;
    Evas_Device      *dev;
    Evas_Object     *event_src; /**< The Evas Object which actually triggered the event, used in cases of proxy event propagation */
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   double            radius;
+   double            radius_x, radius_y;
+   double            pressure, angle;
+   //
 };
 
 struct _Evas_Event_Mouse_In /** Mouse enter event */
@@ -583,6 +593,11 @@ struct _Evas_Event_Mouse_Move /** Mouse move event */
    Evas_Event_Flags event_flags;
    Evas_Device     *dev;
    Evas_Object     *event_src; /**< The Evas Object which actually triggered the event, used in cases of proxy event propagation */
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   double            radius;
+   double            radius_x, radius_y;
+   double            pressure, angle;
+   //
 };
 
 struct _Evas_Event_Mouse_Wheel /** Wheel event */
index c3fd2d5..4bc5128 100644 (file)
@@ -1646,6 +1646,69 @@ class Evas.Canvas (Eo.Base, Evas.Common_Interface)
             @in data: const(void)*; [[Data for canvas.]]
          }
       }
+      event_feed_mouse_down_with_multi_info {
+         [[Mouse down event feed.
+
+           This function will set some evas properties that is necessary
+           when the mouse button is pressed. It prepares information to
+           be treated by the callback function.
+         ]]
+         params {
+            @in b: int; [[The button number.]]
+            @in flags: Evas.Button_Flags; [[Evas button flags.]]
+            @in timestamp: uint; [[The timestamp of the mouse up event.]]
+            @in data: const(void)*; [[The data for canvas.]]
+            @in rad: double; [[The average of major and minor radius]]
+            @in radx: double; [[The major radius of touch point]]
+            @in rady: double; [[The minor radius of touch point]]
+            @in pres: double; [[The pressure of touch]]
+            @in ang: double; [[The angle relative to perpenficular(0.0), in degrees ]]
+         }
+      }
+      event_feed_mouse_up_with_multi_info {
+         [[Mouse up event feed.
+
+           This function will set some evas properties that is necessary
+           when the mouse button is released. It prepares information to
+           be treated by the callback function.
+         ]]
+         params {
+            @in b: int; [[The button number.]]
+            @in flags: Evas.Button_Flags; [[Evas button flags.]]
+            @in timestamp: uint; [[The timestamp of the mouse up event.]]
+            @in data: const(void)*; [[The data for canvas.]]
+            @in rad: double; [[The average of major and minor radius]]
+            @in radx: double; [[The major radius of touch point]]
+            @in rady: double; [[The minor radius of touch point]]
+            @in pres: double; [[The pressure of touch]]
+            @in ang: double; [[The angle relative to perpenficular(0.0), in degrees ]]
+         }
+      }
+      event_input_mouse_move_with_multi_info {
+         [[Mouse move event feed from input.
+
+           Similar to the @.event_feed_mouse_move, this function will
+           inform Evas about mouse move events which were received by
+           the input system, relative to the 0,0 of the window, not to the
+           canvas 0,0. It will take care of doing any special transformation
+           like adding the framespace offset to the mouse event.
+
+           @since 1.8
+         ]]
+         params {
+            @in x: int; [[The horizontal position of the mouse pointer
+                          relative to the 0,0 of the window/surface.]]
+            @in y: int; [[The vertical position of the mouse pointer
+                          relative to the 0,0 of the window/surface.]]
+            @in timestamp: uint; [[The timestamp of the mouse move event.]]
+            @in data: const(void)*; [[The data for canvas.]]
+            @in rad: double; [[The average of major and minor radius]]
+            @in radx: double; [[The major radius of touch point]]
+            @in rady: double; [[The minor radius of touch point]]
+            @in pres: double; [[The pressure of touch]]
+            @in ang: double; [[The angle relative to perpenficular(0.0), in degrees ]]
+         }
+      }
    }
    implements {
       Eo.Base.constructor;
index 1b5bf97..6db98c3 100644 (file)
@@ -1025,13 +1025,14 @@ evas_event_thaw_eval(Evas *eo_e)
 }
 
 EOLIAN void
-_evas_canvas_event_feed_mouse_down(Eo *eo_e, Evas_Public_Data *e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data)
+_canvas_event_feed_mouse_down_internal(Eo *eo_e, void *_pd, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data, double rad, double radx, double rady, double pres, double ang)
 {
    Eina_List *l, *copy;
    Evas_Event_Mouse_Down ev;
    Evas_Object *eo_obj;
    int addgrab = 0;
    int event_id = 0;
+   Evas_Public_Data *e = _pd;
 
    INF("ButtonEvent:down time=%u x=%d y=%d button=%d downs=%d", timestamp, e->pointer.x, e->pointer.y, b, e->pointer.downs);
    if ((b < 1) || (b > 32)) return;
@@ -1058,6 +1059,11 @@ _evas_canvas_event_feed_mouse_down(Eo *eo_e, Evas_Public_Data *e, int b, Evas_Bu
    ev.event_flags = e->default_event_flags;
    ev.dev = _evas_device_top_get(eo_e);
    if (ev.dev) _evas_device_ref(ev.dev);
+   ev.radius = rad;
+   ev.radius_x = radx;
+   ev.radius_y = rady;
+   ev.pressure = pres;
+   ev.angle = ang;
 
    _evas_walk(e);
    /* append new touch point to the touch point list */
@@ -1121,6 +1127,18 @@ _evas_canvas_event_feed_mouse_down(Eo *eo_e, Evas_Public_Data *e, int b, Evas_Bu
    _evas_unwalk(e);
 }
 
+EOLIAN void
+_evas_canvas_event_feed_mouse_down(Eo *eo_e, Evas_Public_Data *e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data)
+{
+   _canvas_event_feed_mouse_down_internal(eo_e, e, b, flags, timestamp, data, 0, 0, 0, 0, 0);
+}
+
+EOLIAN void
+_evas_canvas_event_feed_mouse_down_with_multi_info(Eo *eo_e, Evas_Public_Data *e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data, double rad, double radx, double rady, double pres, double ang)
+{
+   _canvas_event_feed_mouse_down_internal(eo_e, e, b, flags, timestamp, data, rad, radx, rady, pres, ang);
+}
+
 static int
 _post_up_handle(Evas *eo_e, unsigned int timestamp, const void *data)
 {
@@ -1247,9 +1265,10 @@ _post_up_handle(Evas *eo_e, unsigned int timestamp, const void *data)
 }
 
 EOLIAN void
-_evas_canvas_event_feed_mouse_up(Eo *eo_e, Evas_Public_Data *e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data)
+_canvas_event_feed_mouse_up_internal(Eo *eo_e, void *_pd, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data, double rad, double radx, double rady, double pres, double ang)
 {
    Eina_List *l, *copy;
+   Evas_Public_Data *e = _pd;
 
    INF("ButtonEvent:up time=%u x=%d y=%d button=%d downs=%d", timestamp, e->pointer.x, e->pointer.y, b, e->pointer.downs);
    if ((b < 1) || (b > 32)) return;
@@ -1282,6 +1301,11 @@ _evas_canvas_event_feed_mouse_up(Eo *eo_e, Evas_Public_Data *e, int b, Evas_Butt
         ev.event_flags = e->default_event_flags;
         ev.dev = _evas_device_top_get(eo_e);
         if (ev.dev) _evas_device_ref(ev.dev);
+        ev.radius = rad;
+        ev.radius_x = radx;
+        ev.radius_y = rady;
+        ev.pressure = pres;
+        ev.angle = ang;
 
         _evas_walk(e);
         /* update released touch point */
@@ -1344,6 +1368,18 @@ _evas_canvas_event_feed_mouse_up(Eo *eo_e, Evas_Public_Data *e, int b, Evas_Butt
 }
 
 EOLIAN void
+_evas_canvas_event_feed_mouse_up(Eo *eo_e, Evas_Public_Data *e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data)
+{
+   _canvas_event_feed_mouse_up_internal(eo_e, e, b, flags, timestamp, data, 0, 0, 0, 0, 0);
+}
+
+EOLIAN void
+_evas_canvas_event_feed_mouse_up_with_multi_info(Eo *eo_e, Evas_Public_Data *e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data, double rad, double radx, double rady, double pres, double ang)
+{
+   _canvas_event_feed_mouse_up_internal(eo_e, e, b, flags, timestamp, data, rad, radx, rady, pres, ang);
+}
+
+EOLIAN void
 _evas_canvas_event_feed_mouse_cancel(Eo *eo_e, Evas_Public_Data *e, unsigned int timestamp, const void *data)
 {
    Evas_Coord_Touch_Point *point;
@@ -1430,7 +1466,7 @@ _evas_canvas_event_feed_mouse_wheel(Eo *eo_e, Evas_Public_Data *e, int direction
 }
 
 static void
-_canvas_event_feed_mouse_move_internal(Eo *eo_e, void *_pd, int x, int y, unsigned int timestamp, const void *data)
+_canvas_event_feed_mouse_move_internal(Eo *eo_e, void *_pd, int x, int y, unsigned int timestamp, const void *data, double rad, double radx, double rady, double pres, double ang)
 {
    Evas_Public_Data *e = _pd;
    Evas_Object *nogrep_obj = NULL;
@@ -1480,6 +1516,11 @@ _canvas_event_feed_mouse_move_internal(Eo *eo_e, void *_pd, int x, int y, unsign
              ev.event_flags = e->default_event_flags;
              ev.dev = _evas_device_top_get(eo_e);
              if (ev.dev) _evas_device_ref(ev.dev);
+             ev.radius = rad;
+             ev.radius_x = radx;
+             ev.radius_y = rady;
+             ev.pressure = pres;
+             ev.angle = ang;
              copy = evas_event_list_copy(e->pointer.object.in);
              EINA_LIST_FOREACH(copy, l, eo_obj)
                {
@@ -1605,6 +1646,11 @@ _canvas_event_feed_mouse_move_internal(Eo *eo_e, void *_pd, int x, int y, unsign
         ev.event_flags = e->default_event_flags;
         ev.dev = _evas_device_top_get(eo_e);
         if (ev.dev) _evas_device_ref(ev.dev);
+        ev.radius = rad;
+        ev.radius_x = radx;
+        ev.radius_y = rady;
+        ev.pressure = pres;
+        ev.angle = ang;
 
         ev2.buttons = e->pointer.button;
         ev2.output.x = e->pointer.x;
@@ -1771,6 +1817,11 @@ nogrep:
         ev.event_flags = e->default_event_flags;
         ev.dev = _evas_device_top_get(eo_e);
         if (ev.dev) _evas_device_ref(ev.dev);
+        ev.radius = rad;
+        ev.radius_x = radx;
+        ev.radius_y = rady;
+        ev.pressure = pres;
+        ev.angle = ang;
 
         ev2.buttons = e->pointer.button;
         ev2.output.x = e->pointer.x;
@@ -1922,13 +1973,19 @@ nogrep:
 EOLIAN void
 _evas_canvas_event_input_mouse_move(Eo *eo_e, Evas_Public_Data *e, int x, int y, unsigned int timestamp, const void *data)
 {
-   _canvas_event_feed_mouse_move_internal(eo_e, e, x - e->framespace.x, y - e->framespace.y, timestamp, data);
+   _canvas_event_feed_mouse_move_internal(eo_e, e, x - e->framespace.x, y - e->framespace.y, timestamp, data, 0, 0, 0, 0, 0);
+}
+
+EOLIAN void
+_evas_canvas_event_input_mouse_move_with_multi_info(Eo *eo_e, Evas_Public_Data *e, int x, int y, unsigned int timestamp, const void *data, double rad, double radx, double rady, double pres, double ang)
+{
+   _canvas_event_feed_mouse_move_internal(eo_e, e, x - e->framespace.x, y - e->framespace.y, timestamp, data, rad, radx, rady, pres, ang);
 }
 
 EOLIAN void
 _evas_canvas_event_feed_mouse_move(Eo *eo_e, Evas_Public_Data *e, int x, int y, unsigned int timestamp, const void *data)
 {
-   _canvas_event_feed_mouse_move_internal(eo_e, e, x, y, timestamp, data);
+   _canvas_event_feed_mouse_move_internal(eo_e, e, x, y, timestamp, data, 0, 0, 0, 0, 0);
 }
 
 EOLIAN void
index 9d19f8a..285d98b 100755 (executable)
@@ -1662,6 +1662,11 @@ void _canvas_event_feed_mouse_cancel(Eo *e, void *_pd, va_list *list);
 void _canvas_event_feed_mouse_wheel(Eo *e, void *_pd, va_list *list);
 void _canvas_event_input_mouse_move(Eo *e, void *_pd, va_list *list);
 void _canvas_event_feed_mouse_move(Eo *e, void *_pd, va_list *list);
+// TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+void _canvas_event_feed_mouse_down_with_multi_info(Eo *e, void *_pd, va_list *list);
+void _canvas_event_feed_mouse_up_with_multi_info(Eo *e, void *_pd, va_list *list);
+void _canvas_event_input_mouse_move_with_multi_info(Eo *e, void *_pd, va_list *list);
+//
 void _canvas_event_feed_mouse_in(Eo *e, void *_pd, va_list *list);
 void _canvas_event_feed_mouse_out(Eo *e, void *_pd, va_list *list);
 void _canvas_event_feed_multi_down(Eo *e, void *_pd, va_list *list);
index 5fe7a73..a21c288 100644 (file)
@@ -791,11 +791,20 @@ ecore_evas_cocoa_new_internal(Ecore_Cocoa_Window *parent EINA_UNUSED, int x, int
 
   ee->engine.func->fn_render = _ecore_evas_cocoa_render;
   _ecore_evas_register(ee);
+#if 0
   ecore_event_window_register(ee->prop.window, ee, ee->evas,
                               (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
                               (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
                               (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
                               (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+#endif
+  // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+  ecore_event_window_register_with_multi(ee->prop.window, ee, ee->evas,
+                                        (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                        (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                        (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                        (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+  //
 
   evas_event_feed_mouse_in(ee->evas, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL);
   printf("Ecore Evas returned : %p\n", ee);
index 71bff1e..0b3d6b5 100755 (executable)
@@ -314,14 +314,28 @@ ecore_evas_drm_new_internal(const char *device, unsigned int parent EINA_UNUSED,
    ee->prop.window = einfo->info.buffer_id;
 
    _ecore_evas_register(ee);
+#if 0
    ecore_evas_input_event_register(ee);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_evas_input_event_register_with_multi(ee);
+   //
 
    ecore_drm_device_window_set(dev, ee->prop.window);
+#if 0
    ecore_event_window_register(ee->prop.window, ee, ee->evas,
                                (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
                                (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
                                (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
                                (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_event_window_register_with_multi(ee->prop.window, ee, ee->evas,
+                                         (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                         (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                         (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                         (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+   //
 
    return ee;
 
@@ -485,14 +499,28 @@ ecore_evas_gl_drm_new_internal(const char *device, unsigned int parent EINA_UNUS
    ee->prop.window = einfo->info.buffer_id;
 
    _ecore_evas_register(ee);
+#if 0
    ecore_evas_input_event_register(ee);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_evas_input_event_register_with_multi(ee);
+   //
 
    ecore_drm_device_window_set(dev, ee->prop.window);
+#if 0
    ecore_event_window_register(ee->prop.window, ee, ee->evas,
                                (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
                                (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
                                (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
                                (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_event_window_register_with_multi(ee->prop.window, ee, ee->evas,
+                                         (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                         (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                         (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                         (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+   //
 
    TRACE_EFL_END();
    return ee;
index 8042d0c..d1732a9 100644 (file)
@@ -732,15 +732,29 @@ ecore_evas_fb_new_internal(const char *disp_name, int rotation, int w, int h)
         return NULL;
      }
 
+#if 0
    ecore_evas_input_event_register(ee);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_evas_input_event_register_with_multi(ee);
+   //
 
    ee->engine.func->fn_render = _ecore_evas_fb_render;
    _ecore_evas_register(ee);
+#if 0
    ecore_event_window_register(1, ee, ee->evas,
                               (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
                               (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
                               (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
                               (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);              
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_event_window_register_with_multi(1, ee, ee->evas,
+                                         (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                         (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                         (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                         (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+   //
    evas_event_feed_mouse_in(ee->evas, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL);
    return ee;
 }
index c323264..de16b58 100644 (file)
@@ -536,11 +536,19 @@ ecore_evas_psl1ght_new_internal(const char *name, int w, int h)
 
    _ecore_evas_psl1ght_init(w, h);
 
+#if 0
    ecore_event_window_register(0, ee, ee->evas,
                                (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
                                (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
                                (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
                                (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_event_window_register_with_multi(0, ee, ee->evas,
+                                         (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                         (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                         (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                         (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
 
    ee->engine.func->fn_render = _ecore_evas_psl1ght_render;
    _ecore_evas_register(ee);
index 0c14c89..5f627eb 100644 (file)
@@ -707,11 +707,20 @@ _ecore_evas_internal_sdl_new(int rmethod, const char* name, int w, int h, int fu
 
    _ecore_evas_sdl_init(w, h);
 
+#if 0
    ecore_event_window_register(SDL_GetWindowID(swd->w), ee, ee->evas,
                                (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
                                (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
                                (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
                                (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_event_window_register_with_multi(SDL_GetWindowID(swd->w), ee, ee->evas,
+                                         (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                         (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                         (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                         (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+   //
    SDL_SetWindowData(swd->w, "_Ecore_Evas", ee);
 
    SDL_ShowCursor(SDL_ENABLE);
index c1e7f21..8003f41 100644 (file)
@@ -326,13 +326,27 @@ ecore_evas_wayland_egl_options_new_internal(const char *disp_name, unsigned int
    ee->engine.func->fn_render = _ecore_evas_wl_common_render;
 
    _ecore_evas_register(ee);
+#if 0
    ecore_evas_input_event_register(ee);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_evas_input_event_register_with_multi(ee);
+   //
 
+#if 0
    ecore_event_window_register(ee->prop.window, ee, ee->evas, 
                                (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process, 
                                (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process, 
                                (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process, 
                                (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_event_window_register_with_multi(ee->prop.window, ee, ee->evas,
+                                         (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                         (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                         (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                         (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+   //
 
    return ee;
 
index fa4646b..e4c52f0 100644 (file)
@@ -284,13 +284,27 @@ ecore_evas_wayland_shm_new_internal(const char *disp_name, unsigned int parent,
    ee->engine.func->fn_render = _ecore_evas_wl_common_render;
 
    _ecore_evas_register(ee);
+#if 0
    ecore_evas_input_event_register(ee);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_evas_input_event_register_with_multi(ee);
+   //
 
+#if 0
    ecore_event_window_register(ee->prop.window, ee, ee->evas, 
                                (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process, 
                                (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process, 
                                (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process, 
                                (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_event_window_register_with_multi(ee->prop.window, ee, ee->evas,
+                                         (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                         (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                         (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                         (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+   //
 
    return ee;
 
index 3883334..dcb45e5 100644 (file)
@@ -1369,11 +1369,20 @@ _ecore_evas_win32_new_internal(int (*_ecore_evas_engine_backend_init)(Ecore_Evas
 
    ee->engine.func->fn_render = _ecore_evas_win32_render;
    _ecore_evas_register(ee);
+#if 0
    ecore_event_window_register(ee->prop.window, ee, ee->evas,
                                (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
                                (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
                                (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
                                (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_event_window_register_with_multi(ee->prop.window, ee, ee->evas,
+                                         (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                         (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                         (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                         (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+   //
 
    return ee;
 }
index b750c68..06b8ae6 100644 (file)
@@ -2607,11 +2607,20 @@ _alpha_do(Ecore_Evas *ee, int alpha)
    evas_damage_rectangle_add(ee->evas, 0, 0, ee->req.w, ee->req.h);
    ecore_x_window_shape_mask_set(ee->prop.window, 0);
    ecore_x_input_multi_select(ee->prop.window);
+#if 0
    ecore_event_window_register(ee->prop.window, ee, ee->evas,
                                (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
                                (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
                                (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
                                (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_event_window_register_with_multi(ee->prop.window, ee, ee->evas,
+                                         (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                         (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                         (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                         (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+   //
    if (ee->prop.borderless)
      ecore_x_mwm_borderless_set(ee->prop.window, ee->prop.borderless);
    if (ee->visible || ee->should_be_visible)
@@ -2761,11 +2770,20 @@ _ecore_evas_x_alpha_set(Ecore_Evas *ee, int alpha)
         evas_damage_rectangle_add(ee->evas, 0, 0, ee->req.w, ee->req.h);
 //        ecore_x_window_shape_mask_set(ee->prop.window, 0);
         ecore_x_input_multi_select(ee->prop.window);
+#if 0
         ecore_event_window_register(ee->prop.window, ee, ee->evas,
                                     (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
                                     (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
                                     (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
                                     (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+#endif
+        // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+        ecore_event_window_register_with_multi(ee->prop.window, ee, ee->evas,
+                                              (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                              (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                              (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                              (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+        //
         if (ee->prop.borderless)
           ecore_x_mwm_borderless_set(ee->prop.window, ee->prop.borderless);
         if (ee->visible || ee->should_be_visible)
@@ -4086,11 +4104,20 @@ ecore_evas_software_x11_new_internal(const char *disp_name, Ecore_X_Window paren
    ee->engine.func->fn_render = _ecore_evas_x_render;
    _ecore_evas_register(ee);
    ecore_x_input_multi_select(ee->prop.window);
+#if 0
    ecore_event_window_register(ee->prop.window, ee, ee->evas,
                                (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
                                (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
                                (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
                                (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_event_window_register_with_multi(ee->prop.window, ee, ee->evas,
+                                         (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                         (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                         (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                         (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+   //
    return ee;
 }
 
@@ -4403,11 +4430,20 @@ _ecore_evas_software_x11_extra_event_window_add(Ecore_Evas *ee, Ecore_X_Window w
         *winp = win;
         edata->win_extra = eina_list_append(edata->win_extra, winp);
         ecore_x_input_multi_select(win);
+#if 0
         ecore_event_window_register(win, ee, ee->evas,
                                     (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
                                     (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
                                     (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
                                     (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+#endif
+        // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+        ecore_event_window_register_with_multi(win, ee, ee->evas,
+                                              (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                              (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                              (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                              (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+        //
      }
 }
 #endif
@@ -4537,11 +4573,20 @@ ecore_evas_gl_x11_options_new_internal(const char *disp_name, Ecore_X_Window par
    ee->engine.func->fn_render = _ecore_evas_x_render;
    _ecore_evas_register(ee);
    ecore_x_input_multi_select(ee->prop.window);
+#if 0
    ecore_event_window_register(ee->prop.window, ee, ee->evas,
                                (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
                                (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
                                (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
                                (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+#endif
+   // TIZEN_ONLY(20160429): add multi_info(radius, pressure and angle) to Evas_Event_Mouse_XXX
+   ecore_event_window_register_with_multi(ee->prop.window, ee, ee->evas,
+                                         (Ecore_Event_Mouse_Move_With_Multi_Cb)_ecore_evas_mouse_move_with_multi_info_process,
+                                         (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+                                         (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+                                         (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+   //
 
    return ee;
 }