diff options
author | michi_cc <michi_cc@openttd.org> | 2013-08-05 20:36:17 +0000 |
---|---|---|
committer | michi_cc <michi_cc@openttd.org> | 2013-08-05 20:36:17 +0000 |
commit | 8b476de3bfa2864b51435e7fb4988e1550cf1d3a (patch) | |
tree | c9fbb557a94c308b87a09b62a404e1f15ec82306 /src | |
parent | 8003da77aa5141df149988cc458a27969affc9b1 (diff) | |
download | openttd-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.h | 8 | ||||
-rw-r--r-- | src/video/cocoa/event.mm | 40 |
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: |