mirror of
https://github.com/yattee/yattee.git
synced 2024-12-14 14:20:32 +05:30
Lock orientation button
This commit is contained in:
parent
5bfc1a3206
commit
fc175be76b
@ -93,6 +93,10 @@ final class PlayerModel: ObservableObject {
|
|||||||
backend.setNeedsNetworkStateUpdates(true)
|
backend.setNeedsNetworkStateUpdates(true)
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
#if os(iOS)
|
||||||
|
@Published var lockedOrientation: UIInterfaceOrientationMask?
|
||||||
|
#endif
|
||||||
|
|
||||||
var accounts: AccountsModel
|
var accounts: AccountsModel
|
||||||
var comments: CommentsModel
|
var comments: CommentsModel
|
||||||
var controls: PlayerControlsModel { didSet {
|
var controls: PlayerControlsModel { didSet {
|
||||||
@ -717,7 +721,7 @@ final class PlayerModel: ObservableObject {
|
|||||||
|
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
if !playingFullScreen {
|
if !playingFullScreen {
|
||||||
Orientation.lockOrientation(.allButUpsideDown, andRotateTo: .portrait)
|
Orientation.lockOrientation(.allButUpsideDown)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -207,6 +207,7 @@ struct PlayerControls: View {
|
|||||||
|
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
pipButton
|
pipButton
|
||||||
|
lockOrientationButton
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Spacer()
|
Spacer()
|
||||||
@ -262,6 +263,21 @@ struct PlayerControls: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if os(iOS)
|
||||||
|
private var lockOrientationButton: some View {
|
||||||
|
button("Lock Rotation", systemImage: player.lockedOrientation.isNil ? "lock.rotation.open" : "lock.rotation", active: !player.lockedOrientation.isNil) {
|
||||||
|
if player.lockedOrientation.isNil {
|
||||||
|
let orientationMask = OrientationTracker.shared.currentInterfaceOrientationMask
|
||||||
|
player.lockedOrientation = orientationMask
|
||||||
|
Orientation.lockOrientation(orientationMask)
|
||||||
|
} else {
|
||||||
|
player.lockedOrientation = nil
|
||||||
|
Orientation.lockOrientation(.allButUpsideDown, andRotateTo: OrientationTracker.shared.currentInterfaceOrientation)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
var floatingControls: some View {
|
var floatingControls: some View {
|
||||||
HStack {
|
HStack {
|
||||||
HStack(spacing: 20) {
|
HStack(spacing: 20) {
|
||||||
|
@ -112,6 +112,13 @@ struct VideoPlayerView: View {
|
|||||||
player?.onPresentPlayer?()
|
player?.onPresentPlayer?()
|
||||||
player?.onPresentPlayer = nil
|
player?.onPresentPlayer = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let orientationMask = player.lockedOrientation {
|
||||||
|
Orientation.lockOrientation(
|
||||||
|
orientationMask,
|
||||||
|
andRotateTo: orientationMask == .landscapeLeft ? .landscapeLeft : orientationMask == .landscapeRight ? .landscapeRight : .portrait
|
||||||
|
)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if Defaults[.lockPortraitWhenBrowsing] {
|
if Defaults[.lockPortraitWhenBrowsing] {
|
||||||
Orientation.lockOrientation(.portrait, andRotateTo: .portrait)
|
Orientation.lockOrientation(.portrait, andRotateTo: .portrait)
|
||||||
@ -333,8 +340,12 @@ struct VideoPlayerView: View {
|
|||||||
|
|
||||||
guard drag > 0 else { return }
|
guard drag > 0 else { return }
|
||||||
|
|
||||||
if drag > 60, player.playingFullScreen {
|
if drag > 60,
|
||||||
|
player.playingFullScreen,
|
||||||
|
!OrientationTracker.shared.currentInterfaceOrientation.isLandscape
|
||||||
|
{
|
||||||
player.exitFullScreen()
|
player.exitFullScreen()
|
||||||
|
player.lockedOrientation = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
viewVerticalOffset = drag
|
viewVerticalOffset = drag
|
||||||
@ -343,13 +354,9 @@ struct VideoPlayerView: View {
|
|||||||
guard player.presentingPlayer,
|
guard player.presentingPlayer,
|
||||||
!playerControls.presentingControlsOverlay else { return }
|
!playerControls.presentingControlsOverlay else { return }
|
||||||
if viewVerticalOffset > 100 {
|
if viewVerticalOffset > 100 {
|
||||||
if player.playingFullScreen {
|
player.backend.setNeedsDrawing(false)
|
||||||
viewVerticalOffset = 0
|
player.hide()
|
||||||
player.exitFullScreen()
|
player.exitFullScreen()
|
||||||
} else {
|
|
||||||
player.backend.setNeedsDrawing(false)
|
|
||||||
player.hide()
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
viewVerticalOffset = 0
|
viewVerticalOffset = 0
|
||||||
player.backend.setNeedsDrawing(true)
|
player.backend.setNeedsDrawing(true)
|
||||||
@ -467,7 +474,11 @@ struct VideoPlayerView: View {
|
|||||||
object: nil,
|
object: nil,
|
||||||
queue: .main
|
queue: .main
|
||||||
) { _ in
|
) { _ in
|
||||||
guard !Defaults[.honorSystemOrientationLock], player.presentingPlayer, !player.playingInPictureInPicture else {
|
guard !Defaults[.honorSystemOrientationLock],
|
||||||
|
player.presentingPlayer,
|
||||||
|
!player.playingInPictureInPicture,
|
||||||
|
player.lockedOrientation.isNil
|
||||||
|
else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user