[UI] IJPL-189623 Split StripeToolbar.Button.iconPadding into four keys

Introduce separate keys for the left and right stripes,
and for the with/without names options.

Now they can be fully customized by the theme.


(cherry picked from commit b37edf768106ac66dd4e4906d75a84a75a7b54d7)

IJ-CR-179392

GitOrigin-RevId: 78ee403b237d465ab4ddb2d5cf4eedcbd868e7e4
This commit is contained in:
Sergei Tachenov
2025-10-21 11:26:54 +03:00
committed by intellij-monorepo-bot
parent df29755711
commit 9857b2b741
8 changed files with 54 additions and 40 deletions

View File

@@ -17,6 +17,8 @@ import com.intellij.openapi.wm.impl.SquareStripeButton.Companion.createMoveGroup
import com.intellij.toolWindow.ResizeStripeManager
import com.intellij.toolWindow.StripeButtonUi
import com.intellij.toolWindow.ToolWindowEventSource
import com.intellij.toolWindow.ToolWindowLeftToolbar
import com.intellij.toolWindow.ToolWindowToolbar
import com.intellij.ui.*
import com.intellij.ui.icons.loadIconCustomVersionOrScale
import com.intellij.ui.icons.toStrokeIcon
@@ -46,10 +48,10 @@ internal abstract class AbstractSquareStripeButton(
})
}
fun paintDraggingButton(g: Graphics) {
fun paintDraggingButton(g: Graphics, isLeft: Boolean) {
val areaSize = size.also {
JBInsets.removeFrom(it, insets)
JBInsets.removeFrom(it, SquareStripeButtonLook.ICON_PADDING)
JBInsets.removeFrom(it, SquareStripeButtonLook.getIconPadding(isLeft))
}
val color = JBUI.CurrentTheme.ToolWindow.DragAndDrop.BUTTON_FLOATING_BACKGROUND
@@ -366,3 +368,7 @@ internal open class SquareAnActionButton(@JvmField protected val window: ToolWin
}
}
internal fun Component.isOnTheLeftStripe(): Boolean {
val stripe = ComponentUtil.getParentOfType(ToolWindowToolbar::class.java, this)
return stripe is ToolWindowLeftToolbar
}

View File

@@ -23,18 +23,19 @@ import javax.swing.UIManager
*/
internal open class SquareStripeButtonLook(private val button: ActionButton) : IdeaActionButtonLook() {
companion object {
val ICON_PADDING: Insets
get() {
return JBUI.CurrentTheme.Toolbar.stripeToolbarButtonIconPadding(UISettings.Companion.getInstance().compactMode,
ResizeStripeManager.isShowNames())
}
fun getIconPadding(isLeft: Boolean): Insets {
return JBUI.CurrentTheme.Toolbar.stripeToolbarButtonIconPadding(
isLeft,
ResizeStripeManager.isShowNames()
)
}
}
override fun paintBackground(g: Graphics, component: JComponent, state: Int) {
val initialColor = getStateBackground(component, state) ?: return
val rect = Rectangle(component.size).also {
JBInsets.removeFrom(it, component.insets)
JBInsets.removeFrom(it, ICON_PADDING)
JBInsets.removeFrom(it, getIconPadding(component.isOnTheLeftStripe()))
}
val color = getBackgroundColor(initialColor)
@@ -63,7 +64,7 @@ internal open class SquareStripeButtonLook(private val button: ActionButton) : I
val rect = Rectangle(component.size).also {
JBInsets.removeFrom(it, component.insets)
JBInsets.removeFrom(it, ICON_PADDING)
JBInsets.removeFrom(it, getIconPadding(component.isOnTheLeftStripe()))
}
val color = if (state == ActionButtonComponent.PUSHED) JBUI.CurrentTheme.ActionButton.pressedBorder()

View File

@@ -245,8 +245,8 @@ internal class ToolWindowDragHelper(parent: Disposable, @JvmField val dragSource
private fun setInitialOffsetFromStripeButton(relativePoint: RelativePoint, clickedComponent: Component) {
initialOffset.location = relativePoint.getPoint(clickedComponent).also {
if (clickedComponent is AbstractSquareStripeButton) {
it.x -= clickedComponent.insets.left + SquareStripeButtonLook.ICON_PADDING.left
it.y -= clickedComponent.insets.top + SquareStripeButtonLook.ICON_PADDING.top
it.x -= clickedComponent.insets.left + SquareStripeButtonLook.getIconPadding(clickedComponent.isOnTheLeftStripe()).left
it.y -= clickedComponent.insets.top + SquareStripeButtonLook.getIconPadding(clickedComponent.isOnTheLeftStripe()).top
}
}
}
@@ -703,6 +703,7 @@ internal class ToolWindowDragHelper(parent: Disposable, @JvmField val dragSource
component.size = component.preferredSize
}
val isLeft = component.isOnTheLeftStripe()
val areaSize = when (component) {
is StripeButton -> component.size.also {
val delta = JBUIScale.scale(1)
@@ -711,7 +712,7 @@ internal class ToolWindowDragHelper(parent: Disposable, @JvmField val dragSource
}
is AbstractSquareStripeButton -> component.size.also {
JBInsets.removeFrom(it, component.insets)
JBInsets.removeFrom(it, SquareStripeButtonLook.ICON_PADDING)
JBInsets.removeFrom(it, SquareStripeButtonLook.getIconPadding(isLeft))
}
else -> JBUI.emptySize()
}
@@ -733,7 +734,7 @@ internal class ToolWindowDragHelper(parent: Disposable, @JvmField val dragSource
when (component) {
is StripeButton -> component.paint(it)
is AbstractSquareStripeButton -> component.paintDraggingButton(it)
is AbstractSquareStripeButton -> component.paintDraggingButton(it, isLeft)
}
it.dispose()

View File

@@ -823,7 +823,14 @@
"StripeToolbar.Button": {
"size.compact": "32,32",
"iconSize.compact": 16,
"iconPadding.compact": "4,4,4,4"
"leftStripeIcon.padding": "5,5,5,5",
"rightStripeIcon.padding": "5,5,5,5",
"leftStripeIcon.padding.compact": "4,4,4,4",
"rightStripeIcon.padding.compact": "4,4,4,4",
"leftStripeIconWithName.padding": "4,4,4,4",
"rightStripeIconWithName.padding": "4,4,4,4",
"leftStripeIconWithName.padding.compact": "3,3,3,3",
"rightStripeIconWithName.padding.compact": "3,3,3,3"
},
"Tooltip": {

View File

@@ -1722,9 +1722,24 @@
"since": "2023.1"
},
{
"key": "StripeToolbar.Button.iconPadding",
"description": "Tool window stripe button icon padding",
"since": "2023.1"
"key": "StripeToolbar.Button.leftStripeIcon.padding",
"description": "Tool window left stripe button icon padding",
"since": "2025.3"
},
{
"key": "StripeToolbar.Button.rightStripeIcon.padding",
"description": "Tool window right stripe button icon padding",
"since": "2025.3"
},
{
"key": "StripeToolbar.Button.leftStripeIconWithName.padding",
"description": "Tool window left stripe button icon padding with tool window names on",
"since": "2025.3"
},
{
"key": "StripeToolbar.Button.rightStripeIconWithName.padding",
"description": "Tool window right stripe button icon padding with tool window names on",
"since": "2025.3"
},
{
"key": "List.hoverBackground",

View File

@@ -4710,9 +4710,6 @@ f:com.intellij.util.ui.JBUI$CurrentTheme$Toolbar
- s:defaultExperimentalToolbarButtonIconSize():I
- s:defaultExperimentalToolbarButtonSize():com.intellij.util.ui.JBDimension
- s:defaultExperimentalToolbarFont():com.intellij.util.ui.JBFont
- s:defaultStripeToolbarButtonIconPadding():com.intellij.util.ui.JBInsets
- s:defaultStripeToolbarButtonIconPaddingForCompactMode():com.intellij.util.ui.JBInsets
- s:defaultStripeToolbarButtonIconPaddingForNames():com.intellij.util.ui.JBInsets
- s:defaultStripeToolbarButtonIconSize():I
- s:defaultStripeToolbarButtonSize():com.intellij.util.ui.JBDimension
- s:experimentalToolbarButtonIconSize():I
@@ -4728,7 +4725,6 @@ f:com.intellij.util.ui.JBUI$CurrentTheme$Toolbar
- s:recentProjectAvatarIconSize():I
- s:recentProjectAvatarIconSizeKey():java.lang.String
- s:stripeToolbarButtonIconPadding(Z,Z):java.awt.Insets
- s:stripeToolbarButtonIconPaddingKey():java.lang.String
- s:stripeToolbarButtonIconSize():I
- s:stripeToolbarButtonIconSizeKey():java.lang.String
- s:stripeToolbarButtonSize():java.awt.Dimension

View File

@@ -1325,29 +1325,17 @@ public final class JBUI {
return 20;
}
public static @NotNull Insets stripeToolbarButtonIconPadding(boolean compactMode, boolean showNames) {
return insets(stripeToolbarButtonIconPaddingKey(), showNames
? compactMode
? defaultStripeToolbarButtonIconPaddingForCompactMode()
: defaultStripeToolbarButtonIconPaddingForNames()
: defaultStripeToolbarButtonIconPadding());
public static @NotNull Insets stripeToolbarButtonIconPadding(boolean left, boolean showNames) {
return insets(stripeToolbarButtonIconPaddingKey(left, showNames), defaultStripeToolbarButtonIconPadding());
}
public static @NotNull String stripeToolbarButtonIconPaddingKey() {
return "StripeToolbar.Button.iconPadding";
private static @NotNull String stripeToolbarButtonIconPaddingKey(boolean left, boolean showNames) {
return "StripeToolbar.Button." + (left ? "left" : "right") + "StripeIcon" + (showNames ? "WithName" : "") + ".padding";
}
public static @NotNull JBInsets defaultStripeToolbarButtonIconPadding() {
private static @NotNull JBInsets defaultStripeToolbarButtonIconPadding() {
return insets(5);
}
public static @NotNull JBInsets defaultStripeToolbarButtonIconPaddingForNames() {
return insets(4);
}
public static @NotNull JBInsets defaultStripeToolbarButtonIconPaddingForCompactMode() {
return insets(3);
}
}
public static final class FloatingToolbar {

View File

@@ -70,8 +70,8 @@ internal class ComponentShowcaseDialog(project: Project) : DialogWrapper(project
),
padding =
Toolbar.stripeToolbarButtonIconPadding(
uiSettings.compactMode, // compactMode
ResizeStripeManager.isShowNames(), // showNames
/* left = */ true,
/* showNames = */ ResizeStripeManager.isShowNames(),
)
.toPaddingValues(),
borderWidth = 0.dp,