[vlc-commits] macosx/linear progress indicator: rewrite to show a bar instead of a triangle
Felix Paul Kühne
git at videolan.org
Wed May 29 17:39:25 CEST 2019
vlc | branch: master | Felix Paul Kühne <felix at feepk.net> | Wed May 29 17:38:41 2019 +0200| [3fbd27c8db71a62d3df01adf4c6df5d446e2a358] | committer: Felix Paul Kühne
macosx/linear progress indicator: rewrite to show a bar instead of a triangle
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=3fbd27c8db71a62d3df01adf4c6df5d446e2a358
---
.../gui/macosx/extensions/NSColor+VLCAdditions.h | 2 +
.../gui/macosx/extensions/NSColor+VLCAdditions.m | 10 ++++
.../gui/macosx/views/VLCLinearProgressIndicator.m | 67 ++++++++++++++--------
3 files changed, 55 insertions(+), 24 deletions(-)
diff --git a/modules/gui/macosx/extensions/NSColor+VLCAdditions.h b/modules/gui/macosx/extensions/NSColor+VLCAdditions.h
index 122f44e4e9..a5bfb7105d 100644
--- a/modules/gui/macosx/extensions/NSColor+VLCAdditions.h
+++ b/modules/gui/macosx/extensions/NSColor+VLCAdditions.h
@@ -34,6 +34,8 @@ NS_ASSUME_NONNULL_BEGIN
+ (instancetype)VLClibraryAnnotationBackgroundColor;
+ (instancetype)VLClibrarySeparatorLightColor;
+ (instancetype)VLClibrarySeparatorDarkColor;
++ (instancetype)VLClibraryProgressIndicatorBackgroundColor;
++ (instancetype)VLClibraryProgressIndicatorForegroundColor;
@end
diff --git a/modules/gui/macosx/extensions/NSColor+VLCAdditions.m b/modules/gui/macosx/extensions/NSColor+VLCAdditions.m
index 5f9db425d6..3e17ac64a9 100644
--- a/modules/gui/macosx/extensions/NSColor+VLCAdditions.m
+++ b/modules/gui/macosx/extensions/NSColor+VLCAdditions.m
@@ -64,4 +64,14 @@
return [NSColor colorWithRed:0.11 green:0.09 blue:0.07 alpha:1.];
}
++ (instancetype)VLClibraryProgressIndicatorBackgroundColor
+{
+ return [NSColor colorWithRed:37./255. green:41./255. blue:44./255. alpha:.8];
+}
+
++ (instancetype)VLClibraryProgressIndicatorForegroundColor
+{
+ return [NSColor colorWithRed:246./255. green:127./255. blue:0. alpha:1.];
+}
+
@end
diff --git a/modules/gui/macosx/views/VLCLinearProgressIndicator.m b/modules/gui/macosx/views/VLCLinearProgressIndicator.m
index faaa022df7..fa4892b788 100644
--- a/modules/gui/macosx/views/VLCLinearProgressIndicator.m
+++ b/modules/gui/macosx/views/VLCLinearProgressIndicator.m
@@ -23,39 +23,58 @@
#import "VLCLinearProgressIndicator.h"
#import "extensions/NSColor+VLCAdditions.h"
- at implementation VLCLinearProgressIndicator
-
-- (void)drawRect:(NSRect)dirtyRect
+ at interface VLCLinearProgressIndicator()
{
- [super drawRect:dirtyRect];
-
- CGRect rect = NSRectToCGRect(dirtyRect);
-
- CGContextClearRect([NSGraphicsContext currentContext].CGContext, rect);
+ NSView *_foregroundView;
+}
+ at end
- NSColor *drawingColor = [NSColor VLClibraryHighlightColor];
+ at implementation VLCLinearProgressIndicator
- NSBezierPath* bezierPath = [NSBezierPath bezierPath];
+- (instancetype)initWithFrame:(NSRect)frameRect
+{
+ self = [super initWithFrame:frameRect];
+ if (self) {
+ [self setupSubviews];
+ }
+ return self;
+}
- float progress_width = self.progress * rect.size.width;
+- (instancetype)initWithCoder:(NSCoder *)decoder
+{
+ self = [super initWithCoder:decoder];
+ if (self) {
+ [self setupSubviews];
+ }
+ return self;
+}
- // Create our triangle
- [bezierPath moveToPoint:CGPointMake(progress_width - rect.size.height + 3., 2.)];
- [bezierPath lineToPoint:CGPointMake(progress_width - (rect.size.height/2), rect.size.height - 5.)];
- [bezierPath lineToPoint:CGPointMake(progress_width - 3., 2.)];
- [bezierPath closePath];
+- (void)setupSubviews
+{
+ self.wantsLayer = YES;
+ self.layer.backgroundColor = [NSColor VLClibraryProgressIndicatorBackgroundColor].CGColor;
- // Set the display for the path, and stroke it
- bezierPath.lineWidth = 6.;
- [drawingColor setStroke];
- [bezierPath stroke];
- [drawingColor setFill];
- [bezierPath fill];
+ CGRect frame = self.frame;
+ frame.size.width = 0.;
+ _foregroundView = [[NSView alloc] initWithFrame:frame];
+ _foregroundView.wantsLayer = YES;
+ _foregroundView.layer.backgroundColor = [NSColor VLClibraryProgressIndicatorForegroundColor].CGColor;
+ _foregroundView.autoresizingMask = NSViewWidthSizable;
+ _foregroundView.translatesAutoresizingMaskIntoConstraints = NO;
+ [self addSubview:_foregroundView];
}
-- (BOOL)isFlipped
+- (void)setProgress:(CGFloat)progress
{
- return YES;
+ if (progress > 1.) {
+ progress = 1.;
+ }
+
+ CGRect rect = self.frame;
+ rect.size.width = rect.size.width * progress;
+ _foregroundView.frame = rect;
+
+ _progress = progress;
}
@end
More information about the vlc-commits
mailing list