OSDN Git Service

MVVMでの印刷の実装がしやすいようにした
authorkonekoneko <test2214@hotmail.co.jp>
Thu, 13 Oct 2016 15:20:25 +0000 (20:50 +0530)
committerkonekoneko <test2214@hotmail.co.jp>
Thu, 13 Oct 2016 15:20:25 +0000 (20:50 +0530)
UWP/FooEditEngine.UWP/FooEditEngine.UWP.csproj
UWP/FooEditEngine.UWP/FooPrintText.cs [deleted file]
UWP/FooEditEngine.UWP/Print/ComInterface.cs
UWP/FooEditEngine.UWP/Print/DocumentSource.cs
UWP/FooEditEngine.UWP/Print/PrintOptionBuilder.cs
UWP/Test/MainPage.xaml.cs

index bf75f2f..347d6d1 100644 (file)
   <ItemGroup>
     <Compile Include="Direct2D\D2DRender.cs" />
     <Compile Include="Direct2D\D2DRenderBase.cs" />
-    <Compile Include="FooPrintText.cs" />
     <Compile Include="FooTextBox.cs" />
     <Compile Include="Print\ComInterface.cs" />
     <Compile Include="Print\D2DPrintPreviewRender.cs" />
diff --git a/UWP/FooEditEngine.UWP/FooPrintText.cs b/UWP/FooEditEngine.UWP/FooPrintText.cs
deleted file mode 100644 (file)
index e3d2409..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2013 FooProject
- * * This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using FooEditEngine;
-using Windows.UI.Core;
-using Windows.Foundation;
-using Windows.Graphics.Printing;
-using Windows.Graphics.Printing.OptionDetails;
-
-namespace FooEditEngine.UWP
-{
-    /// <summary>
-    /// 印刷を行うクラス
-    /// </summary>
-    public class FooPrintText
-    {
-        /// <summary>
-        /// コンストラクター
-        /// </summary>
-        public FooPrintText()
-        {
-            this.PrintStart += (s, e) => { };
-            this.PrintComplete += (s, e) => { };
-            this.ParseHF = (s, e) => { return e.Original; };
-        }
-
-        DocumentSource source;
-        /// <summary>
-        /// ヘッダーやフッターを処理する
-        /// </summary>
-        public ParseCommandHandler ParseHF;
-
-        /// <summary>
-        /// ヘッダー
-        /// </summary>
-        public string Header;
-
-        /// <summary>
-        /// フッター
-        /// </summary>
-        public string Fotter;
-
-        /// <summary>
-        /// 余白
-        /// </summary>
-        public Padding Padding;
-
-        /// <summary>
-        /// 印刷が開始したことを表す
-        /// </summary>
-        public event EventHandler PrintStart;
-
-        /// <summary>
-        /// 印刷が完了したことを表す
-        /// </summary>
-        public event EventHandler PrintComplete;
-
-        /// <summary>
-        /// 印刷する
-        /// </summary>
-        /// <param name="req">PrintTaskRequestオブジェクト</param>
-        /// <param name="title">タイトル</param>
-        /// <param name="textbox">印刷対象のテキストボックス</param>
-        public void Print(PrintTaskRequest req,string title,FooTextBox textbox)
-        {
-            IAsyncAction async = textbox.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
-            {
-                this.PrintStart(this, null);
-                source = new DocumentSource(textbox,this.Padding);
-                source.ParseHF = ParseHF;
-                source.Header = Header;
-                source.Fotter = Fotter;
-
-                PrintTask task = null;
-                task = req.CreatePrintTask(title, (e) =>
-                {
-                    e.SetSource(source);
-                });
-                task.Completed += async (sender, e) => {
-                    source.Dispose();
-                    await textbox.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
-                        System.Diagnostics.Debug.WriteLine("finished printing");
-                        this.PrintComplete(this, null);
-                    });
-                };
-                PrintOptionBuilder<DocumentSource> builder = new PrintOptionBuilder<DocumentSource>(source);
-                builder.BuildPrintOption(PrintTaskOptionDetails.GetFromPrintTaskOptions(task.Options));
-            });
-            Task t = WindowsRuntimeSystemExtensions.AsTask(async);
-            t.Wait();
-        }
-    }
-}
index 8cef6c3..b3ad729 100644 (file)
@@ -22,7 +22,7 @@ namespace FooEditEngine
     [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
     [Guid("1b8efec4-3019-4c27-964e-367202156906")]
     [SecurityCritical]
-    interface IPrintDocumentPackageTarget
+    public interface IPrintDocumentPackageTarget
     {
         void GetPackageTargetTypes([Out] out UInt32 targetCount, [Out] out Guid targetTypes);
         void GetPackageTarget([In]ref Guid guidTargetType,[In]ref Guid riid,[Out] out IntPtr ppvTarget);
@@ -34,7 +34,7 @@ namespace FooEditEngine
     [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
     [Guid("0b31cc62-d7ec-4747-9d6e-f2537d870f2b")]
     [SecurityCritical]
-    interface IPrintPreviewPageCollection
+    public interface IPrintPreviewPageCollection
     {
         void Paginate(
             [In] UInt32 currentJobPage,
@@ -50,13 +50,13 @@ namespace FooEditEngine
     [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
     [Guid("a96bb1db-172e-4667-82b5-ad97a252318f")]
     [SecurityCritical]
-    interface IPrintDocumentPageSource
+    public interface IPrintDocumentPageSource
     {
         void GetPreviewPageCollection([In, MarshalAs(UnmanagedType.Interface)]IPrintDocumentPackageTarget docPackageTarget, [Out, MarshalAs(UnmanagedType.Interface)] out IPrintPreviewPageCollection docPageCollection);
         void MakeDocument([In, MarshalAs(UnmanagedType.Interface)] object printTaskOptions, [In, MarshalAs(UnmanagedType.Interface)]IPrintDocumentPackageTarget docPackageTarget);
     }
 
-    enum PageCountType
+    public enum PageCountType
     {
         FinalPageCount = 0,
         IntermediatePageCount  = 1 
@@ -66,7 +66,7 @@ namespace FooEditEngine
     [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
     [Guid("1a6dd0ad-1e2a-4e99-a5ba-91f17818290e")]  //IID_PREVIEWPACKAGETARGET_DXGIと同じ
     [SecurityCritical]
-    interface IPrintPreviewDxgiPackageTarget
+    public interface IPrintPreviewDxgiPackageTarget
     {
         void SetJobPageCount( 
             [In] PageCountType countType,
@@ -82,7 +82,7 @@ namespace FooEditEngine
         
     };
 
-    static class PreviewPackageIds
+    public static class PreviewPackageIds
     {
         public static string IID_PREVIEWPACKAGETARGET_DXGI = "1a6dd0ad-1e2a-4e99-a5ba-91f17818290e";
     }
index 9f6ce61..7610cd6 100644 (file)
@@ -15,7 +15,7 @@ using System.Runtime.InteropServices;
 using Windows.UI;
 using FooEditEngine.UWP;
 
-namespace FooEditEngine
+namespace FooEditEngine.UWP
 {
     /// <summary>
     /// イベントデータ
@@ -59,7 +59,8 @@ namespace FooEditEngine
 
     sealed class PrintableViewFactory
     {
-        Windows.UI.Color foreground, comment, keyword1, keyword2, literal, url;
+        public Windows.UI.Color foreground, comment, keyword1, keyword2, literal, url;
+
         string fontName;
         double fontSize;
         LineBreakMethod lineBreakMethod;
@@ -69,23 +70,18 @@ namespace FooEditEngine
         IHilighter hilighter;
         float displayDpi;
         Padding padding;
-        public PrintableViewFactory(FooTextBox textbox,Padding padding)
+
+        public PrintableViewFactory(Document doc, Padding padding, string FontName,double fontSize)
         {
-            this.foreground = textbox.Foreground;
-            this.comment = textbox.Comment;
-            this.keyword1 = textbox.Keyword1;
-            this.keyword2 = textbox.Keyword2;
-            this.literal = textbox.Literal;
-            this.url = textbox.URL;
-            this.fontName = textbox.FontFamily.Source;
-            this.fontSize = textbox.FontSize;
-            this.tabCount = textbox.TabChars;
-            this.document = textbox.Document;
-            this.lineBreakMethod = textbox.LineBreakMethod;
-            this.lineBreakCharCount = textbox.LineBreakCharCount;
-            this.drawLineNumber = textbox.DrawLineNumber;
-            this.urlMark = textbox.MarkURL;
-            this.hilighter = textbox.Hilighter;
+            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;
@@ -144,7 +140,10 @@ namespace FooEditEngine
         }
     }
 
-    sealed class DocumentSource : IPrintDocumentPageSource, IPrintPreviewPageCollection, IPrintDocumentSource,IPrintPreviewSource
+    /// <summary>
+    /// 印刷用ソース
+    /// </summary>
+    public sealed class DocumentSource : IPrintDocumentPageSource, IPrintPreviewPageCollection, IPrintDocumentSource,IPrintPreviewSource
     {
         IPrintPreviewDxgiPackageTarget dxgiPreviewTarget;
         bool paginateCalled = false;
@@ -158,19 +157,98 @@ namespace FooEditEngine
         public string Header = string.Empty;
         public string Fotter = string.Empty;
 
-        public DocumentSource(FooTextBox textbox,Padding padding)
+        /// <summary>
+        /// コンストラクター
+        /// </summary>
+        /// <param name="textbox"></param>
+        /// <param name="padding"></param>
+        /// <param name="fontName"></param>
+        /// <param name="fontSize"></param>
+        public DocumentSource(Document textbox,Padding padding, string fontName, double fontSize)
         {
-            this.factory = new PrintableViewFactory(textbox, padding);
+            this.factory = new PrintableViewFactory(textbox, padding, fontName, fontSize);
         }
 
-        internal enum SyntaxHilightApplibility
+        public enum SyntaxHilightApplibility
         {
             Apply,
             NoApply,
         }
 
+        public Windows.UI.Color Forground
+        {
+            get
+            {
+                return this.factory.foreground;
+            }
+            set
+            {
+                this.factory.foreground = value;
+            }
+        }
+
+        public Windows.UI.Color Comment
+        {
+            get
+            {
+                return this.factory.comment;
+            }
+            set
+            {
+                this.factory.comment = value;
+            }
+        }
+
+        public Windows.UI.Color Keyword1
+        {
+            get
+            {
+                return this.factory.keyword1;
+            }
+            set
+            {
+                this.factory.keyword1 = value;
+            }
+        }
+
+        public Windows.UI.Color Keyword2
+        {
+            get
+            {
+                return this.factory.keyword2;
+            }
+            set
+            {
+                this.factory.keyword2 = value;
+            }
+        }
+
+        public Windows.UI.Color Literal
+        {
+            get
+            {
+                return this.factory.literal;
+            }
+            set
+            {
+                this.factory.literal = value;
+            }
+        }
+
+        public Windows.UI.Color Url
+        {
+            get
+            {
+                return this.factory.url;
+            }
+            set
+            {
+                this.factory.url = value;
+            }
+        }
+
         [DisplayPrintOptionResourceID("SyntaxHilight")]
-        internal SyntaxHilightApplibility EnableHilight
+        public SyntaxHilightApplibility EnableHilight
         {
             get
             {
@@ -182,14 +260,14 @@ namespace FooEditEngine
             }
         }
 
-        internal enum LineNumberVisiblity
+        public enum LineNumberVisiblity
         {
             Visible,
             Hidden
         }
 
         [DisplayPrintOptionResourceID("ShowLineNumber")]
-        internal LineNumberVisiblity ShowLineNumber
+        public LineNumberVisiblity ShowLineNumber
         {
             get
             {
index 6b9a085..21b0bc7 100644 (file)
@@ -13,12 +13,12 @@ using Windows.Graphics.Printing.OptionDetails;
 using System.Reflection;
 using Windows.ApplicationModel.Resources.Core;
 
-namespace FooEditEngine
+namespace FooEditEngine.UWP
 {
     /// <summary>
     /// 表示に使用するリソースID
     /// </summary>
-    sealed class DisplayPrintOptionResourceIDAttribute : Attribute
+    public sealed class DisplayPrintOptionResourceIDAttribute : Attribute
     {
         public string ResourceID
         {
@@ -37,7 +37,7 @@ namespace FooEditEngine
     /// <summary>
     /// IPrintPreviewSourceインターフェイス
     /// </summary>
-    interface IPrintPreviewSource
+    public interface IPrintPreviewSource
     {
         /// <summary>
         /// 再描写する
@@ -53,7 +53,7 @@ namespace FooEditEngine
     /// </para>
     /// </summary>
     /// <typeparam name="T">IPrintPreviewSourceを継承したクラス</typeparam>
-    sealed class PrintOptionBuilder<T> where T : IPrintPreviewSource
+    public sealed class PrintOptionBuilder<T> where T : IPrintPreviewSource
     {
         T PrintDocument;
         /// <summary>
index 23d2918..14fe239 100644 (file)
@@ -1,11 +1,15 @@
 using System;
 using System.IO;
+using System.Threading.Tasks;
 using System.Runtime.InteropServices.WindowsRuntime;
+using Windows.Foundation;
+using Windows.UI.Core;
 using Windows.UI.Xaml;
 using Windows.UI.Xaml.Controls;
 using Windows.Storage;
 using Windows.Storage.Pickers;
 using Windows.Graphics.Printing;
+using Windows.Graphics.Printing.OptionDetails;
 using FooEditEngine.UWP;
 
 // 空白ページのアイテム テンプレートについては、http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 を参照してください
@@ -28,11 +32,35 @@ namespace Test
 
         void MainPage_PrintTaskRequested(PrintManager sender, PrintTaskRequestedEventArgs args)
         {
-            FooPrintText printtext = new FooPrintText();
-            printtext.Fotter = "fotter";
-            printtext.Header = "header";
-            printtext.Padding = new FooEditEngine.Padding(20, 20, 20, 20);
-            printtext.Print(args.Request, "Text Print", this.fooTextBox);
+            IAsyncAction async = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
+            {
+                var source = new DocumentSource(this.fooTextBox.Document, new FooEditEngine.Padding(20, 20, 20, 20), this.fooTextBox.FontFamily.Source, this.fooTextBox.FontSize);
+                source.ParseHF = (s,e)=> { return e.Original; };
+                source.Header = "header";
+                source.Fotter = "footer";
+                source.Forground = this.fooTextBox.Foreground;
+                source.Keyword1 = this.fooTextBox.Keyword1;
+                source.Keyword2 = this.fooTextBox.Keyword2;
+                source.Literal = this.fooTextBox.Literal;
+                source.Comment = this.fooTextBox.Comment;
+                source.Url = this.fooTextBox.URL;
+
+                PrintTask task = null;
+                task = args.Request.CreatePrintTask("test", (e) =>
+                {
+                    e.SetSource(source);
+                });
+                task.Completed += async (s, e) => {
+                    source.Dispose();
+                    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {
+                        System.Diagnostics.Debug.WriteLine("finished printing");
+                    });
+                };
+                PrintOptionBuilder<DocumentSource> builder = new PrintOptionBuilder<DocumentSource>(source);
+                builder.BuildPrintOption(PrintTaskOptionDetails.GetFromPrintTaskOptions(task.Options));
+            });
+            Task t = WindowsRuntimeSystemExtensions.AsTask(async);
+            t.Wait();
         }
 
         private async void Button_Click(object sender, RoutedEventArgs e)