Various improvements

This commit is contained in:
Ilya Laktyushin
2023-12-13 01:00:55 +04:00
parent 44b0464161
commit ef28f034d8
47 changed files with 1703 additions and 411 deletions

View File

@@ -1461,11 +1461,33 @@ public final class SolidRoundedButtonView: UIView {
let spacingOffset: CGFloat = 9.0
let verticalInset: CGFloat = self.subtitle == nil ? floor((buttonFrame.height - titleSize.height) / 2.0) : floor((buttonFrame.height - titleSize.height) / 2.0) - spacingOffset
let iconSpacing: CGFloat = self.iconSpacing
let badgeSpacing: CGFloat = 6.0
var contentWidth: CGFloat = titleSize.width
if !iconSize.width.isZero {
contentWidth += iconSize.width + iconSpacing
}
var badgeSize: CGSize = .zero
if let badge = self.badge {
let badgeNode: BadgeNode
if let current = self.badgeNode {
badgeNode = current
} else {
badgeNode = BadgeNode(fillColor: self.theme.foregroundColor, strokeColor: .clear, textColor: self.theme.backgroundColor)
badgeNode.alpha = self.titleNode.alpha == 0.0 ? 0.0 : 1.0
self.badgeNode = badgeNode
self.addSubnode(badgeNode)
}
badgeNode.text = badge
badgeSize = badgeNode.update(CGSize(width: 100.0, height: 100.0))
contentWidth += badgeSize.width + badgeSpacing
} else if let badgeNode = self.badgeNode {
self.badgeNode = nil
badgeNode.removeFromSupernode()
}
var nextContentOrigin = floor((buttonFrame.width - contentWidth) / 2.0)
let iconFrame: CGRect
@@ -1484,6 +1506,7 @@ public final class SolidRoundedButtonView: UIView {
}
iconFrame = CGRect(origin: CGPoint(x: buttonFrame.minX + nextContentOrigin, y: floor((buttonFrame.height - iconSize.height) / 2.0)), size: iconSize)
}
let badgeFrame = CGRect(origin: CGPoint(x: titleFrame.maxX + badgeSpacing, y: titleFrame.minY + floor((titleFrame.height - badgeSize.height) * 0.5)), size: badgeSize)
transition.updateFrame(view: self.iconNode, frame: iconFrame)
if let animationNode = self.animationNode {
@@ -1491,22 +1514,8 @@ public final class SolidRoundedButtonView: UIView {
}
transition.updateFrame(view: self.titleNode, frame: titleFrame)
if let badge = self.badge {
let badgeNode: BadgeNode
if let current = self.badgeNode {
badgeNode = current
} else {
badgeNode = BadgeNode(fillColor: self.theme.foregroundColor, strokeColor: .clear, textColor: self.theme.backgroundColor)
badgeNode.alpha = self.titleNode.alpha == 0.0 ? 0.0 : 1.0
self.badgeNode = badgeNode
self.addSubnode(badgeNode)
}
badgeNode.text = badge
let badgeSize = badgeNode.update(CGSize(width: 100.0, height: 100.0))
transition.updateFrame(node: badgeNode, frame: CGRect(origin: CGPoint(x: titleFrame.maxX + 4.0, y: titleFrame.minY + floor((titleFrame.height - badgeSize.height) * 0.5)), size: badgeSize))
} else if let badgeNode = self.badgeNode {
self.badgeNode = nil
badgeNode.removeFromSupernode()
if let badgeNode = self.badgeNode {
transition.updateFrame(node: badgeNode, frame: badgeFrame)
}
if self.subtitle != self.subtitleNode.attributedText?.string {