captainigloo pushed a commit to branch master.

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

commit 869ed025a2eca5f4d2b808fe456ddc65a40b508a
Author: pierre lamot <pierre.la...@openwide.fr>
Date:   Thu Apr 2 15:44:45 2015 +0200

    ecore_cocoa: fix scrollwheel behavior
    
      - prioritize vertical scroll over horizontal
      - set amount to either -1 or 1, since EFL doesn't handle other value 
properly
      - fix wheel bouncing with some devices (X:0,Y:0 scrolling events)
    
      @fix
---
 src/lib/ecore_cocoa/ecore_cocoa.m | 28 ++++++++++++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/lib/ecore_cocoa/ecore_cocoa.m 
b/src/lib/ecore_cocoa/ecore_cocoa.m
index 1da3ed5..64eda41 100644
--- a/src/lib/ecore_cocoa/ecore_cocoa.m
+++ b/src/lib/ecore_cocoa/ecore_cocoa.m
@@ -324,16 +324,40 @@ ecore_cocoa_feed_events(void *anEvent)
 
          EcoreCocoaWindow *window = (EcoreCocoaWindow *)[event window];
          Ecore_Event_Mouse_Wheel *ev;
+         float dx, dy = 0;
 
          ev = malloc(sizeof(Ecore_Event_Mouse_Wheel));
          if (!ev) return pass;
 
+         if ([event hasPreciseScrollingDeltas])
+           {
+              dx = -[event scrollingDeltaX];
+              dy = -[event scrollingDeltaY];
+           }
+         else
+           {
+              dx = -[event deltaX];
+              dy = -[event deltaY];
+           }
+
+         if (dx == 0 && dy == 0)
+           {
+              break;
+           }
+
          ev->window = (Ecore_Window)window.ecore_window_data;
          ev->event_window = ev->window;
          ev->modifiers = 0; /* FIXME: keep modifier around. */
          ev->timestamp = time;
-         ev->z = [event deltaX] != 0 ? [event deltaX] : -([event deltaY]);
-         ev->direction = [event deltaX] != 0 ? 1 : 0;
+         if (dy != 0)
+           {
+              ev->z = (dy >  0) ? 1 : -1;
+           }
+         else
+           {
+              ev->z = (dx >  0) ? 1 : -1;
+           }
+         ev->direction = (dy != 0) ? 0 : 1;
 
          ecore_event_add(ECORE_EVENT_MOUSE_WHEEL, ev, NULL, NULL);
 

-- 


Reply via email to