From 192c5fac04b69048e47e0585a60a2b6f64cb665c Mon Sep 17 00:00:00 2001 From: konekoneko Date: Sat, 15 Oct 2016 01:57:29 +0530 Subject: [PATCH] =?utf8?q?=E3=81=84=E3=81=8F=E3=81=A4=E3=81=8B=E3=81=AE?= =?utf8?q?=E3=83=AA=E3=82=BD=E3=83=BC=E3=82=B9=E6=BC=8F=E3=82=8C=E3=82=92?= =?utf8?q?=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../Print/D2DPrintPreviewRender.cs | 12 ++-- UWP/FooEditEngine.UWP/Print/D2DPrintRender.cs | 18 +++-- UWP/FooEditEngine.UWP/Print/DocumentSource.cs | 84 +++++++++------------- 3 files changed, 50 insertions(+), 64 deletions(-) diff --git a/UWP/FooEditEngine.UWP/Print/D2DPrintPreviewRender.cs b/UWP/FooEditEngine.UWP/Print/D2DPrintPreviewRender.cs index c8ea9dd..1ea0c64 100644 --- a/UWP/FooEditEngine.UWP/Print/D2DPrintPreviewRender.cs +++ b/UWP/FooEditEngine.UWP/Print/D2DPrintPreviewRender.cs @@ -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() diff --git a/UWP/FooEditEngine.UWP/Print/D2DPrintRender.cs b/UWP/FooEditEngine.UWP/Print/D2DPrintRender.cs index 7ec0567..5f2914b 100644 --- a/UWP/FooEditEngine.UWP/Print/D2DPrintRender.cs +++ b/UWP/FooEditEngine.UWP/Print/D2DPrintRender.cs @@ -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() diff --git a/UWP/FooEditEngine.UWP/Print/DocumentSource.cs b/UWP/FooEditEngine.UWP/Print/DocumentSource.cs index 7610cd6..ca23082 100644 --- a/UWP/FooEditEngine.UWP/Print/DocumentSource.cs +++ b/UWP/FooEditEngine.UWP/Print/DocumentSource.cs @@ -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; - } } /// @@ -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 /// /// /// - 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); } } } -- 2.11.0