macosx: Fix DefaultValueSlider tickmark position in RTL layout
authorMarvin Scholz <epirat07@gmail.com>
Wed, 9 Aug 2017 09:20:46 +0000 (11:20 +0200)
committerMarvin Scholz <epirat07@gmail.com>
Wed, 9 Aug 2017 09:20:52 +0000 (11:20 +0200)
modules/gui/macosx/VLCDefaultValueSliderCell.m
modules/gui/macosx/VLCVolumeSliderCell.m

index b9e817e..b46f9d4 100644 (file)
 }
 
 /*
- * Adapted from GNUstep NSSliderCell
- * - (NSRect)knobRectFlipped:(BOOL)flipped
- *
  * Calculates the knobRect for a given position
  * This is later used to draw the default tick mark in the center of
  * where the knob would be, when it is at the default value.
  */
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wpartial-availability"
-- (NSRect)knobRectFlipped:(BOOL)flipped forValue:(double)doubleValue
-{
-    NSRect superRect = [super knobRectFlipped:flipped];
-    NSPoint    origin = _trackRect.origin;
-    NSSize size = superRect.size;
 
-    if ([self isVertical] && flipped) {
-        doubleValue = _maxValue + _minValue - doubleValue;
-    }
-
-    doubleValue = (doubleValue - _minValue) / (_maxValue - _minValue);
-
-    if ([self isVertical] == YES) {
-        origin.x = superRect.origin.x;
-        origin.y += (_trackRect.size.height - size.height) * doubleValue;
-    } else {
-        origin.x += ((_trackRect.size.width - size.width) * doubleValue);
-        origin.y = superRect.origin.y;
-    }
-
-    return NSMakeRect(origin.x, origin.y, size.width, size.height);
-}
+- (NSRect)knobRectFlipped:(BOOL)flipped forValue:(double)doubleValue
+ {
+     NSRect resultRect;
+     double val = [self normalizedValue:doubleValue] / 100;
+
+     if (self.isVertical) {
+         resultRect.origin.x = -1;
+         resultRect.origin.y = (NSHeight(_trackRect) - self.knobThickness) * val;
+         if (_isRTL)
+             resultRect.origin.y = (NSHeight(_trackRect) - self.knobThickness) - resultRect.origin.y;
+     } else {
+         resultRect.origin.x = (NSWidth(_trackRect) - self.knobThickness) * val;
+         resultRect.origin.y = -1;
+         if (_isRTL)
+             resultRect.origin.x = (NSWidth(_trackRect) - self.knobThickness) - resultRect.origin.x;
+     }
+
+     resultRect.size.height = self.knobThickness;
+     resultRect.size.width = self.knobThickness;
+
+     return [self.controlView backingAlignedRect:resultRect options:NSAlignAllEdgesNearest];
+ }
 
 #pragma mark -
 #pragma mark Overwritten super methods
 
-- (NSRect)knobRectFlipped:(BOOL)flipped
-{
-    return [self knobRectFlipped:flipped forValue:[self doubleValue]];
-}
-
 - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
 {
     // Do all other drawing
index 93b2dad..6646358 100644 (file)
     [NSGraphicsContext restoreGraphicsState];
 }
 
-- (double)myNormalizedDouble
-{
-    double min = [self minValue];
-    double max = [self maxValue];
-    double current = [self doubleValue];
-
-    max -= min;
-    current -= min;
-
-    return current / max;
-}
-
-- (NSRect)knobRectFlipped:(BOOL)flipped
-{
-    double val = [self myNormalizedDouble];
-    NSRect rect = NSMakeRect((NSWidth(_trackRect) - self.knobThickness) * val, -1, self.knobThickness, self.knobThickness);
-    return [[self controlView] backingAlignedRect:rect options:NSAlignAllEdgesNearest];
-}
-
 - (void)drawBarInside:(NSRect)rect flipped:(BOOL)flipped
 {
     // Inset rect