Various improvements

This commit is contained in:
Ilya Laktyushin
2024-07-14 21:59:25 +04:00
parent ae0975716e
commit 1466cd82fe
10 changed files with 208 additions and 64 deletions

View File

@@ -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