From cb8768af6a96266d2c6d5b63d77e39062a609481 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Mon, 17 Jun 2019 22:37:20 +0300 Subject: [PATCH] Support semi-transparent colors in editor color schemes GitOrigin-RevId: a733f5df2a0156724e0383ff1035f4ca991afe15 --- .../options/colors/ColorDescriptor.java | 12 +++++++++++- .../colors/ColorAndFontDescription.java | 4 ++++ .../colors/ColorAndFontDescriptionPanel.java | 18 ++++++++++++++---- .../options/colors/ColorAndFontOptions.java | 19 +++++++++++++------ .../src/com/intellij/ui/ColorPanel.java | 7 ++++++- 5 files changed, 48 insertions(+), 12 deletions(-) diff --git a/platform/lang-api/src/com/intellij/openapi/options/colors/ColorDescriptor.java b/platform/lang-api/src/com/intellij/openapi/options/colors/ColorDescriptor.java index 18d3a38c185a..b41d7a5d6d93 100644 --- a/platform/lang-api/src/com/intellij/openapi/options/colors/ColorDescriptor.java +++ b/platform/lang-api/src/com/intellij/openapi/options/colors/ColorDescriptor.java @@ -28,7 +28,17 @@ public final class ColorDescriptor extends AbstractKeyDescriptor { public enum Kind { BACKGROUND, - FOREGROUND + FOREGROUND, + BACKGROUND_WITH_TRANSPARENCY, + FOREGROUND_WITH_TRANSPARENCY; + + public boolean isBackground() { + return this == BACKGROUND || this == BACKGROUND_WITH_TRANSPARENCY; + } + + public boolean isForeground() { + return this == FOREGROUND || this == FOREGROUND_WITH_TRANSPARENCY; + } } private final Kind myKind; diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontDescription.java b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontDescription.java index 1e00fff030e3..7db8cb9e6b1b 100644 --- a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontDescription.java +++ b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontDescription.java @@ -127,6 +127,10 @@ public abstract class ColorAndFontDescription extends TextAttributes implements } } + public boolean isTransparencyEnabled() { + return false; + } + @Override public final void setBackgroundColor(Color col) { super.setBackgroundColor(col); diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontDescriptionPanel.java b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontDescriptionPanel.java index 02558bf69a71..624545c4b28f 100644 --- a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontDescriptionPanel.java +++ b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontDescriptionPanel.java @@ -140,6 +140,15 @@ public class ColorAndFontDescriptionPanel extends JPanel implements OptionsPanel boolean isEnabled, boolean isChecked, @Nullable Color color) { + updateColorChooser(checkBox, colorPanel, isEnabled, isChecked, color, false); + } + + private static void updateColorChooser(JCheckBox checkBox, + ColorPanel colorPanel, + boolean isEnabled, + boolean isChecked, + @Nullable Color color, + boolean supportTransparency) { checkBox.setEnabled(isEnabled); checkBox.setSelected(isChecked); if (color != null) { @@ -148,6 +157,7 @@ public class ColorAndFontDescriptionPanel extends JPanel implements OptionsPanel else { colorPanel.setSelectedColor(JBColor.WHITE); } + colorPanel.setSupportTransparency(supportTransparency); colorPanel.setEnabled(isChecked); } @@ -175,17 +185,17 @@ public class ColorAndFontDescriptionPanel extends JPanel implements OptionsPanel } updateColorChooser(myCbForeground, myForegroundChooser, description.isForegroundEnabled(), - description.isForegroundChecked(), description.getForegroundColor()); + description.isForegroundChecked(), description.getForegroundColor(), description.isTransparencyEnabled()); updateColorChooser(myCbBackground, myBackgroundChooser, description.isBackgroundEnabled(), - description.isBackgroundChecked(), description.getBackgroundColor()); + description.isBackgroundChecked(), description.getBackgroundColor(), description.isTransparencyEnabled()); updateColorChooser(myCbErrorStripe, myErrorStripeColorChooser, description.isErrorStripeEnabled(), - description.isErrorStripeChecked(), description.getErrorStripeColor()); + description.isErrorStripeChecked(), description.getErrorStripeColor(), description.isTransparencyEnabled()); EffectType effectType = description.getEffectType(); updateColorChooser(myCbEffects, myEffectsColorChooser, description.isEffectsColorEnabled(), - description.isEffectsColorChecked(), description.getEffectColor()); + description.isEffectsColorChecked(), description.getEffectColor(), description.isTransparencyEnabled()); String name = ContainerUtil.reverseMap(myEffectsMap).get(effectType); myEffectsCombo.getModel().setSelectedItem(name); diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java index bf90086266ea..5ae4e9be9f96 100644 --- a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java +++ b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java @@ -800,6 +800,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract private static class EditorSettingColorDescription extends ColorAndFontDescription { private final ColorKey myColorKey; + @NotNull private final ColorDescriptor.Kind myKind; private final Color myInitialColor; @@ -854,24 +855,24 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract @Override public Color getExternalForeground() { - return myKind == ColorDescriptor.Kind.FOREGROUND ? myColor : null; + return myKind.isForeground() ? myColor : null; } @Override public void setExternalForeground(Color col) { - if (myKind != ColorDescriptor.Kind.FOREGROUND) return; + if (!myKind.isForeground()) return; if (myColor != null && myColor.equals(col)) return; myColor = col; } @Override public Color getExternalBackground() { - return myKind == ColorDescriptor.Kind.BACKGROUND ? myColor : null; + return myKind.isBackground() ? myColor : null; } @Override public void setExternalBackground(Color col) { - if (myKind != ColorDescriptor.Kind.BACKGROUND) return; + if (!myKind.isBackground()) return; if (myColor != null && myColor.equals(col)) return; myColor = col; } @@ -892,12 +893,18 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract @Override public boolean isForegroundEnabled() { - return myKind == ColorDescriptor.Kind.FOREGROUND; + return myKind.isForeground(); } @Override public boolean isBackgroundEnabled() { - return myKind == ColorDescriptor.Kind.BACKGROUND; + return myKind.isBackground(); + } + + @Override + public boolean isTransparencyEnabled() { + return myKind == ColorDescriptor.Kind.BACKGROUND_WITH_TRANSPARENCY || + myKind == ColorDescriptor.Kind.FOREGROUND_WITH_TRANSPARENCY; } @Override diff --git a/platform/platform-api/src/com/intellij/ui/ColorPanel.java b/platform/platform-api/src/com/intellij/ui/ColorPanel.java index c5b061f42ed6..fd7c198b59db 100644 --- a/platform/platform-api/src/com/intellij/ui/ColorPanel.java +++ b/platform/platform-api/src/com/intellij/ui/ColorPanel.java @@ -41,6 +41,7 @@ public class ColorPanel extends JComponent { private boolean myEditable; private ActionEvent myEvent; private Color myColor; + private boolean mySupportTransparency; public ColorPanel() { addImpl(myTextField, null, 0); @@ -62,7 +63,7 @@ public class ColorPanel extends JComponent { public void onPressed() { if (myEditable && isEnabled()) { - Color color = ColorChooser.chooseColor(this, UIBundle.message("color.panel.select.color.dialog.description"), myColor); + Color color = ColorChooser.chooseColor(this, UIBundle.message("color.panel.select.color.dialog.description"), myColor, mySupportTransparency); if (color != null) { setSelectedColor(color); if (!myListeners.isEmpty() && (myEvent == null)) { @@ -165,6 +166,10 @@ public class ColorPanel extends JComponent { updateSelectedColor(); } + public void setSupportTransparency(boolean supportTransparency) { + mySupportTransparency = supportTransparency; + } + private static class Painter implements Highlighter.HighlightPainter, PropertyChangeListener { private static final String PROPERTY = "highlighter"; private static final Painter BACKGROUND = new Painter();