From 83591d0626ab9e43e4b7e7fa3dc437740c190283 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Mon, 30 Sep 2013 19:04:32 +0400 Subject: [PATCH] reuse DelegateColorScheme & improve color scheme change handling --- .../colors/impl/DelegateColorScheme.java | 4 + .../openapi/editor/impl/EditorImpl.java | 104 +++--------------- .../ui/EditorTextFieldCellRenderer.java | 9 +- 3 files changed, 27 insertions(+), 90 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/colors/impl/DelegateColorScheme.java b/platform/platform-impl/src/com/intellij/openapi/editor/colors/impl/DelegateColorScheme.java index 663b84789653..8de66aaec458 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/colors/impl/DelegateColorScheme.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/colors/impl/DelegateColorScheme.java @@ -41,6 +41,10 @@ public abstract class DelegateColorScheme implements EditorColorsScheme { return myDelegate; } + public void setDelegate(@NotNull EditorColorsScheme delegate) { + myDelegate = delegate; + } + @Override public void setName(String name) { myDelegate.setName(name); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 30ed3d228919..820f1b57af52 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -61,7 +61,6 @@ import com.intellij.openapi.editor.markup.*; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory; import com.intellij.openapi.fileEditor.impl.EditorsSplitters; -import com.intellij.openapi.options.FontSize; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Queryable; @@ -681,10 +680,11 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi validateSize(); } - final EditorColorsScheme scheme = - myScheme instanceof DelegateColorScheme ? ((DelegateColorScheme)myScheme).getDelegate() : myScheme; - if (scheme instanceof MyColorSchemeDelegate) { - ((MyColorSchemeDelegate)scheme).updateGlobalScheme(); + for (EditorColorsScheme scheme = myScheme; scheme instanceof DelegateColorScheme; scheme = ((DelegateColorScheme)scheme).getDelegate()) { + if (scheme instanceof MyColorSchemeDelegate) { + ((MyColorSchemeDelegate)scheme).updateGlobalScheme(); + break; + } } myHighlighter.setColorScheme(myScheme); myFoldingModel.refreshSettings(); @@ -5820,7 +5820,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi } } - private class MyColorSchemeDelegate implements EditorColorsScheme { + private class MyColorSchemeDelegate extends DelegateColorScheme { private final FontPreferences myFontPreferences = new FontPreferences(); private final Map myOwnAttributes = ContainerUtilRt.newHashMap(); @@ -5830,23 +5830,17 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi private int myMaxFontSize = OptionsConstants.MAX_EDITOR_FONT_SIZE; private int myFontSize = -1; private String myFaceName = null; - private EditorColorsScheme myGlobalScheme; - private MyColorSchemeDelegate(@Nullable final EditorColorsScheme globalScheme) { + private MyColorSchemeDelegate(@Nullable EditorColorsScheme globalScheme) { + super(globalScheme == null ? EditorColorsManager.getInstance().getGlobalScheme() : globalScheme); myCustomGlobalScheme = globalScheme; updateGlobalScheme(); } private EditorColorsScheme getGlobal() { - return myGlobalScheme; + return getDelegate(); } - @Override - public String getName() { - return getGlobal().getName(); - } - - protected void initFonts() { String editorFontName = getEditorFontName(); int editorFontSize = getEditorFontSize(); @@ -5869,11 +5863,6 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi reinitSettings(); } - @Override - public void setName(String name) { - getGlobal().setName(name); - } - @Override public TextAttributes getAttributes(TextAttributesKey key) { if (myOwnAttributes.containsKey(key)) return myOwnAttributes.get(key); @@ -5885,18 +5874,6 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi myOwnAttributes.put(key, attributes); } - @NotNull - @Override - public Color getDefaultBackground() { - return getGlobal().getDefaultBackground(); - } - - @NotNull - @Override - public Color getDefaultForeground() { - return getGlobal().getDefaultForeground(); - } - @Override public Color getColor(ColorKey key) { if (myOwnColors.containsKey(key)) return myOwnColors.get(key); @@ -5929,16 +5906,6 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi initFonts(); } - @Override - public FontSize getQuickDocFontSize() { - return myGlobalScheme.getQuickDocFontSize(); - } - - @Override - public void setQuickDocFontSize(@NotNull FontSize fontSize) { - myGlobalScheme.setQuickDocFontSize(fontSize); - } - @NotNull @Override public FontPreferences getFontPreferences() { @@ -5983,16 +5950,6 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi reinitSettings(); } - @Override - public float getLineSpacing() { - return getGlobal().getLineSpacing(); - } - - @Override - public void setLineSpacing(float lineSpacing) { - getGlobal().setLineSpacing(lineSpacing); - } - @Override @Nullable public Object clone() { @@ -6008,52 +5965,21 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi } public void updateGlobalScheme() { - myGlobalScheme = myCustomGlobalScheme == null ? EditorColorsManager.getInstance().getGlobalScheme() : myCustomGlobalScheme; + setDelegate(myCustomGlobalScheme == null ? EditorColorsManager.getInstance().getGlobalScheme() : myCustomGlobalScheme); + } + + @Override + public void setDelegate(@NotNull EditorColorsScheme delegate) { + super.setDelegate(delegate); int globalFontSize = getGlobal().getEditorFontSize(); myMaxFontSize = Math.max(OptionsConstants.MAX_EDITOR_FONT_SIZE, globalFontSize); } - @NotNull - @Override - public FontPreferences getConsoleFontPreferences() { - return getGlobal().getConsoleFontPreferences(); - } - - @Override - public void setConsoleFontPreferences(@NotNull FontPreferences preferences) { - getGlobal().setConsoleFontPreferences(preferences); - } - - @Override - public String getConsoleFontName() { - return getGlobal().getConsoleFontName(); - } - - @Override - public void setConsoleFontName(String fontName) { - getGlobal().setConsoleFontName(fontName); - } - - @Override - public int getConsoleFontSize() { - return getGlobal().getConsoleFontSize(); - } - @Override public void setConsoleFontSize(int fontSize) { getGlobal().setConsoleFontSize(fontSize); reinitSettings(); } - - @Override - public float getConsoleLineSpacing() { - return getGlobal().getConsoleLineSpacing(); - } - - @Override - public void setConsoleLineSpacing(float lineSpacing) { - getGlobal().setConsoleLineSpacing(lineSpacing); - } } private static class MyTransferHandler extends TransferHandler { diff --git a/platform/platform-impl/src/com/intellij/ui/EditorTextFieldCellRenderer.java b/platform/platform-impl/src/com/intellij/ui/EditorTextFieldCellRenderer.java index 5a07cbd796da..ebfe7d237607 100644 --- a/platform/platform-impl/src/com/intellij/ui/EditorTextFieldCellRenderer.java +++ b/platform/platform-impl/src/com/intellij/ui/EditorTextFieldCellRenderer.java @@ -5,6 +5,7 @@ import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.editor.colors.EditorColors; import com.intellij.openapi.editor.colors.EditorColorsScheme; +import com.intellij.openapi.editor.colors.impl.DelegateColorScheme; import com.intellij.openapi.editor.event.DocumentListener; import com.intellij.openapi.editor.ex.*; import com.intellij.openapi.editor.impl.EditorImpl; @@ -75,7 +76,13 @@ public abstract class EditorTextFieldCellRenderer extends CellRendererPanel impl @NotNull private EditorEx getEditor() { - if (myEditor != null) return myEditor; + if (myEditor != null) { + EditorColorsScheme scheme = myEditor.getColorsScheme(); + if (scheme instanceof DelegateColorScheme) { + ((DelegateColorScheme)scheme).setDelegate(getColorScheme()); + } + return myEditor; + } // reuse EditorTextField initialization logic EditorTextField field = new EditorTextField(new MyDocument(), null, FileTypes.PLAIN_TEXT);