mirror of https://github.com/OpenTTD/OpenTTD
Change: [OSX] Allow touchbar usage on all supported OS versions.
Touchbar support was introduced in 10.12.2. There's no need to limit support to 10.15+, as the convenience class NSButtonTouchBarItem is easily replicated.pull/9780/head
parent
4844268d1c
commit
80fc5fb46c
|
@ -14,6 +14,10 @@
|
||||||
#include "toolbar_gui.h"
|
#include "toolbar_gui.h"
|
||||||
#include "table/sprites.h"
|
#include "table/sprites.h"
|
||||||
|
|
||||||
|
#ifdef MAC_OS_X_VERSION_10_12_2
|
||||||
|
# define HAVE_TOUCHBAR_SUPPORT
|
||||||
|
#endif
|
||||||
|
|
||||||
class VideoDriver_Cocoa;
|
class VideoDriver_Cocoa;
|
||||||
|
|
||||||
/* Right Mouse Button Emulation enum */
|
/* Right Mouse Button Emulation enum */
|
||||||
|
@ -30,7 +34,7 @@ extern NSString *OTTDMainLaunchGameEngine;
|
||||||
+ (NSCursor *) clearCocoaCursor;
|
+ (NSCursor *) clearCocoaCursor;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
#ifdef HAVE_OSX_1015_SDK
|
#ifdef HAVE_TOUCHBAR_SUPPORT
|
||||||
/* 9 items can be displayed on the touch bar when using default buttons. */
|
/* 9 items can be displayed on the touch bar when using default buttons. */
|
||||||
static NSArray *touchBarButtonIdentifiers = @[
|
static NSArray *touchBarButtonIdentifiers = @[
|
||||||
@"openttd.pause",
|
@"openttd.pause",
|
||||||
|
@ -83,12 +87,11 @@ static NSDictionary *touchBarFallbackText = @{
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/** Subclass of NSWindow to cater our special needs */
|
/** Subclass of NSWindow to cater our special needs */
|
||||||
#ifdef HAVE_OSX_1015_SDK
|
|
||||||
@interface OTTD_CocoaWindow : NSWindow <NSTouchBarDelegate>
|
|
||||||
@property (strong) NSSet *touchbarItems;
|
|
||||||
- (NSImage*)generateImage:(int)spriteId;
|
|
||||||
#else
|
|
||||||
@interface OTTD_CocoaWindow : NSWindow
|
@interface OTTD_CocoaWindow : NSWindow
|
||||||
|
#ifdef HAVE_TOUCHBAR_SUPPORT
|
||||||
|
<NSTouchBarDelegate>
|
||||||
|
|
||||||
|
- (NSImage *)generateImage:(int)spriteId;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
- (instancetype)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag driver:(VideoDriver_Cocoa *)drv;
|
- (instancetype)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag driver:(VideoDriver_Cocoa *)drv;
|
||||||
|
|
|
@ -405,18 +405,25 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_OSX_1015_SDK
|
/**
|
||||||
|
* Define the rectangle we draw our window in
|
||||||
|
*/
|
||||||
|
- (void)setFrame:(NSRect)frameRect display:(BOOL)flag
|
||||||
|
{
|
||||||
|
[ super setFrame:frameRect display:flag ];
|
||||||
|
|
||||||
|
driver->AllocateBackingStore();
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_TOUCHBAR_SUPPORT
|
||||||
|
|
||||||
- (void)touchBarButtonAction:(id)sender
|
- (void)touchBarButtonAction:(id)sender
|
||||||
{
|
{
|
||||||
if (@available(macOS 10.15, *)) {
|
NSButton *btn = (NSButton *)sender;
|
||||||
NSButtonTouchBarItem *btn = (NSButtonTouchBarItem *)sender;
|
|
||||||
NSNumber *hotkeyIndex = [ touchBarButtonActions objectForKey:btn.identifier ];
|
NSNumber *hotkeyIndex = [ touchBarButtonActions objectForKey:btn.identifier ];
|
||||||
HandleToolbarHotkey(hotkeyIndex.intValue);
|
if (hotkeyIndex != nil) HandleToolbarHotkey(hotkeyIndex.intValue);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark NSTouchBarProvider
|
|
||||||
- (nullable NSTouchBar *)makeTouchBar
|
- (nullable NSTouchBar *)makeTouchBar
|
||||||
{
|
{
|
||||||
NSTouchBar *bar = [ [ NSTouchBar alloc ] init ];
|
NSTouchBar *bar = [ [ NSTouchBar alloc ] init ];
|
||||||
|
@ -464,38 +471,33 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
||||||
return outImage;
|
return outImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark NSTouchBarDelegate
|
|
||||||
- (nullable NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier
|
- (nullable NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier
|
||||||
{
|
{
|
||||||
if (@available(macOS 10.15, *)) {
|
|
||||||
NSButtonTouchBarItem *button = [ [ NSButtonTouchBarItem alloc ] initWithIdentifier:identifier ];
|
|
||||||
button.target = self;
|
|
||||||
button.action = @selector(touchBarButtonAction:);
|
|
||||||
|
|
||||||
NSNumber *num = touchBarButtonSprites[identifier];
|
NSNumber *num = touchBarButtonSprites[identifier];
|
||||||
NSImage *generatedImage = [ self generateImage:num.unsignedIntValue ];
|
NSImage *image = [ self generateImage:num.unsignedIntValue ];
|
||||||
if (generatedImage != nullptr) {
|
|
||||||
button.image = generatedImage;
|
NSButton *button;
|
||||||
} else {
|
if (image != nil) {
|
||||||
button.title = NSLocalizedString(touchBarFallbackText[identifier], @"");
|
/* Human Interface Guidelines: Maximum touch bar glyph size 22 pt. */
|
||||||
|
CGFloat max_dim = std::max(image.size.width, image.size.height);
|
||||||
|
if (max_dim > 0.0) {
|
||||||
|
CGFloat scale = 22.0 / max_dim;
|
||||||
|
image.size = NSMakeSize(image.size.width * scale, image.size.height * scale);
|
||||||
}
|
}
|
||||||
return button;
|
|
||||||
|
button = [ NSButton buttonWithImage:image target:self action:@selector(touchBarButtonAction:) ];
|
||||||
} else {
|
} else {
|
||||||
return nullptr;
|
button = [ NSButton buttonWithTitle:touchBarFallbackText[identifier] target:self action:@selector(touchBarButtonAction:) ];
|
||||||
}
|
}
|
||||||
|
button.identifier = identifier;
|
||||||
|
button.imageScaling = NSImageScaleProportionallyDown;
|
||||||
|
|
||||||
|
NSCustomTouchBarItem *tb_item = [ [ NSCustomTouchBarItem alloc] initWithIdentifier:identifier ];
|
||||||
|
tb_item.view = button;
|
||||||
|
return tb_item;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the rectangle we draw our window in
|
|
||||||
*/
|
|
||||||
- (void)setFrame:(NSRect)frameRect display:(BOOL)flag
|
|
||||||
{
|
|
||||||
[ super setFrame:frameRect display:flag ];
|
|
||||||
|
|
||||||
driver->AllocateBackingStore();
|
|
||||||
}
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation OTTD_CocoaView {
|
@implementation OTTD_CocoaView {
|
||||||
|
|
Loading…
Reference in New Issue