Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Wahlbrink2021-08-06 12:50:54 +0000
committerStephan Wahlbrink2021-08-07 10:18:32 +0000
commita938d97bf5e57f490bf4885ff198724d54729213 (patch)
treee72b68c50837191a9d5afd8c1d0262bddc5d2ca8
parent6665015d5ba28f44fbd5e9d79ac6e5649d7961f7 (diff)
downloadorg.eclipse.statet-ltk-a938d97bf5e57f490bf4885ff198724d54729213.tar.gz
org.eclipse.statet-ltk-a938d97bf5e57f490bf4885ff198724d54729213.tar.xz
org.eclipse.statet-ltk-a938d97bf5e57f490bf4885ff198724d54729213.zip
Bug 575277: [SourceEditor] Fix background color for preview and snippet
editors in dark theme Change-Id: I35df96e427bc02a7f8bcd995fb2ad3a1d54587ff
-rw-r--r--ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF4
-rw-r--r--ltk/org.eclipse.statet.ltk.ui/plugin.xml40
-rw-r--r--ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractTextStylesConfigurationBlock.java8
-rw-r--r--ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/PreviewSourceViewer.java67
-rw-r--r--ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/CustomSwtElementProvider.java45
-rw-r--r--ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/EnhStyledTextElement.java35
-rw-r--r--ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/NoopCssPropertyHandler.java43
-rw-r--r--ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/ExtStyledText.java100
-rw-r--r--ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SnippetEditor.java9
-rw-r--r--ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/swt/EnhStyledText.java (renamed from ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/EnhStyledText.java)2
-rw-r--r--ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/util/SourceViewerEditorPreferenceUpdater.java (renamed from ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/TextViewerEditorColorUpdater.java)140
-rw-r--r--ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatePreview.java10
-rw-r--r--ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractEditorTemplatesPage.java10
-rw-r--r--ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractTemplatesPreferencePage.java14
14 files changed, 351 insertions, 176 deletions
diff --git a/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF b/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF
index 59b38c7..a4ff798 100644
--- a/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF
+++ b/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF
@@ -19,6 +19,8 @@ Require-Bundle: org.eclipse.statet.ecommons.runtime.core;bundle-version="[4.5.0,
org.eclipse.core.expressions,
org.eclipse.ui,
org.eclipse.jface.databinding,
+ org.eclipse.e4.ui.css.core,
+ org.eclipse.e4.ui.css.swt,
org.eclipse.ui.editors;visibility:=reexport,
org.eclipse.ui.workbench.texteditor;visibility:=reexport,
org.eclipse.ui.views,
@@ -59,6 +61,8 @@ Export-Package: org.eclipse.statet.ecommons.templates,
org.eclipse.statet.ltk.ui.sourceediting.actions,
org.eclipse.statet.ltk.ui.sourceediting.assist,
org.eclipse.statet.ltk.ui.sourceediting.folding,
+ org.eclipse.statet.ltk.ui.sourceediting.swt,
+ org.eclipse.statet.ltk.ui.sourceediting.util,
org.eclipse.statet.ltk.ui.templates,
org.eclipse.statet.ltk.ui.templates.config,
org.eclipse.statet.ltk.ui.util,
diff --git a/ltk/org.eclipse.statet.ltk.ui/plugin.xml b/ltk/org.eclipse.statet.ltk.ui/plugin.xml
index 8cfc621..031dfba 100644
--- a/ltk/org.eclipse.statet.ltk.ui/plugin.xml
+++ b/ltk/org.eclipse.statet.ltk.ui/plugin.xml
@@ -1173,6 +1173,46 @@
</theme>
</extension>
<extension
+ point="org.eclipse.e4.ui.css.core.elementProvider">
+ <provider
+ class="org.eclipse.statet.internal.ltk.ui.css.CustomSwtElementProvider">
+ <widget
+ class="org.eclipse.statet.ltk.ui.sourceediting.swt.EnhStyledText"/>
+ </provider>
+ </extension>
+ <extension
+ point="org.eclipse.e4.ui.css.core.propertyHandler">
+ <handler
+ adapter="org.eclipse.statet.internal.ltk.ui.css.EnhStyledTextElement"
+ handler="org.eclipse.statet.internal.ltk.ui.css.NoopCssPropertyHandler">
+ <property-name
+ name="background-color"/>
+ <property-name
+ name="color"/>
+ </handler>
+ <handler
+ adapter="org.eclipse.statet.internal.ltk.ui.css.EnhStyledTextElement"
+ handler="org.eclipse.statet.internal.ltk.ui.css.NoopCssPropertyHandler"
+ composite="true">
+ <property-name
+ name="font"/>
+ <property-name
+ name="font-family"/>
+ <property-name
+ name="font-size"/>
+ <property-name
+ name="font-adjust"/>
+ <property-name
+ name="font-stretch"/>
+ <property-name
+ name="font-style"/>
+ <property-name
+ name="font-variant"/>
+ <property-name
+ name="font-weight"/>
+ </handler>
+ </extension>
+ <extension
point="org.eclipse.e4.ui.css.swt.theme">
<stylesheet
uri="css/e4_dark.css">
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractTextStylesConfigurationBlock.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractTextStylesConfigurationBlock.java
index 82e04a1..3189510 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractTextStylesConfigurationBlock.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractTextStylesConfigurationBlock.java
@@ -82,8 +82,6 @@ import org.eclipse.statet.ecommons.preferences.ui.OverlayStoreConfigurationBlock
import org.eclipse.statet.ecommons.preferences.ui.OverlayStorePreference;
import org.eclipse.statet.ecommons.preferences.ui.PreferenceStoreBeanWrapper;
import org.eclipse.statet.ecommons.preferences.ui.RGBPref;
-import org.eclipse.statet.ecommons.text.ui.TextViewerEditorColorUpdater;
-import org.eclipse.statet.ecommons.text.ui.TextViewerJFaceUpdater;
import org.eclipse.statet.ecommons.text.ui.presentation.AbstractTextStylesConfigurationBlock.SyntaxNode.UseStyle;
import org.eclipse.statet.ecommons.text.ui.settings.JFaceTextStyleManager;
import org.eclipse.statet.ecommons.text.ui.settings.PreferenceStoreTextStyleManager;
@@ -95,6 +93,7 @@ import org.eclipse.statet.ecommons.ui.viewers.ViewerUtils;
import org.eclipse.statet.ecommons.ui.viewers.ViewerUtils.Node;
import org.eclipse.statet.internal.ecommons.text.ui.Messages;
+import org.eclipse.statet.internal.ltk.ui.PreviewSourceViewer;
import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfiguration;
@@ -701,12 +700,9 @@ public abstract class AbstractTextStylesConfigurationBlock extends OverlayStoreC
private Control createPreviewer(final Composite parent) {
final IPreferenceStore store= new ChainedPreferenceStore(new IPreferenceStore[] {
this.fOverlayStore, EditorsUI.getPreferenceStore() });
- this.previewViewer= new SourceViewer(parent, null, null, false, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);
- this.previewViewer.setEditable(false);
+ this.previewViewer= new PreviewSourceViewer(parent, store);
this.configuration= getSourceViewerConfiguration(store);
this.previewViewer.configure(this.configuration);
- new TextViewerJFaceUpdater(this.previewViewer, store);
- new TextViewerEditorColorUpdater(this.previewViewer, store);
final String content= loadPreviewContentFromFile(getPreviewFileName());
final IDocument document= new Document(content);
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/PreviewSourceViewer.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/PreviewSourceViewer.java
new file mode 100644
index 0000000..0fff330
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/PreviewSourceViewer.java
@@ -0,0 +1,67 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ #
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ #
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ #
+ # Contributors:
+ # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.ltk.ui;
+
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.editors.text.EditorsUI;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ltk.ui.sourceediting.swt.EnhStyledText;
+import org.eclipse.statet.ltk.ui.sourceediting.util.SourceViewerEditorPreferenceUpdater;
+
+
+@NonNullByDefault
+public class PreviewSourceViewer extends SourceViewer {
+
+
+ public PreviewSourceViewer(final Composite parent,
+ final boolean manageFont,
+ final IPreferenceStore preferenceStore) {
+ super(parent, null, null, false, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+
+ setEditable(false);
+
+ final var textWidget= nonNullAssert(getTextWidget());
+ new SourceViewerEditorPreferenceUpdater(this, true, manageFont, preferenceStore);
+ if (!manageFont) {
+ textWidget.setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT));
+ }
+ }
+
+ public PreviewSourceViewer(final Composite parent,
+ final IPreferenceStore preferenceStore) {
+ this(parent, true, preferenceStore);
+ }
+
+ public PreviewSourceViewer(final Composite parent) {
+ this(parent, true, EditorsUI.getPreferenceStore());
+ }
+
+
+ @Override
+ protected StyledText createTextWidget(final Composite parent, final int styles) {
+ return EnhStyledText.forSourceEditor(parent, styles);
+ }
+
+
+}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/CustomSwtElementProvider.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/CustomSwtElementProvider.java
new file mode 100644
index 0000000..4799874
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/CustomSwtElementProvider.java
@@ -0,0 +1,45 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ #
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ #
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ #
+ # Contributors:
+ # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.ltk.ui.css;
+
+import org.eclipse.e4.ui.css.core.dom.IElementProvider;
+import org.eclipse.e4.ui.css.core.engine.CSSEngine;
+
+import org.w3c.dom.Element;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ltk.ui.sourceediting.swt.EnhStyledText;
+
+
+@NonNullByDefault
+@SuppressWarnings("restriction")
+public class CustomSwtElementProvider implements IElementProvider {
+
+
+ public CustomSwtElementProvider() {
+ }
+
+
+ @Override
+ public @Nullable Element getElement(Object element, CSSEngine engine) {
+ if (element instanceof EnhStyledText) {
+ return new EnhStyledTextElement((EnhStyledText)element, engine);
+ }
+ return null;
+ }
+
+}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/EnhStyledTextElement.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/EnhStyledTextElement.java
new file mode 100644
index 0000000..11bd5f1
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/EnhStyledTextElement.java
@@ -0,0 +1,35 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ #
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ #
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ #
+ # Contributors:
+ # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.ltk.ui.css;
+
+import org.eclipse.e4.ui.css.core.engine.CSSEngine;
+import org.eclipse.e4.ui.css.swt.dom.ControlElement;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ltk.ui.sourceediting.swt.EnhStyledText;
+
+
+@NonNullByDefault
+@SuppressWarnings("restriction")
+public class EnhStyledTextElement extends ControlElement {
+
+
+ public EnhStyledTextElement(final EnhStyledText control, final CSSEngine engine) {
+ super(control, engine);
+ }
+
+
+}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/NoopCssPropertyHandler.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/NoopCssPropertyHandler.java
new file mode 100644
index 0000000..c97fcf6
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/NoopCssPropertyHandler.java
@@ -0,0 +1,43 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ #
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ #
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ #
+ # Contributors:
+ # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.ltk.ui.css;
+
+import org.eclipse.e4.ui.css.core.dom.properties.ICSSPropertyHandler;
+import org.eclipse.e4.ui.css.core.engine.CSSEngine;
+
+import org.w3c.dom.css.CSSValue;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+
+@NonNullByDefault
+@SuppressWarnings("restriction")
+public class NoopCssPropertyHandler implements ICSSPropertyHandler {
+
+
+ public NoopCssPropertyHandler() {
+ }
+
+
+ @Override
+ public boolean applyCSSProperty(final Object element,
+ final String property, final CSSValue value, final @Nullable String pseudo,
+ final CSSEngine engine) throws Exception {
+ return true;
+ }
+
+
+}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/ExtStyledText.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/ExtStyledText.java
deleted file mode 100644
index 04e841a..0000000
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/ExtStyledText.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2021 Stephan Wahlbrink and others.
- #
- # This program and the accompanying materials are made available under the
- # terms of the Eclipse Public License 2.0 which is available at
- # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
- # which is available at https://www.apache.org/licenses/LICENSE-2.0.
- #
- # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
- #
- # Contributors:
- # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
- #=============================================================================*/
-
-package org.eclipse.statet.ltk.ui.sourceediting;
-
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.widgets.Composite;
-
-import org.eclipse.statet.jcommons.lang.NonNullByDefault;
-import org.eclipse.statet.jcommons.lang.Nullable;
-
-
-@NonNullByDefault
-public class ExtStyledText extends StyledText {
-
-
- private @Nullable Color customBackgroundColor;
- private @Nullable Color customForegroundColor;
-
- private boolean inSetEnabled;
-
-
- public ExtStyledText(final Composite parent, final int style) {
- super(parent, style);
- }
-
-
- @Override
- public void setEnabled(final boolean enabled) {
- this.inSetEnabled= true;
- try {
- if (enabled) {
- super.setEnabled(true);
- applyCustomBackgroundColor();
- applyCustomForegroundColor();
- }
- else {
- super.setBackground(null);
- super.setForeground(null);
- super.setEnabled(false);
- }
- }
- finally {
- this.inSetEnabled= false;
- }
- }
-
- @Override
- public void setBackground(final @Nullable Color color) {
- if (this.inSetEnabled) {
- super.setBackground(color);
- }
- else {
- this.customBackgroundColor= color;
- if (isEnabled()) {
- applyCustomBackgroundColor();
- }
- }
- }
-
- private void applyCustomBackgroundColor() {
- super.setBackground(this.customBackgroundColor);
- if (this.customBackgroundColor == null) { // workaround for bug 573707
- super.setBackground(getBackground());
- }
- }
-
- @Override
- public void setForeground(final @Nullable Color color) {
- if (this.inSetEnabled) {
- super.setForeground(color);
- }
- else {
- this.customForegroundColor= color;
- if (isEnabled()) {
- applyCustomForegroundColor();
- }
- }
- }
-
- private void applyCustomForegroundColor() {
- super.setForeground(this.customForegroundColor);
- if (this.customForegroundColor == null) { // workaround for bug 573707
- super.setForeground(getForeground());
- }
- }
-
-}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SnippetEditor.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SnippetEditor.java
index 8fed8ad..6ee3ad7 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SnippetEditor.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SnippetEditor.java
@@ -50,8 +50,6 @@ import org.eclipse.statet.ecommons.commands.core.BasicHandlerCollection;
import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
import org.eclipse.statet.ecommons.preferences.ui.SettingsUpdater;
import org.eclipse.statet.ecommons.text.ui.TextViewerAction;
-import org.eclipse.statet.ecommons.text.ui.TextViewerEditorColorUpdater;
-import org.eclipse.statet.ecommons.text.ui.TextViewerJFaceUpdater;
import org.eclipse.statet.ecommons.ui.actions.ControlServicesUtil;
import org.eclipse.statet.ecommons.ui.components.WidgetToolsButton;
import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
@@ -59,6 +57,9 @@ import org.eclipse.statet.ecommons.ui.util.UIAccess;
import org.eclipse.statet.ecommons.ui.workbench.ContextHandlers;
import org.eclipse.statet.ecommons.ui.workbench.texteditor.ActionHandler;
+import org.eclipse.statet.ltk.ui.sourceediting.swt.EnhStyledText;
+import org.eclipse.statet.ltk.ui.sourceediting.util.SourceViewerEditorPreferenceUpdater;
+
/**
* Text snippet editor (no Eclipse editor) supporting {@link SourceEditorViewerConfigurator}.
@@ -215,9 +216,7 @@ public class SnippetEditor extends Object {
final ViewerSourceEditorAdapter adapter= new ViewerSourceEditorAdapter(this.sourceViewer, this.configurator);
this.configurator.setTarget(adapter);
- new TextViewerJFaceUpdater(this.sourceViewer,
- this.configurator.getSourceViewerConfiguration().getPreferences() );
- new TextViewerEditorColorUpdater(this.sourceViewer,
+ new SourceViewerEditorPreferenceUpdater(this.sourceViewer,
this.configurator.getSourceViewerConfiguration().getPreferences() );
new SettingsUpdater(this.configurator, this.sourceViewer.getControl());
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/EnhStyledText.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/swt/EnhStyledText.java
index 16aabd0..ec7f6a7 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/EnhStyledText.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/swt/EnhStyledText.java
@@ -12,7 +12,7 @@
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
-package org.eclipse.statet.ltk.ui.sourceediting;
+package org.eclipse.statet.ltk.ui.sourceediting.swt;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.graphics.Color;
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/TextViewerEditorColorUpdater.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/util/SourceViewerEditorPreferenceUpdater.java
index 30b2e3a..72e7692 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/TextViewerEditorColorUpdater.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/util/SourceViewerEditorPreferenceUpdater.java
@@ -12,7 +12,7 @@
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
-package org.eclipse.statet.ecommons.text.ui;
+package org.eclipse.statet.ltk.ui.sourceediting.util;
import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND;
import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT;
@@ -23,8 +23,11 @@ import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_SELE
import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_SELECTION_FOREGROUND;
import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_SELECTION_FOREGROUND_SYSTEM_DEFAULT;
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.util.IPropertyChangeListener;
@@ -33,68 +36,112 @@ 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.Font;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.lang.Nullable;
-import org.eclipse.statet.ecommons.ui.util.UIAccess;
-
@NonNullByDefault
-public class TextViewerEditorColorUpdater {
+public class SourceViewerEditorPreferenceUpdater {
protected final ISourceViewer viewer;
+
+ private final boolean manageColors;
+ private final boolean manageFont;
+
protected final IPreferenceStore preferenceStore;
+ private @Nullable IPropertyChangeListener preferenceStoreListener;
- private @Nullable IPropertyChangeListener listener;
+ private @Nullable IPropertyChangeListener fontRegistryListener;
- public TextViewerEditorColorUpdater(final SourceViewer viewer, final IPreferenceStore preferenceStore) {
- assert (viewer != null);
- assert (preferenceStore != null);
+ public SourceViewerEditorPreferenceUpdater(final SourceViewer viewer,
+ final boolean manageColors, final boolean manageFont,
+ final IPreferenceStore preferenceStore ) {
+ this.viewer= nonNullAssert(viewer);
- this.viewer= viewer;
- this.preferenceStore= preferenceStore;
+ this.manageColors= manageColors;
+ this.manageFont= manageColors;
- viewer.getTextWidget().addDisposeListener(new DisposeListener() {
+ this.preferenceStore= nonNullAssert(preferenceStore);
+
+ final var textWidget= nonNullAssert(viewer.getTextWidget());
+ textWidget.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(final DisposeEvent e) {
dispose();
}
});
- this.listener= new IPropertyChangeListener() {
- @Override
- public void propertyChange(final PropertyChangeEvent event) {
- if (PREFERENCE_COLOR_FOREGROUND.equals(event.getProperty())
- || PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT.equals(event.getProperty())
- || PREFERENCE_COLOR_BACKGROUND.equals(event.getProperty())
- || PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT.equals(event.getProperty())
- || PREFERENCE_COLOR_SELECTION_FOREGROUND.equals(event.getProperty())
- || PREFERENCE_COLOR_SELECTION_FOREGROUND_SYSTEM_DEFAULT.equals(event.getProperty())
- || PREFERENCE_COLOR_SELECTION_BACKGROUND.equals(event.getProperty())
- || PREFERENCE_COLOR_SELECTION_BACKGROUND_SYSTEM_DEFAULT.equals(event.getProperty()) ) {
- updateColors();
+ if (this.manageColors) {
+ final IPropertyChangeListener listener= new IPropertyChangeListener() {
+ @Override
+ public void propertyChange(final PropertyChangeEvent event) {
+ final String prefKey= event.getProperty();
+ final boolean updateColors= (SourceViewerEditorPreferenceUpdater.this.manageColors
+ && (PREFERENCE_COLOR_FOREGROUND.equals(prefKey)
+ || PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT.equals(prefKey)
+ || PREFERENCE_COLOR_BACKGROUND.equals(prefKey)
+ || PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT.equals(prefKey)
+ || PREFERENCE_COLOR_SELECTION_FOREGROUND.equals(prefKey)
+ || PREFERENCE_COLOR_SELECTION_FOREGROUND_SYSTEM_DEFAULT.equals(prefKey)
+ || PREFERENCE_COLOR_SELECTION_BACKGROUND.equals(prefKey)
+ || PREFERENCE_COLOR_SELECTION_BACKGROUND_SYSTEM_DEFAULT.equals(prefKey) ));
+ final boolean updateFont= false;
+ if (updateColors || updateFont) {
+ update(updateColors, updateFont);
+ }
}
- }
- };
- this.preferenceStore.addPropertyChangeListener(this.listener);
+ };
+ this.preferenceStoreListener= listener;
+ this.preferenceStore.addPropertyChangeListener(listener);
+ }
+ if (this.manageFont) {
+ final var listener= new IPropertyChangeListener() {
+ @Override
+ public void propertyChange(final PropertyChangeEvent event) {
+ final String prefKey= event.getProperty();
+ final boolean updateFont= (getSymbolicFontName().equals(prefKey));
+ if (updateFont) {
+ update(false, updateFont);
+ }
+ }
+ };
+ this.fontRegistryListener= listener;
+ JFaceResources.getFontRegistry().addListener(listener);
+ }
- updateColors();
+ update(this.manageColors, this.manageFont);
+ }
+
+ public SourceViewerEditorPreferenceUpdater(final SourceViewer viewer,
+ final IPreferenceStore preferenceStore) {
+ this(viewer, true, true, preferenceStore);
+ }
+
+
+ protected String getSymbolicFontName() {
+ return JFaceResources.TEXT_FONT;
}
- protected void updateColors() {
+ protected void update(final boolean updateColors, final boolean updateFont) {
final var viewer= this.viewer;
final StyledText styledText= viewer.getTextWidget();
if (styledText != null && !styledText.isDisposed()) {
- update(viewer, styledText);
+ if (updateColors) {
+ updateColors(viewer, styledText);
+ }
+ if (updateFont) {
+ updateFont(viewer, styledText);
+ }
}
}
- protected void update(final ISourceViewer viewer, final StyledText styledText) {
+ protected void updateColors(final ISourceViewer viewer, final StyledText styledText) {
{ // foreground color
final Color color= this.preferenceStore.getBoolean(
PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT) ? null :
@@ -126,21 +173,38 @@ public class TextViewerEditorColorUpdater {
return (rgb != null) ? new Color(rgb) : null;
}
+ protected void updateFont(final ISourceViewer viewer, final StyledText styledText) {
+ { final Font font= JFaceResources.getFont(getSymbolicFontName());
+ styledText.setFont(font);
+ }
+ }
+
protected void dispose() {
- { final var listener= this.listener;
+ { final var listener= this.preferenceStoreListener;
if (listener != null) {
- this.listener= null;
+ this.preferenceStoreListener= null;
this.preferenceStore.removePropertyChangeListener(listener);
}
}
+ { final var listener= this.fontRegistryListener;
+ if (listener != null) {
+ this.fontRegistryListener= null;
+ JFaceResources.getFontRegistry().removeListener(listener);
+ }
+ }
- final StyledText styledText= this.viewer.getTextWidget();
- if (UIAccess.isOkToUse(styledText)) {
- styledText.setForeground(null);
- styledText.setBackground(null);
- styledText.setSelectionForeground(null);
- styledText.setSelectionBackground(null);
+ final var styledText= this.viewer.getTextWidget();
+ if (styledText != null && !styledText.isDisposed()) {
+ if (this.manageColors) {
+ styledText.setForeground(null);
+ styledText.setBackground(null);
+ styledText.setSelectionForeground(null);
+ styledText.setSelectionBackground(null);
+ }
+ if (this.manageFont) {
+ styledText.setFont(null);
+ }
}
}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatePreview.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatePreview.java
index 6593053..9aa01b7 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatePreview.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatePreview.java
@@ -17,24 +17,22 @@ package org.eclipse.statet.ltk.ui.templates;
import java.util.Map;
import java.util.Set;
-import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.TemplateContextType;
-import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.text.templates.ContextTypeRegistry;
import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.statet.ecommons.preferences.ui.SettingsUpdater;
import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
-import org.eclipse.statet.ecommons.text.ui.TextViewerEditorColorUpdater;
import org.eclipse.statet.ecommons.text.ui.TextViewerJFaceUpdater;
import org.eclipse.statet.ecommons.ui.ISettingsChangedHandler;
import org.eclipse.statet.ecommons.ui.util.UIAccess;
+import org.eclipse.statet.internal.ltk.ui.PreviewSourceViewer;
import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor;
import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
import org.eclipse.statet.ltk.ui.sourceediting.ViewerSourceEditorAdapter;
@@ -62,10 +60,8 @@ public class TemplatePreview {
}
public SourceViewer createSourceViewer(final Composite parent) {
- final SourceViewer viewer= new SourceViewer(parent, null, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
- viewer.setEditable(false);
- viewer.getTextWidget().setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT));
- new TextViewerEditorColorUpdater(viewer, EditorsUI.getPreferenceStore());
+ final SourceViewer viewer= new PreviewSourceViewer(parent, false,
+ EditorsUI.getPreferenceStore() );
final IDocument document= new Document();
viewer.setDocument(document);
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractEditorTemplatesPage.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractEditorTemplatesPage.java
index 13c7e52..250820d 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractEditorTemplatesPage.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractEditorTemplatesPage.java
@@ -21,7 +21,6 @@ import java.util.Set;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.AbstractDocument;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.BadPartitioningException;
@@ -33,9 +32,7 @@ import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.TemplateContextType;
import org.eclipse.jface.text.templates.persistence.TemplateStore;
import org.eclipse.jface.window.Window;
-import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.ui.texteditor.templates.AbstractTemplatesPage;
import org.eclipse.ui.texteditor.templates.ITemplatesPage;
@@ -48,12 +45,12 @@ import org.eclipse.statet.jcommons.text.core.TextRegion;
import org.eclipse.statet.ecommons.preferences.ui.SettingsUpdater;
import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
import org.eclipse.statet.ecommons.text.core.util.TextUtils;
-import org.eclipse.statet.ecommons.text.ui.TextViewerEditorColorUpdater;
import org.eclipse.statet.ecommons.text.ui.TextViewerJFaceUpdater;
import org.eclipse.statet.ecommons.ui.ISettingsChangedHandler;
import org.eclipse.statet.ecommons.ui.util.UIAccess;
import org.eclipse.statet.internal.ltk.ui.LtkUIPlugin;
+import org.eclipse.statet.internal.ltk.ui.PreviewSourceViewer;
import org.eclipse.statet.ltk.model.core.ModelManager;
import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor;
import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
@@ -223,10 +220,7 @@ public abstract class AbstractEditorTemplatesPage extends AbstractTemplatesPage
@Override
protected SourceViewer createPatternViewer(final Composite parent) {
- final SourceViewer viewer= new SourceViewer(parent, null, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
- viewer.setEditable(false);
- viewer.getTextWidget().setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT));
- new TextViewerEditorColorUpdater(viewer, EditorsUI.getPreferenceStore());
+ final SourceViewer viewer= new PreviewSourceViewer(parent);
final IDocument document= new Document();
viewer.setDocument(document);
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractTemplatesPreferencePage.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractTemplatesPreferencePage.java
index e4e5fb4..4760543 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractTemplatesPreferencePage.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractTemplatesPreferencePage.java
@@ -15,7 +15,6 @@
package org.eclipse.statet.ltk.ui.templates.config;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.AbstractDocument;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
@@ -24,16 +23,14 @@ import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.TemplateContextType;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
-import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.text.templates.TemplatePersistenceData;
import org.eclipse.ui.texteditor.templates.TemplatePreferencePage;
import org.eclipse.statet.ecommons.preferences.ui.SettingsUpdater;
import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
-import org.eclipse.statet.ecommons.text.ui.TextViewerEditorColorUpdater;
-import org.eclipse.statet.ecommons.text.ui.TextViewerJFaceUpdater;
+import org.eclipse.statet.internal.ltk.ui.PreviewSourceViewer;
import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
import org.eclipse.statet.ltk.ui.sourceediting.ViewerSourceEditorAdapter;
import org.eclipse.statet.ltk.ui.templates.EnhTemplateStore;
@@ -82,18 +79,13 @@ public abstract class AbstractTemplatesPreferencePage extends TemplatePreference
@Override
protected SourceViewer createViewer(final Composite parent) {
- final SourceViewer viewer= new SourceViewer(parent, null, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
- viewer.setEditable(false);
- viewer.getTextWidget().setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT));
+ final SourceViewer viewer= new PreviewSourceViewer(parent,
+ this.viewerConfigurator.getSourceViewerConfiguration().getPreferences() );
final ViewerSourceEditorAdapter adapter= new ViewerSourceEditorAdapter(viewer, null);
this.viewerConfigurator.setTarget(adapter);
// updater
new SettingsUpdater(this.viewerConfigurator, viewer.getControl());
- new TextViewerJFaceUpdater(viewer,
- this.viewerConfigurator.getSourceViewerConfiguration().getPreferences() );
- new TextViewerEditorColorUpdater(viewer,
- this.viewerConfigurator.getSourceViewerConfiguration().getPreferences() );
final IDocument document= new Document();
this.viewerConfigurator.getDocumentSetupParticipant().setup(document);

Back to the top