[git-index] simplify operation icon rendering code

GitOrigin-RevId: 694b96b1bdad28910c7438a16cf0e93819c6959c
This commit is contained in:
Julia Beliaeva
2020-10-21 17:52:38 +00:00
committed by intellij-monorepo-bot
parent 393f5bf3b3
commit 2d82f9d466
@@ -93,19 +93,22 @@ abstract class GitStageTree(project: Project, parentDisposable: Disposable) : Ch
val path = getClosestPathForLocation(point.x, point.y) ?: return null
val node = path.lastPathComponent as? ChangesBrowserNode<*> ?: return null
val operation = getFirstMatchingOperation(node) ?: return null
val componentBounds = operation.icon?.let { getComponentBounds(path, it)} ?: return null
val componentWidth = operation.icon?.iconWidth ?: return null
val componentBounds = getComponentBounds(path, componentWidth) ?: return null
return HoverData(node, operation, componentBounds.contains(point))
}
private fun getComponentBounds(path: TreePath, componentWidth: Int): Rectangle? {
private fun getComponentBounds(path: TreePath, icon: Icon): Rectangle? {
val bounds = getPathBounds(path) ?: return null
bounds.setLocation(visibleRect.width + visibleRect.x - componentWidth, bounds.y)
bounds.setSize(componentWidth, bounds.height)
bounds.setLocation(getComponentXCoordinate(icon.iconWidth), bounds.y)
bounds.setSize(icon.iconWidth, bounds.height)
return bounds
}
private fun getComponentXCoordinate(componentWidth: Int): Int {
return visibleRect.width + visibleRect.x - componentWidth
}
internal fun getFirstMatchingOperation(node: ChangesBrowserNode<*>): StagingAreaOperation? {
if (node == root) return null
val statusNode = VcsTreeModelData.children(node).userObjectsStream(GitFileStatusNode::class.java).findFirst().orElse(null)
@@ -373,25 +376,26 @@ abstract class GitStageTree(project: Project, parentDisposable: Disposable) : Ch
val foreground = if (hovered && hoverData!!.isOverOperationIcon) baseIcon
else IconLoader.getDisabledIcon(baseIcon, this)
val treeFocused = tree.hasFocus()
val path = tree.getPathForRow(row)
val backgroundColor = if (selected || path == null) UIUtil.getTreeBackground(selected, treeFocused)
else tree.getPathBackground(path, row)
?: UIUtil.getTreeBackground(selected, treeFocused)
val background = ColorIcon(foreground.iconWidth, tree.getRowHeight(), foreground.iconWidth, tree.getRowHeight(),
backgroundColor, false)
tree.getBackground(row, selected), false)
val icon = LayeredIcon(2).apply {
setIcon(background, 0)
setIcon(foreground, 1, SwingConstants.CENTER)
setIcon(foreground, 1, SwingConstants.WEST)
}
val rowX = TreeUtil.getNodeRowX(tree, row) + tree.insets.left
val location = tree.visibleRect.x + tree.visibleRect.width - rowX - icon.iconWidth
val location = tree.getComponentXCoordinate(foreground.iconWidth) - (TreeUtil.getNodeRowX(tree, row) + tree.insets.left)
return FloatingIcon(icon, location)
}
private fun GitStageTree.getBackground(row: Int, selected: Boolean): Color {
val treeFocused = hasFocus()
if (selected) return UIUtil.getTreeBackground(selected, treeFocused)
return getPathForRow(row)?.let { path -> getPathBackground(path, row) } ?: UIUtil.getTreeBackground(selected, treeFocused)
}
override fun getAccessibleContext(): AccessibleContext {
if (accessibleContext == null) {
accessibleContext = object : AccessibleContextDelegate(textRenderer.accessibleContext) {