diff options
| author | Matthias Becker | 2018-08-23 14:54:25 +0000 |
|---|---|---|
| committer | Sarika Sinha | 2018-10-17 16:39:18 +0000 |
| commit | 0c40c1089b8338ffe690c09c4be80401d9ddda92 (patch) | |
| tree | 2d836549fc041e5ace55823fa373c517da1c8a62 | |
| parent | b327577295c8556bbda56c6fda0f02c9243ab8c6 (diff) | |
| download | eclipse.jdt.ui-0c40c1089b8338ffe690c09c4be80401d9ddda92.tar.gz eclipse.jdt.ui-0c40c1089b8338ffe690c09c4be80401d9ddda92.tar.xz eclipse.jdt.ui-0c40c1089b8338ffe690c09c4be80401d9ddda92.zip | |
Bug 538211: Refactoring Preview has wrong colors in dark theme
- For new files the brackround and foreground color as well as
selection background and forground color were not set and thus wrong
in the dark theme.
Change-Id: I8d73433f1ea1da4234b47dd4a4e8c1426f639c05
Signed-off-by: Matthias Becker <ma.becker@sap.com>
| -rw-r--r-- | org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CreateTextFileChangePreviewViewer.java | 106 |
1 files changed, 103 insertions, 3 deletions
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CreateTextFileChangePreviewViewer.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CreateTextFileChangePreviewViewer.java index e1280cf9f3..fd075a971a 100644 --- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CreateTextFileChangePreviewViewer.java +++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CreateTextFileChangePreviewViewer.java @@ -13,27 +13,40 @@ *******************************************************************************/ package org.eclipse.jdt.internal.ui.refactoring; +import java.util.HashMap; +import java.util.Map; + import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.source.IVerticalRuler; import org.eclipse.jface.text.source.SourceViewer; import org.eclipse.jface.text.source.SourceViewerConfiguration; import org.eclipse.ui.model.IWorkbenchAdapter; +import org.eclipse.ui.texteditor.AbstractTextEditor; + +import org.eclipse.ui.editors.text.EditorsUI; + import org.eclipse.ltk.core.refactoring.Change; import org.eclipse.ltk.ui.refactoring.ChangePreviewViewerInput; import org.eclipse.ltk.ui.refactoring.IChangePreviewViewer; @@ -100,6 +113,95 @@ public final class CreateTextFileChangePreviewViewer implements IChangePreviewVi } + private static class FileChangeSourceViewer extends SourceViewer { + + private final Map<String, Color> customColors= new HashMap<>(); + + public FileChangeSourceViewer(Composite parent, IVerticalRuler ruler, int styles) { + super(parent, ruler, styles); + setColors(); + StyledText textWidget= getTextWidget(); + textWidget.setEditable(false); + textWidget.setFont(JFaceResources.getFont(PreferenceConstants.EDITOR_TEXT_FONT)); + } + + @Override + protected void handleDispose() { + for (Color color : customColors.values()) { + if (color != null) { + color.dispose(); + } + } + customColors.clear(); + super.handleDispose(); + } + + private void setColors() { + IPreferenceStore store= EditorsUI.getPreferenceStore(); + StyledText styledText= getTextWidget(); + setColor(styledText, store, + AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND, + store.getBoolean( + AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT)); + setColor(styledText, store, + AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND, + store.getBoolean( + AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT)); + setColor(styledText, store, + AbstractTextEditor.PREFERENCE_COLOR_SELECTION_FOREGROUND, + store.getBoolean( + AbstractTextEditor.PREFERENCE_COLOR_SELECTION_FOREGROUND_SYSTEM_DEFAULT)); + setColor(styledText, store, + AbstractTextEditor.PREFERENCE_COLOR_SELECTION_BACKGROUND, + store.getBoolean( + AbstractTextEditor.PREFERENCE_COLOR_SELECTION_BACKGROUND_SYSTEM_DEFAULT)); + } + + private void setColor(StyledText styledText, IPreferenceStore store, + String key, boolean useDefault) { + Color newColor= useDefault + ? null + : createColor(styledText.getDisplay(), store, key); + switch (key) { + case AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND: + styledText.setForeground(newColor); + break; + case AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND: + styledText.setBackground(newColor); + break; + case AbstractTextEditor.PREFERENCE_COLOR_SELECTION_FOREGROUND: + styledText.setSelectionForeground(newColor); + break; + case AbstractTextEditor.PREFERENCE_COLOR_SELECTION_BACKGROUND: + styledText.setSelectionBackground(newColor); + break; + default: + return; + } + Color oldColor= customColors.remove(key); + if (oldColor != null) { + oldColor.dispose(); + } + customColors.put(key, newColor); + } + + private static Color createColor(Display display, IPreferenceStore store, + String key) { + RGB rgb= null; + if (store.contains(key)) { + if (store.isDefault(key)) { + rgb= PreferenceConverter.getDefaultColor(store, key); + } else { + rgb= PreferenceConverter.getColor(store, key); + } + if (rgb != null) { + return new Color(display, rgb); + } + } + return null; + } + } + private CreateTextFilePreviewer fPane; private SourceViewer fSourceViewer; @@ -109,9 +211,7 @@ public final class CreateTextFileChangePreviewViewer implements IChangePreviewVi fPane= new CreateTextFilePreviewer(parent, SWT.BORDER | SWT.FLAT); Dialog.applyDialogFont(fPane); - fSourceViewer= new SourceViewer(fPane, null, SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI | SWT.FULL_SELECTION); - fSourceViewer.setEditable(false); - fSourceViewer.getControl().setFont(JFaceResources.getFont(PreferenceConstants.EDITOR_TEXT_FONT)); + fSourceViewer= new FileChangeSourceViewer(fPane, null, SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI | SWT.FULL_SELECTION); fPane.setContent(fSourceViewer.getControl()); } |
