From bebe6cd3e8c8f51ba845874c6f355a9c1f3f696a Mon Sep 17 00:00:00 2001 From: Dzmitry Neviadomski Date: Mon, 25 Jan 2021 23:17:57 +0300 Subject: [PATCH] Fix Status bar message v-alignment and use monospaced font for Time. --- Base.lproj/MainMenu.xib | 21 +++++++------- Window/PositionSlider.h | 6 ++-- Window/PositionSlider.m | 18 ++++++------ Window/TimeField.h | 11 ++----- Window/TimeField.m | 63 +++++++++++++++++++++++------------------ 5 files changed, 62 insertions(+), 57 deletions(-) diff --git a/Base.lproj/MainMenu.xib b/Base.lproj/MainMenu.xib index e624ec114..26ddc4cf5 100644 --- a/Base.lproj/MainMenu.xib +++ b/Base.lproj/MainMenu.xib @@ -21,12 +21,13 @@ - + + - + - + - + - + @@ -310,7 +311,7 @@ - + @@ -631,12 +632,12 @@ - + - + - + diff --git a/Window/PositionSlider.h b/Window/PositionSlider.h index a1c692646..9e80a5622 100644 --- a/Window/PositionSlider.h +++ b/Window/PositionSlider.h @@ -11,8 +11,8 @@ @class TimeField; -@interface PositionSlider : TrackingSlider { - IBOutlet TimeField *positionTextField; -} +@interface PositionSlider : TrackingSlider + +@property (nonatomic) IBOutlet TimeField *positionTextField; @end diff --git a/Window/PositionSlider.m b/Window/PositionSlider.m index a9631ce0c..d857af3e7 100644 --- a/Window/PositionSlider.m +++ b/Window/PositionSlider.m @@ -13,23 +13,23 @@ - (void)setDoubleValue:(double)value { - [positionTextField setDoubleValue:value]; - - [super setDoubleValue:value]; + self.positionTextField.currentTime = (long)value; + + [super setDoubleValue:value]; } - (void)setMaxValue:(double)value { - [positionTextField setMaxDoubleValue:value]; - - [super setMaxValue:value]; + self.positionTextField.duration = (long)value; + + [super setMaxValue:value]; } - (void)mouseDragged:(NSEvent *)theEvent { - [positionTextField setDoubleValue:[self doubleValue]]; - - [super mouseDragged:theEvent]; + self.positionTextField.currentTime = (long)[self doubleValue]; + + [super mouseDragged:theEvent]; } @end diff --git a/Window/TimeField.h b/Window/TimeField.h index 72973c8dc..fd709e4b7 100644 --- a/Window/TimeField.h +++ b/Window/TimeField.h @@ -9,14 +9,9 @@ #import -@interface TimeField : NSTextField { - BOOL showTimeRemaining; - - double value; - double maxValue; -} +@interface TimeField : NSTextField -- (void)setMaxDoubleValue:(double)v; -- (void)setDoubleValue:(double)v; +@property (nonatomic) NSInteger currentTime; +@property (nonatomic) NSInteger duration; @end diff --git a/Window/TimeField.m b/Window/TimeField.m index 245d9e241..e15dc3ff3 100644 --- a/Window/TimeField.m +++ b/Window/TimeField.m @@ -8,48 +8,57 @@ #import "TimeField.h" +static NSString *kTimerModeKey = @"timerShowTimeRemaining"; -@implementation TimeField +NSString * formatTimer(long minutes, long seconds, unichar prefix) { + return [NSString localizedStringWithFormat:@"%C%lu:%02lu", prefix, minutes, seconds];; +} + +@implementation TimeField { + BOOL showTimeRemaining; + NSDictionary *fontAttributes; +} - (void)awakeFromNib { - showTimeRemaining = [[NSUserDefaults standardUserDefaults] boolForKey:@"timerShowTimeRemaining"]; + showTimeRemaining = [[NSUserDefaults standardUserDefaults] boolForKey:kTimerModeKey]; + if (@available(macOS 10.15, *)) { + fontAttributes = + @{NSFontAttributeName : [NSFont monospacedSystemFontOfSize:13 + weight:NSFontWeightMedium]}; + [self update]; + } } - (void)update { - NSString *text; - if (showTimeRemaining == NO) - { - int sec = value; - text = [NSString stringWithFormat:NSLocalizedString(@"TimeElapsed", @""), sec/60, sec%60]; - } - else - { - int sec = maxValue - value; - if (sec < 0) - sec = 0; - text = [NSString stringWithFormat:NSLocalizedString(@"TimeRemaining", @""), sec/60, sec%60]; - } - [self setStringValue:text]; + NSString *text; + if (showTimeRemaining == NO) + { + long sec = self.currentTime; + text = formatTimer(sec / 60, sec % 60, 0x2007); // Digit-width space + } + else + { + long sec = MAX(0, self.duration - self.currentTime); + text = formatTimer(sec / 60, sec % 60, 0x2012); // Hyphen + } + NSAttributedString *string = [[NSAttributedString alloc] initWithString:text + attributes:fontAttributes]; + [self setAttributedStringValue: string]; } - (void)mouseDown:(NSEvent *)theEvent { - showTimeRemaining = !showTimeRemaining; - [[NSUserDefaults standardUserDefaults] setBool:showTimeRemaining forKey:@"timerShowTimeRemaining"]; - [self update]; + showTimeRemaining = !showTimeRemaining; + [[NSUserDefaults standardUserDefaults] setBool:showTimeRemaining forKey:kTimerModeKey]; + [self update]; } -- (void)setMaxDoubleValue:(double)v +- (void)setCurrentTime:(NSInteger)currentTime { - maxValue = v; -} - -- (void)setDoubleValue:(double)v -{ - value = v; - [self update]; + _currentTime = currentTime; + [self update]; } @end