<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" />
+++ /dev/null
-/*
- * 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();
- }
- }
-}
[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);
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("0b31cc62-d7ec-4747-9d6e-f2537d870f2b")]
[SecurityCritical]
- interface IPrintPreviewPageCollection
+ public interface IPrintPreviewPageCollection
{
void Paginate(
[In] UInt32 currentJobPage,
[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
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("1a6dd0ad-1e2a-4e99-a5ba-91f17818290e")] //IID_PREVIEWPACKAGETARGET_DXGIと同じ
[SecurityCritical]
- interface IPrintPreviewDxgiPackageTarget
+ public interface IPrintPreviewDxgiPackageTarget
{
void SetJobPageCount(
[In] PageCountType countType,
};
- static class PreviewPackageIds
+ public static class PreviewPackageIds
{
public static string IID_PREVIEWPACKAGETARGET_DXGI = "1a6dd0ad-1e2a-4e99-a5ba-91f17818290e";
}
using Windows.UI;
using FooEditEngine.UWP;
-namespace FooEditEngine
+namespace FooEditEngine.UWP
{
/// <summary>
/// イベントデータ
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;
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;
}
}
- sealed class DocumentSource : IPrintDocumentPageSource, IPrintPreviewPageCollection, IPrintDocumentSource,IPrintPreviewSource
+ /// <summary>
+ /// 印刷用ソース
+ /// </summary>
+ public sealed class DocumentSource : IPrintDocumentPageSource, IPrintPreviewPageCollection, IPrintDocumentSource,IPrintPreviewSource
{
IPrintPreviewDxgiPackageTarget dxgiPreviewTarget;
bool paginateCalled = false;
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
{
}
}
- internal enum LineNumberVisiblity
+ public enum LineNumberVisiblity
{
Visible,
Hidden
}
[DisplayPrintOptionResourceID("ShowLineNumber")]
- internal LineNumberVisiblity ShowLineNumber
+ public LineNumberVisiblity ShowLineNumber
{
get
{
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
{
/// <summary>
/// IPrintPreviewSourceインターフェイス
/// </summary>
- interface IPrintPreviewSource
+ public interface IPrintPreviewSource
{
/// <summary>
/// 再描写する
/// </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>
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 を参照してください
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)