changeset 20691:db5bb913dedf draft

-Feature [FS#4760]: [OSX] Pinch gesture support for zooming. (Based on patch by leecbaker)
author Michael Lutz <michi@icosahedron.de>
date Fri, 08 Mar 2013 09:56:31 +0100
parents f866c42de03d
children ae27ee8c7eed
files src/os/macosx/osx_stdafx.h src/video/cocoa/event.mm
diffstat 2 files changed, 48 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/os/macosx/osx_stdafx.h
+++ b/src/os/macosx/osx_stdafx.h
@@ -77,6 +77,14 @@
 #endif /* __LP64__ */
 #endif /* NSInteger */
 
+#ifndef CGFLOAT_DEFINED
+#if __LP64__
+typedef double CGFloat;
+#else
+typedef float CGFloat;
+#endif /* __LP64__ */
+#endif /* CGFLOAT_DEFINED */
+
 /* OS X SDK versions >= 10.5 have a non-const iconv. */
 #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
 #	define HAVE_NON_CONST_ICONV
--- a/src/video/cocoa/event.mm
+++ b/src/video/cocoa/event.mm
@@ -58,11 +58,28 @@
 static unsigned int _current_mods;
 static bool _tab_is_down;
 static bool _emulating_right_button;
+#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5)
+static float _current_magnification;
+#endif
 #ifdef _DEBUG
 static uint32 _tEvent;
 #endif
 
 
+/* Support for touch gestures is only available starting with the
+ * 10.6 SDK, even if it says that support starts in fact with 10.5.2.
+ * Replicate the needed stuff for older SDKs. */
+#if MAC_OS_X_VERSION_MAX_ALLOWED == MAC_OS_X_VERSION_10_5
+static const NSUInteger NSEventTypeMagnify    = 30;
+static const NSUInteger NSEventTypeEndGesture = 20;
+
+@interface NSEvent ()
+/* This message is valid for events of type NSEventTypeMagnify, on 10.5.2 or later */
+- (CGFloat)magnification WEAK_IMPORT_ATTRIBUTE;
+@end
+#endif
+
+
 static uint32 GetTick()
 {
 	struct timeval tim;
@@ -542,6 +559,29 @@
 			_cursor.v_wheel -= (int)([ event deltaY ] * 5 * _settings_client.gui.scrollwheel_multiplier);
 			break;
 
+#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5)
+		case NSEventTypeMagnify:
+			/* Pinch open or close gesture. */
+			_current_magnification += [ event magnification ] * 5.0f;
+
+			while (_current_magnification >= 1.0f) {
+				_current_magnification -= 1.0f;
+				_cursor.wheel++;
+				HandleMouseEvents();
+			}
+			while (_current_magnification <= -1.0f) {
+				_current_magnification += 1.0f;
+				_cursor.wheel--;
+				HandleMouseEvents();
+			}
+			break;
+
+		case NSEventTypeEndGesture:
+			/* Gesture ended. */
+			_current_magnification = 0.0f;
+			break;
+#endif
+
 		case NSCursorUpdate:
 		case NSMouseEntered:
 		case NSMouseExited: