vlc | branch: master | Marvin Scholz <[email protected]> | Thu Jun 15 13:37:27 
2017 +0200| [99bd6c0239b32f78e07cfd30ef4a08f32e34b30d] | committer: Marvin 
Scholz

macOS: Fix drawing of VLCHUDSliderCell track

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=99bd6c0239b32f78e07cfd30ef4a08f32e34b30d
---

 modules/gui/macosx/VLCHUDSliderCell.h |  55 ++++----
 modules/gui/macosx/VLCHUDSliderCell.m | 227 +++++++++++++++++++++++++++-------
 2 files changed, 213 insertions(+), 69 deletions(-)

diff --git a/modules/gui/macosx/VLCHUDSliderCell.h 
b/modules/gui/macosx/VLCHUDSliderCell.h
index e0271f3a66..a9a76951ac 100644
--- a/modules/gui/macosx/VLCHUDSliderCell.h
+++ b/modules/gui/macosx/VLCHUDSliderCell.h
@@ -1,25 +1,36 @@
-/*****************************************************************************
- * VLCHUDSliderCell.h: Custom slider cell UI for dark HUD Panels
- *****************************************************************************
- * Copyright (C) 2016 VLC authors and VideoLAN
- * $Id$
- *
- * Authors: Marvin Scholz <epirat07 -at- gmail -dot- com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, 
USA.
- *****************************************************************************/
+//
+//  VLCHUDSliderCell.m
+//  BGHUDAppKit
+//
+//  Created by BinaryGod on 5/30/08.
+//
+//  Copyright (c) 2008, Tim Davis (BinaryMethod.com, [email protected])
+//  All rights reserved.
+//
+//  Redistribution and use in source and binary forms, with or without 
modification,
+//  are permitted provided that the following conditions are met:
+//
+//             Redistributions of source code must retain the above copyright 
notice, this
+//     list of conditions and the following disclaimer.
+//
+//             Redistributions in binary form must reproduce the above 
copyright notice,
+//     this list of conditions and the following disclaimer in the 
documentation and/or
+//     other materials provided with the distribution.
+//
+//             Neither the name of the BinaryMethod.com nor the names of its 
contributors
+//     may be used to endorse or promote products derived from this software 
without
+//     specific prior written permission.
+//
+//     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS 
IS AND
+//     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
IMPLIED
+//     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
DISCLAIMED.
+//     IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY 
DIRECT,
+//     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
(INCLUDING,
+//     BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
OF USE, DATA,
+//     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
OF LIABILITY,
+//     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
OTHERWISE)
+//     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
THE
+//     POSSIBILITY OF SUCH DAMAGE.
 
 #import <Cocoa/Cocoa.h>
 
diff --git a/modules/gui/macosx/VLCHUDSliderCell.m 
b/modules/gui/macosx/VLCHUDSliderCell.m
index b879fbe580..244c832d3d 100644
--- a/modules/gui/macosx/VLCHUDSliderCell.m
+++ b/modules/gui/macosx/VLCHUDSliderCell.m
@@ -1,25 +1,36 @@
-/*****************************************************************************
- * VLCHUDSliderCell.m: Custom slider cell UI for dark HUD Panels
- *****************************************************************************
- * Copyright (C) 2016 VLC authors and VideoLAN
- * $Id$
- *
- * Authors: Marvin Scholz <epirat07 -at- gmail -dot- com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, 
USA.
- *****************************************************************************/
+//
+//  VLCHUDSliderCell.m
+//  BGHUDAppKit
+//
+//  Created by BinaryGod on 5/30/08.
+//
+//  Copyright (c) 2008, Tim Davis (BinaryMethod.com, [email protected])
+//  All rights reserved.
+//
+//  Redistribution and use in source and binary forms, with or without 
modification,
+//  are permitted provided that the following conditions are met:
+//
+//             Redistributions of source code must retain the above copyright 
notice, this
+//     list of conditions and the following disclaimer.
+//
+//             Redistributions in binary form must reproduce the above 
copyright notice,
+//     this list of conditions and the following disclaimer in the 
documentation and/or
+//     other materials provided with the distribution.
+//
+//             Neither the name of the BinaryMethod.com nor the names of its 
contributors
+//     may be used to endorse or promote products derived from this software 
without
+//     specific prior written permission.
+//
+//     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS 
IS AND
+//     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
IMPLIED
+//     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
DISCLAIMED.
+//     IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY 
DIRECT,
+//     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
(INCLUDING,
+//     BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
OF USE, DATA,
+//     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 
OF LIABILITY,
+//     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
OTHERWISE)
+//     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
THE
+//     POSSIBILITY OF SUCH DAMAGE.
 
 #import "VLCHUDSliderCell.h"
 
@@ -144,41 +155,163 @@ NSAffineTransform* RotationTransform(const CGFloat 
angle, const NSPoint point)
 
 - (void)drawBarInside:(NSRect)fullRect flipped:(BOOL)flipped
 {
-    NSBezierPath *path;
+    if (self.isVertical) {
+        return [self drawVerticalBarInFrame:fullRect];
+    } else {
+        return [self drawHorizontalBarInFrame:fullRect];
+    }
+}
+#pragma clang diagnostic pop
 
-    // Determine current position of knob
-    CGFloat knobPosition = (self.doubleValue - self.minValue) / (self.maxValue 
- self.minValue);
+- (void)drawVerticalBarInFrame:(NSRect)frame
+{
+    // Adjust frame based on ControlSize
+    switch ([self controlSize]) {
 
-    // Copy rect
-    NSRect activeRect = fullRect;
+        case NSRegularControlSize:
 
-    // Do not draw disabled part for sliders with tickmarks
-    if (self.numberOfTickMarks == 0) {
-        if (self.isVertical) {
-            // Calculate active rect (bottom part of slider)
-            if (flipped) {
-                activeRect.origin.y = (1 - knobPosition) * 
activeRect.size.height;
-                activeRect.size.height -= activeRect.origin.y - 1;
+            if ([self numberOfTickMarks] != 0) {
+                if ([self tickMarkPosition] == NSTickMarkRight) {
+                    frame.origin.x += 4;
+                } else {
+                    frame.origin.x += frame.size.width - 9;
+                }
             } else {
-                activeRect.size.height -= (1 - knobPosition) * 
activeRect.size.height - 1;
+                frame.origin.x = frame.origin.x + (((frame.origin.x + 
frame.size.width) /2) - 2.5f);
             }
-        } else {
-            // Calculate active rect (left part of slider)
-            activeRect.size.width = knobPosition * 
(self.controlView.frame.size.width - 1.0);
-        }
+            frame.origin.x += 0.5f;
+            frame.origin.y += 2.5f;
+            frame.size.height -= 6;
+            frame.size.width = 5;
+            break;
+
+        case NSSmallControlSize:
+
+            if ([self numberOfTickMarks] != 0) {
+                if ([self tickMarkPosition] == NSTickMarkRight) {
+                    frame.origin.x += 3;
+                } else {
+                    frame.origin.x += frame.size.width - 8;
+                }
+            } else {
+                frame.origin.x = frame.origin.x + (((frame.origin.x + 
frame.size.width) /2) - 2.5f);
+            }
+            frame.origin.y += 0.5f;
+            frame.size.height -= 1;
+            frame.origin.x += 0.5f;
+            frame.size.width = 5;
+            break;
+
+        case NSMiniControlSize:
+
+            if ([self numberOfTickMarks] != 0) {
+                if ([self tickMarkPosition] == NSTickMarkRight) {
+                    frame.origin.x += 2.5f;
+                } else {
+                    frame.origin.x += frame.size.width - 6.5f;
+                }
+            } else {
+                frame.origin.x = frame.origin.x + (((frame.origin.x + 
frame.size.width) /2) - 2);
+            }
+            frame.origin.x += 1;
+            frame.origin.y += 0.5f;
+            frame.size.height -= 1;
+            frame.size.width = 3;
+            break;
+    }
+    
+    // Draw Bar
+    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect: frame 
xRadius: 2 yRadius: 2];
+    
+    if ([self isEnabled]) {
+        [_sliderColor set];
+        [path fill];
 
-        // Draw inactive bar
-        [_disabledSliderColor setFill];
-        path = [NSBezierPath bezierPathWithRoundedRect:fullRect xRadius:2.0 
yRadius:2.0];
+        [_strokeColor set];
+        [path stroke];
+    } else {
+        [_disabledSliderColor set];
         [path fill];
+
+        [_disabledStrokeColor set];
+        [path stroke];
     }
+}
+
+- (void)drawHorizontalBarInFrame:(NSRect)frame
+{
+    // Adjust frame based on ControlSize
+    switch ([self controlSize]) {
+
+        case NSRegularControlSize:
+
+            if ([self numberOfTickMarks] != 0) {
+                if ([self tickMarkPosition] == NSTickMarkBelow) {
+                    frame.origin.y += 4;
+                } else {
+                    frame.origin.y += frame.size.height - 10;
+                }
+            } else {
+                frame.origin.y = frame.origin.y + (((frame.origin.y + 
frame.size.height) /2) - 2.5f);
+            }
+            frame.origin.x += 2.5f;
+            frame.origin.y += 0.5f;
+            frame.size.width -= 5;
+            frame.size.height = 5;
+            break;
+
+        case NSSmallControlSize:
+
+            if ([self numberOfTickMarks] != 0) {
+                if ([self tickMarkPosition] == NSTickMarkBelow) {
+                    frame.origin.y += 2;
+                } else {
+                    frame.origin.y += frame.size.height - 8;
+                }
+            } else {
+                frame.origin.y = frame.origin.y + (((frame.origin.y + 
frame.size.height) /2) - 2.5f);
+            }
+            frame.origin.x += 0.5f;
+            frame.origin.y += 0.5f;
+            frame.size.width -= 1;
+            frame.size.height = 5;
+            break;
+
+        case NSMiniControlSize:
 
-    // Draw active bar
-    [_sliderColor setFill];
-    path = [NSBezierPath bezierPathWithRoundedRect:activeRect xRadius:2.0 
yRadius:2.0];
-    [path fill];
+            if ([self numberOfTickMarks] != 0) {
+                if ([self tickMarkPosition] == NSTickMarkBelow) {
+                    frame.origin.y += 2;
+                } else {
+                    frame.origin.y += frame.size.height - 6;
+                }
+            } else {
+                frame.origin.y = frame.origin.y + (((frame.origin.y + 
frame.size.height) /2) - 2);
+            }
+            frame.origin.x += 0.5f;
+            frame.origin.y += 0.5f;
+            frame.size.width -= 1;
+            frame.size.height = 3;
+            break;
+    }
+    
+    // Draw Bar
+    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:frame 
xRadius:2 yRadius:2];
+    
+    if ([self isEnabled]) {
+        [_sliderColor set];
+        [path fill];
+        
+        [_strokeColor set];
+        [path stroke];
+    } else {
+        [_disabledSliderColor set];
+        [path fill];
+        
+        [_disabledStrokeColor set];
+        [path stroke];
+    }
 }
-#pragma clang diagnostic pop
 
 - (void)drawTickMarks
 {

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to