raster pushed a commit to branch master.

http://git.enlightenment.org/apps/rage.git/commit/?id=cb641e6a2a8c35700925afc5a30958fce19ba9c9

commit cb641e6a2a8c35700925afc5a30958fce19ba9c9
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Sun Nov 22 11:45:41 2015 +0900

    rage - single click will play/pause now and double still (un)fullscreen
---
 src/bin/win.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 src/bin/win.h |  3 +++
 2 files changed, 61 insertions(+), 3 deletions(-)

diff --git a/src/bin/win.c b/src/bin/win.c
index 31631b7..bff2bb5 100644
--- a/src/bin/win.c
+++ b/src/bin/win.c
@@ -59,6 +59,7 @@ _cb_win_del(void *data EINA_UNUSED, Evas *e EINA_UNUSED, 
Evas_Object *obj, void
    if (inf->drag_anim) ecore_animator_del(inf->drag_anim);
    if (inf->mouse_idle_timeout) ecore_timer_del(inf->mouse_idle_timeout);
    if (inf->albumart_timeout) ecore_timer_del(inf->albumart_timeout);
+   if (inf->down_timeout) ecore_timer_del(inf->down_timeout);
    EINA_LIST_FREE(inf->file_list, vid)
      {
         if (vid->file) eina_stringshare_del(vid->file);
@@ -110,10 +111,62 @@ _cb_mouse_move(void *data, Evas *evas EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED,
 static void
 _cb_mouse_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event_info)
 {
-   Evas_Event_Mouse_Down *m_info = event_info;
+   Evas_Event_Mouse_Down *ev = event_info;
+   Inf *inf = evas_object_data_get(data, "inf");
 
-   if (m_info->flags & EVAS_BUTTON_DOUBLE_CLICK)
-     elm_win_fullscreen_set(data, !elm_win_fullscreen_get(data));
+   if (ev->button != 1) return;
+   if (inf)
+     {
+        if (inf->down) return;
+        inf->down = EINA_TRUE;
+        inf->down_x = ev->canvas.x;
+        inf->down_y = ev->canvas.y;
+     }
+   if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
+     {
+        elm_win_fullscreen_set(data, !elm_win_fullscreen_get(data));
+        if (inf->down_timeout)
+          {
+             ecore_timer_del(inf->down_timeout);
+             inf->down_timeout = NULL;
+          }
+     }
+}
+
+static Eina_Bool
+_cb_down_timeout(void *data)
+{
+   Inf *inf = evas_object_data_get(data, "inf");
+   if (inf)
+     {
+        inf->down_timeout = NULL;
+        win_do_play_pause(data);
+     }
+   return EINA_FALSE;
+}
+
+static void
+_cb_mouse_up(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, 
void *event_info)
+{
+   Evas_Event_Mouse_Up *ev = event_info;
+   Inf *inf = evas_object_data_get(data, "inf");
+   Evas_Coord dx, dy;
+
+   if (ev->button != 1) return;
+   if (!inf->down) return;
+   inf->down = EINA_FALSE;
+   if (!(ev->flags & EVAS_BUTTON_DOUBLE_CLICK))
+     {
+        dx = abs(ev->canvas.x - inf->down_x);
+        dy = abs(ev->canvas.y - inf->down_y);
+        if ((dx <= elm_config_finger_size_get()) &&
+            (dy <= elm_config_finger_size_get()) &&
+            (inf))
+          {
+             if (inf->down_timeout) ecore_timer_del(inf->down_timeout);
+             inf->down_timeout = ecore_timer_add(0.3, _cb_down_timeout, data);
+          }
+     }
 }
 
 static void
@@ -451,6 +504,8 @@ win_add(void)
                                   _cb_mouse_move, win);
    evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN,
                                   _cb_mouse_down, win);
+   evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP,
+                                  _cb_mouse_up, win);
    elm_object_part_content_set(inf->lay, "rage.gesture", o);
    gesture_init(win, o);
    dnd_init(win, o);
diff --git a/src/bin/win.h b/src/bin/win.h
index 1d542fa..6c60ef2 100644
--- a/src/bin/win.h
+++ b/src/bin/win.h
@@ -11,6 +11,7 @@ struct _Inf
    Ecore_Timer *show_timeout;
    Ecore_Timer *mouse_idle_timeout;
    Ecore_Timer *albumart_timeout;
+   Ecore_Timer *down_timeout;
    Ecore_Animator *drag_anim;
    double last_action;
    double jump;
@@ -18,12 +19,14 @@ struct _Inf
    double drag_time, drag_start;
    int zoom_mode;
    int drag_dist, drag_momentum;
+   Evas_Coord down_x, down_y;
    Eina_Bool sized : 1;
    Eina_Bool last_action_rwind : 1;
    Eina_Bool playing : 1;
    Eina_Bool was_playing : 1;
    Eina_Bool dragging : 1;
    Eina_Bool browse_mode : 1;
+   Eina_Bool down : 1;
 };
 
 // ui high level controls

-- 


Reply via email to