summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormichi_cc <michi_cc@openttd.org>2013-08-05 20:36:17 +0000
committermichi_cc <michi_cc@openttd.org>2013-08-05 20:36:17 +0000
commit8b476de3bfa2864b51435e7fb4988e1550cf1d3a (patch)
treec9fbb557a94c308b87a09b62a404e1f15ec82306 /src
parent8003da77aa5141df149988cc458a27969affc9b1 (diff)
downloadopenttd-8b476de3bfa2864b51435e7fb4988e1550cf1d3a.tar.xz
(svn r25666) -Feature [FS#4760]: [OSX] Pinch gesture support for zooming. (Based on patch by leecbaker)
Diffstat (limited to 'src')
-rw-r--r--src/os/macosx/osx_stdafx.h8
-rw-r--r--src/video/cocoa/event.mm40
2 files changed, 48 insertions, 0 deletions
diff --git a/src/os/macosx/osx_stdafx.h b/src/os/macosx/osx_stdafx.h
index 5adbde179..3b3e3fbde 100644
--- a/src/os/macosx/osx_stdafx.h
+++ b/src/os/macosx/osx_stdafx.h
@@ -108,6 +108,14 @@ typedef unsigned int NSUInteger;
#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
diff --git a/src/video/cocoa/event.mm b/src/video/cocoa/event.mm
index 81de0b7b2..0e7831c34 100644
--- a/src/video/cocoa/event.mm
+++ b/src/video/cocoa/event.mm
@@ -58,11 +58,28 @@ enum RightMouseButtonEmulationState {
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 @@ static bool QZ_PollEvent()
_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: