diff options
author | Aaron Bockover <abock@microsoft.com> | 2019-04-08 22:23:26 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-04-08 22:23:26 +0300 |
commit | 11609b486485c286e56698517f7530b68cb66fca (patch) | |
tree | 668ba63e16954aeea51441f09f8aaf3ec0f15b80 /main | |
parent | 38b86782631f117fdc3dbffde5738c5f58687377 (diff) | |
parent | a591dbf957e555a7ca013d33513e11b9e8b18890 (diff) |
Merge pull request #389 from xamarin/pr-sandy-zoomzoomzoom
Zoom: Persist in new editor, sync with old
Diffstat (limited to 'main')
3 files changed, 79 insertions, 20 deletions
diff --git a/main/src/addins/MonoDevelop.TextEditor/MonoDevelop.TextEditor/TextViewContent.cs b/main/src/addins/MonoDevelop.TextEditor/MonoDevelop.TextEditor/TextViewContent.cs index 0ceeebf0d4..86fbdfeb7a 100644 --- a/main/src/addins/MonoDevelop.TextEditor/MonoDevelop.TextEditor/TextViewContent.cs +++ b/main/src/addins/MonoDevelop.TextEditor/MonoDevelop.TextEditor/TextViewContent.cs @@ -49,6 +49,7 @@ using MonoDevelop.Projects.Policies; using AutoSave = MonoDevelop.Ide.Editor.AutoSave; using EditorConfigService = MonoDevelop.Ide.Editor.EditorConfigService; using DefaultSourceEditorOptions = MonoDevelop.Ide.Editor.DefaultSourceEditorOptions; +using TextEditorFactory = MonoDevelop.Ide.Editor.TextEditorFactory; #if WINDOWS using EditorOperationsInterface = Microsoft.VisualStudio.Text.Operations.IEditorOperations3; @@ -79,6 +80,9 @@ namespace MonoDevelop.TextEditor readonly DefaultSourceEditorOptions sourceEditorOptions; readonly IInfoBarPresenter infoBarPresenter; + static IEditorOptions globalOptions; + static bool settingZoomLevel; + PolicyBag policyContainer; ICodingConventionContext editorConfigContext; bool warnOverwrite; @@ -143,6 +147,43 @@ namespace MonoDevelop.TextEditor InstallAdditionalEditorOperationsCommands (); SubscribeToEvents (); + + // Set up this static event handling just once + if (globalOptions == null) { + globalOptions = imports.EditorOptionsFactoryService.GlobalOptions; + + // From Mono.TextEditor.TextEditorOptions + const double ZOOM_FACTOR = 1.1f; + const int ZOOM_MIN_POW = -4; + const int ZOOM_MAX_POW = 8; + var ZOOM_MIN = Math.Pow (ZOOM_FACTOR, ZOOM_MIN_POW); + var ZOOM_MAX = Math.Pow (ZOOM_FACTOR, ZOOM_MAX_POW); + + globalOptions.SetMinZoomLevel (ZOOM_MIN * 100); + globalOptions.SetMaxZoomLevel (ZOOM_MAX * 100); + + OnConfigurationZoomLevelChanged (null, EventArgs.Empty); + + globalOptions.OptionChanged += OnGlobalOptionsChanged; + // Check for option changing in old editor + TextEditorFactory.ZoomLevel.Changed += OnConfigurationZoomLevelChanged; + } + } + + static void OnConfigurationZoomLevelChanged (object sender, EventArgs e) + { + if (settingZoomLevel) + return; + globalOptions.SetZoomLevel (TextEditorFactory.ZoomLevel * 100); + } + + static void OnGlobalOptionsChanged (object sender, EditorOptionChangedEventArgs e) + { + if (e.OptionId == DefaultTextViewOptions.ZoomLevelId.Name) { + settingZoomLevel = true; + TextEditorFactory.ZoomLevel.Set (globalOptions.ZoomLevel () / 100); + settingZoomLevel = false; + } } public override bool IsReadOnly => TextView.Options.DoesViewProhibitUserInput (); diff --git a/main/src/core/Mono.TextEditor.Shared/Mono.TextEditor/TextEditorOptions.cs b/main/src/core/Mono.TextEditor.Shared/Mono.TextEditor/TextEditorOptions.cs index 2fa9fc3426..d288c97b5c 100644 --- a/main/src/core/Mono.TextEditor.Shared/Mono.TextEditor/TextEditorOptions.cs +++ b/main/src/core/Mono.TextEditor.Shared/Mono.TextEditor/TextEditorOptions.cs @@ -26,8 +26,11 @@ using System; using System.Diagnostics; -using MonoDevelop.Core; + using Mono.TextEditor.Highlighting; + +using MonoDevelop.Core; +using MonoDevelop.Ide.Editor; using MonoDevelop.Ide.Editor.Highlighting; namespace Mono.TextEditor @@ -79,11 +82,10 @@ namespace Mono.TextEditor static readonly double ZOOM_MIN = System.Math.Pow (ZOOM_FACTOR, ZOOM_MIN_POW); static readonly double ZOOM_MAX = System.Math.Pow (ZOOM_FACTOR, ZOOM_MAX_POW); - + bool isSettingZoom; double myZoom = 1d; public bool ZoomOverride { get; private set; } - public double Zoom { get { if (ZoomOverride) @@ -99,18 +101,23 @@ namespace Mono.TextEditor if ((System.Math.Abs (value - 1d)) < 0.001d) { value = 1d; } - if (ZoomOverride) { - if (myZoom != value) { - myZoom = value; - DisposeFont (); - ZoomChanged?.Invoke (this, EventArgs.Empty); - OnChanged (EventArgs.Empty); + try { + isSettingZoom = true; + if (ZoomOverride) { + if (myZoom != value) { + myZoom = value; + DisposeFont (); + ZoomChanged?.Invoke (this, EventArgs.Empty); + OnChanged (EventArgs.Empty); + } + return; } - return; - } - if (zoom != value) { - zoom = value; - StaticZoomChanged?.Invoke (this, EventArgs.Empty); + if (zoom != value) { + zoom = value; + StaticZoomChanged?.Invoke (this, EventArgs.Empty); + } + } finally { + isSettingZoom = false; } } } @@ -606,14 +613,25 @@ namespace Mono.TextEditor public TextEditorOptions (bool zoomOverride = false) { ZoomOverride = zoomOverride; - if (!ZoomOverride) + if (!ZoomOverride) { StaticZoomChanged += HandleStaticZoomChanged; + TextEditorFactory.ZoomLevel.Changed += HandleConfigurationZoomLevelChanged; + } + } + + void HandleConfigurationZoomLevelChanged (object sender, EventArgs e) + { + // Check for zoom level changes originating from outside old editor + if (!isSettingZoom) + Zoom = TextEditorFactory.ZoomLevel; } public virtual void Dispose () { - if (!ZoomOverride) + if (!ZoomOverride) { StaticZoomChanged -= HandleStaticZoomChanged; + TextEditorFactory.ZoomLevel.Changed -= HandleConfigurationZoomLevelChanged; + } } void HandleStaticZoomChanged (object sender, EventArgs e) diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/TextEditorFactory.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/TextEditorFactory.cs index ede57aee9e..23ca9fe8b4 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/TextEditorFactory.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/TextEditorFactory.cs @@ -81,7 +81,7 @@ namespace MonoDevelop.Ide.Editor return currentFactory.CreateNewDocument (textSource, fileName, mimeType); } - static ConfigurationProperty<double> zoomLevel = ConfigurationProperty.Create ("Editor.ZoomLevel", 1.0d);
+ public static ConfigurationProperty<double> ZoomLevel = ConfigurationProperty.Create ("Editor.ZoomLevel", 1.0d);
public static TextEditor CreateNewEditor(string fileName, string mimeType, TextEditorType textEditorType = TextEditorType.Default)
{
@@ -99,7 +99,7 @@ namespace MonoDevelop.Ide.Editor private static void InitializeTextEditor(TextEditor textEditor) {
- textEditor.ZoomLevel = zoomLevel; + textEditor.ZoomLevel = ZoomLevel; textEditor.ZoomLevelChanged += OnZoomChanged; } @@ -107,7 +107,7 @@ namespace MonoDevelop.Ide.Editor static void OnZoomChanged (object sender, EventArgs args) { var editor = (TextEditor)sender; - zoomLevel.Value = editor.ZoomLevel; + ZoomLevel.Value = editor.ZoomLevel; } public static TextEditor CreateNewEditor (IReadonlyTextDocument document, TextEditorType textEditorType = TextEditorType.Default) @@ -115,7 +115,7 @@ namespace MonoDevelop.Ide.Editor if (document == null) throw new System.ArgumentNullException ("document"); var result = new TextEditor (currentFactory.CreateNewEditor (document, textEditorType), textEditorType) { - ZoomLevel = zoomLevel + ZoomLevel = ZoomLevel }; result.ZoomLevelChanged += OnZoomChanged; return result; |