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/353/head
Michael Lutz 2 years ago
parent 4844268d1c
commit 80fc5fb46c

@ -14,6 +14,10 @@
#include "toolbar_gui.h"
#include "table/sprites.h"
#ifdef MAC_OS_X_VERSION_10_12_2
# define HAVE_TOUCHBAR_SUPPORT
#endif
class VideoDriver_Cocoa;
/* Right Mouse Button Emulation enum */
@ -30,7 +34,7 @@ extern NSString *OTTDMainLaunchGameEngine;
+ (NSCursor *) clearCocoaCursor;
@end
#ifdef HAVE_OSX_1015_SDK
#ifdef HAVE_TOUCHBAR_SUPPORT
/* 9 items can be displayed on the touch bar when using default buttons. */
static NSArray *touchBarButtonIdentifiers = @[
@"openttd.pause",
@ -83,12 +87,11 @@ static NSDictionary *touchBarFallbackText = @{
#endif
/** 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
#ifdef HAVE_TOUCHBAR_SUPPORT
<NSTouchBarDelegate>
- (NSImage *)generateImage:(int)spriteId;
#endif
- (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;
}
#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
{
if (@available(macOS 10.15, *)) {
NSButtonTouchBarItem *btn = (NSButtonTouchBarItem *)sender;
NSNumber *hotkeyIndex = [ touchBarButtonActions objectForKey:btn.identifier ];
HandleToolbarHotkey(hotkeyIndex.intValue);
}
NSButton *btn = (NSButton *)sender;
NSNumber *hotkeyIndex = [ touchBarButtonActions objectForKey:btn.identifier ];
if (hotkeyIndex != nil) HandleToolbarHotkey(hotkeyIndex.intValue);
}
#pragma mark NSTouchBarProvider
- (nullable NSTouchBar *)makeTouchBar
{
NSTouchBar *bar = [ [ NSTouchBar alloc ] init ];
@ -464,37 +471,32 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
return outImage;
}
#pragma mark NSTouchBarDelegate
- (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];
NSImage *image = [ self generateImage:num.unsignedIntValue ];
NSNumber *num = touchBarButtonSprites[identifier];
NSImage *generatedImage = [ self generateImage:num.unsignedIntValue ];
if (generatedImage != nullptr) {
button.image = generatedImage;
} else {
button.title = NSLocalizedString(touchBarFallbackText[identifier], @"");
NSButton *button;
if (image != nil) {
/* 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 {
return nullptr;
button = [ NSButton buttonWithTitle:touchBarFallbackText[identifier] target:self action:@selector(touchBarButtonAction:) ];
}
}
#endif
/**
* Define the rectangle we draw our window in
*/
- (void)setFrame:(NSRect)frameRect display:(BOOL)flag
{
[ super setFrame:frameRect display:flag ];
button.identifier = identifier;
button.imageScaling = NSImageScaleProportionallyDown;
driver->AllocateBackingStore();
NSCustomTouchBarItem *tb_item = [ [ NSCustomTouchBarItem alloc] initWithIdentifier:identifier ];
tb_item.view = button;
return tb_item;
}
#endif
@end

Loading…
Cancel
Save