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