reuse DelegateColorScheme & improve color scheme change handling

This commit is contained in:
Gregory.Shrago
2013-09-30 20:45:40 +04:00
parent 3d10fc8300
commit 83591d0626
3 changed files with 27 additions and 90 deletions
@@ -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);
@@ -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<TextAttributesKey, TextAttributes> 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 {
@@ -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);