cedric pushed a commit to branch master.

commit cf9b0180d62ffc2341364499ea3a0b756bc2675a
Author: Cedric Bail <[email protected]>
Date:   Fri Jul 19 15:39:49 2013 +0900

    edje: add threshold to draggable part.
---
 ChangeLog                            |   4 ++
 NEWS                                 |   1 +
 src/bin/edje/edje_cc_handlers.c      |  33 ++++++++++
 src/examples/edje/Makefile.am        |   1 +
 src/examples/edje/edje-threshold.edc |  87 +++++++++++++++++++++++++++
 src/lib/edje/edje_calc.c             | 113 ++++++++++++++++++++++++++++-------
 src/lib/edje/edje_callbacks.c        |  19 ++++--
 src/lib/edje/edje_data.c             |  23 ++++++-
 src/lib/edje/edje_load.c             |   2 +
 src/lib/edje/edje_private.h          |   9 ++-
 10 files changed, 265 insertions(+), 27 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 85c6c8b..6a42020 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-07-19  Cedric Bail
+
+       * Edje: add threshold to draggable part.
+
 2013-07-18  Mike Blumenkrantz
 
         * Ecore-X: add ECORE_X_SYNC env variable for xlib backend
diff --git a/NEWS b/NEWS
index f323149..446aeb0 100644
--- a/NEWS
+++ b/NEWS
@@ -120,6 +120,7 @@ Additions:
      - Add EDJE_INPUT_PANEL_LAYOUT_DATETIME layout
      - support edc proxy.source_visible, proxy.source_clip
      - support edc map color set
+     - Add threshold support to Edje draggable part.
     * Eeze:
      - Add a dummy libmount replacement for when libmount is not there.
     * Ecore_Con:
diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c
index ad645fa..0c1905c 100644
--- a/src/bin/edje/edje_cc_handlers.c
+++ b/src/bin/edje/edje_cc_handlers.c
@@ -234,6 +234,7 @@ static void st_collections_group_parts_part_access(void);
 static void st_collections_group_parts_part_dragable_x(void);
 static void st_collections_group_parts_part_dragable_y(void);
 static void st_collections_group_parts_part_dragable_confine(void);
+static void st_collections_group_parts_part_dragable_threshold(void);
 static void st_collections_group_parts_part_dragable_events(void);
 
 /* box and table items share these */
@@ -512,6 +513,7 @@ New_Statement_Handler statement_handlers[] =
      {"collections.group.parts.part.dragable.x", 
st_collections_group_parts_part_dragable_x},
      {"collections.group.parts.part.dragable.y", 
st_collections_group_parts_part_dragable_y},
      {"collections.group.parts.part.dragable.confine", 
st_collections_group_parts_part_dragable_confine},
+     {"collections.group.parts.part.dragable.threshold", 
st_collections_group_parts_part_dragable_threshold},
      {"collections.group.parts.part.dragable.events", 
st_collections_group_parts_part_dragable_events},
      {"collections.group.parts.part.entry_mode", 
st_collections_group_parts_part_entry_mode},
      {"collections.group.parts.part.select_mode", 
st_collections_group_parts_part_select_mode},
@@ -2719,6 +2721,7 @@ st_collections_group_inherit(void)
         ep->nested_children_count = ep2->nested_children_count;
 
         data_queue_copied_part_lookup(pc, &(ep2->dragable.confine_id), 
&(ep->dragable.confine_id));
+        data_queue_copied_part_lookup(pc, &(ep2->dragable.threshold_id), 
&(ep->dragable.threshold_id));
         data_queue_copied_part_lookup(pc, &(ep2->dragable.event_id), 
&(ep->dragable.event_id));
 
         epp = (Edje_Part_Parser *)ep;
@@ -3353,6 +3356,7 @@ edje_cc_handlers_part_make(void)
    ep->access = 0;
    ep->clip_to_id = -1;
    ep->dragable.confine_id = -1;
+   ep->dragable.threshold_id = -1;
    ep->dragable.event_id = -1;
    ep->items = NULL;
    ep->nested_children_count = 0;
@@ -4227,6 +4231,7 @@ st_collections_group_parts_part_access(void)
             ..
             dragable {
                 confine: "another part";
+               threshold: "another part";
                 events:  "another dragable part";
                 x: 0 0 0;
                 y: 0 0 0;
@@ -4322,6 +4327,34 @@ st_collections_group_parts_part_dragable_confine(void)
 /**
     @page edcref
     @property
+        threshold
+    @parameters
+        [another part's name]
+    @effect
+        When set, the movement of the dragged part can only start when it get
+       moved enough to be outside of the threshold part.
+    @endproperty
+*/
+static void
+st_collections_group_parts_part_dragable_threshold(void)
+{
+   Edje_Part_Collection *pc;
+
+   check_arg_count(1);
+
+   pc = eina_list_data_get(eina_list_last(edje_collections));
+     {
+       char *name;
+
+       name = parse_str(0);
+       data_queue_part_lookup(pc, name, 
&(current_part->dragable.threshold_id));
+       free(name);
+     }
+}
+
+/**
+    @page edcref
+    @property
         events
     @parameters
         [another dragable part's name]
diff --git a/src/examples/edje/Makefile.am b/src/examples/edje/Makefile.am
index fc3ec35..5d5dfa8 100644
--- a/src/examples/edje/Makefile.am
+++ b/src/examples/edje/Makefile.am
@@ -11,6 +11,7 @@ endif
 
 #put here all EDCs one needs to the examples
 EDCS = \
+edje-threshold.edc \
 animations2.edc \
 animations.edc \
 basic2.edc \
diff --git a/src/examples/edje/edje-threshold.edc 
b/src/examples/edje/edje-threshold.edc
new file mode 100644
index 0000000..1216c2b
--- /dev/null
+++ b/src/examples/edje/edje-threshold.edc
@@ -0,0 +1,87 @@
+collections {
+   group {
+      name: "main";
+      parts {
+         part {
+            type: RECT;
+            name: background;
+            mouse_events: 0;
+            description {
+               color: 0 0 0 255;
+            }
+         }
+         part {
+            type: RECT;
+            name: "area/vertical";
+            mouse_events: 0;
+            description {
+               color: 255 0 0 255;
+               align: 0.5 0;
+               min: 20 30;
+               max: 20 -1;
+            }
+         }
+         part {
+            type: RECT;
+            name: "area/horizontal";
+            mouse_events: 0;
+            description {
+               color: 255 0 0 255;
+               align: 0 0.5;
+               min: 30 20;
+               max: -1 20;
+            }
+         }
+         part {
+            type: RECT;
+            name: "threshold/horizontal";
+            mouse_events: 0;
+            description {
+               color: 0 0 255 255;
+               rel1 {
+                  to: "drag/horizontal";
+                  offset: -13 -13;
+               }
+               rel2 {
+                  to: "drag/horizontal";
+                  offset: +12 +12;
+               }
+            }
+         }
+         part {
+            type: RECT;
+            name: "drag/horizontal";
+            mouse_events: 1;
+            dragable {
+               confine: "area/horizontal";
+               threshold: "threshold/horizontal";
+               x: 1 1 0;
+               y: 0 0 0;
+            }
+            description {
+               aspect: 1 1;
+               color: 0 255 0 255;
+               min: 20 20;
+               max: 20 20;
+            }
+         }
+         part {
+            type: RECT;
+            name: "drag/vertical";
+            mouse_events: 1;
+            dragable {
+               confine: "area/vertical";
+               threshold: "threshold/horizontal";
+               x: 0 0 0;
+               y: 1 1 0;
+            }
+            description {
+               aspect: 1 1;
+               color: 0 255 255 255;
+               min: 20 20;
+               max: 20 20;
+            }
+         }
+      }
+   }
+}
diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c
index d75c350..a11fb7c 100644
--- a/src/lib/edje/edje_calc.c
+++ b/src/lib/edje/edje_calc.c
@@ -8,7 +8,8 @@ static void _edje_part_recalc_single(Edje *ed, Edje_Real_Part 
*ep,
                                      Edje_Real_Part *center, Edje_Real_Part 
*light, Edje_Real_Part *persp,
                                      Edje_Real_Part *rel1_to_x, Edje_Real_Part 
*rel1_to_y,
                                      Edje_Real_Part *rel2_to_x, Edje_Real_Part 
*rel2_to_y,
-                                     Edje_Real_Part *confine_to, 
Edje_Calc_Params *params,
+                                     Edje_Real_Part *confine_to, 
Edje_Real_Part *threshold,
+                                    Edje_Calc_Params *params,
                                      Evas_Coord mmw, Evas_Coord mmh,
                                      FLOAT_T pos);
 
@@ -775,6 +776,15 @@ _edje_part_dragable_calc(Edje *ed EINA_UNUSED, 
Edje_Real_Part *ep, FLOAT_T *x, F
 {
    if (ep->drag)
      {
+        Eina_Bool tx = EINA_FALSE;
+        Eina_Bool ty = EINA_FALSE;
+
+        if (ep->drag->threshold)
+          {
+             // Check if we are in the threshold or not and cancel the 
movement.
+             tx = ep->drag->threshold_x && ep->drag->threshold_started_x;
+             ty = ep->drag->threshold_y && ep->drag->threshold_started_y;
+          }
         if (ep->drag->confine_to)
           {
              FLOAT_T dx, dy, dw, dh;
@@ -795,15 +805,15 @@ _edje_part_dragable_calc(Edje *ed EINA_UNUSED, 
Edje_Real_Part *ep, FLOAT_T *x, F
              if (dh != ZERO) dy = DIV(dy, dh);
              else dy = ZERO;
 
-             if (x) *x = dx;
-             if (y) *y = dy;
+             if (x) *x = tx ? ep->drag->x : dx;
+             if (y) *y = ty ? ep->drag->y : dy;
 
              return ret;
           }
         else
           {
-             if (x) *x = ADD(FROM_INT(ep->drag->tmp.x), ep->drag->x);
-             if (y) *y = ADD(FROM_INT(ep->drag->tmp.y), ep->drag->y);
+             if (x) *x = tx ? ep->drag->x : ADD(FROM_INT(ep->drag->tmp.x), 
ep->drag->x);
+             if (y) *y = ty ? ep->drag->y : ADD(FROM_INT(ep->drag->tmp.y), 
ep->drag->y);
              return 0;
           }
      }
@@ -1799,8 +1809,56 @@ 
_edje_part_recalc_single_max(Edje_Part_Description_Common *desc,
 }
 
 static void
+_edje_part_recalc_single_drag_threshold(Edje_Real_Part *ep,
+                                       Edje_Real_Part *threshold,
+                                        Edje_Calc_Params *params)
+{
+   if (threshold)
+     {
+        if (ep->drag->threshold_started_x &&
+            threshold->x < TO_INT(params->eval.x) &&
+            TO_INT(params->eval.x) + TO_INT(params->eval.w) < threshold->x + 
threshold->w)
+          {
+             // Cancel movement to previous position due to our presence 
inside the threshold
+             params->eval.x = FROM_INT(params->req_drag.x);
+             params->eval.w = FROM_INT(params->req_drag.w);
+            ep->drag->threshold_x = EINA_TRUE;
+          }
+        else
+          {
+             params->req_drag.x = TO_INT(params->eval.x);
+             params->req_drag.w = TO_INT(params->eval.w);
+             ep->drag->threshold_started_x = EINA_FALSE;
+          }
+        if (ep->drag->threshold_started_y &&
+            threshold->y < TO_INT(params->eval.y) &&
+            TO_INT(params->eval.y) + TO_INT(params->eval.h) < threshold->y + 
threshold->h)
+          {
+             // Cancel movement to previous position due to our presence 
inside the threshold
+             params->eval.y = FROM_INT(params->req_drag.y);
+             params->eval.h = FROM_INT(params->req_drag.h);
+            ep->drag->threshold_y = EINA_TRUE;
+          }
+        else
+          {
+             params->req_drag.y = TO_INT(params->eval.y);
+             params->req_drag.h = TO_INT(params->eval.h);
+             ep->drag->threshold_started_y = EINA_FALSE;
+          }
+     }
+   else
+     {
+        params->req_drag.x = TO_INT(params->eval.x);
+        params->req_drag.w = TO_INT(params->eval.w);
+        params->req_drag.y = TO_INT(params->eval.y);
+        params->req_drag.h = TO_INT(params->eval.h);
+     }
+}
+
+static void
 _edje_part_recalc_single_drag(Edje_Real_Part *ep,
                               Edje_Real_Part *confine_to,
+                              Edje_Real_Part *threshold,
                               Edje_Calc_Params *params,
                               int minw, int minh,
                               int maxw, int maxh)
@@ -1833,8 +1891,6 @@ _edje_part_recalc_single_drag(Edje_Real_Part *ep,
              params->eval.x = FROM_INT(confine_to->x +
                                        ((offset / step) * step));
           }
-        params->req_drag.x = TO_INT(params->eval.x);
-        params->req_drag.w = TO_INT(params->eval.w);
 
         v = SCALE(ep->drag->size.y, confine_to->h);
 
@@ -1856,8 +1912,8 @@ _edje_part_recalc_single_drag(Edje_Real_Part *ep,
              params->eval.y = FROM_INT(confine_to->y +
                                        ((offset / step) * step));
           }
-        params->req_drag.y = TO_INT(params->eval.y);
-        params->req_drag.h = TO_INT(params->eval.h);
+
+        _edje_part_recalc_single_drag_threshold(ep, threshold, params);
 
         /* limit to confine */
         if (params->eval.x < FROM_INT(confine_to->x))
@@ -1881,12 +1937,9 @@ _edje_part_recalc_single_drag(Edje_Real_Part *ep,
      {
         /* simple dragable params */
         params->eval.x = ADD(ADD(params->eval.x, ep->drag->x), 
FROM_INT(ep->drag->tmp.x));
-        params->req_drag.x = FROM_INT(params->eval.x);
-        params->req_drag.w = FROM_INT(params->eval.w);
-
         params->eval.y = ADD(ADD(params->eval.y, ep->drag->y), 
FROM_INT(ep->drag->tmp.y));
-        params->req_drag.y = FROM_INT(params->eval.y);
-        params->req_drag.h = FROM_INT(params->eval.h);
+
+        _edje_part_recalc_single_drag_threshold(ep, threshold, params);
      }
 }
 
@@ -2183,6 +2236,7 @@ _edje_part_recalc_single(Edje *ed,
                          Edje_Real_Part *rel2_to_x,
                          Edje_Real_Part *rel2_to_y,
                          Edje_Real_Part *confine_to,
+                         Edje_Real_Part *threshold,
                          Edje_Calc_Params *params,
                          Evas_Coord mmw, Evas_Coord mmh,
                          FLOAT_T pos)
@@ -2289,7 +2343,7 @@ _edje_part_recalc_single(Edje *ed,
 
    /* take care of dragable part */
    if (ep->drag)
-     _edje_part_recalc_single_drag(ep, confine_to, params, minw, minh, maxw, 
maxh);
+     _edje_part_recalc_single_drag(ep, confine_to, threshold, params, minw, 
minh, maxw, maxh);
 
    /* fill */
    if (ep->part->type == EDJE_PART_TYPE_IMAGE)
@@ -2962,6 +3016,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
    int state1 = -1;
    int state2 = -1;
    int statec = -1;
+   int statet = -1;
 #else
    Edje_Calc_Params lp1, lp2;
 #endif
@@ -2979,6 +3034,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
    Edje_Calc_Params *p1, *pf;
    Edje_Part_Description_Common *chosen_desc;
    Edje_Real_Part *confine_to = NULL;
+   Edje_Real_Part *threshold = NULL;
    FLOAT_T pos = ZERO, pos2;
    Edje_Calc_Params lp3;
    Evas_Coord mmw = 0, mmh = 0;
@@ -3160,13 +3216,26 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
                }
           }
      }
-   if (ep->drag && ep->drag->confine_to)
+   if (ep->drag)
      {
-        confine_to = ep->drag->confine_to;
-        _edje_part_recalc(ed, confine_to, flags, NULL);
+        if (ep->drag->confine_to)
+          {
+             confine_to = ep->drag->confine_to;
+             _edje_part_recalc(ed, confine_to, flags, NULL);
 #ifdef EDJE_CALC_CACHE
-        statec = confine_to->state;
+             statec = confine_to->state;
 #endif
+          }
+        if (ep->drag->threshold)
+          {
+             threshold = ep->drag->threshold;
+             // We shall not recalculate the threshold position as
+             // we use it's previous position to assert the threshold
+             // the one before moving take action.
+#ifdef EDJE_CALC_CACHE
+             statet = threshold->state;
+#endif
+          }
      }
    //   if (ep->text.source)       _edje_part_recalc(ed, ep->text.source, 
flags);
    //   if (ep->text.text_source)  _edje_part_recalc(ed, ep->text.text_source, 
flags);
@@ -3240,6 +3309,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
             ep->invalidate ||
             state1 >= ep->param1.state ||
             statec >= ep->param1.state ||
+            statet >= ep->param1.state ||
             statec1 >= ep->param1.state ||
             statel1 >= ep->param1.state ||
             statep1 >= ep->param1.state ||
@@ -3250,7 +3320,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
           {
              _edje_part_recalc_single(ed, ep, ep->param1.description, 
chosen_desc, center[0], light[0], persp[0],
                                       rp1[Rel1X], rp1[Rel1Y], rp1[Rel2X], 
rp1[Rel2Y],
-                                      confine_to,
+                                      confine_to, threshold,
                                       p1, mmw, mmh, pos);
 #ifdef EDJE_CALC_CACHE
              if (flags == FLAG_XY)
@@ -3304,6 +3374,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
             ep->invalidate ||
             state2 >= ep->param2->state ||
             statec >= ep->param2->state ||
+            statet >= ep->param2->state ||
             statec2 >= ep->param2->state ||
             statel2 >= ep->param2->state ||
             statep2 >= ep->param2->state ||
@@ -3319,7 +3390,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
                                       rp2[Rel1Y],
                                       rp2[Rel2X],
                                       rp2[Rel2Y],
-                                      confine_to,
+                                      confine_to, threshold,
                                       p2, mmw, mmh, pos);
 #ifdef EDJE_CALC_CACHE
              if (flags == FLAG_XY)
diff --git a/src/lib/edje/edje_callbacks.c b/src/lib/edje/edje_callbacks.c
index 3be7cf0..9a508c7 100644
--- a/src/lib/edje/edje_callbacks.c
+++ b/src/lib/edje/edje_callbacks.c
@@ -139,8 +139,10 @@ _edje_mouse_down_signal_cb(void *data, Eo *obj, const 
Eo_Event_Description *desc
               rp->drag->down.x = ev->canvas.x;
             if (rp->part->dragable.y)
               rp->drag->down.y = ev->canvas.y;
-            if (!ignored)
-              _edje_emit(ed, "drag,start", rp->part->name);
+             rp->drag->threshold_x = EINA_FALSE;
+             rp->drag->threshold_y = EINA_FALSE;
+             rp->drag->threshold_started_x = EINA_TRUE;
+             rp->drag->threshold_started_y = EINA_TRUE;
          }
        rp->drag->down.count++;
      }
@@ -201,14 +203,18 @@ _edje_mouse_up_signal_cb(void *data, Eo *obj, const 
Eo_Event_Description *desc E
             rp->drag->down.count--;
             if (rp->drag->down.count == 0)
               {
+                  rp->drag->threshold_started_x = EINA_FALSE;
+                  rp->drag->threshold_started_y = EINA_FALSE;
                  rp->drag->need_reset = 1;
                   ed->recalc_call = EINA_TRUE;
                  ed->dirty = EINA_TRUE;
 #ifdef EDJE_CALC_CACHE
                  rp->invalidate = 1;
 #endif
-                 if (!ignored)
+                 if (!ignored && rp->drag->started)
                    _edje_emit(ed, "drag,stop", rp->part->name);
+                  rp->drag->started = EINA_FALSE;
+                  _edje_recalc_do(ed);
               }
          }
      }
@@ -306,7 +312,12 @@ _edje_mouse_move_signal_cb(void *data, Eo *obj, const 
Eo_Event_Description *desc
                  rp->drag->val.x = dx;
                  rp->drag->val.y = dy;
                  if (!ignored)
-                   _edje_emit(ed, "drag", rp->part->name);
+                    {
+                       if (!rp->drag->started)
+                         _edje_emit(ed, "drag,start", rp->part->name);
+                       _edje_emit(ed, "drag", rp->part->name);
+                       rp->drag->started = EINA_TRUE;
+                    }
                   ed->recalc_call = EINA_TRUE;
                  ed->dirty = EINA_TRUE;
 #ifdef EDJE_CALC_CACHE
diff --git a/src/lib/edje/edje_data.c b/src/lib/edje/edje_data.c
index da990e8..f8f9bb7 100644
--- a/src/lib/edje/edje_data.c
+++ b/src/lib/edje/edje_data.c
@@ -90,7 +90,27 @@ EMP(BOX, box);
 EMP(TABLE, table);
 EMP(EXTERNAL, external);
 EMP(SPACER, spacer);
-EMP(part, part);
+
+EAPI Eina_Mempool *_emp_part = NULL;
+
+static void *
+mem_alloc_part(size_t size)
+{
+  Edje_Part *ep;
+
+  ep = eina_mempool_malloc(_emp_part, size);
+  memset(ep, 0, size);
+  // This value need to be defined for older file that didn't provide it
+  // as it should -1 by default instead of 0.
+  ep->dragable.threshold_id = -1;
+  return ep;
+}
+
+static void
+mem_free_part(void *data)
+{
+  eina_mempool_free(_emp_part, data);
+}
 
 #define FREED(eed) \
    if (eed) \
@@ -956,6 +976,7 @@ _edje_edd_init(void)
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, 
"dragable.step_y", dragable.step_y, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, 
"dragable.count_y", dragable.count_y, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, 
"dragable.counfine_id", dragable.confine_id, EET_T_INT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, 
"dragable.threshold_id", dragable.threshold_id, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, 
"dragable.events_id", dragable.event_id, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_edje_edd_edje_part, Edje_Part, "items", 
items, _edje_edd_edje_pack_element_pointer);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "type", type, 
EET_T_UCHAR);
diff --git a/src/lib/edje/edje_load.c b/src/lib/edje/edje_load.c
index 70388be..df2b168 100644
--- a/src/lib/edje/edje_load.c
+++ b/src/lib/edje/edje_load.c
@@ -688,6 +688,8 @@ _edje_object_file_set_internal(Evas_Object *obj, const char 
*file, const char *g
                            {
                               if (rp->part->dragable.confine_id >= 0)
                                 rp->drag->confine_to = 
ed->table_parts[rp->part->dragable.confine_id % ed->table_parts_size];
+                              if (rp->part->dragable.threshold_id >= 0)
+                                rp->drag->threshold = 
ed->table_parts[rp->part->dragable.threshold_id % ed->table_parts_size];
                            }
 
                          if ((rp->type == EDJE_RP_TYPE_SWALLOW) &&
diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h
index 3ecd20f..d2bb323 100644
--- a/src/lib/edje/edje_private.h
+++ b/src/lib/edje/edje_private.h
@@ -942,6 +942,7 @@ struct _Edje_Part_Dragable
    int                 count_y; /* drag area divided by n (0 = no limit) */
 
    int                 confine_id; /* dragging within this bit, -1 = no */
+   int                 threshold_id; /* dragging outside this bit, -1 = no */
 
    /* davinchi */
    int           event_id; /* If it is used as scrollbar */
@@ -1487,8 +1488,14 @@ struct _Edje_Real_Part_Drag
    struct {
       int               x, y; // 8
    } tmp;
-   unsigned char        need_reset : 1; // 4
    Edje_Real_Part       *confine_to; // 4
+   Edje_Real_Part       *threshold; // 4
+   Eina_Bool             need_reset : 1; // 4
+   Eina_Bool             threshold_started_x : 1;
+   Eina_Bool             threshold_started_y : 1;
+   Eina_Bool             threshold_x : 1;
+   Eina_Bool             threshold_y : 1;
+   Eina_Bool             started : 1;
 }; // 104
 
 #define EDJE_RP_TYPE_NONE 0

-- 

------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk

Reply via email to