OSDN Git Service

いくつかのリソース漏れを修正した
authorkonekoneko <test2214@hotmail.co.jp>
Fri, 14 Oct 2016 20:27:29 +0000 (01:57 +0530)
committerkonekoneko <test2214@hotmail.co.jp>
Fri, 14 Oct 2016 20:27:29 +0000 (01:57 +0530)
UWP/FooEditEngine.UWP/Print/D2DPrintPreviewRender.cs
UWP/FooEditEngine.UWP/Print/D2DPrintRender.cs
UWP/FooEditEngine.UWP/Print/DocumentSource.cs

index c8ea9dd..1ea0c64 100644 (file)
@@ -106,16 +106,16 @@ namespace FooEditEngine
 
         protected override void DestructRender()
         {
-            if (this.Texture != null)
-                this.Texture.Dispose();
-            if (this.Surface != null)
-                this.Surface.Dispose();
             if (this.Bitmap != null)
                 this.Bitmap.Dispose();
-            if (this.D2DDevice != null)
-                this.D2DDevice.Dispose();
             if (this.D2DContext != null)
                 this.D2DContext.Dispose();
+            if (this.D2DDevice != null)
+                this.D2DDevice.Dispose();
+            if (this.Surface != null)
+                this.Surface.Dispose();
+            if (this.Texture != null)
+                this.Texture.Dispose();
         }
 
         protected override void ReCreateTarget()
index 7ec0567..5f2914b 100644 (file)
@@ -21,16 +21,20 @@ namespace FooEditEngine
         D2D.PrintControl Control;
         D2D.CommandList CommandList;
         Size2F Size;
-        ImagingFactory WICFactory = new ImagingFactory();
+        ImagingFactory WICFactory;
         int dpi;
+        ComObject docPackageTarget;
 
         public D2DPrintRender(string fontName,double fontSize, Size size, uint dpi, IPrintDocumentPackageTarget docPackageTarget)
             : base()
         {
+            this.WICFactory = new ImagingFactory();
             base.ConstructDeviceResource(size.Width, size.Height);
             base.InitTextFormat(fontName, (float)fontSize);
 
-            this.CreateSurface(size,dpi,docPackageTarget);
+            this.docPackageTarget = new ComObject(docPackageTarget);    //あとで廃棄する必要がある
+
+            this.CreateSurface(size,dpi,this.docPackageTarget);
         }
 
         public override void GetDpi(out float dpix, out float dpiy)
@@ -51,14 +55,14 @@ namespace FooEditEngine
             this.CommandList.Dispose();
         }
 
-        void CreateSurface(Size size, uint dpi, IPrintDocumentPackageTarget docPackageTarget)
+        void CreateSurface(Size size, uint dpi, ComObject docPackageTarget)
         {
             D2D.PrintControlProperties printControlProperties = new D2D.PrintControlProperties();
             printControlProperties.RasterDPI = dpi;
             printControlProperties.ColorSpace = D2D.ColorSpace.SRgb;
             printControlProperties.FontSubset = D2D.PrintFontSubsetMode.Default;
 
-            this.Control = new D2D.PrintControl(this.D2DDevice, this.WICFactory, new ComObject(docPackageTarget), printControlProperties);
+            this.Control = new D2D.PrintControl(this.D2DDevice, this.WICFactory, docPackageTarget, printControlProperties);
 
             this.Size = new Size2F((float)size.Width, (float)size.Height);
 
@@ -83,12 +87,14 @@ namespace FooEditEngine
                 this.Control.Close();
                 this.Control.Dispose();
             }
-            if (this.WICFactory != null)
-                this.WICFactory.Dispose();
             if (this.D2DDevice != null)
                 this.D2DDevice.Dispose();
             if (this.D2DContext != null)
                 this.D2DContext.Dispose();
+            if (this.docPackageTarget != null)
+                this.docPackageTarget.Dispose();
+            if (this.WICFactory != null)
+                this.WICFactory.Dispose();
         }
 
         protected override void ReCreateTarget()
index 7610cd6..ca23082 100644 (file)
@@ -63,28 +63,15 @@ namespace FooEditEngine.UWP
 
         string fontName;
         double fontSize;
-        LineBreakMethod lineBreakMethod;
-        int lineBreakCharCount, tabCount;
-        Document document;
-        bool urlMark;
-        IHilighter hilighter;
         float displayDpi;
         Padding padding;
 
-        public PrintableViewFactory(Document doc, Padding padding, string FontName,double fontSize)
+        public PrintableViewFactory(Padding padding, string FontName,double fontSize)
         {
             this.fontName = FontName;
             this.fontSize = fontSize;
-            this.tabCount = doc.TabStops;
-            this.document = doc;
-            this.lineBreakMethod = doc.LineBreak;
-            this.lineBreakCharCount = doc.LineBreakCharCount;
-            this.drawLineNumber = doc.DrawLineNumber;
-            this.urlMark = doc.UrlMark;
-            this.hilighter = doc.LayoutLines.Hilighter;
             this.displayDpi = DisplayInformation.GetForCurrentView().LogicalDpi;
             this.padding = padding;
-            this.EnableHilight = true;
         }
         public D2DPrintRender CreateRender(PrintPageDescription pagedesc, IPrintDocumentPackageTarget docPackageTarget)
         {
@@ -99,6 +86,7 @@ namespace FooEditEngine.UWP
             render.Url = D2DRenderBase.ToColor4(this.url);
             return render;
         }
+
         public D2DPrintPreviewRender CreateRender(PrintPageDescription pagedesc)
         {
             D2DPrintPreviewRender render;
@@ -112,32 +100,19 @@ namespace FooEditEngine.UWP
             render.Url = D2DRenderBase.ToColor4(this.url);
             return render;
         }
-        public PrintableView CreateView(PrintPageDescription pagedesc, IPrintableTextRender render, string header, string footer)
+
+        public PrintableView CreateView(Document document,PrintPageDescription pagedesc, IPrintableTextRender render, string header, string footer)
         {
-            Document documentSnap = new Document(this.document);
-            documentSnap.LayoutLines.Render = render;
-            PrintableView view = new PrintableView(documentSnap, render,padding);
+            document.LayoutLines.Render = render;
+            PrintableView view = new PrintableView(document, render,padding);
             view.Header = header;
             view.Footer = footer;
             view.PageBound = new Rectangle(pagedesc.ImageableRect.X, pagedesc.ImageableRect.Y, pagedesc.ImageableRect.Width, pagedesc.ImageableRect.Height);
-            view.Hilighter = this.EnableHilight ? this.hilighter : null;
-            documentSnap.DrawLineNumber = this.drawLineNumber;
-            documentSnap.PerformLayout();
+            document.PerformLayout();
 
             return view;
         }
 
-        public bool drawLineNumber
-        {
-            get;
-            set;
-        }
-
-        public bool EnableHilight
-        {
-            get;
-            set;
-        }
     }
 
     /// <summary>
@@ -152,6 +127,8 @@ namespace FooEditEngine.UWP
         D2DPrintPreviewRender previewRender;
         PrintableView previewView;
         int maxPreviePageCount;
+        Document doc;
+        IHilighter hilighter;
 
         public ParseCommandHandler ParseHF;
         public string Header = string.Empty;
@@ -164,9 +141,11 @@ namespace FooEditEngine.UWP
         /// <param name="padding"></param>
         /// <param name="fontName"></param>
         /// <param name="fontSize"></param>
-        public DocumentSource(Document textbox,Padding padding, string fontName, double fontSize)
+        public DocumentSource(Document doc,Padding padding, string fontName, double fontSize)
         {
-            this.factory = new PrintableViewFactory(textbox, padding, fontName, fontSize);
+            this.factory = new PrintableViewFactory(padding, fontName, fontSize);
+            this.doc = new Document(doc);
+            this.hilighter = doc.LayoutLines.Hilighter;
         }
 
         public enum SyntaxHilightApplibility
@@ -250,14 +229,8 @@ namespace FooEditEngine.UWP
         [DisplayPrintOptionResourceID("SyntaxHilight")]
         public SyntaxHilightApplibility EnableHilight
         {
-            get
-            {
-                return this.factory.EnableHilight ? SyntaxHilightApplibility.Apply : SyntaxHilightApplibility.NoApply;
-            }
-            set
-            {
-                this.factory.EnableHilight = value == SyntaxHilightApplibility.Apply;
-            }
+            get;
+            set;
         }
 
         public enum LineNumberVisiblity
@@ -269,14 +242,8 @@ namespace FooEditEngine.UWP
         [DisplayPrintOptionResourceID("ShowLineNumber")]
         public LineNumberVisiblity ShowLineNumber
         {
-            get
-            {
-                return this.factory.drawLineNumber ? LineNumberVisiblity.Visible : LineNumberVisiblity.Hidden;
-            }
-            set
-            {
-                this.factory.drawLineNumber = value == LineNumberVisiblity.Visible;
-            }
+            get;
+            set;
         }
 
         public void GetPreviewPageCollection(IPrintDocumentPackageTarget docPackageTarget, out IPrintPreviewPageCollection docPageCollection)
@@ -294,7 +261,9 @@ namespace FooEditEngine.UWP
             PrintPageDescription pagedesc = options.GetPageDescription(1);
 
             D2DPrintRender render = this.factory.CreateRender(pagedesc, docPackageTarget);
-            PrintableView view = this.factory.CreateView(pagedesc, render, this.Header, this.Fotter);
+            this.doc.DrawLineNumber = this.ShowLineNumber == LineNumberVisiblity.Visible;
+            this.doc.LayoutLines.Hilighter = this.EnableHilight == SyntaxHilightApplibility.Apply ? this.hilighter : null;
+            PrintableView view = this.factory.CreateView(this.doc, pagedesc, render, this.Header, this.Fotter);
 
             bool result = false;
             int currentPage = 0;
@@ -323,8 +292,16 @@ namespace FooEditEngine.UWP
 
             this.imageRect = new Size(pagedesc.ImageableRect.Width, pagedesc.ImageableRect.Height);
 
+            //何度か呼ばれることがある
+            if (this.previewView != null)
+                this.previewView.Dispose();
+            if (this.previewRender != null)
+                this.previewRender.Dispose();
+
             this.previewRender = this.factory.CreateRender(pagedesc);
-            this.previewView = this.factory.CreateView(pagedesc, this.previewRender, this.Header, this.Fotter);
+            this.doc.DrawLineNumber = this.ShowLineNumber == LineNumberVisiblity.Visible;
+            this.doc.LayoutLines.Hilighter = this.EnableHilight == SyntaxHilightApplibility.Apply ? this.hilighter : null;
+            this.previewView = this.factory.CreateView(this.doc, pagedesc, this.previewRender, this.Header, this.Fotter);
 
             int maxPage = 1;
             while (!this.previewView.TryPageDown())
@@ -375,6 +352,9 @@ namespace FooEditEngine.UWP
                 this.previewView.Dispose();
             if (this.previewRender != null)
                 this.previewRender.Dispose();
+            if (this.doc != null)
+                this.doc.Dispose();
+            Marshal.ReleaseComObject(this.dxgiPreviewTarget);
         }
     }
 }