OSDN Git Service

ドキュメントでもレイアウトの再構築が行えるようにした
authorkonekoneko <test2214@hotmail.co.jp>
Mon, 10 Oct 2016 18:48:31 +0000 (00:18 +0530)
committerkonekoneko <test2214@hotmail.co.jp>
Mon, 10 Oct 2016 18:48:31 +0000 (00:18 +0530)
Core/Controller.cs
Core/Document.cs
Core/ViewBase.cs
UWP/FooEditEngine.UWP/FooTextBox.cs

index 55b8d70..feaec0a 100644 (file)
@@ -61,7 +61,6 @@ namespace FooEditEngine
             this.Document = doc;
             this.View = view;
             this.View.render.ChangedRenderResource += render_ChangedRenderResource;
-            this.View.PerformLayouted += View_LineBreakChanged;
             this.View.PageBoundChanged += View_PageBoundChanged;
             this.Document.Clear();
         }
@@ -80,6 +79,7 @@ namespace FooEditEngine
                     this._Document.Update -= Document_Update;
                     this._Document.StatusUpdate -= Document_StatusChanged;
                     this._Document.SelectionChanged -= Document_SelectionChanged;
+                    this._Document.PerformLayouted -= View_LineBreakChanged;
                 }
 
                 this._Document = value;
@@ -87,6 +87,7 @@ namespace FooEditEngine
                 this._Document.Update += new DocumentUpdateEventHandler(Document_Update);
                 this._Document.StatusUpdate += Document_StatusChanged;
                 this._Document.SelectionChanged += Document_SelectionChanged;
+                this._Document.PerformLayouted += View_LineBreakChanged;
             }
         }
 
@@ -1155,7 +1156,7 @@ namespace FooEditEngine
         void View_PageBoundChanged(object sender, EventArgs e)
         {
             if (this.Document.LineBreak == LineBreakMethod.PageBound && this.View.PageBound.Width - this.View.LineBreakingMarginWidth > 0)
-                this.View.PerfomLayouts();
+                this.Document.PerformLayout();
             this.AdjustCaret();
         }
 
@@ -1164,7 +1165,7 @@ namespace FooEditEngine
             if (e.type == ResourceType.Font)
             {
                 if (this.Document.LineBreak == LineBreakMethod.PageBound)
-                    this.View.PerfomLayouts();
+                    this.Document.PerformLayout();
                 this.AdjustCaret();
             }
             if (e.type == ResourceType.InlineChar)
index 0db9009..0547e61 100644 (file)
@@ -677,6 +677,21 @@ namespace FooEditEngine
             }
         }
 
+        public event EventHandler PerformLayouted;
+        /// <summary>
+        /// レイアウト行をすべて破棄し、再度レイアウトを行う
+        /// </summary>
+        public void PerformLayout()
+        {
+            //単に再構築するだけなので行ダーティフラグは更新してはいけない
+            this.LayoutLines.IsFrozneDirtyFlag = true;
+            this.FireUpdate(new DocumentUpdateEventArgs(UpdateType.Clear, -1, -1, -1));
+            this.FireUpdate(new DocumentUpdateEventArgs(UpdateType.Replace, 0, 0, this.Length));
+            this.LayoutLines.IsFrozneDirtyFlag = false;
+            if (this.PerformLayouted != null)
+                this.PerformLayouted(this, null);
+        }
+
         /// <summary>
         /// 選択領域変更時に通知される
         /// </summary>
index c09b7d9..c5bff83 100644 (file)
@@ -91,7 +91,6 @@ namespace FooEditEngine
             this.render.ChangedRenderResource += new ChangedRenderResourceEventHandler(render_ChangedRenderResource);
             this.render.ChangedRightToLeft += render_ChangedRightToLeft;
             this.SrcChanged += new EventHandler((s, e) => { });
-            this.PerformLayouted += new EventHandler((s, e) => { });
             this.PageBoundChanged += new EventHandler((s, e) => { });
         }
 
@@ -108,6 +107,7 @@ namespace FooEditEngine
                     this._Document.UpdateCalledAlways -= new DocumentUpdateEventHandler(doc_Update);
                     this._Document.LineBreakChanged -= Document_LineBreakChanged;
                     this._Document.StatusUpdate -= Document_StatusUpdate;
+                    this._Document.PerformLayouted -= _Document_PerformLayouted;
                 }
 
                 this._Document = value;
@@ -115,11 +115,19 @@ namespace FooEditEngine
                 this._Document.UpdateCalledAlways += new DocumentUpdateEventHandler(doc_Update);
                 this._Document.LineBreakChanged += Document_LineBreakChanged;
                 this._Document.StatusUpdate += Document_StatusUpdate;
+                this._Document.PerformLayouted += _Document_PerformLayouted;
 
                 this.Document_StatusUpdate(this, null);
             }
         }
 
+        private void _Document_PerformLayouted(object sender, EventArgs e)
+        {
+            CalculateLineCountOnScreen();
+            if(this.PerformLayouted != null)
+                this.PerformLayouted(this, e);
+        }
+
         private void Document_StatusUpdate(object sender, EventArgs e)
         {
             if (this.render == null)
@@ -159,6 +167,7 @@ namespace FooEditEngine
 
         public event EventHandler SrcChanged;
 
+        [Obsolete]
         public event EventHandler PerformLayouted;
 
         public event EventHandler PageBoundChanged;
@@ -227,15 +236,11 @@ namespace FooEditEngine
         /// <summary>
         /// すべてのレイアウト行を破棄し、再度レイアウトをやり直す
         /// </summary>
+        [Obsolete]
         public virtual void PerfomLayouts()
         {
-            //単に再構築するだけなので行ダーティフラグは更新してはいけない
-            this.LayoutLines.IsFrozneDirtyFlag = true;
-            this.Document.FireUpdate(new DocumentUpdateEventArgs(UpdateType.Clear, -1, -1, -1));
-            this.Document.FireUpdate(new DocumentUpdateEventArgs(UpdateType.Replace, 0, 0, this.Document.Length));
-            this.LayoutLines.IsFrozneDirtyFlag = false;
-            CalculateLineCountOnScreen();
-            this.PerformLayouted(this, null);
+            //互換性を保つために残しておく
+            this.Document.PerformLayout();
         }
 
         /// <summary>
index 5fb561b..d34919e 100644 (file)
@@ -311,7 +311,7 @@ namespace FooEditEngine.UWP
         /// </summary>
         public void PerfomLayouts()
         {
-            this.View.PerfomLayouts();
+            this.Document.PerformLayout();
         }
 
         /// <summary>