[Player UI] Add playback speeds menu

This commit is contained in:
Pedro Vieira
2017-06-27 03:57:23 +01:00
parent f134cdcb57
commit 26764e89e6
3 changed files with 49 additions and 11 deletions
+9 -9
View File
@@ -14,7 +14,11 @@ public enum PUIPlaybackSpeed: Float {
case midFast = 1.25
case fast = 1.5
case fastest = 2
public static var all: [PUIPlaybackSpeed] {
return [.slow, .normal, .midFast, .fast, .fastest]
}
var icon: NSImage {
switch self {
case .slow:
@@ -29,18 +33,14 @@ public enum PUIPlaybackSpeed: Float {
return .PUISpeedTwo
}
}
private var all: [PUIPlaybackSpeed] {
return [.slow, .normal, .midFast, .fast, .fastest]
}
public var next: PUIPlaybackSpeed {
guard let idx = all.index(of: self) else {
guard let idx = PUIPlaybackSpeed.all.index(of: self) else {
fatalError("Tried to get next speed from nonsensical playback speed \(self). Probably missing in collection.")
}
let nextIdx = idx + 1 < all.count ? idx + 1 : 0
let nextIdx = idx + 1 < PUIPlaybackSpeed.all.count ? idx + 1 : 0
return all[nextIdx]
return PUIPlaybackSpeed.all[nextIdx]
}
}
Regular → Executable
+9 -1
View File
@@ -31,6 +31,7 @@ public final class PUIButton: NSControl {
}
public var showsMenuOnLeftClick = false
public var showsMenuOnRightClick = false
public var sendsActionOnMouseDown = false
public var image: NSImage? {
@@ -164,7 +165,14 @@ public final class PUIButton: NSControl {
NSApp.sendAction(action, to: target, from: self)
}
}
public override func rightMouseDown(with event: NSEvent) {
guard showsMenuOnRightClick else {
return
}
showMenu(with: event)
}
private func showMenu(with event: NSEvent) {
guard let menu = self.menu else { return }
+31 -1
View File
@@ -162,6 +162,7 @@ public final class PUIPlayerView: NSView {
}
updatePlaybackSpeedState()
updateSelectedMenuItem(forPlaybackSpeed: playbackSpeed)
}
}
@@ -557,7 +558,7 @@ public final class PUIPlayerView: NSView {
return b
}()
fileprivate lazy var speedButton: PUIButton = {
let b = PUIButton(frame: .zero)
@@ -565,6 +566,8 @@ public final class PUIPlayerView: NSView {
b.target = self
b.action = #selector(toggleSpeed(_:))
b.toolTip = "Change playback speed"
b.menu = self.speedsMenu
b.showsMenuOnRightClick = true
return b
}()
@@ -973,7 +976,34 @@ public final class PUIPlayerView: NSView {
@IBAction func showSubtitlesMenu(_ sender: PUIButton) {
subtitlesMenu?.popUp(positioning: nil, at: .zero, in: sender)
}
// MARK: - Playback speeds
fileprivate lazy var speedsMenu: NSMenu = {
let m = NSMenu()
for speed in PUIPlaybackSpeed.all {
let item = NSMenuItem(title: "\(speed.rawValue)x", action: #selector(didSelectSpeed(_:)), keyEquivalent: "")
item.target = self
item.representedObject = speed
item.state = speed == self.playbackSpeed ? NSOnState : NSOffState
m.addItem(item)
}
return m
}()
fileprivate func updateSelectedMenuItem(forPlaybackSpeed speed: PUIPlaybackSpeed) {
for item in speedsMenu.items {
item.state = (item.representedObject as? PUIPlaybackSpeed) == speed ? NSOnState : NSOffState
}
}
@objc private func didSelectSpeed(_ sender: NSMenuItem) {
guard let speed = sender.representedObject as? PUIPlaybackSpeed else {
return
}
playbackSpeed = speed
}
// MARK: - Key commands
private var keyDownEventMonitor: Any?