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 cdd50485a703..474be47abcb7 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 @@ -39,10 +39,26 @@ import static javax.swing.SwingConstants.WEST; * @author Konstantin Bulenkov */ public class DarculaUIUtil { - private static final Color GLOW_COLOR = new JBColor(new Color(31, 121, 212), new Color(96, 175, 255)); + private static final Color GLOW_COLOR = new JBColor(new Color(31, 121, 212), new Color(96, 175, 255)); - private static final Color BALLOON_BORDER = new JBColor(new Color(0xe0a8a9), new Color(0x73454b)); - private static final Color BALLOON_BACKGROUND = new JBColor(new Color(0xf5e6e7), new Color(0x593d41)); + private static final Color ACTIVE_ERROR_COLOR = new JBColor(() -> { + if (SystemInfo.isMac && UIUtil.isUnderIntelliJLaF()) { + return new Color(0x80ff0f0f, true); + } else { + return (UIUtil.isUnderDarcula()) ? new Color(0x8b3c3c) : new Color(0xe53e4d); + } + }); + + private static final Color INACTIVE_ERROR_COLOR = new JBColor(() -> { + if (SystemInfo.isMac && UIUtil.isUnderIntelliJLaF()) { + return new Color(0x80f2aaaa, true); + } else { + return (UIUtil.isUnderDarcula()) ? new Color(0x725252) : new Color(0xebbcbc); + } + }); + + private static final Color BALLOON_BORDER = new JBColor(new Color(0xe0a8a9), new Color(0x73454b)); + private static final Color BALLOON_BACKGROUND = new JBColor(new Color(0xf5e6e7), new Color(0x593d41)); public static void paintFocusRing(Graphics g, Rectangle bounds) { MacUIUtil.paintFocusRing((Graphics2D)g, GLOW_COLOR, bounds); @@ -103,17 +119,14 @@ public class DarculaUIUtil { g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, oldStrokeControlValue); } - public static void paintErrorRing(Graphics2D g, int width, int height, boolean hasFocus) { - int lw = JBUI.scale(UIManager.getInt("TextField.darcula.error.borderWidth")); - Shape shape = SystemInfo.isWindows ? new Rectangle2D.Double(lw, lw, width - lw * 2, height - lw * 2) : - new RoundRectangle2D.Double(lw, lw, width - lw * 2, height - lw * 2, lw, lw); - Color color = hasFocus ? UIManager.getColor("TextField.darcula.error.active") : - UIManager.getColor("TextField.darcula.error.inactive"); + public static void paintErrorBorder(Graphics2D g, int width, int height, boolean hasFocus) { + int lw = SystemInfo.isMac && UIUtil.isUnderIntelliJLaF() ? JBUI.scale(3) : JBUI.scale(2); + Shape shape = new RoundRectangle2D.Double(lw, lw, width - lw * 2, height - lw * 2, lw, lw); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, MacUIUtil.USE_QUARTZ ? RenderingHints.VALUE_STROKE_PURE : RenderingHints.VALUE_STROKE_NORMALIZE); - g.setPaint(color); + g.setPaint(hasFocus ? ACTIVE_ERROR_COLOR : INACTIVE_ERROR_COLOR); g.setStroke(new OuterStroke(lw)); g.draw(shape); } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/darcula.properties b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/darcula.properties index ccd2a96ccd42..a964a6a11afa 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/darcula.properties +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/darcula.properties @@ -81,9 +81,6 @@ TextField.border=com.intellij.ide.ui.laf.darcula.ui.DarculaTextBorder TextField.darcula.search.icon=/com/intellij/ide/ui/laf/darcula/icons/search.png TextField.darcula.searchWithHistory.icon=/com/intellij/ide/ui/laf/darcula/icons/searchWithHistory.png TextField.darcula.clear.icon=/com/intellij/ide/ui/laf/darcula/icons/clear.png -TextField.darcula.error.active=8b3c3c -TextField.darcula.error.inactive=725252 -TextField.darcula.error.borderWidth=2 PasswordField.background=45494A PasswordFieldUI=com.intellij.ide.ui.laf.darcula.ui.DarculaPasswordFieldUI diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaTextBorder.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaTextBorder.java index 01341e60002e..71ac82daf959 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaTextBorder.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaTextBorder.java @@ -62,14 +62,14 @@ public class DarculaTextBorder implements Border, UIResource { try { g2.translate(x, y); - Object eop = ((JTextComponent)c).getClientProperty("JComponent.error.outline"); + Object eop = ((JComponent)c).getClientProperty("JComponent.error.outline"); if (Registry.is("ide.inplace.errors.outline") && Boolean.parseBoolean(String.valueOf(eop))) { - DarculaUIUtil.paintErrorRing(g2, width, height, c.hasFocus()); - if (Registry.is("ide.inplace.errors.balloon")) { + DarculaUIUtil.paintErrorBorder(g2, width, height, c.hasFocus()); + if (Registry.is("ide.inplace.errors.balloon") && c.hasFocus()) { DarculaUIUtil.showErrorTip((JComponent)c); } } else if (c.hasFocus()) { - DarculaUIUtil.paintFocusRing(g2, new Rectangle(JBUI.scale(2), JBUI.scale(2), width - JBUI.scale(4), height - JBUI.scale(4))); + DarculaUIUtil.paintFocusRing(g2, new Rectangle(JBUI.scale(1), JBUI.scale(1), width - JBUI.scale(2), height - JBUI.scale(2))); } else { boolean editable = !(c instanceof JTextComponent) || ((JTextComponent)c).isEditable(); g2.setColor(getBorderColor(c.isEnabled() && editable)); diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/MacIntelliJTextBorder.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/MacIntelliJTextBorder.java index 7495c6ee4d99..7211ecc2e189 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/MacIntelliJTextBorder.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/MacIntelliJTextBorder.java @@ -24,7 +24,6 @@ import com.intellij.ui.Gray; import com.intellij.util.ui.JBUI; import javax.swing.*; -import javax.swing.text.JTextComponent; import java.awt.*; /** @@ -49,13 +48,12 @@ public class MacIntelliJTextBorder extends DarculaTextBorder { Graphics2D g = (Graphics2D)g2d; //todo[kb]: make a better solution if (c.getParent() instanceof JComboBox) return; - Object eop = ((JTextComponent)c).getClientProperty("JComponent.error.outline"); + Object eop = ((JComponent)c).getClientProperty("JComponent.error.outline"); if (Registry.is("ide.inplace.errors.outline") && Boolean.parseBoolean(String.valueOf(eop))) { Graphics2D g2 = (Graphics2D)g.create(); try { g2.translate(x, y); - DarculaUIUtil.paintErrorRing(g2, width, height, c.hasFocus()); - g2.translate(-x, -y); + DarculaUIUtil.paintErrorBorder(g2, width, height, c.hasFocus()); } finally { g2.dispose(); } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf.properties b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf.properties index 6b298b0b9079..6fd3908fa765 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf.properties +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf.properties @@ -61,9 +61,6 @@ TextField.border=com.intellij.ide.ui.laf.darcula.ui.DarculaTextBorder TextField.darcula.search.icon=/com/intellij/ide/ui/laf/icons/search.png TextField.darcula.searchWithHistory.icon=/com/intellij/ide/ui/laf/icons/searchWithHistory.png TextField.darcula.clear.icon=/com/intellij/ide/ui/laf/icons/clear.png -TextField.darcula.error.active=e53e4d -TextField.darcula.error.inactive=ebbcbc -TextField.darcula.error.borderWidth=2 TextArea.selectionForeground=ffffff TextArea.background=ffffff diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf_mac.properties b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf_mac.properties index f88cbea7b9ee..05d71e7ae178 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf_mac.properties +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf_mac.properties @@ -45,7 +45,3 @@ TabbedPane.selectedTabTitlePressedColor=dcdcdc TabbedPane.selectedTabTitleNormalColor=dcdcdc TableHeader.cellBorder=2,2,2,2 - -TextField.darcula.error.active=ff0f0fff -TextField.darcula.error.inactive=f2aaaaff -TextField.darcula.error.borderWidth=3