Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorAaron Bockover <abock@microsoft.com>2019-04-08 22:23:26 +0300
committerGitHub <noreply@github.com>2019-04-08 22:23:26 +0300
commit11609b486485c286e56698517f7530b68cb66fca (patch)
tree668ba63e16954aeea51441f09f8aaf3ec0f15b80 /main
parent38b86782631f117fdc3dbffde5738c5f58687377 (diff)
parenta591dbf957e555a7ca013d33513e11b9e8b18890 (diff)
Merge pull request #389 from xamarin/pr-sandy-zoomzoomzoom
Zoom: Persist in new editor, sync with old
Diffstat (limited to 'main')
-rw-r--r--main/src/addins/MonoDevelop.TextEditor/MonoDevelop.TextEditor/TextViewContent.cs41
-rw-r--r--main/src/core/Mono.TextEditor.Shared/Mono.TextEditor/TextEditorOptions.cs50
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Editor/TextEditorFactory.cs8
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;