mirror of
https://github.com/ysoftdevs/Testa.git
synced 2026-01-18 17:26:58 +01:00
Initial Testa commit
This commit is contained in:
87
nativeprogressbar_mac.mm
Normal file
87
nativeprogressbar_mac.mm
Normal file
@@ -0,0 +1,87 @@
|
||||
// BSD License: https://github.com/hokein/DockProgressBar
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
@interface DockDownloadProgressBar : NSProgressIndicator
|
||||
|
||||
+ (DockDownloadProgressBar*)sharedDockDownloadProgressBar;
|
||||
|
||||
- (void)setProgress:(float)progress;
|
||||
|
||||
- (void)updateProgressBar;
|
||||
|
||||
- (void)hideProgressBar;
|
||||
|
||||
- (void)clear;
|
||||
|
||||
@end
|
||||
|
||||
@implementation DockDownloadProgressBar
|
||||
|
||||
+ (DockDownloadProgressBar*)sharedDockDownloadProgressBar {
|
||||
static DockDownloadProgressBar* progress_bar;
|
||||
NSDockTile* dock_tile = [NSApp dockTile];
|
||||
if (!progress_bar) {
|
||||
progress_bar = [[DockDownloadProgressBar alloc] initWithFrame:
|
||||
NSMakeRect(0.0f, 0.0f, dock_tile.size.width, 15.0f)];
|
||||
[progress_bar setStyle:NSProgressIndicatorBarStyle];
|
||||
[progress_bar setIndeterminate:NO];
|
||||
[progress_bar setBezeled:YES];
|
||||
[progress_bar setMinValue:0];
|
||||
[progress_bar setMaxValue:1];
|
||||
[progress_bar setHidden:NO];
|
||||
}
|
||||
if ([dock_tile contentView] == NULL) {
|
||||
NSImageView* content_view = [[NSImageView alloc] init];
|
||||
[content_view setImage:[NSApp applicationIconImage]];
|
||||
[dock_tile setContentView:content_view];
|
||||
[content_view addSubview:progress_bar];
|
||||
}
|
||||
return progress_bar;
|
||||
}
|
||||
|
||||
- (void)drawRect:(NSRect)dirtyRect {
|
||||
// Draw edges of rounded rect.
|
||||
NSRect rect = NSInsetRect([self bounds], 1.0, 1.0);
|
||||
CGFloat radius = rect.size.height / 2;
|
||||
NSBezierPath* bezier_path = [NSBezierPath bezierPathWithRoundedRect:rect
|
||||
xRadius:radius
|
||||
yRadius:radius];
|
||||
[bezier_path setLineWidth:2.0];
|
||||
[[NSColor grayColor] set];
|
||||
[bezier_path stroke];
|
||||
|
||||
// Fill the rounded rect.
|
||||
rect = NSInsetRect(rect, 2.0, 2.0);
|
||||
radius = rect.size.height / 2;
|
||||
bezier_path = [NSBezierPath bezierPathWithRoundedRect:rect xRadius:radius yRadius:radius];
|
||||
[bezier_path setLineWidth:1.0];
|
||||
[bezier_path addClip];
|
||||
|
||||
// Calculate the progress width.
|
||||
rect.size.width = floor(rect.size.width * ([self doubleValue] / [self maxValue]));
|
||||
|
||||
// Fill the progress bar with color blue.
|
||||
[[NSColor colorWithSRGBRed:0.2 green:0.6 blue:1 alpha:1] set];
|
||||
NSRectFill(rect);
|
||||
}
|
||||
|
||||
- (void)updateProgressBar {
|
||||
[self setHidden:NO];
|
||||
[[NSApp dockTile] display];
|
||||
}
|
||||
|
||||
- (void)hideProgressBar {
|
||||
[self setHidden:YES];
|
||||
[[NSApp dockTile] display];
|
||||
}
|
||||
|
||||
- (void)setProgress:(float)progress {
|
||||
[self setDoubleValue:progress];
|
||||
}
|
||||
|
||||
- (void)clear {
|
||||
[[NSApp dockTile] setContentView:NULL];
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user