Mercurial > hg > openttd
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: