summaryrefslogtreecommitdiffstats
path: root/macosx/HBDockTextField.m
diff options
context:
space:
mode:
Diffstat (limited to 'macosx/HBDockTextField.m')
-rw-r--r--macosx/HBDockTextField.m86
1 files changed, 86 insertions, 0 deletions
diff --git a/macosx/HBDockTextField.m b/macosx/HBDockTextField.m
new file mode 100644
index 000000000..25d22b5b3
--- /dev/null
+++ b/macosx/HBDockTextField.m
@@ -0,0 +1,86 @@
+/* HBDockTextField.m $
+
+ This file is part of the HandBrake source code.
+ Homepage: <http://handbrake.fr/>.
+ It may be used under the terms of the GNU General Public License. */
+
+#import "HBDockTextField.h"
+
+#define DOCK_TEXTFIELD_ALPHA 0.8
+#define DOCK_TEXTFIELD_FONTSIZE 28.0
+
+@interface HBDockTextField ()
+
+@property (nonatomic, readonly) NSDictionary *textAttributes;
+@property (nonatomic, readonly) NSDictionary *smallTextAttributes;
+
+@property (nonatomic, readwrite) NSGradient *gradient;
+
+@end
+
+@implementation HBDockTextField
+
+- (instancetype)initWithFrame:(NSRect)frame
+{
+ self = [super initWithFrame:frame];
+ if (self) {
+ [[self cell] setBezelStyle:NSBezelStyleRounded];
+ _textToDisplay = @"";
+ _textAttributes = [self textAttributesWithFontSize:DOCK_TEXTFIELD_FONTSIZE];
+ _smallTextAttributes = [self textAttributesWithFontSize:DOCK_TEXTFIELD_FONTSIZE - 2];
+ [self changeGradientColors:[NSColor grayColor] endColor:[NSColor blackColor]];
+ }
+
+ return self;
+}
+
+- (NSDictionary *)textAttributesWithFontSize:(CGFloat)fontSize
+{
+ NSShadow *shadow = [[NSShadow alloc] init];
+ shadow.shadowColor = [NSColor blackColor];
+ shadow.shadowOffset = NSMakeSize(2, -2);
+ shadow.shadowBlurRadius = 6;
+
+ NSFont *font = [NSFont monospacedDigitSystemFontOfSize:fontSize weight:NSFontWeightBold];
+
+ return @{ NSForegroundColorAttributeName: [NSColor whiteColor],
+ NSFontAttributeName: font,
+ NSShadowAttributeName: shadow};
+}
+
+- (void)changeGradientColors:(NSColor *)startColor endColor:(NSColor *)endColor
+{
+ self.startColor = [startColor colorWithAlphaComponent:DOCK_TEXTFIELD_ALPHA];
+ self.endColor = [endColor colorWithAlphaComponent:DOCK_TEXTFIELD_ALPHA];
+ self.gradient = [[NSGradient alloc] initWithStartingColor:self.startColor endingColor:self.endColor];
+}
+
+- (void)drawRect:(NSRect)dirtyRect
+{
+ if (self.isHidden)
+ return;
+
+ NSSize size = self.bounds.size;
+ NSRect blackOutlineFrame = NSMakeRect(0.0, 0.0, size.width, size.height - 1.0);
+ double radius = self.bounds.size.height / 2;
+
+ [self.gradient drawInBezierPath:[NSBezierPath bezierPathWithRoundedRect:blackOutlineFrame xRadius:radius yRadius:radius] angle:90];
+
+ NSDictionary *attributes = self.textAttributes;
+ NSString *budgetString = _textToDisplay;
+ NSSize stringSize = [budgetString sizeWithAttributes:attributes];
+
+ if (size.width - 4 < stringSize.width)
+ {
+ attributes = self.smallTextAttributes;
+ stringSize = [budgetString sizeWithAttributes:attributes];
+ }
+
+ NSPoint centerPoint;
+ centerPoint.x = (dirtyRect.size.width / 2) - (stringSize.width / 2);
+ centerPoint.y = dirtyRect.size.height / 2 - (stringSize.height / 2) - 2;
+
+ [budgetString drawAtPoint:centerPoint withAttributes:attributes];
+}
+
+@end