diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaOptionButtonUI.kt b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaOptionButtonUI.kt index 66fca71b1279..28a5f7179bcd 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaOptionButtonUI.kt +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaOptionButtonUI.kt @@ -3,17 +3,16 @@ package com.intellij.ide.ui.laf.darcula.ui import com.intellij.ide.ui.laf.darcula.DarculaUIUtil.* import com.intellij.ide.ui.laf.darcula.ui.DarculaButtonUI.getDisabledTextColor +import com.intellij.ide.ui.laf.darcula.ui.DarculaButtonUI.isDefaultButton import com.intellij.ide.ui.laf.darcula.ui.DarculaComboBoxUI.getArrowButtonPreferredSize import com.intellij.ui.components.BasicOptionButtonUI import com.intellij.util.ui.JBUI import com.intellij.util.ui.JBUI.scale -import java.awt.Dimension -import java.awt.Graphics -import java.awt.Graphics2D -import java.awt.RenderingHints +import java.awt.* import java.awt.geom.Rectangle2D import javax.swing.AbstractButton import javax.swing.JComponent +import javax.swing.UIManager import javax.swing.border.Border open class DarculaOptionButtonUI : BasicOptionButtonUI() { @@ -89,10 +88,23 @@ open class DarculaOptionButtonUI : BasicOptionButtonUI() { val yOffset = BW.getFloat() + LW.getFloat() + scale(1) val x = mainButton.width.toFloat() - g.paint = (mainButton.border as DarculaButtonPainter).getBorderPaint(c) + g.paint = separatorColor(c) g.fill(Rectangle2D.Float(x, yOffset, LW.getFloat(), mainButton.height - yOffset * 2)) } + private fun separatorColor(c: JComponent) : Paint { + val defButton = isDefaultButton(c as AbstractButton) + val hasFocus = c.hasFocus() + + val resourceName = when { + defButton && !hasFocus -> "OptionButton.default.separatorColor" + !defButton && !hasFocus -> "OptionButton.separatorColor" + else -> null + } + + return if (resourceName != null) UIManager.getColor(resourceName) else (mainButton.border as DarculaButtonPainter).getBorderPaint(c) + } + override fun updateOptions(): Unit = super.updateOptions().also { optionButton.border = if (isSimpleButton) optionButtonBorder else mainButton.border } diff --git a/platform/platform-resources/src/themes/HighContrast.theme.json b/platform/platform-resources/src/themes/HighContrast.theme.json index 389eb7a86b7c..cb3639fae8aa 100644 --- a/platform/platform-resources/src/themes/HighContrast.theme.json +++ b/platform/platform-resources/src/themes/HighContrast.theme.json @@ -213,6 +213,11 @@ } }, + "OptionButton" : { + "default.separatorColor": "#000000", + "separatorColor": "#FFFFFF" + }, + "ParameterInfo": { "background": "#281A33", "foreground": "#CCCCCC", diff --git a/platform/platform-resources/src/themes/metadata/JDK.themeMetadata.json b/platform/platform-resources/src/themes/metadata/JDK.themeMetadata.json index 22c7f2a813fc..60e918691f37 100644 --- a/platform/platform-resources/src/themes/metadata/JDK.themeMetadata.json +++ b/platform/platform-resources/src/themes/metadata/JDK.themeMetadata.json @@ -659,6 +659,14 @@ "key": "menuText", "deprecated": true }, + { + "key": "OptionButton.default.separatorColor", + "description": "JBOptionButton separator color in default state." + }, + { + "key": "OptionButton.separatorColor", + "description": "JBOptionButton separator color." + }, { "key": "OptionPane.background" },