Forward/backward 15s buttons
@@ -26,6 +26,10 @@ extension NSImage {
|
||||
return playerBundle.image(forResource: "airplay")!
|
||||
}
|
||||
|
||||
static var PUIBack15s: NSImage {
|
||||
return playerBundle.image(forResource: "back15s")!
|
||||
}
|
||||
|
||||
static var PUIBack30s: NSImage {
|
||||
return playerBundle.image(forResource: "back30s")!
|
||||
}
|
||||
@@ -34,6 +38,10 @@ extension NSImage {
|
||||
return playerBundle.image(forResource: "bookmark")!
|
||||
}
|
||||
|
||||
static var PUIForward15s: NSImage {
|
||||
return playerBundle.image(forResource: "forward15s")!
|
||||
}
|
||||
|
||||
static var PUIForward30s: NSImage {
|
||||
return playerBundle.image(forResource: "forward30s")!
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "back15s.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "back15s@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "back15s@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 597 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 680 B After Width: | Height: | Size: 654 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "forward15s.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "forward15s@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "forward15s@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 565 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 667 B After Width: | Height: | Size: 642 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
@@ -511,23 +511,45 @@ public final class PUIPlayerView: NSView {
|
||||
return b
|
||||
}()
|
||||
|
||||
private lazy var backButton: PUIButton = {
|
||||
private lazy var backButton15: PUIButton = {
|
||||
let b = PUIButton(frame: .zero)
|
||||
|
||||
b.image = .PUIBack15s
|
||||
b.target = self
|
||||
b.action = #selector(goBackInTime15(_:))
|
||||
b.toolTip = "Go back 15s"
|
||||
|
||||
return b
|
||||
}()
|
||||
|
||||
private lazy var backButton30: PUIButton = {
|
||||
let b = PUIButton(frame: .zero)
|
||||
|
||||
b.image = .PUIBack30s
|
||||
b.target = self
|
||||
b.action = #selector(goBackInTime(_:))
|
||||
b.action = #selector(goBackInTime30(_:))
|
||||
b.toolTip = "Go back 30s"
|
||||
|
||||
return b
|
||||
}()
|
||||
|
||||
private lazy var forwardButton: PUIButton = {
|
||||
private lazy var forwardButton15: PUIButton = {
|
||||
let b = PUIButton(frame: .zero)
|
||||
|
||||
b.image = .PUIForward15s
|
||||
b.target = self
|
||||
b.action = #selector(goForwardInTime15(_:))
|
||||
b.toolTip = "Go forward 15s"
|
||||
|
||||
return b
|
||||
}()
|
||||
|
||||
private lazy var forwardButton30: PUIButton = {
|
||||
let b = PUIButton(frame: .zero)
|
||||
|
||||
b.image = .PUIForward30s
|
||||
b.target = self
|
||||
b.action = #selector(goForwardInTime(_:))
|
||||
b.action = #selector(goForwardInTime30(_:))
|
||||
b.toolTip = "Go forward 30s"
|
||||
|
||||
return b
|
||||
@@ -619,11 +641,13 @@ public final class PUIPlayerView: NSView {
|
||||
centerButtonsContainerView.setCustomSpacing(6, after: volumeButton)
|
||||
|
||||
// Center controls (play, annotations, forward, backward)
|
||||
centerButtonsContainerView.addView(backButton, in: .center)
|
||||
centerButtonsContainerView.addView(backButton15, in: .center)
|
||||
centerButtonsContainerView.addView(backButton30, in: .center)
|
||||
centerButtonsContainerView.addView(previousAnnotationButton, in: .center)
|
||||
centerButtonsContainerView.addView(playButton, in: .center)
|
||||
centerButtonsContainerView.addView(nextAnnotationButton, in: .center)
|
||||
centerButtonsContainerView.addView(forwardButton, in: .center)
|
||||
centerButtonsContainerView.addView(forwardButton30, in: .center)
|
||||
centerButtonsContainerView.addView(forwardButton15, in: .center)
|
||||
|
||||
// Trailing controls (speed, add annotation, pip)
|
||||
centerButtonsContainerView.addView(speedButton, in: .trailing)
|
||||
@@ -639,10 +663,12 @@ public final class PUIPlayerView: NSView {
|
||||
centerButtonsContainerView.setVisibilityPriority(NSStackViewVisibilityPriorityDetachOnlyIfNecessary, for: volumeButton)
|
||||
centerButtonsContainerView.setVisibilityPriority(NSStackViewVisibilityPriorityDetachOnlyIfNecessary, for: volumeSlider)
|
||||
centerButtonsContainerView.setVisibilityPriority(NSStackViewVisibilityPriorityDetachOnlyIfNecessary, for: subtitlesButton)
|
||||
centerButtonsContainerView.setVisibilityPriority(NSStackViewVisibilityPriorityDetachOnlyIfNecessary, for: backButton)
|
||||
centerButtonsContainerView.setVisibilityPriority(NSStackViewVisibilityPriorityDetachOnlyIfNecessary, for: backButton15)
|
||||
centerButtonsContainerView.setVisibilityPriority(NSStackViewVisibilityPriorityDetachOnlyIfNecessary, for: backButton30)
|
||||
centerButtonsContainerView.setVisibilityPriority(NSStackViewVisibilityPriorityDetachOnlyIfNecessary, for: previousAnnotationButton)
|
||||
centerButtonsContainerView.setVisibilityPriority(NSStackViewVisibilityPriorityMustHold, for: playButton)
|
||||
centerButtonsContainerView.setVisibilityPriority(NSStackViewVisibilityPriorityDetachOnlyIfNecessary, for: forwardButton)
|
||||
centerButtonsContainerView.setVisibilityPriority(NSStackViewVisibilityPriorityDetachOnlyIfNecessary, for: forwardButton30)
|
||||
centerButtonsContainerView.setVisibilityPriority(NSStackViewVisibilityPriorityDetachOnlyIfNecessary, for: forwardButton15)
|
||||
centerButtonsContainerView.setVisibilityPriority(NSStackViewVisibilityPriorityDetachOnlyIfNecessary, for: nextAnnotationButton)
|
||||
centerButtonsContainerView.setVisibilityPriority(NSStackViewVisibilityPriorityDetachOnlyIfNecessary, for: speedButton)
|
||||
centerButtonsContainerView.setVisibilityPriority(NSStackViewVisibilityPriorityDetachOnlyIfNecessary, for: addAnnotationButton)
|
||||
@@ -709,8 +735,10 @@ public final class PUIPlayerView: NSView {
|
||||
nextAnnotationButton.isHidden = disableAnnotationControls
|
||||
|
||||
let disableBackAndForward = !d.playerViewShouldShowBackAndForwardControls(self)
|
||||
backButton.isHidden = disableBackAndForward
|
||||
forwardButton.isHidden = disableBackAndForward
|
||||
backButton15.isHidden = disableBackAndForward
|
||||
backButton30.isHidden = disableBackAndForward
|
||||
forwardButton30.isHidden = disableBackAndForward
|
||||
forwardButton15.isHidden = disableBackAndForward
|
||||
|
||||
updateExternalPlaybackControlsAvailability()
|
||||
|
||||
@@ -839,11 +867,19 @@ public final class PUIPlayerView: NSView {
|
||||
seek(to: annotation)
|
||||
}
|
||||
|
||||
@IBAction public func goBackInTime(_ sender: Any?) {
|
||||
@IBAction public func goBackInTime15(_ sender: Any?) {
|
||||
modifyCurrentTime(with: 15, using: CMTimeSubtract)
|
||||
}
|
||||
|
||||
@IBAction public func goForwardInTime15(_ sender: Any?) {
|
||||
modifyCurrentTime(with: 15, using: CMTimeAdd)
|
||||
}
|
||||
|
||||
@IBAction public func goBackInTime30(_ sender: Any?) {
|
||||
modifyCurrentTime(with: 30, using: CMTimeSubtract)
|
||||
}
|
||||
|
||||
@IBAction public func goForwardInTime(_ sender: Any?) {
|
||||
@IBAction public func goForwardInTime30(_ sender: Any?) {
|
||||
modifyCurrentTime(with: 30, using: CMTimeAdd)
|
||||
}
|
||||
|
||||
@@ -1230,8 +1266,10 @@ public final class PUIPlayerView: NSView {
|
||||
pipButton.isEnabled = false
|
||||
subtitlesButton.isEnabled = false
|
||||
speedButton.isEnabled = false
|
||||
forwardButton.isEnabled = false
|
||||
backButton.isEnabled = false
|
||||
forwardButton15.isEnabled = false
|
||||
forwardButton30.isEnabled = false
|
||||
backButton30.isEnabled = false
|
||||
backButton15.isEnabled = false
|
||||
|
||||
controlsContainerView.alphaValue = 0.5
|
||||
}
|
||||
@@ -1242,8 +1280,10 @@ public final class PUIPlayerView: NSView {
|
||||
pipButton.isEnabled = true
|
||||
subtitlesButton.isEnabled = true
|
||||
speedButton.isEnabled = true
|
||||
forwardButton.isEnabled = true
|
||||
backButton.isEnabled = true
|
||||
forwardButton15.isEnabled = true
|
||||
forwardButton30.isEnabled = true
|
||||
backButton30.isEnabled = true
|
||||
backButton15.isEnabled = true
|
||||
|
||||
controlsContainerView.alphaValue = 1
|
||||
|
||||
|
||||