diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java index 4ebbd36d1258..acbdd35aac70 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java @@ -383,13 +383,15 @@ public abstract class ComboBoxAction extends AnAction implements CustomComponent public Dimension getPreferredSize() { final boolean isEmpty = getIcon() == null && StringUtil.isEmpty(getText()); int width = isEmpty ? JBUI.scale(10) + getArrowIcon(isEnabled()).getIconWidth() : super.getPreferredSize().width; - if (isSmallVariant() && !((SystemInfo.isMac && UIUtil.isUnderIntelliJLaF()))) { + if (isSmallVariant() && !UIUtil.isUnderDefaultMacTheme()) { width += JBUI.scale(4); if (UIUtil.isUnderWin10LookAndFeel()) { width += JBUI.scale(8); } } - return new Dimension(width, isSmallVariant() ? JBUI.scale(19) : super.getPreferredSize().height); + + int height = UIUtil.isUnderWin10LookAndFeel() ? JBUI.scale(22) : JBUI.scale(19); + return new Dimension(width, isSmallVariant() ? height : super.getPreferredSize().height); } @Override @@ -403,7 +405,7 @@ public abstract class ComboBoxAction extends AnAction implements CustomComponent } @Override - public void paint(Graphics g) { + public void paintComponent(Graphics g) { final boolean isEmpty = getIcon() == null && StringUtil.isEmpty(getText()); final Dimension size = getSize(); diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJComboBoxUI.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJComboBoxUI.java index 31fbe10bf086..6d5d0dc45536 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJComboBoxUI.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJComboBoxUI.java @@ -377,6 +377,10 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { editorHoverListener = new DarculaUIUtil.MouseHoverPropertyTrigger(comboBox, HOVER_PROPERTY); + JComponent jEditor = (JComponent)editor; + jEditor.setOpaque(false); + jEditor.setBorder(DEFAULT_EDITOR_BORDER); + if (editor instanceof JTextComponent) { editor.addFocusListener(editorFocusListener); editor.addMouseListener(editorHoverListener); @@ -386,12 +390,10 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { etf.addFocusListener(editorFocusListener); etf.addMouseListener(editorHoverListener); etf.setBackground(getComboBackground(true)); + + jEditor.setBorder(JBUI.Borders.emptyTop(2)); } } - - JComponent jc = (JComponent)editor; - jc.setBorder(DEFAULT_EDITOR_BORDER); - jc.setOpaque(false); } } @@ -499,10 +501,11 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { JBUI.insets(2, 6, 2, 2).asUIResource() : JBUI.insets(2, 2, 2, 6).asUIResource(); } - private Dimension getSizeWithButton(Dimension d) { + private Dimension getSizeWithButton(Dimension d) { Insets i = comboBox.getInsets(); int width = ARROW_BUTTON_SIZE.width + i.left; - return new Dimension(Math.max(d.width + JBUI.scale(10), width), ARROW_BUTTON_SIZE.height); + return new Dimension(Math.max(d.width + JBUI.scale(10), width), + Math.max(ARROW_BUTTON_SIZE.height, d.height)); } @Override diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextBorder.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextBorder.java index ccee4b574a43..62e0dc290e3e 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextBorder.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextBorder.java @@ -20,10 +20,8 @@ import com.intellij.ide.ui.laf.darcula.ui.DarculaTextBorder; import com.intellij.ide.ui.laf.darcula.ui.TextFieldWithPopupHandlerUI; import com.intellij.openapi.util.registry.Registry; import com.intellij.ui.ColorPanel; -import com.intellij.ui.components.panels.Wrapper; import com.intellij.util.ui.JBInsets; import com.intellij.util.ui.JBUI; -import com.intellij.util.ui.UIUtil; import javax.swing.*; import java.awt.*; @@ -31,6 +29,7 @@ import java.awt.geom.Path2D; import static com.intellij.ide.ui.laf.darcula.ui.TextFieldWithPopupHandlerUI.isSearchFieldWithHistoryPopup; import static com.intellij.ide.ui.laf.intellij.WinIntelliJTextFieldUI.HOVER_PROPERTY; +import static com.intellij.ide.ui.laf.intellij.WinIntelliJTextFieldUI.adjustInWrapperRect; /** * @author Konstantin Bulenkov @@ -55,9 +54,7 @@ public class WinIntelliJTextBorder extends DarculaTextBorder { try { Rectangle r = new Rectangle(x, y, width, height); - if (UIUtil.getParentOfType(Wrapper.class, c) != null && isSearchFieldWithHistoryPopup(c)) { - JBInsets.removeFrom(r, JBUI.insets(2, 0)); - } + adjustInWrapperRect(r, c); JBInsets.removeFrom(r, JBUI.insets(1)); diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextFieldUI.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextFieldUI.java index 057e0a0b83f7..ced1625d5a3d 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextFieldUI.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextFieldUI.java @@ -95,13 +95,21 @@ public class WinIntelliJTextFieldUI extends DarculaTextFieldUI { if (UIUtil.getParentOfType(JSpinner.class, c) == null) { // Fill whole rectangle in spinner JBInsets.removeFrom(r, JBUI.insets(2)); - if (UIUtil.getParentOfType(Wrapper.class, c) != null && isSearchFieldWithHistoryPopup(c)) { - JBInsets.removeFrom(r, JBUI.insets(2, 0)); - } + adjustInWrapperRect(r, c); } g2.fill(r); } + static void adjustInWrapperRect(Rectangle r, Component c) { + if (UIUtil.getParentOfType(Wrapper.class, c) != null && isSearchFieldWithHistoryPopup(c)) { + int delta = c.getHeight() - c.getPreferredSize().height; + if (delta > 0) { + delta -= delta % 2 == 0 ? 0 : 1; + JBInsets.removeFrom(r, JBUI.insets(delta / 2, 0)); + } + } + } + @Override public Dimension getPreferredSize(JComponent c) { Dimension size = super.getPreferredSize(c); size.height = Math.max(JBUI.scale(24), size.height);