From cf88fbae4fe473f52e5dff014a2fc59c0a2ad16f Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Tue, 4 Dec 2012 14:33:16 +0100 Subject: [PATCH] fix spinners and text fields bg (cherry picked from commit da4eeed38ffee90588466aef849d5e62b92de522) --- .../ide/ui/laf/darcula/DarculaLaf.java | 2 + .../ide/ui/laf/darcula/darcula.properties | 11 +-- .../laf/darcula/ui/DarculaSpinnerBorder.java | 7 +- .../ui/laf/darcula/ui/DarculaSpinnerUI.java | 84 ++++++++++++++++--- .../ui/laf/darcula/ui/DarculaTextBorder.java | 5 +- 5 files changed, 87 insertions(+), 22 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaLaf.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaLaf.java index d96ed92ee64b..e3efb78edfe5 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaLaf.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaLaf.java @@ -89,6 +89,8 @@ public final class DarculaLaf extends BasicLookAndFeel { initIdeaDefaults(defaults); patchStyledEditorKit(); patchComboBox(metalDefaults, defaults); + defaults.remove("Spinner.arrowButtonBorder"); + defaults.put("Spinner.arrowButtonSize", new Dimension(16, 5)); return defaults; } catch (Exception ignore) { 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 6937f7dea997..e3cd296f135a 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 @@ -12,7 +12,7 @@ Menu.maxGutterIconWidth=18 MenuItem.maxGutterIconWidth=18 MenuItem.acceleratorDelimiter=- -EditorPane.inactiveBackground=585D5F +EditorPane.inactiveBackground=45494A EditorPane.inactiveForeground=bbbbbb EditorPaneUI=com.intellij.ide.ui.laf.darcula.ui.DarculaEditorPaneUI @@ -45,15 +45,15 @@ Separator.foreground=2d2d2d Focus.color=ff0000 -TextField.background=585D5F +TextField.background=45494A TextFieldUI=com.intellij.ide.ui.laf.darcula.ui.DarculaTextFieldUI TextField.border=com.intellij.ide.ui.laf.darcula.ui.DarculaTextBorder -PasswordField.background=585D5F +PasswordField.background=45494A PasswordFieldUI=com.intellij.ide.ui.laf.darcula.ui.DarculaPasswordFieldUI PasswordField.border=com.intellij.ide.ui.laf.darcula.ui.DarculaTextBorder -FormattedTextField.background=585D5F +FormattedTextField.background=45494A -TextArea.background=585D5F +TextArea.background=45494A CheckBoxUI=com.intellij.ide.ui.laf.darcula.ui.DarculaCheckBoxUI CheckBox.border=com.intellij.ide.ui.laf.darcula.ui.DarculaCheckBoxBorder @@ -79,6 +79,7 @@ ToolTip.background=5C5C42 SpinnerUI=com.intellij.ide.ui.laf.darcula.ui.DarculaSpinnerUI Spinner.border=com.intellij.ide.ui.laf.darcula.ui.DarculaSpinnerBorder Spinner.background=3c3f41 +Spinner.arrowButtonInsets=1,1,1,1 Spinner.editorBorderPainted=false Hyperlink.linkColor=589df6 diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaSpinnerBorder.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaSpinnerBorder.java index 9a43363bd9b9..1fb2ead118e0 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaSpinnerBorder.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaSpinnerBorder.java @@ -51,7 +51,12 @@ public class DarculaSpinnerBorder implements Border, UIResource { g.setColor(UIUtil.getTextFieldBackground()); g.fillRoundRect(x1, y1, width1, height1, 5, 5); g.setColor(UIUtil.getPanelBackground()); - g.fillRect(x1 + width1 - 17, y1, 17, height1); + if (editor != null) { + final int off = editor.getBounds().x + editor.getWidth() + ((JSpinner)c).getInsets().left; + g.fillRect(off, y1, 17, height1); + g.setColor(Gray._100); + g.drawLine(off, y1, off, height1+2); + } if (!c.isEnabled()) { ((Graphics2D)g).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f)); diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaSpinnerUI.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaSpinnerUI.java index 2a5105a4f203..e6feda53f4af 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaSpinnerUI.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaSpinnerUI.java @@ -36,7 +36,6 @@ import java.awt.event.FocusEvent; * @author Konstantin Bulenkov */ public class DarculaSpinnerUI extends BasicSpinnerUI { - private FocusAdapter myFocusListener = new FocusAdapter() { @Override public void focusGained(FocusEvent e) { @@ -74,15 +73,19 @@ public class DarculaSpinnerUI extends BasicSpinnerUI { @Override public void paint(Graphics g, JComponent c) { + super.paint(g, c); + final Border border = spinner.getBorder(); + if (border != null) { + border.paintBorder(c, g, 0, 0, spinner.getWidth(), spinner.getHeight()); + } } @Override protected Component createPreviousButton() { JButton button = createArrow(SwingConstants.SOUTH); - button.setName("Spinner.nextButton"); + button.setName("Spinner.previousButton"); button.setBorder(new EmptyBorder(1, 1, 1, 1)); - - installNextButtonListeners(button); + installPreviousButtonListeners(button); return button; } @@ -91,26 +94,48 @@ public class DarculaSpinnerUI extends BasicSpinnerUI { JButton button = createArrow(SwingConstants.NORTH); button.setName("Spinner.nextButton"); button.setBorder(new EmptyBorder(1, 1, 1, 1)); - installNextButtonListeners(button); return button; } - private static JButton createArrow(@MagicConstant(intValues = {SwingConstants.NORTH, SwingConstants.SOUTH}) int direction) { + + @Override + protected LayoutManager createLayout() { + return new LayoutManagerDelegate(super.createLayout()) { + @Override + public void layoutContainer(Container parent) { + super.layoutContainer(parent); + final JComponent editor = spinner.getEditor(); + if (editor != null) { + final Rectangle bounds = editor.getBounds(); + editor.setBounds(bounds.x, bounds.y, bounds.width - 6, bounds.height); + } + } + }; + } + + private JButton createArrow(@MagicConstant(intValues = {SwingConstants.NORTH, SwingConstants.SOUTH}) int direction) { final Color shadow = UIUtil.getPanelBackground(); final Color darkShadow = UIUtil.getLabelForeground(); JButton b = new BasicArrowButton(direction, shadow, shadow, darkShadow, shadow) { + @Override + public void paint(Graphics g) { + int y = direction == NORTH ? getHeight() - 6 : 2; + paintTriangle(g, 0, y, 0, direction, DarculaSpinnerUI.this.spinner.isEnabled()); + } + + @Override + public boolean isOpaque() { + return false; + } + @Override public void paintTriangle(Graphics g, int x, int y, int size, int direction, boolean isEnabled) { final GraphicsConfig config = GraphicsUtil.setupAAPainting(g); int mid; - x = 5; - y = 2; - final int w = getWidth() - 1 - x - 2; - final int h = getHeight() - 1 - 1; - mid = (w + 1) / 2; - g.setColor(UIUtil.getPanelBackground()); - g.fillRect(1, 1, getWidth() - 1, getHeight() - 1); + final int w = 8; + final int h = 6; + mid = w / 2; g.setColor(isEnabled ? darkShadow : darkShadow.darker()); @@ -141,4 +166,37 @@ public class DarculaSpinnerUI extends BasicSpinnerUI { b.setInheritsPopupMenu(true); return b; } + + static class LayoutManagerDelegate implements LayoutManager { + protected final LayoutManager myDelegate; + + LayoutManagerDelegate(LayoutManager delegate) { + myDelegate = delegate; + } + + @Override + public void addLayoutComponent(String name, Component comp) { + myDelegate.addLayoutComponent(name, comp); + } + + @Override + public void removeLayoutComponent(Component comp) { + myDelegate.removeLayoutComponent(comp); + } + + @Override + public Dimension preferredLayoutSize(Container parent) { + return myDelegate.preferredLayoutSize(parent); + } + + @Override + public Dimension minimumLayoutSize(Container parent) { + return myDelegate.minimumLayoutSize(parent); + } + + @Override + public void layoutContainer(Container parent) { + myDelegate.layoutContainer(parent); + } + } } 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 1e909ff18e5d..34762d0f8531 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 @@ -17,7 +17,7 @@ package com.intellij.ide.ui.laf.darcula.ui; import com.intellij.ide.ui.laf.darcula.DarculaUIUtil; import com.intellij.openapi.ui.GraphicsConfig; -import com.intellij.ui.ColorUtil; +import com.intellij.ui.Gray; import javax.swing.border.Border; import javax.swing.plaf.InsetsUIResource; @@ -42,7 +42,6 @@ public class DarculaTextBorder implements Border, UIResource { @Override public void paintBorder(Component c, Graphics g2, int x, int y, int width, int height) { Graphics2D g = ((Graphics2D)g2); - g.setColor(ColorUtil.fromHex("737373")); final GraphicsConfig config = new GraphicsConfig(g); g.translate(x, y); @@ -50,7 +49,7 @@ public class DarculaTextBorder implements Border, UIResource { DarculaUIUtil.paintFocusRing(g, 2, 2, width-4, height-4); } else { boolean editable = !(c instanceof JTextComponent) || (((JTextComponent)c).isEditable()); - g.setColor(c.isEnabled() && editable ? new Color(0x939393) : new Color(0x535353)); + g.setColor(c.isEnabled() && editable ? Gray._100 : new Color(0x535353)); g.drawRect(1, 1, width - 2, height - 2); } g.translate(-x, -y);