From 0956b4ebcdcfd9b62610bfc4c971592a44da4b1b Mon Sep 17 00:00:00 2001 From: Toxblh Date: Sun, 15 Apr 2018 21:52:36 +0100 Subject: [PATCH] move CustomSlider to file --- MTMR.xcodeproj/project.pbxproj | 4 ++ MTMR/CustomSlider.swift | 103 ++++++++++++++++++++++++++++++++ MTMR/VolumeViewController.swift | 93 ---------------------------- 3 files changed, 107 insertions(+), 93 deletions(-) create mode 100644 MTMR/CustomSlider.swift diff --git a/MTMR.xcodeproj/project.pbxproj b/MTMR.xcodeproj/project.pbxproj index fac7ea6..ebed5ca 100644 --- a/MTMR.xcodeproj/project.pbxproj +++ b/MTMR.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 6027D1B92080E52A004FFDC7 /* BrightnessViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6027D1B72080E52A004FFDC7 /* BrightnessViewController.swift */; }; 6027D1BA2080E52A004FFDC7 /* VolumeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6027D1B82080E52A004FFDC7 /* VolumeViewController.swift */; }; B0008E552080286C003AD4DD /* SupportHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0008E542080286C003AD4DD /* SupportHelpers.swift */; }; + B05600D32083E9BB00EB218D /* CustomSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = B05600D22083E9BB00EB218D /* CustomSlider.swift */; }; B059D622205E03F5006E6B86 /* TouchBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B059D621205E03F5006E6B86 /* TouchBarController.swift */; }; B059D624205E04F3006E6B86 /* CustomButtonTouchBarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B059D623205E04F3006E6B86 /* CustomButtonTouchBarItem.swift */; }; B059D62D205F11E8006E6B86 /* DFRFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B059D62C205F11E8006E6B86 /* DFRFoundation.framework */; }; @@ -61,6 +62,7 @@ 6027D1B72080E52A004FFDC7 /* BrightnessViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BrightnessViewController.swift; sourceTree = ""; }; 6027D1B82080E52A004FFDC7 /* VolumeViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VolumeViewController.swift; sourceTree = ""; }; B0008E542080286C003AD4DD /* SupportHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SupportHelpers.swift; sourceTree = ""; }; + B05600D22083E9BB00EB218D /* CustomSlider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomSlider.swift; sourceTree = ""; }; B059D621205E03F5006E6B86 /* TouchBarController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TouchBarController.swift; sourceTree = ""; }; B059D623205E04F3006E6B86 /* CustomButtonTouchBarItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomButtonTouchBarItem.swift; sourceTree = ""; }; B059D629205E13E5006E6B86 /* TouchBarPrivateApi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TouchBarPrivateApi.h; sourceTree = ""; }; @@ -163,6 +165,7 @@ 6027D1B72080E52A004FFDC7 /* BrightnessViewController.swift */, 6027D1B82080E52A004FFDC7 /* VolumeViewController.swift */, 368EDDE620812A1D00E10953 /* ScrollViewItem.swift */, + B05600D22083E9BB00EB218D /* CustomSlider.swift */, ); path = MTMR; sourceTree = ""; @@ -321,6 +324,7 @@ buildActionMask = 2147483647; files = ( B059D622205E03F5006E6B86 /* TouchBarController.swift in Sources */, + B05600D32083E9BB00EB218D /* CustomSlider.swift in Sources */, 36C2ECD9207B74B4003CDA33 /* AppleScriptTouchBarItem.swift in Sources */, B0F8771A207AC1EA00D6E430 /* TouchBarSupport.m in Sources */, B0008E552080286C003AD4DD /* SupportHelpers.swift in Sources */, diff --git a/MTMR/CustomSlider.swift b/MTMR/CustomSlider.swift new file mode 100644 index 0000000..493d3ad --- /dev/null +++ b/MTMR/CustomSlider.swift @@ -0,0 +1,103 @@ +// +// CustomSlider.swift +// MTMR +// +// Created by Anton Palgunov on 15/04/2018. +// Copyright © 2018 Anton Palgunov. All rights reserved. +// + +import Foundation + +class CustomSliderCell: NSSliderCell { + var knobImage:NSImage! + private var _currentKnobRect:NSRect! + private var _barRect:NSRect! + + required init(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + } + + override init() { + super.init() + } + + init(knob:NSImage?) { + knobImage = knob; + super.init() + } + + override func drawKnob(_ knobRect: NSRect) { + + if (knobImage == nil) { + super.drawKnob(knobRect) + return; + } + + _currentKnobRect = knobRect; + drawBar(inside: _barRect, flipped: false) + + let newOriginX:CGFloat = knobRect.origin.x * + (_barRect.size.width - (knobImage.size.width - knobRect.size.width)) / _barRect.size.width; + + knobImage.draw(at: NSPoint(x: newOriginX, y: knobRect.origin.y+3), from: NSRect(x: 0, y: 0, width: knobImage.size.width, height: knobImage.size.height), operation: NSCompositingOperation.sourceOver, fraction: 1) + } + + override func drawBar(inside aRect: NSRect, flipped: Bool) { + _barRect = aRect + + var rect = aRect + rect.size.height = CGFloat(3) + let barRadius = CGFloat(3) + let value = CGFloat((self.doubleValue - self.minValue) / (self.maxValue - self.minValue)) + let finalWidth = CGFloat(value * (self.controlView!.frame.size.width - 12)) + + var leftRect = rect + leftRect.size.width = finalWidth + let bg = NSBezierPath(roundedRect: rect, xRadius: barRadius, yRadius: barRadius) + NSColor.lightGray.setFill() + bg.fill() + let active = NSBezierPath(roundedRect: leftRect, xRadius: barRadius, yRadius: barRadius) + NSColor.darkGray.setFill() + active.fill() + } +} + +class CustomSlider:NSSlider { + + var currentValue:CGFloat = 0 + + override func setNeedsDisplay(_ invalidRect: NSRect) { + super.setNeedsDisplay(invalidRect) + } + + override func awakeFromNib() { + super.awakeFromNib() + if ((self.cell?.isKind(of: CustomSliderCell.self)) == false) { + let cell:CustomSliderCell = CustomSliderCell() + self.cell = cell + } + } + + convenience init(knob:NSImage?) { + self.init() + self.cell = CustomSliderCell(knob: knob!) + } + + required init?(coder: NSCoder) { + super.init(coder: coder) + } + + override init(frame frameRect: NSRect) { + super.init(frame: frameRect) + } + + func knobImage() -> NSImage { + let cell = self.cell as! CustomSliderCell + return cell.knobImage + } + + func setKnobImage(image:NSImage) { + let cell = self.cell as! CustomSliderCell + cell.knobImage = image + } +} diff --git a/MTMR/VolumeViewController.swift b/MTMR/VolumeViewController.swift index 9fa1960..3ca4615 100644 --- a/MTMR/VolumeViewController.swift +++ b/MTMR/VolumeViewController.swift @@ -120,96 +120,3 @@ class VolumeViewController: NSCustomTouchBarItem { } } -class CustomSliderCell: NSSliderCell { - var knobImage:NSImage! - private var _currentKnobRect:NSRect! - private var _barRect:NSRect! - - required init(coder aDecoder: NSCoder) { - super.init(coder: aDecoder) - } - - override init() { - super.init() - } - - init(knob:NSImage) { - knobImage = knob; - super.init() - } - - override func drawKnob(_ knobRect: NSRect) { - - if (knobImage == nil) { - super.drawKnob(knobRect) - return; - } - - _currentKnobRect = knobRect; - drawBar(inside: _barRect, flipped: false) - - let newOriginX:CGFloat = knobRect.origin.x * - (_barRect.size.width - (knobImage.size.width - knobRect.size.width)) / _barRect.size.width; - - knobImage.draw(at: NSPoint(x: newOriginX, y: knobRect.origin.y+3), from: NSRect(x: 0, y: 0, width: knobImage.size.width, height: knobImage.size.height), operation: NSCompositingOperation.sourceOver, fraction: 1) - } - - override func drawBar(inside aRect: NSRect, flipped: Bool) { - _barRect = aRect - - var rect = aRect - rect.size.height = CGFloat(3) - let barRadius = CGFloat(3) - let value = CGFloat((self.doubleValue - self.minValue) / (self.maxValue - self.minValue)) - let finalWidth = CGFloat(value * (self.controlView!.frame.size.width - 12)) - - var leftRect = rect - leftRect.size.width = finalWidth - let bg = NSBezierPath(roundedRect: rect, xRadius: barRadius, yRadius: barRadius) - NSColor.lightGray.setFill() - bg.fill() - let active = NSBezierPath(roundedRect: leftRect, xRadius: barRadius, yRadius: barRadius) - NSColor.darkGray.setFill() - active.fill() - } -} - -class CustomSlider:NSSlider { - - var currentValue:CGFloat = 0 - - override func setNeedsDisplay(_ invalidRect: NSRect) { - super.setNeedsDisplay(invalidRect) - } - - override func awakeFromNib() { - super.awakeFromNib() - if ((self.cell?.isKind(of: CustomSliderCell.self)) == false) { - let cell:CustomSliderCell = CustomSliderCell() - self.cell = cell - } - } - - convenience init(knob:NSImage) { - self.init() - self.cell = CustomSliderCell(knob: knob) - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - } - - override init(frame frameRect: NSRect) { - super.init(frame: frameRect) - } - - func knobImage() -> NSImage { - let cell = self.cell as! CustomSliderCell - return cell.knobImage - } - - func setKnobImage(image:NSImage) { - let cell = self.cell as! CustomSliderCell - cell.knobImage = image - } -}