mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various fixes
This commit is contained in:
parent
ce3753c35a
commit
c8ac1832a1
@ -2625,30 +2625,31 @@ final class UniversalVideoGalleryItemNode: ZoomableContentGalleryItemNode {
|
||||
c.setItems(strongSelf.contextMenuMainItems(dismiss: dismiss) |> map { ContextController.Items(content: .list($0)) }, minHeight: nil)
|
||||
})))
|
||||
|
||||
items.append(.custom(SliderContextItem(minValue: 0.2, maxValue: 2.5, value: status.baseRate, valueChanged: { [weak self] newValue, finished in
|
||||
let sliderValuePromise = ValuePromise<Double?>(nil)
|
||||
items.append(.custom(SliderContextItem(minValue: 0.2, maxValue: 2.5, value: status.baseRate, valueChanged: { [weak self] newValue, _ in
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
let newValue = normalizeValue(newValue)
|
||||
strongSelf.updatePlaybackRate(newValue)
|
||||
if finished {
|
||||
//dismiss()
|
||||
}
|
||||
sliderValuePromise.set(newValue)
|
||||
}), true))
|
||||
|
||||
items.append(.separator)
|
||||
|
||||
let theme = strongSelf.presentationData.theme
|
||||
for (text, _, rate) in strongSelf.speedList(strings: strongSelf.presentationData.strings) {
|
||||
let isSelected = abs(status.baseRate - rate) < 0.01
|
||||
items.append(.action(ContextMenuActionItem(text: text, icon: { theme in
|
||||
if isSelected {
|
||||
items.append(.action(ContextMenuActionItem(text: text, icon: { _ in return nil }, iconSource: ContextMenuActionItemIconSource(size: CGSize(width: 24.0, height: 24.0), signal: sliderValuePromise.get()
|
||||
|> map { value in
|
||||
if isSelected && value == nil {
|
||||
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Check"), color: theme.contextMenu.primaryColor)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}, action: { _, f in
|
||||
}), action: { _, f in
|
||||
f(.default)
|
||||
|
||||
|
||||
guard let strongSelf = self, let videoNode = strongSelf.videoNode else {
|
||||
return
|
||||
}
|
||||
|
@ -493,15 +493,27 @@ public final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollVi
|
||||
let nextRate: AudioPlaybackRate
|
||||
if let rate = self.playbackBaseRate {
|
||||
switch rate {
|
||||
case .x0_5, .x2:
|
||||
nextRate = .x1
|
||||
case .x1:
|
||||
nextRate = .x1_5
|
||||
case .x1_5:
|
||||
nextRate = .x2
|
||||
default:
|
||||
nextRate = .x1
|
||||
if rate.doubleValue < 0.5 {
|
||||
nextRate = .x0_5
|
||||
} else if rate.doubleValue < 1.0 {
|
||||
nextRate = .x1
|
||||
} else if rate.doubleValue < 1.5 {
|
||||
nextRate = .x1_5
|
||||
} else if rate.doubleValue < 2.0 {
|
||||
nextRate = .x2
|
||||
} else {
|
||||
nextRate = .x1
|
||||
}
|
||||
}
|
||||
} else {
|
||||
nextRate = .x2
|
||||
nextRate = .x1_5
|
||||
}
|
||||
self.setRate?(nextRate, .preset)
|
||||
|
||||
@ -531,23 +543,27 @@ public final class MediaNavigationAccessoryHeaderNode: ASDisplayNode, UIScrollVi
|
||||
var presetItems: [ContextMenuItem] = []
|
||||
|
||||
let previousValue = self.playbackBaseRate?.doubleValue ?? 1.0
|
||||
let sliderValuePromise = ValuePromise<Double?>(nil)
|
||||
let sliderItem: ContextMenuItem = .custom(SliderContextItem(minValue: 0.2, maxValue: 2.5, value: previousValue, valueChanged: { [weak self] newValue, finished in
|
||||
let newValue = normalizeValue(newValue)
|
||||
self?.setRate?(AudioPlaybackRate(newValue), .sliderChange)
|
||||
sliderValuePromise.set(newValue)
|
||||
if finished {
|
||||
scheduleTooltip(.sliderCommit(previousValue, newValue))
|
||||
}
|
||||
}), true)
|
||||
|
||||
|
||||
let theme = self.context.sharedContext.currentPresentationData.with { $0 }.theme
|
||||
for (text, _, rate) in self.speedList(strings: self.strings) {
|
||||
let isSelected = self.playbackBaseRate == rate
|
||||
presetItems.append(.action(ContextMenuActionItem(text: text, icon: { theme in
|
||||
if isSelected {
|
||||
presetItems.append(.action(ContextMenuActionItem(text: text, icon: { _ in return nil }, iconSource: ContextMenuActionItemIconSource(size: CGSize(width: 24.0, height: 24.0), signal: sliderValuePromise.get()
|
||||
|> map { value in
|
||||
if isSelected && value == nil {
|
||||
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Check"), color: theme.contextMenu.primaryColor)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}, action: { [weak self] _, f in
|
||||
}), action: { [weak self] _, f in
|
||||
scheduleTooltip(nil)
|
||||
f(.default)
|
||||
|
||||
|
@ -1005,14 +1005,26 @@ final class OverlayPlayerControlsNode: ASDisplayNode {
|
||||
|
||||
@objc func rateButtonPressed() {
|
||||
var nextRate: AudioPlaybackRate
|
||||
if let currentRate = self.currentRate {
|
||||
switch currentRate {
|
||||
case .x1:
|
||||
nextRate = .x1_5
|
||||
case .x1_5:
|
||||
nextRate = .x2
|
||||
default:
|
||||
if let rate = self.currentRate {
|
||||
switch rate {
|
||||
case .x0_5, .x2:
|
||||
nextRate = .x1
|
||||
case .x1:
|
||||
nextRate = .x1_5
|
||||
case .x1_5:
|
||||
nextRate = .x2
|
||||
default:
|
||||
if rate.doubleValue < 0.5 {
|
||||
nextRate = .x0_5
|
||||
} else if rate.doubleValue < 1.0 {
|
||||
nextRate = .x1
|
||||
} else if rate.doubleValue < 1.5 {
|
||||
nextRate = .x1_5
|
||||
} else if rate.doubleValue < 2.0 {
|
||||
nextRate = .x2
|
||||
} else {
|
||||
nextRate = .x1
|
||||
}
|
||||
}
|
||||
} else {
|
||||
nextRate = .x1_5
|
||||
@ -1032,25 +1044,29 @@ final class OverlayPlayerControlsNode: ASDisplayNode {
|
||||
|
||||
private func contextMenuSpeedItems(scheduleTooltip: @escaping (MediaNavigationAccessoryPanel.ChangeType?) -> Void) -> Signal<ContextController.Items, NoError> {
|
||||
var presetItems: [ContextMenuItem] = []
|
||||
|
||||
|
||||
let previousValue = self.currentRate?.doubleValue ?? 1.0
|
||||
let sliderValuePromise = ValuePromise<Double?>(nil)
|
||||
let sliderItem: ContextMenuItem = .custom(SliderContextItem(minValue: 0.2, maxValue: 2.5, value: previousValue, valueChanged: { [weak self] newValue, finished in
|
||||
let newValue = normalizeValue(newValue)
|
||||
self?.control?(.setBaseRate(AudioPlaybackRate(newValue)))
|
||||
sliderValuePromise.set(newValue)
|
||||
if finished {
|
||||
scheduleTooltip(.sliderCommit(previousValue, newValue))
|
||||
}
|
||||
}), true)
|
||||
|
||||
let theme = self.presentationData.theme
|
||||
for (text, _, rate) in self.speedList(strings: self.presentationData.strings) {
|
||||
let isSelected = self.currentRate == rate
|
||||
presetItems.append(.action(ContextMenuActionItem(text: text, icon: { theme in
|
||||
if isSelected {
|
||||
presetItems.append(.action(ContextMenuActionItem(text: text, icon: { _ in return nil }, iconSource: ContextMenuActionItemIconSource(size: CGSize(width: 24.0, height: 24.0), signal: sliderValuePromise.get()
|
||||
|> map { value in
|
||||
if isSelected && value == nil {
|
||||
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Check"), color: theme.contextMenu.primaryColor)
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}, action: { [weak self] _, f in
|
||||
}), action: { [weak self] _, f in
|
||||
scheduleTooltip(nil)
|
||||
f(.default)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user