iPad trackpad support improvements

This commit is contained in:
Ilya Laktyushin
2022-07-27 21:49:25 +03:00
parent 689a5e0427
commit f1ccd3cf33
47 changed files with 526 additions and 197 deletions

View File

@@ -4623,38 +4623,61 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
}
override open func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
let isSecondary: Bool
if #available(iOS 13.4, *) {
isSecondary = event?.buttonMask == .secondary
} else {
isSecondary = false
}
if let selectionTouchLocation = self.selectionTouchLocation {
let index = self.itemIndexAtPoint(selectionTouchLocation)
if index != self.highlightedItemIndex {
self.clearHighlightAnimated(false)
}
if let index = index {
if self.items[index].selectable {
self.highlightedItemIndex = index
for itemNode in self.itemNodes {
if itemNode.index == index {
if itemNode.canBeSelected {
if !itemNode.isLayerBacked {
self.reorderItemNodeToFront(itemNode)
for (_, headerNode) in self.itemHeaderNodes {
self.reorderHeaderNodeToFront(headerNode)
}
}
let itemNodeFrame = itemNode.frame
itemNode.setHighlighted(true, at: selectionTouchLocation.offsetBy(dx: -itemNodeFrame.minX, dy: -itemNodeFrame.minY), animated: false)
} else {
self.highlightedItemIndex = nil
itemNode.tapped()
if isSecondary {
if let index = index {
if self.items[index].selectable {
self.highlightedItemIndex = index
for itemNode in self.itemNodes {
if itemNode.index == index {
itemNode.secondaryAction(at: selectionTouchLocation)
self.items[index].performSecondaryAction(listView: self)
break
}
}
}
}
} else {
if index != self.highlightedItemIndex {
self.clearHighlightAnimated(false)
}
if let index = index {
if self.items[index].selectable {
self.highlightedItemIndex = index
for itemNode in self.itemNodes {
if itemNode.index == index {
if itemNode.canBeSelected {
if !itemNode.isLayerBacked {
self.reorderItemNodeToFront(itemNode)
for (_, headerNode) in self.itemHeaderNodes {
self.reorderHeaderNodeToFront(headerNode)
}
}
let itemNodeFrame = itemNode.frame
itemNode.setHighlighted(true, at: selectionTouchLocation.offsetBy(dx: -itemNodeFrame.minX, dy: -itemNodeFrame.minY), animated: false)
} else {
self.highlightedItemIndex = nil
itemNode.tapped()
}
break
}
break
}
}
}
}
}
if let highlightedItemIndex = self.highlightedItemIndex {
if !isSecondary, let highlightedItemIndex = self.highlightedItemIndex {
for itemNode in self.itemNodes {
if itemNode.index == highlightedItemIndex {
itemNode.selected()