mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 14:20:20 +00:00
Various improvements
This commit is contained in:
@@ -248,8 +248,11 @@ private final class BrowserScreenComponent: CombinedComponent {
|
||||
}
|
||||
|
||||
struct BrowserPresentationState: Equatable {
|
||||
var fontSize: Int32
|
||||
var fontIsSerif: Bool
|
||||
struct FontState: Equatable {
|
||||
var size: Int32
|
||||
var isSerif: Bool
|
||||
}
|
||||
var fontState: FontState
|
||||
var isSearching: Bool
|
||||
var searchResultIndex: Int
|
||||
var searchResultCount: Int
|
||||
@@ -295,6 +298,7 @@ public class BrowserScreen: ViewController, MinimizableController {
|
||||
fileprivate let componentHost = ComponentView<ViewControllerComponentContainer.Environment>()
|
||||
|
||||
private var presentationData: PresentationData
|
||||
private var presentationDataDisposable: Disposable?
|
||||
private var validLayout: (ContainerViewLayout, CGFloat)?
|
||||
|
||||
init(controller: BrowserScreen) {
|
||||
@@ -302,7 +306,10 @@ public class BrowserScreen: ViewController, MinimizableController {
|
||||
self.controller = controller
|
||||
self.presentationData = self.context.sharedContext.currentPresentationData.with { $0 }
|
||||
|
||||
self.presentationState = BrowserPresentationState(fontSize: 100, fontIsSerif: false, isSearching: false, searchResultIndex: 0, searchResultCount: 0, searchQueryIsEmpty: true)
|
||||
self.presentationState = BrowserPresentationState(
|
||||
fontState: BrowserPresentationState.FontState(size: 100, isSerif: false),
|
||||
isSearching: false, searchResultIndex: 0, searchResultCount: 0, searchQueryIsEmpty: true
|
||||
)
|
||||
|
||||
super.init()
|
||||
|
||||
@@ -381,66 +388,76 @@ public class BrowserScreen: ViewController, MinimizableController {
|
||||
case .decreaseFontSize:
|
||||
self.updatePresentationState({ state in
|
||||
var updatedState = state
|
||||
switch state.fontSize {
|
||||
switch state.fontState.size {
|
||||
case 150:
|
||||
updatedState.fontSize = 125
|
||||
updatedState.fontState.size = 125
|
||||
case 125:
|
||||
updatedState.fontSize = 115
|
||||
updatedState.fontState.size = 115
|
||||
case 115:
|
||||
updatedState.fontSize = 100
|
||||
updatedState.fontState.size = 100
|
||||
case 100:
|
||||
updatedState.fontSize = 85
|
||||
updatedState.fontState.size = 85
|
||||
case 85:
|
||||
updatedState.fontSize = 75
|
||||
updatedState.fontState.size = 75
|
||||
case 75:
|
||||
updatedState.fontSize = 50
|
||||
updatedState.fontState.size = 50
|
||||
default:
|
||||
updatedState.fontSize = 50
|
||||
updatedState.fontState.size = 50
|
||||
}
|
||||
return updatedState
|
||||
})
|
||||
content.setFontSize(CGFloat(self.presentationState.fontSize) / 100.0)
|
||||
content.updateFontState(self.presentationState.fontState)
|
||||
case .increaseFontSize:
|
||||
self.updatePresentationState({ state in
|
||||
var updatedState = state
|
||||
switch state.fontSize {
|
||||
switch state.fontState.size {
|
||||
case 125:
|
||||
updatedState.fontSize = 150
|
||||
updatedState.fontState.size = 150
|
||||
case 115:
|
||||
updatedState.fontSize = 125
|
||||
updatedState.fontState.size = 125
|
||||
case 100:
|
||||
updatedState.fontSize = 115
|
||||
updatedState.fontState.size = 115
|
||||
case 85:
|
||||
updatedState.fontSize = 100
|
||||
updatedState.fontState.size = 100
|
||||
case 75:
|
||||
updatedState.fontSize = 85
|
||||
updatedState.fontState.size = 85
|
||||
case 50:
|
||||
updatedState.fontSize = 75
|
||||
updatedState.fontState.size = 75
|
||||
default:
|
||||
updatedState.fontSize = 150
|
||||
updatedState.fontState.size = 150
|
||||
}
|
||||
return updatedState
|
||||
})
|
||||
content.setFontSize(CGFloat(self.presentationState.fontSize) / 100.0)
|
||||
content.updateFontState(self.presentationState.fontState)
|
||||
case .resetFontSize:
|
||||
self.updatePresentationState({ state in
|
||||
var updatedState = state
|
||||
updatedState.fontSize = 100
|
||||
updatedState.fontState.size = 100
|
||||
return updatedState
|
||||
})
|
||||
content.setFontSize(CGFloat(self.presentationState.fontSize) / 100.0)
|
||||
content.updateFontState(self.presentationState.fontState)
|
||||
case let .updateFontIsSerif(value):
|
||||
self.updatePresentationState({ state in
|
||||
var updatedState = state
|
||||
updatedState.fontIsSerif = value
|
||||
updatedState.fontState.isSerif = value
|
||||
return updatedState
|
||||
})
|
||||
content.setForceSerif(value)
|
||||
content.updateFontState(self.presentationState.fontState)
|
||||
}
|
||||
}
|
||||
|
||||
self.presentationDataDisposable = (controller.context.sharedContext.presentationData
|
||||
|> deliverOnMainQueue).start(next: { [weak self] presentationData in
|
||||
guard let self else {
|
||||
return
|
||||
}
|
||||
self.presentationData = presentationData
|
||||
self.requestLayout(transition: .immediate)
|
||||
})
|
||||
}
|
||||
|
||||
deinit {
|
||||
self.presentationDataDisposable?.dispose()
|
||||
self.contentStateDisposable.dispose()
|
||||
}
|
||||
|
||||
@@ -575,11 +592,11 @@ public class BrowserScreen: ViewController, MinimizableController {
|
||||
}
|
||||
}
|
||||
|
||||
func minimize() {
|
||||
func minimize(topEdgeOffset: CGFloat? = nil, damping: CGFloat? = nil, initialVelocity: CGFloat? = nil) {
|
||||
guard let controller = self.controller, let navigationController = controller.navigationController as? NavigationController else {
|
||||
return
|
||||
}
|
||||
navigationController.minimizeViewController(controller, damping: nil, beforeMaximize: { _, completion in
|
||||
navigationController.minimizeViewController(controller, topEdgeOffset: topEdgeOffset, damping: damping, velocity: initialVelocity, beforeMaximize: { _, completion in
|
||||
completion()
|
||||
}, setupContainer: { [weak self] current in
|
||||
let minimizedContainer: MinimizedContainerImpl?
|
||||
@@ -626,20 +643,20 @@ public class BrowserScreen: ViewController, MinimizableController {
|
||||
|
||||
let performAction = self.performAction
|
||||
|
||||
let forceIsSerif = self.presentationState.fontIsSerif
|
||||
let forceIsSerif = self.presentationState.fontState.isSerif
|
||||
let fontItem = BrowserFontSizeContextMenuItem(
|
||||
value: self.presentationState.fontSize,
|
||||
value: self.presentationState.fontState.size,
|
||||
decrease: { [weak self] in
|
||||
performAction.invoke(.decreaseFontSize)
|
||||
if let self {
|
||||
return self.presentationState.fontSize
|
||||
return self.presentationState.fontState.size
|
||||
} else {
|
||||
return 100
|
||||
}
|
||||
}, increase: { [weak self] in
|
||||
performAction.invoke(.increaseFontSize)
|
||||
if let self {
|
||||
return self.presentationState.fontSize
|
||||
return self.presentationState.fontState.size
|
||||
} else {
|
||||
return 100
|
||||
}
|
||||
@@ -953,6 +970,10 @@ public class BrowserScreen: ViewController, MinimizableController {
|
||||
self.node.containerLayoutUpdated(layout: layout, navigationBarHeight: self.navigationLayout(layout: layout).navigationFrame.height, transition: ComponentTransition(transition))
|
||||
}
|
||||
|
||||
public func requestMinimize(topEdgeOffset: CGFloat?, initialVelocity: CGFloat?) {
|
||||
self.node.minimize(topEdgeOffset: topEdgeOffset, damping: 180.0, initialVelocity: initialVelocity)
|
||||
}
|
||||
|
||||
public var isMinimized = false
|
||||
public var isMinimizable = true
|
||||
|
||||
|
||||
Reference in New Issue
Block a user