From 8c4ff82ca9842c65dc89cd0a2f3f725d69cb881b Mon Sep 17 00:00:00 2001 From: Kirill Kirichenko <kirill.kirichenko@jetbrains.com> Date: Wed, 14 Jun 2017 19:30:33 +0300 Subject: [PATCH] IDEA-171869 Win10 LaF fix combobox background and better textfield/combobox positioning (cherry picked from commit 46d4aab) --- .../ide/ui/laf/darcula/DarculaUIUtil.java | 92 ++++++--- .../laf/intellij/WinIntelliJButtonBorder.java | 7 +- .../laf/intellij/WinIntelliJComboBoxUI.java | 193 +++++++++--------- .../ui/laf/intellij/WinIntelliJSpinnerUI.java | 2 +- .../laf/intellij/WinIntelliJTextBorder.java | 29 ++- .../laf/intellij/WinIntelliJTextFieldUI.java | 32 +-- .../ide/ui/laf/intellijlaf_native.properties | 1 + 7 files changed, 199 insertions(+), 157 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaUIUtil.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaUIUtil.java index b79e5e6146a4..574abba906f8 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaUIUtil.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaUIUtil.java @@ -25,6 +25,8 @@ import com.intellij.ui.ColorUtil; import com.intellij.ui.EditorTextField; import com.intellij.ui.Gray; import com.intellij.ui.JBColor; +import com.intellij.ui.components.panels.Wrapper; +import com.intellij.util.ui.JBInsets; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.MacUIUtil; import com.intellij.util.ui.UIUtil; @@ -43,6 +45,7 @@ import java.awt.geom.Rectangle2D; import java.util.Arrays; import java.util.List; +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.util.ui.MacUIUtil.MAC_FILL_BORDER; import static javax.swing.SwingConstants.EAST; @@ -284,45 +287,72 @@ public class DarculaUIUtil { @Override public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { - g.setColor(c.getBackground()); - g.fillRect(x, y, width, height); + if (isComboBoxEditor(c)) { + g.setColor(c.getBackground()); + g.fillRect(x, y, width, height); + return; + } - if (!isComboBoxEditor(c) && UIUtil.getParentOfType(EditorTextField.class, c) != null) { - Graphics2D g2 = (Graphics2D)g.create(); - try { - g2.translate(x, y); + if (UIUtil.getParentOfType(EditorTextField.class, c) == null) { + return; + } + + Graphics2D g2 = (Graphics2D)g.create(); + 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)); + } - if (hasFocus(editorTextField)) { - g2.setColor(UIManager.getColor("TextField.focusedBorderColor")); - } else if (editorTextField.isEnabled() && - editorComponent != null && editorComponent.getClientProperty(HOVER_PROPERTY) == Boolean.TRUE) { - g2.setColor(UIManager.getColor("TextField.hoverBorderColor")); - } else { - g2.setColor(UIManager.getColor("TextField.borderColor")); - } - - if (!editorTextField.isEnabled()) { - g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.35f)); - } - - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE); - - int bw = JBUI.scale(1); - Path2D border = new Path2D.Double(Path2D.WIND_EVEN_ODD); - border.append(new Rectangle2D.Double(0, 0, width, height), false); - border.append(new Rectangle2D.Double(bw, bw, width - bw*2, height - bw*2), false); - - g2.fill(border); - } finally { - g2.dispose(); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE); + + // Fill background area of border + if (isBorderOpaque() || c.getParent() != null) { + g2.setColor(c.getParent().getBackground()); + + Path2D borderArea = new Path2D.Double(Path2D.WIND_EVEN_ODD); + borderArea.append(r, false); + + Rectangle innerRect = new Rectangle(r); + JBInsets.removeFrom(innerRect, JBUI.insets(2)); + borderArea.append(innerRect, false); + g2.fill(borderArea); + } + + // draw border itself + if (hasFocus(editorTextField)) { + g2.setColor(UIManager.getColor("TextField.focusedBorderColor")); + } else if (editorTextField.isEnabled() && + editorComponent != null && editorComponent.getClientProperty(HOVER_PROPERTY) == Boolean.TRUE) { + g2.setColor(UIManager.getColor("TextField.hoverBorderColor")); + } else { + g2.setColor(UIManager.getColor("TextField.borderColor")); + } + + if (!editorTextField.isEnabled()) { + g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.47f)); } + + + Path2D border = new Path2D.Double(Path2D.WIND_EVEN_ODD); + JBInsets.removeFrom(r, JBUI.insets(1)); + border.append(r, false); + + Rectangle innerRect = new Rectangle(r); + JBInsets.removeFrom(innerRect, JBUI.insets(1)); + border.append(innerRect, false); + + g2.fill(border); + } finally { + g2.dispose(); } } @Override public Insets getBorderInsets(Component c) { - return isComboBoxEditor(c) ? JBUI.insets(0, 5).asUIResource() : JBUI.insets(3, 5).asUIResource(); + return isComboBoxEditor(c) ? JBUI.insets(1, 6).asUIResource() : JBUI.insets(4, 6).asUIResource(); } } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJButtonBorder.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJButtonBorder.java index 8e216b7d5028..76f173bafc8f 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJButtonBorder.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJButtonBorder.java @@ -17,10 +17,8 @@ package com.intellij.ide.ui.laf.intellij; import com.intellij.ide.ui.laf.darcula.ui.DarculaButtonUI; import com.intellij.openapi.actionSystem.ActionToolbar; -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 javax.swing.border.Border; @@ -88,9 +86,8 @@ public class WinIntelliJButtonBorder implements Border, UIResource { public Insets getBorderInsets(Component c) { if (c.getParent() instanceof ActionToolbar) { return JBUI.insets(4, 16).asUIResource(); - } else if (DarculaButtonUI.isSquare(c)) { - int i = (UIUtil.getParentOfType(Wrapper.class, c) != null) ? 1 : 0; - return JBUI.insets(i).asUIResource(); + } else if (isSquare(c)) { + return JBUI.insets(1).asUIResource(); } else if (DarculaButtonUI.isHelpButton((JComponent)c)) { return JBUI.insets(0, 0, 0, 10).asUIResource(); } else { 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 19245d5bfe35..b421de98ccc5 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 @@ -20,7 +20,6 @@ import com.intellij.ide.ui.laf.darcula.ui.DarculaComboBoxUI; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.util.registry.Registry; import com.intellij.ui.EditorTextField; -import com.intellij.ui.components.panels.Wrapper; import com.intellij.util.ui.JBDimension; import com.intellij.util.ui.JBInsets; import com.intellij.util.ui.JBUI; @@ -35,7 +34,6 @@ import javax.swing.text.JTextComponent; import java.awt.*; import java.awt.event.*; import java.awt.geom.Path2D; -import java.awt.geom.Rectangle2D; import java.beans.PropertyChangeListener; /** @@ -45,7 +43,7 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { private static final String HOVER_PROPERTY = "JComboBox.mouseHover"; private static final String PRESSED_PROPERTY = "JComboBox.mousePressed"; private static final Border DEFAULT_EDITOR_BORDER = JBUI.Borders.empty(1, 0); - private static final int IN_PANEL_OFFSET = 1; + private static final Dimension ARROW_BUTTON_SIZE = new JBDimension(21, 24); // Count borders private MouseListener mouseListener; @@ -75,7 +73,10 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { propertyListener = (evt) -> { if("enabled".equals(evt.getPropertyName())) { - setEditorTextFieldBackground(); + EditorTextField etf = UIUtil.findComponentOfType((JComponent)editor, EditorTextField.class); + if (etf != null) { + etf.setBackground(getComboBackground(true)); + } } else if ("editable".equals(evt.getPropertyName())) { if (evt.getNewValue() == Boolean.TRUE) { comboBox.removeMouseListener(mouseListener); @@ -111,14 +112,18 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { } } - g2.setColor(getComboBackground()); - resizeInPanel(r); - JBInsets.removeFrom(r, JBUI.insets(1)); + g2.setColor(getComboBackground(editor != null && editor.isOpaque())); + JBInsets.removeFrom(r, JBUI.insets(2)); + + if (!comboBox.isEnabled()) { + g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.47f)); + } + g2.fill(r); if (!comboBox.isEditable()) { hasFocus = comboBox.hasFocus(); - paintCurrentValue(g, rectangleForCurrentValue(), hasFocus); + paintCurrentValue(g2, rectangleForCurrentValue(), hasFocus); } } finally { g2.dispose(); @@ -128,18 +133,20 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { @Override protected Rectangle rectangleForCurrentValue() { int w = comboBox.getWidth(); int h = comboBox.getHeight(); - Insets i = getInsets(); - int buttonSize = h - (i.top + i.bottom); + Insets i = comboBox.getInsets(); + + int buttonWidth = h; if (arrowButton != null) { - buttonSize = arrowButton.getWidth(); + buttonWidth = comboBox.getComponentOrientation().isLeftToRight() ? + arrowButton.getWidth() - i.right: arrowButton.getWidth() - i.left; } Rectangle rect = (comboBox.getComponentOrientation().isLeftToRight()) ? new Rectangle(i.left, i.top, - w - (i.left + i.right + buttonSize), + w - (i.left + i.right + buttonWidth), h - (i.top + i.bottom)) : - new Rectangle(i.left + buttonSize, i.top, - w - (i.left + i.right + buttonSize), + new Rectangle(i.left + buttonWidth, i.top, + w - (i.left + i.right + buttonWidth), h - (i.top + i.bottom)); if (editor instanceof JComponent) { @@ -155,12 +162,15 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { ListCellRenderer<Object> renderer = comboBox.getRenderer(); Component c = renderer.getListCellRendererComponent(listBox, comboBox.getSelectedItem(), -1, false, false); - c.setBackground(getComboBackground()); c.setFont(comboBox.getFont()); c.setForeground(comboBox.isEnabled() ? UIManager.getColor("Label.foreground") : UIManager.getColor("Label.disabledForeground")); + if (c instanceof JComponent) { + ((JComponent)c).setBorder(DEFAULT_EDITOR_BORDER); + } + // paint selection in table-cell-editor mode correctly - boolean changeOpaque = c instanceof JComponent && isTableCellEditor(comboBox) && c.isOpaque(); + boolean changeOpaque = c instanceof JComponent && c.isOpaque(); if (changeOpaque) { ((JComponent)c).setOpaque(false); } @@ -181,12 +191,12 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { } } - private Color getComboBackground() { + private Color getComboBackground(boolean opaque) { if (comboBox != null) { if (comboBox.isEnabled() && comboBox.isEditable()) { return UIManager.getColor("TextField.background"); } else if (!comboBox.isEnabled()) { - return UIManager.getColor("Button.background"); + return opaque ? UIManager.getColor("Button.background.opaque") : UIManager.getColor("Button.background"); } else if (!comboBox.isEditable()) { if (isPressed()) { return UIManager.getColor("Button.intellij.native.pressedBackgroundColor"); @@ -203,44 +213,34 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { JButton button = new BasicArrowButton(SwingConstants.SOUTH) { @Override public Dimension getPreferredSize() { - return new JBDimension(20, 22); + return ARROW_BUTTON_SIZE; } @Override public void paint(Graphics g) { Graphics2D g2 = (Graphics2D)g.create(); try { - int bw = JBUI.scale(1); + Rectangle innerRect = new Rectangle(getSize()); + JBInsets.removeFrom(innerRect, getInsets()); // paint background - Rectangle2D innerRect = new Rectangle2D.Double(bw, bw, getWidth() - bw*2, getHeight() - bw*2); if (comboBox.isEditable() && comboBox.isEnabled()) { if (isPressed()) { g2.setColor(UIManager.getColor("Button.intellij.native.pressedBackgroundColor")); } else if (comboBox.hasFocus() || isHover()) { g2.setColor(UIManager.getColor("Button.intellij.native.focusedBackgroundColor")); } else { - g2.setColor(getComboBackground()); + g2.setColor(getComboBackground(false)); } - } else { - g2.setColor(getComboBackground()); + g2.fill(innerRect); } - if (!comboBox.isEnabled()) { - g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.35f)); - } - - g2.fill(innerRect); - - Icon icon = MacIntelliJIconCache.getIcon("comboDropTriangle", false, false, isEnabled()); - int x = (getWidth() - icon.getIconWidth()) / 2; - int y = (getHeight() - icon.getIconHeight()) / 2 + JBUI.scale(1); - icon.paintIcon(this, g2, x, y); - // paint border around button when combobox is editable if (comboBox.isEditable() && comboBox.isEnabled()) { Path2D border = new Path2D.Double(Path2D.WIND_EVEN_ODD); - border.append(new Rectangle2D.Double(0, 0, getWidth(), getHeight()), false); + Rectangle outerRect = new Rectangle(innerRect); + JBInsets.addTo(outerRect, JBUI.insets(1)); + border.append(outerRect, false); border.append(innerRect, false); if (getModel().isPressed()) { @@ -252,6 +252,15 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { } } + if (!comboBox.isEnabled()) { + g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); + } + + Icon icon = MacIntelliJIconCache.getIcon("comboDropTriangle", false, false, isEnabled()); + int x = JBUI.scale(5); + int y = (getHeight() - icon.getIconHeight()) / 2; + icon.paintIcon(this, g2, x, y); + } finally { g2.dispose(); } @@ -260,8 +269,8 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { button.setOpaque(false); - int vOffset = inPanel() ? IN_PANEL_OFFSET : 0; - button.setBorder(JBUI.Borders.empty(1 + vOffset, 0, 1 + vOffset, 1)); + button.setBorder(comboBox.getComponentOrientation().isLeftToRight() ? + JBUI.Borders.empty(2, 1, 2, 2) : JBUI.Borders.empty(2, 2, 2, 1)); buttonReleaseListener = new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { @@ -293,11 +302,6 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { @Override protected JTextField createEditorComponent() { return new JTextField() { - { - setOpaque(false); - setBorder(DEFAULT_EDITOR_BORDER); - } - public void setText(String s) { if (getText().equals(s)) { return; @@ -306,17 +310,21 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { } @Override public Color getBackground() { - return getComboBackground(); + return getComboBackground(false); } - @Override public void setBorder(Border border) {} + @Override public Border getBorder() { return DEFAULT_EDITOR_BORDER; } + @Override public Insets getInsets() { + return DEFAULT_EDITOR_BORDER.getBorderInsets(this); + } + @Override public Dimension getPreferredSize() { Dimension size = super.getPreferredSize(); - return new Dimension(size.width, JBUI.scale(22)); + return new Dimension(size.width, Math.max(JBUI.scale(18), size.height)); } }; } @@ -374,20 +382,13 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { if (etf != null) { etf.addFocusListener(editorFocusListener); etf.addMouseListener(editorHoverListener); + etf.setBackground(getComboBackground(true)); } } - ((JComponent)editor).setBorder(DEFAULT_EDITOR_BORDER); - ((JComponent)editor).setOpaque(false); - - setEditorTextFieldBackground(); - } - } - - private void setEditorTextFieldBackground() { - EditorTextField etf = UIUtil.findComponentOfType((JComponent)editor, EditorTextField.class); - if (etf != null && comboBox.isEditable()) { - etf.setBackground(getComboBackground()); + JComponent jc = (JComponent)editor; + jc.setBorder(DEFAULT_EDITOR_BORDER); + jc.setOpaque(false); } } @@ -420,23 +421,20 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { } } - @Override public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { if (comboBox == null || arrowButton == null) { return; //NPE on LaF change } - Rectangle r = new Rectangle(x, y, width, height); Graphics2D g2 = (Graphics2D)g.create(); try { - resizeInPanel(r); - g2.translate(r.x, r.y); + g2.translate(x, y); checkFocus(); if (Registry.is("ide.inplace.errors.outline") && comboBox.getClientProperty("JComponent.error.outline") == Boolean.TRUE) { - DarculaUIUtil.paintErrorBorder(g2, r.width, r.height, 0, true, hasFocus); + DarculaUIUtil.paintErrorBorder(g2, width, height, 0, true, hasFocus); } else if (comboBox.isEnabled()) { if (comboBox.isEditable()) { if (hasFocus) { @@ -455,36 +453,23 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { } } else { g2.setColor(UIManager.getColor("Button.intellij.native.borderColor")); - g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.35f)); + g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.47f)); } - - int bw = JBUI.scale(1); Path2D border = new Path2D.Double(Path2D.WIND_EVEN_ODD); - border.append(new Rectangle2D.Double(0, 0, r.width, r.height), false); - border.append(new Rectangle2D.Double(bw, bw, r.width - bw*2, r.height - bw*2), false); + Rectangle outerRect = new Rectangle(width, height); + JBInsets.removeFrom(outerRect, JBUI.insets(1)); + border.append(outerRect, false); + + Rectangle innerRect = new Rectangle(outerRect); + JBInsets.removeFrom(innerRect, JBUI.insets(1)); + border.append(innerRect, false); g2.fill(border); } finally { g2.dispose(); } } - private boolean inPanel() { - return UIUtil.getParentOfType(Wrapper.class, comboBox) != null; - } - - private void resizeInPanel(Rectangle r) { - if (inPanel()) { - Insets i = comboBox.getInsets(); - r.y += i.top; - r.height -= i.top + i.bottom; - - int offset = JBUI.scale(IN_PANEL_OFFSET); - r.x += offset; - r.width -= offset; - } - } - private boolean isHover() { return comboBox != null && comboBox.getClientProperty(HOVER_PROPERTY) == Boolean.TRUE || arrowButton != null && arrowButton.getClientProperty(HOVER_PROPERTY) == Boolean.TRUE; @@ -505,24 +490,16 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { arrowButton != null && arrowButton.getModel().isPressed(); } - @Override - protected Insets getInsets() { - boolean inPanel = inPanel(); - int vOffset = inPanel ? IN_PANEL_OFFSET : 0; - int hOffset = 5 + (inPanel ? IN_PANEL_OFFSET : 0); - return JBUI.insets(vOffset, hOffset, vOffset, 0).asUIResource(); - } - @Override public Insets getBorderInsets(Component c) { - return getInsets(); + return c.getComponentOrientation().isLeftToRight() ? + JBUI.insets(2, 6, 2, 2).asUIResource() : JBUI.insets(2, 2, 2, 6).asUIResource(); } private Dimension getSizeWithButton(Dimension d) { Insets i = comboBox.getInsets(); - int iconWidth = JBUI.scale(20) + i.right; - int iconHeight = JBUI.scale(22) + i.top + i.bottom; - return new Dimension(Math.max(d.width + JBUI.scale(7), iconWidth), iconHeight); + int width = ARROW_BUTTON_SIZE.width + i.left; + return new Dimension(Math.max(d.width + JBUI.scale(10), width), ARROW_BUTTON_SIZE.height); } @Override @@ -535,6 +512,32 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { return getSizeWithButton(super.getMinimumSize(c)); } + @Override + protected LayoutManager createLayoutManager() { + return new ComboBoxLayoutManager() { + @Override + public void layoutContainer(Container parent) { + JComboBox cb = (JComboBox)parent; + + int buttonHeight = cb.getHeight(); + int buttonWidth = ARROW_BUTTON_SIZE.width; + + if (arrowButton != null) { + if (cb.getComponentOrientation().isLeftToRight()) { + arrowButton.setBounds(cb.getWidth() - buttonWidth, 0, buttonWidth, buttonHeight); + } else { + arrowButton.setBounds(0, 0, buttonWidth, buttonHeight); + } + } + + if (editor != null) { + Rectangle er = rectangleForCurrentValue(); + editor.setBounds(er); + } + } + }; + } + private class ComboBoxMouseListener extends MouseAdapter { @Override public void mousePressed(MouseEvent e) { setPressedProperty(true); diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJSpinnerUI.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJSpinnerUI.java index 906ee987228e..8954d331542a 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJSpinnerUI.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJSpinnerUI.java @@ -133,7 +133,7 @@ public class WinIntelliJSpinnerUI extends DarculaSpinnerUI { } } else { g2.setColor(UIManager.getColor("Button.background")); - g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.35f)); + g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.47f)); } g2.fill(outerRect); 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 12085fb3c6ec..ccee4b574a43 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,16 +20,17 @@ 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.*; import java.awt.geom.Path2D; -import java.awt.geom.Rectangle2D; 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.adjustVerticalInsets; /** * @author Konstantin Bulenkov @@ -38,13 +39,13 @@ public class WinIntelliJTextBorder extends DarculaTextBorder { @Override public Insets getBorderInsets(Component c) { if (isSearchFieldWithHistoryPopup(c)) { - return JBUI.insets(3, 26, 3, 23).asUIResource(); + return JBUI.insets(4, 27, 4, 24).asUIResource(); } else if (TextFieldWithPopupHandlerUI.isSearchField(c)) { - return JBUI.insets(3, 20, 3, 23).asUIResource(); + return JBUI.insets(4, 21, 4, 24).asUIResource(); } else if (c instanceof JTextField && c.getParent() instanceof ColorPanel) { return JBUI.insets(3, 3, 2, 2).asUIResource(); } else { - return JBUI.insets(3, 5).asUIResource(); + return JBUI.insets(4, 6).asUIResource(); } } @@ -53,9 +54,13 @@ public class WinIntelliJTextBorder extends DarculaTextBorder { Graphics2D g2 = (Graphics2D)g.create(); try { Rectangle r = new Rectangle(x, y, width, height); - adjustVerticalInsets(r, (JComponent)c); - g2.translate(r.x, r.y); + if (UIUtil.getParentOfType(Wrapper.class, c) != null && isSearchFieldWithHistoryPopup(c)) { + JBInsets.removeFrom(r, JBUI.insets(2, 0)); + } + + JBInsets.removeFrom(r, JBUI.insets(1)); + Object eop = ((JComponent)c).getClientProperty("JComponent.error.outline"); if (Registry.is("ide.inplace.errors.outline") && Boolean.parseBoolean(String.valueOf(eop))) { DarculaUIUtil.paintErrorBorder(g2, r.width, r.height, 0, true, c.hasFocus()); @@ -71,16 +76,18 @@ public class WinIntelliJTextBorder extends DarculaTextBorder { } if (!jc.isEnabled()) { - g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.35f)); + g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.47f)); } g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE); - int bw = JBUI.scale(1); Path2D border = new Path2D.Double(Path2D.WIND_EVEN_ODD); - border.append(new Rectangle2D.Double(0, 0, r.width, r.height), false); - border.append(new Rectangle2D.Double(bw, bw, r.width - bw*2, r.height - bw*2), false); + border.append(r, false); + + Rectangle innerRect = new Rectangle(r); + JBInsets.removeFrom(innerRect, JBUI.insets(1)); + border.append(innerRect, false); g2.fill(border); } 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 76195b382c4a..1739627e4495 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 @@ -66,6 +66,9 @@ public class WinIntelliJTextFieldUI extends DarculaTextFieldUI { Graphics2D g2 = (Graphics2D)g.create(); try { + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE); + Container parent = c.getParent(); if (c.isOpaque() && parent != null) { g2.setColor(parent.getBackground()); @@ -85,25 +88,22 @@ public class WinIntelliJTextFieldUI extends DarculaTextFieldUI { g2.setColor(c.isEnabled() ? c.getBackground() : UIManager.getColor("TextField.inactiveBackground")); if (!c.isEnabled()) { - g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.35f)); + g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.47f)); } Rectangle r = new Rectangle(c.getSize()); - adjustVerticalInsets(r, c); - g2.fill(r); - } + JBInsets.removeFrom(r, JBUI.insets(2)); - static void adjustVerticalInsets(Rectangle r, JComponent c) { if (UIUtil.getParentOfType(Wrapper.class, c) != null && isSearchFieldWithHistoryPopup(c)) { - Insets i = c.getInsets(); - i.left = i.right = 0; - JBInsets.removeFrom(r, i); + JBInsets.removeFrom(r, JBUI.insets(2, 0)); } + + g2.fill(r); } @Override public Dimension getPreferredSize(JComponent c) { Dimension size = super.getPreferredSize(c); - size.height = JBUI.scale(22); + size.height = Math.max(JBUI.scale(24), size.height); return size; } @@ -115,17 +115,21 @@ public class WinIntelliJTextFieldUI extends DarculaTextFieldUI { searchIcon = IconLoader.findIcon("/com/intellij/ide/ui/laf/icons/search.png", DarculaTextFieldUI.class, true); } - int yOffset = isSearchFieldWithHistoryPopup(c) ? JBUI.scale(1) : 0; - - searchIcon.paintIcon(c, g, JBUI.scale(4), (c.getHeight() - searchIcon.getIconHeight()) / 2 + yOffset); + if (searchIcon != null) { + int yOffset = isSearchFieldWithHistoryPopup(c) ? JBUI.scale(1) : 0; + searchIcon.paintIcon(c, g, JBUI.scale(5), (c.getHeight() - searchIcon.getIconHeight()) / 2 + yOffset); + } if (hasText()) { Icon clearIcon = UIManager.getIcon("TextField.darcula.clear.icon"); if (clearIcon == null) { clearIcon = IconLoader.findIcon("/com/intellij/ide/ui/laf/icons/clear.png", DarculaTextFieldUI.class, true); } - clearIcon.paintIcon(c, g, c.getWidth() - clearIcon.getIconWidth() - JBUI.scale(4), - (c.getHeight() - searchIcon.getIconHeight()) / 2); + + if (clearIcon != null) { + clearIcon.paintIcon(c, g, c.getWidth() - clearIcon.getIconWidth() - JBUI.scale(5), + (c.getHeight() - clearIcon.getIconHeight()) / 2); + } } } } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf_native.properties b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf_native.properties index 461456ffed0f..5130e0d614d1 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf_native.properties +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf_native.properties @@ -123,6 +123,7 @@ StatusBar.bottomColor=2c2c2c Button.border=com.intellij.ide.ui.laf.intellij.WinIntelliJButtonBorder ButtonUI=com.intellij.ide.ui.laf.intellij.WinIntelliJButtonUI Button.background=e3e3e3 +Button.background.opaque=ededed Button.disabledText=8a8a8a Button.intellij.native.borderColor=adadad Button.intellij.native.focusDottedRingColor=000000 -- GitLab