Fix button node selected/highlighted states

This commit is contained in:
Ilya Laktyushin 2020-10-23 20:35:57 +04:00
parent 561bee0f3b
commit 7c9ff342fa

View File

@ -8,6 +8,8 @@ open class ASButtonNode: ASControlNode {
public let disabledTitleNode: ImmediateTextNode
public let imageNode: ASImageNode
public let highlightedImageNode: ASImageNode
public let selectedImageNode: ASImageNode
public let highlightedSelectedImageNode: ASImageNode
public let disabledImageNode: ASImageNode
public let backgroundImageNode: ASImageNode
public let highlightedBackgroundImageNode: ASImageNode
@ -70,11 +72,21 @@ open class ASButtonNode: ASControlNode {
self.imageNode.displaysAsynchronously = false
self.imageNode.displayWithoutProcessing = true
self.selectedImageNode = ASImageNode()
self.selectedImageNode.isUserInteractionEnabled = false
self.selectedImageNode.displaysAsynchronously = false
self.selectedImageNode.displayWithoutProcessing = true
self.highlightedImageNode = ASImageNode()
self.highlightedImageNode.isUserInteractionEnabled = false
self.highlightedImageNode.displaysAsynchronously = false
self.highlightedImageNode.displayWithoutProcessing = true
self.highlightedSelectedImageNode = ASImageNode()
self.highlightedSelectedImageNode.isUserInteractionEnabled = false
self.highlightedSelectedImageNode.displaysAsynchronously = false
self.highlightedSelectedImageNode.displayWithoutProcessing = true
self.disabledImageNode = ASImageNode()
self.disabledImageNode.isUserInteractionEnabled = false
self.disabledImageNode.displaysAsynchronously = false
@ -101,8 +113,12 @@ open class ASButtonNode: ASControlNode {
self.addSubnode(self.disabledTitleNode)
self.disabledTitleNode.isHidden = true
self.addSubnode(self.imageNode)
self.addSubnode(self.selectedImageNode)
self.selectedImageNode.isHidden = true
self.addSubnode(self.highlightedImageNode)
self.highlightedImageNode.isHidden = true
self.addSubnode(self.highlightedSelectedImageNode)
self.highlightedSelectedImageNode.isHidden = true
self.addSubnode(self.disabledImageNode)
self.disabledImageNode.isHidden = true
}
@ -226,9 +242,12 @@ open class ASButtonNode: ASControlNode {
self.disabledImageNode.image = image
} else if state == [] {
self.imageNode.image = image
} else if state == .highlighted {
self.highlightedImageNode.image = image
} else if state == .highlighted || state == .selected || state == [.selected, .highlighted] {
self.highlightedImageNode.image = image
} else if state == .selected {
self.selectedImageNode.image = image
} else if state == [.selected, .highlighted] {
self.highlightedSelectedImageNode.image = image
} else {
self.imageNode.image = image
}
@ -262,15 +281,15 @@ open class ASButtonNode: ASControlNode {
didSet {
if self.isSelected != oldValue {
if self.isSelected {
if self.highlightedImageNode.image != nil {
self.highlightedImageNode.isHidden = false
if self.selectedImageNode.image != nil {
self.selectedImageNode.isHidden = false
self.imageNode.isHidden = true
} else {
self.highlightedImageNode.isHidden = true
self.selectedImageNode.isHidden = true
self.imageNode.isHidden = false
}
} else {
self.highlightedImageNode.isHidden = true
self.selectedImageNode.isHidden = true
self.imageNode.isHidden = false
}
}
@ -280,7 +299,7 @@ open class ASButtonNode: ASControlNode {
override open var isHighlighted: Bool {
didSet {
if self.isHighlighted != oldValue {
if self.isHighlighted || self.isSelected {
if self.isHighlighted {
if self.highlightedTitleNode.attributedText != nil {
self.highlightedTitleNode.isHidden = false
self.titleNode.isHidden = true
@ -295,10 +314,17 @@ open class ASButtonNode: ASControlNode {
self.highlightedBackgroundImageNode.isHidden = true
self.backgroundImageNode.isHidden = false
}
if self.highlightedImageNode.image != nil {
if self.isSelected && self.highlightedSelectedImageNode.image != nil {
self.highlightedSelectedImageNode.isHidden = false
self.highlightedImageNode.isHidden = true
self.selectedImageNode.isHidden = true
self.imageNode.isHidden = true
} else if self.highlightedImageNode.image != nil {
self.highlightedSelectedImageNode.isHidden = true
self.highlightedImageNode.isHidden = false
self.imageNode.isHidden = true
} else {
self.highlightedSelectedImageNode.isHidden = true
self.highlightedImageNode.isHidden = true
self.imageNode.isHidden = false
}
@ -309,8 +335,15 @@ open class ASButtonNode: ASControlNode {
self.highlightedBackgroundImageNode.isHidden = true
self.backgroundImageNode.isHidden = false
self.highlightedSelectedImageNode.isHidden = true
self.highlightedImageNode.isHidden = true
self.imageNode.isHidden = false
if self.isSelected && self.selectedImageNode.image != nil {
self.selectedImageNode.isHidden = false
self.imageNode.isHidden = true
} else {
self.selectedImageNode.isHidden = true
self.imageNode.isHidden = false
}
}
}
}
@ -384,7 +417,9 @@ open class ASButtonNode: ASControlNode {
self.highlightedTitleNode.frame = CGRect(origin: highlightedTitleOrigin, size: self.calculatedHighlightedTitleSize)
self.disabledTitleNode.frame = CGRect(origin: disabledTitleOrigin, size: self.calculatedDisabledTitleSize)
self.imageNode.frame = CGRect(origin: imageOrigin, size: imageSize)
self.selectedImageNode.frame = CGRect(origin: imageOrigin, size: imageSize)
self.highlightedImageNode.frame = CGRect(origin: imageOrigin, size: imageSize)
self.highlightedSelectedImageNode.frame = CGRect(origin: imageOrigin, size: imageSize)
self.disabledImageNode.frame = CGRect(origin: imageOrigin, size: imageSize)
self.backgroundImageNode.frame = CGRect(origin: CGPoint(), size: size)