IDEA-171869 Win10 LaF EditorTextField insets in combobox and Wrapper fixed

This commit is contained in:
Kirill Kirichenko
2017-06-27 18:45:46 +03:00
parent f26216b5e2
commit de322a1653
4 changed files with 27 additions and 17 deletions
@@ -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();
@@ -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
@@ -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));
@@ -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);