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;
- int lineBreakCharCount, tabCount;
- Document document;
- bool urlMark;
- IHilighter hilighter;
float displayDpi;
Padding padding;
- public PrintableViewFactory(FooTextBox textbox,Padding padding)
+
+ public PrintableViewFactory(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.displayDpi = DisplayInformation.GetForCurrentView().LogicalDpi;
this.padding = padding;
- this.EnableHilight = true;
}
public D2DPrintRender CreateRender(PrintPageDescription pagedesc, IPrintDocumentPackageTarget docPackageTarget)
{
render.Url = D2DRenderBase.ToColor4(this.url);
return render;
}
+
public D2DPrintPreviewRender CreateRender(PrintPageDescription pagedesc)
{
D2DPrintPreviewRender render;
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;
- }
}
- sealed class DocumentSource : IPrintDocumentPageSource, IPrintPreviewPageCollection, IPrintDocumentSource,IPrintPreviewSource
+ /// <summary>
+ /// 印刷用ソース
+ /// </summary>
+ public sealed class DocumentSource : IPrintDocumentPageSource, IPrintPreviewPageCollection, IPrintDocumentSource,IPrintPreviewSource
{
IPrintPreviewDxgiPackageTarget dxgiPreviewTarget;
bool paginateCalled = false;
D2DPrintPreviewRender previewRender;
PrintableView previewView;
int maxPreviePageCount;
+ Document doc;
+ IHilighter hilighter;
public ParseCommandHandler ParseHF;
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 doc,Padding padding, string fontName, double fontSize)
{
- this.factory = new PrintableViewFactory(textbox, padding);
+ this.factory = new PrintableViewFactory(padding, fontName, fontSize);
+ this.doc = new Document(doc);
+ this.hilighter = doc.LayoutLines.Hilighter;
}
- internal enum SyntaxHilightApplibility
+ public enum SyntaxHilightApplibility
{
Apply,
NoApply,
}
- [DisplayPrintOptionResourceID("SyntaxHilight")]
- internal SyntaxHilightApplibility EnableHilight
+ public Windows.UI.Color Forground
{
get
{
- return this.factory.EnableHilight ? SyntaxHilightApplibility.Apply : SyntaxHilightApplibility.NoApply;
+ return this.factory.foreground;
}
set
{
- this.factory.EnableHilight = value == SyntaxHilightApplibility.Apply;
+ this.factory.foreground = value;
}
}
- internal enum LineNumberVisiblity
+ public Windows.UI.Color Comment
{
- Visible,
- Hidden
+ get
+ {
+ return this.factory.comment;
+ }
+ set
+ {
+ this.factory.comment = value;
+ }
}
- [DisplayPrintOptionResourceID("ShowLineNumber")]
- internal LineNumberVisiblity ShowLineNumber
+ public Windows.UI.Color Keyword1
+ {
+ get
+ {
+ return this.factory.keyword1;
+ }
+ set
+ {
+ this.factory.keyword1 = value;
+ }
+ }
+
+ public Windows.UI.Color Keyword2
{
get
{
- return this.factory.drawLineNumber ? LineNumberVisiblity.Visible : LineNumberVisiblity.Hidden;
+ return this.factory.keyword2;
}
set
{
- this.factory.drawLineNumber = value == LineNumberVisiblity.Visible;
+ 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;
+ }
+ }
+
+ public LineBreakMethod LineBreak
+ {
+ get;
+ set;
+ }
+
+ public int LineBreakCount
+ {
+ get;
+ set;
+ }
+
+ [DisplayPrintOptionResourceID("SyntaxHilight")]
+ public SyntaxHilightApplibility EnableHilight
+ {
+ get;
+ set;
+ }
+
+ public enum LineNumberVisiblity
+ {
+ Visible,
+ Hidden
+ }
+
+ [DisplayPrintOptionResourceID("ShowLineNumber")]
+ public LineNumberVisiblity ShowLineNumber
+ {
+ get;
+ set;
+ }
+
public void GetPreviewPageCollection(IPrintDocumentPackageTarget docPackageTarget, out IPrintPreviewPageCollection docPageCollection)
{
Guid guid = new Guid(PreviewPackageIds.IID_PREVIEWPACKAGETARGET_DXGI);
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);
+ this.doc.LineBreak = this.LineBreak;
+ this.doc.LineBreakCharCount = this.LineBreakCount;
bool result = false;
int currentPage = 0;
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);
+ this.doc.LineBreak = this.LineBreak;
+ this.doc.LineBreakCharCount = this.LineBreakCount;
int maxPage = 1;
while (!this.previewView.TryPageDown())
this.previewView.Dispose();
if (this.previewRender != null)
this.previewRender.Dispose();
+ if (this.doc != null)
+ this.doc.Dispose();
+ Marshal.ReleaseComObject(this.dxgiPreviewTarget);
}
}
}