macOS: No custom HUD drawing on macOS 10.10+
authorMarvin Scholz <epirat07@gmail.com>
Sat, 24 Jun 2017 09:17:05 +0000 (11:17 +0200)
committerMarvin Scholz <epirat07@gmail.com>
Sat, 24 Jun 2017 09:17:05 +0000 (11:17 +0200)
Do not do custom HUD controls drawing on macOS 10.10 and higher, as
those have vibrancy, where nearly all controls look good on the HUD
panels.

The only exception is the OutlineView, as that one does not look good.

modules/gui/macosx/VLCHUDButtonCell.m
modules/gui/macosx/VLCHUDPopUpButtonCell.m
modules/gui/macosx/VLCHUDScroller.m
modules/gui/macosx/VLCHUDSliderCell.m
modules/gui/macosx/VLCHUDStepperCell.m
modules/gui/macosx/VLCHUDTextFieldCell.m

index 6b0eaa6..a61023f 100644 (file)
 //     POSSIBILITY OF SUCH DAMAGE.
 
 #import "VLCHUDButtonCell.h"
+#import "CompatibilityFixes.h"
 
 @implementation VLCHUDButtonCell
 
+
++ (void)load
+{
+    /* On 10.10+ we do not want custom drawing, therefore we swap out the implementation
+     * of the selectors below with their original implementations.
+     * Just calling super is not enough, as it would still result in different drawing
+     * due to lack of vibrancy.
+     */
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        swapoutOverride([VLCHUDButtonCell class], @selector(initWithCoder:));
+        swapoutOverride([VLCHUDButtonCell class], @selector(drawBezelWithFrame:inView:));
+        swapoutOverride([VLCHUDButtonCell class], @selector(drawTitle:withFrame:inView:));
+    }
+}
+
 - (instancetype)initWithCoder:(NSCoder *)coder
 {
     self = [super initWithCoder:coder];
index b7248cf..b07fd39 100644 (file)
 //     POSSIBILITY OF SUCH DAMAGE.
 
 #import "VLCHUDPopUpButtonCell.h"
+#import "CompatibilityFixes.h"
 
 @implementation VLCHUDPopUpButtonCell
 
++ (void)load
+{
+    /* On 10.10+ we do not want custom drawing, therefore we swap out the implementation
+     * of the selectors below with their original implementations.
+     * Just calling super in the overridden methods is not enough, to get the same drawin
+     * a non-subclassed cell would use.
+     */
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        swapoutOverride([VLCHUDPopUpButtonCell class], @selector(initWithCoder:));
+        swapoutOverride([VLCHUDPopUpButtonCell class], @selector(drawWithFrame:inView:));
+    }
+}
+
 - (instancetype)initWithCoder:(NSCoder *)coder
 {
     self = [super initWithCoder:coder];
index 9ed98c6..4fc4933 100644 (file)
@@ -35,6 +35,7 @@
 // transparent drawing issues.  Your awesome man!!!
 
 #import "VLCHUDScroller.h"
+#import "CompatibilityFixes.h"
 
 @implementation VLCHUDScroller
 
@@ -58,6 +59,9 @@
 #pragma mark Drawing Functions
 
 - (void)drawRect:(NSRect)rect {
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        return [super drawRect:rect];
+    }
     // See if we should use system default or supplied value
     if ([self arrowsPosition] == NSScrollerArrowsDefaultSetting) {
         arrowPosition = [[[NSUserDefaults standardUserDefaults] persistentDomainForName:NSGlobalDomain] valueForKey: @"AppleScrollBarVariant"];
@@ -91,6 +95,9 @@
 }
 
 - (void)drawKnob {
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        return [super drawKnob];
+    }
 
     if(![self isHoriz]) {
 
 }
 
 - (void)drawArrow:(NSScrollerArrow)arrow highlightPart:(NSUInteger)part {
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        return [super drawArrow:arrow highlight:part];
+    }
 
     if (arrow == NSScrollerDecrementArrow) {
 
 }
 
 - (void)drawKnobSlotInRect:(NSRect)rect highlight:(BOOL)highlight {
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        return [super drawKnobSlotInRect:rect highlight:highlight];
+    }
 
     if (![self isHoriz]) {
 
 #pragma mark -
 #pragma mark Helper Methods
 - (NSUsableScrollerParts)usableParts {
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        return [super usableParts];
+    }
 
     if ([self arrowsPosition] != NSScrollerArrowsNone) {
 
index 751a9d3..47ff709 100644 (file)
@@ -33,6 +33,7 @@
 //     POSSIBILITY OF SUCH DAMAGE.
 
 #import "VLCHUDSliderCell.h"
+#import "CompatibilityFixes.h"
 
 @implementation VLCHUDSliderCell
 
@@ -68,6 +69,9 @@ NSAffineTransform* RotationTransform(const CGFloat angle, const NSPoint point)
 #pragma clang diagnostic ignored "-Wpartial-availability"
 - (void)drawKnob:(NSRect)smallRect
 {
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        return [super drawKnob:smallRect];
+    }
     NSBezierPath *path = [NSBezierPath bezierPath];
     // Inset rect to have enough room for the stroke
     smallRect = NSInsetRect(smallRect, 1.0, 1.0);
@@ -155,6 +159,9 @@ NSAffineTransform* RotationTransform(const CGFloat angle, const NSPoint point)
 
 - (void)drawBarInside:(NSRect)fullRect flipped:(BOOL)flipped
 {
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        return [super drawBarInside:fullRect flipped:flipped];
+    }
     if (self.isVertical) {
         return [self drawVerticalBarInFrame:fullRect];
     } else {
@@ -315,6 +322,9 @@ NSAffineTransform* RotationTransform(const CGFloat angle, const NSPoint point)
 
 - (void)drawTickMarks
 {
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        return [super drawTickMarks];
+    }
     for (int i = 0; i < self.numberOfTickMarks; i++) {
         NSRect tickMarkRect = [self rectOfTickMarkAtIndex:i];
         if (self.isEnabled) {
index 30306c6..1e5253e 100644 (file)
@@ -33,6 +33,7 @@
 //     POSSIBILITY OF SUCH DAMAGE.
 
 #import "VLCHUDStepperCell.h"
+#import "CompatibilityFixes.h"
 
 @implementation VLCHUDStepperCell {
     int topButtonFlag;
@@ -69,6 +70,9 @@
 }
 
 -(void)drawWithFrame:(NSRect) frame inView:(NSView *) controlView {
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        return [super drawWithFrame:frame inView:controlView];
+    }
     [self drawRoundRectButtonInFrame:frame];
     [self drawArrowsInRect:frame];
 }
@@ -84,6 +88,9 @@
 
 -(BOOL)startTrackingAt:(NSPoint)startPoint inView:(NSView *)controlView
 {
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        return [super startTrackingAt:startPoint inView:controlView];
+    }
     NSRect frame = [controlView bounds];
 
     NSRect bottomRect = NSMakeRect(frame.origin.x,frame.origin.y,frame.size.width,frame.size.height/2);
 }
 -(BOOL)continueTracking:(NSPoint)lastPoint at:(NSPoint)currentPoint inView:(NSView *)controlView
 {
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        return [super continueTracking:lastPoint at:currentPoint inView:controlView];
+    }
     NSRect frame = [controlView bounds];
 
     NSRect bottomRect = NSMakeRect(frame.origin.x,frame.origin.y,frame.size.width,frame.size.height/2);
 }
 -(void)stopTracking:(NSPoint)lastPoint at:(NSPoint)stopPoint inView:(NSView *)controlView mouseIsUp:(BOOL)flag
 {
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        return [super stopTracking:lastPoint at:stopPoint inView:controlView mouseIsUp:flag];
+    }
     isTopDown = isBottomDown = topPressed = bottomPressed = NO;
     [[self controlView] setNeedsDisplay:YES];
     [super stopTracking:lastPoint at:stopPoint inView:controlView mouseIsUp:flag];
index 6110460..a58a131 100644 (file)
 
 @implementation VLCHUDTextFieldCell
 
++ (void)load
+{
+    /* On 10.10+ we do not want custom drawing, therefore we swap out the implementation
+     * of the selectors below with their original implementations.
+     */
+    if (OSX_YOSEMITE_AND_HIGHER) {
+        swapoutOverride([VLCHUDTextFieldCell class], @selector(initTextCell:));
+        swapoutOverride([VLCHUDTextFieldCell class], @selector(initWithCoder:));
+        swapoutOverride([VLCHUDTextFieldCell class], @selector(setUpFieldEditorAttributes:));
+        swapoutOverride([VLCHUDTextFieldCell class], @selector(drawWithFrame:inView:));
+        swapoutOverride([VLCHUDTextFieldCell class], @selector(_drawKeyboardFocusRingWithFrame:inView:));
+    }
+}
+
 #pragma mark Drawing Functions
 
 - (instancetype)initTextCell:(NSString *)aString
 
 - (void)commonInit
 {
-    if (OSX_YOSEMITE_AND_HIGHER) {
-        return;
-    }
-
     // Init colors
     _focusRing = [[NSShadow alloc] init];
     [_focusRing setShadowColor:NSColor.whiteColor];
 
 - (NSText *)setUpFieldEditorAttributes:(NSText *)textObj
 {
-    if (OSX_YOSEMITE_AND_HIGHER) {
-        return [super setUpFieldEditorAttributes:textObj];
-    }
-
     NSText *newText = [super setUpFieldEditorAttributes:textObj];
     NSColor *textColor = _cellTextColor;
     [(NSTextView *)newText setInsertionPointColor:textColor];
 
 - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
 {
-    if (OSX_YOSEMITE_AND_HIGHER) {
-        return [super drawWithFrame:cellFrame inView:controlView];
-    }
-
     // Adjust Rect
     cellFrame = NSInsetRect(cellFrame, 0.5f, 0.5f);
 
 
 - (void)_drawKeyboardFocusRingWithFrame:(NSRect)rect inView:(NSView*)view
 {
-    if (OSX_YOSEMITE_AND_HIGHER) {
-        if ([super respondsToSelector:@selector(_drawKeyboardFocusRingWithFrame:inView:)]) {
-            [super _drawKeyboardFocusRingWithFrame:rect inView:view];
-        }
-    }
-
     // Do nothing
 }