summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Lutz <michi@icosahedron.de>2021-12-31 00:29:51 +0100
committerMichael Lutz <michi@icosahedron.de>2022-01-01 12:19:30 +0100
commit80fc5fb46c306b23ef9fb4ffc3cf201133092b9d (patch)
tree709bd275d56cd6b70714d98fee7101a37e011d2f
parent4844268d1cdae0d0f50ac7d9a9d0bab57e8215da (diff)
downloadopenttd-80fc5fb46c306b23ef9fb4ffc3cf201133092b9d.tar.xz
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.
-rw-r--r--src/video/cocoa/cocoa_wnd.h15
-rw-r--r--src/video/cocoa/cocoa_wnd.mm62
2 files changed, 41 insertions, 36 deletions
diff --git a/src/video/cocoa/cocoa_wnd.h b/src/video/cocoa/cocoa_wnd.h
index 0b5c51b99..d0c946067 100644
--- a/src/video/cocoa/cocoa_wnd.h
+++ b/src/video/cocoa/cocoa_wnd.h
@@ -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;
diff --git a/src/video/cocoa/cocoa_wnd.mm b/src/video/cocoa/cocoa_wnd.mm
index 9ded8c80d..b204fb440 100644
--- a/src/video/cocoa/cocoa_wnd.mm
+++ b/src/video/cocoa/cocoa_wnd.mm
@@ -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