You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.\r
*/\r
using System;\r
+using Windows.Graphics.Display;\r
using Windows.Graphics.Printing;\r
using System.Runtime.InteropServices;\r
using Windows.UI;\r
/// <returns>処理後の文字列</returns>\r
public delegate string ParseCommandHandler(object sender, ParseCommandEventArgs e);\r
\r
+\r
sealed class PrintableViewFactory\r
{\r
Windows.UI.Color foreground, comment, keyword1, keyword2, literal, url;\r
string fontName;\r
double fontSize;\r
- Document document;\r
LineBreakMethod lineBreakMethod;\r
int lineBreakCharCount, tabCount;\r
- bool drawLineNumber, urlMark;\r
+ Document document;\r
+ bool urlMark;\r
IHilighter hilighter;\r
- public PrintableViewFactory(FooTextBox textbox)\r
+ float displayDpi;\r
+ Padding padding;\r
+ public PrintableViewFactory(FooTextBox textbox,Padding padding)\r
{\r
this.foreground = textbox.Foreground;\r
this.comment = textbox.Comment;\r
this.fontName = textbox.FontFamily.Source;\r
this.fontSize = textbox.FontSize;\r
this.tabCount = textbox.TabChars;\r
- this.document = new Document(textbox.Document);\r
+ this.document = textbox.Document;\r
this.lineBreakMethod = textbox.LineBreakMethod;\r
this.lineBreakCharCount = textbox.LineBreakCharCount;\r
this.drawLineNumber = textbox.DrawLineNumber;\r
this.urlMark = textbox.MarkURL;\r
this.hilighter = textbox.Hilighter;\r
+ this.displayDpi = DisplayInformation.GetForCurrentView().LogicalDpi;\r
+ this.padding = padding;\r
+ this.EnableHilight = true;\r
}\r
- public D2DRenderBase CreateRender(PrintPageDescription pagedesc, IPrintDocumentPackageTarget docPackageTarget)\r
+ public D2DPrintRender CreateRender(PrintPageDescription pagedesc, IPrintDocumentPackageTarget docPackageTarget)\r
{\r
- D2DRenderBase render;\r
+ D2DPrintRender render;\r
Size size = new Size(pagedesc.ImageableRect.Width, pagedesc.ImageableRect.Height);\r
render = new D2DPrintRender(this.fontName, this.fontSize, size, Math.Min(pagedesc.DpiX, pagedesc.DpiY), docPackageTarget);\r
- render.Foreground = this.foreground;\r
- render.Comment = this.comment;\r
- render.Keyword1 = this.keyword1;\r
- render.Keyword2 = this.keyword2;\r
- render.Literal = this.literal;\r
- render.Url = this.url;\r
+ render.Foreground = D2DRenderBase.ToColor4(this.foreground);\r
+ render.Comment = D2DRenderBase.ToColor4(this.comment);\r
+ render.Keyword1 = D2DRenderBase.ToColor4(this.keyword1);\r
+ render.Keyword2 = D2DRenderBase.ToColor4(this.keyword2);\r
+ render.Literal = D2DRenderBase.ToColor4(this.literal);\r
+ render.Url = D2DRenderBase.ToColor4(this.url);\r
return render;\r
}\r
public D2DPrintPreviewRender CreateRender(PrintPageDescription pagedesc)\r
{\r
D2DPrintPreviewRender render;\r
Size size = new Size(pagedesc.ImageableRect.Width, pagedesc.ImageableRect.Height);\r
- render = new D2DPrintPreviewRender(this.fontName, this.fontSize, size);\r
- render.Foreground = this.foreground;\r
- render.Comment = this.comment;\r
- render.Keyword1 = this.keyword1;\r
- render.Keyword2 = this.keyword2;\r
- render.Literal = this.literal;\r
- render.Url = this.url;\r
+ render = new D2DPrintPreviewRender(this.fontName, this.fontSize, size, this.displayDpi);\r
+ render.Foreground = D2DRenderBase.ToColor4(this.foreground);\r
+ render.Comment = D2DRenderBase.ToColor4(this.comment);\r
+ render.Keyword1 = D2DRenderBase.ToColor4(this.keyword1);\r
+ render.Keyword2 = D2DRenderBase.ToColor4(this.keyword2);\r
+ render.Literal = D2DRenderBase.ToColor4(this.literal);\r
+ render.Url = D2DRenderBase.ToColor4(this.url);\r
return render;\r
}\r
- public PrintableView CreateView(PrintPageDescription pagedesc, D2DRenderBase render, string header, string footer)\r
+ public PrintableView CreateView(PrintPageDescription pagedesc, IPrintableTextRender render, string header, string footer)\r
{\r
- PrintableView view = new PrintableView(this.document, (IPrintableTextRender)render);\r
+ Document documentSnap = new Document(this.document);\r
+ documentSnap.LayoutLines.Render = render;\r
+ PrintableView view = new PrintableView(documentSnap, render,padding);\r
view.TabStops = this.tabCount;\r
view.LineBreak = this.lineBreakMethod == LineBreakMethod.None ? LineBreakMethod.PageBound : this.lineBreakMethod;\r
view.LineBreakCharCount = this.lineBreakCharCount;\r
view.Footer = footer;\r
view.UrlMark = this.urlMark;\r
view.PageBound = new Rectangle(pagedesc.ImageableRect.X, pagedesc.ImageableRect.Y, pagedesc.ImageableRect.Width, pagedesc.ImageableRect.Height);\r
- view.Hilighter = this.hilighter;\r
+ view.Hilighter = this.EnableHilight ? this.hilighter : null;\r
view.PerfomLayouts();\r
\r
return view;\r
}\r
+\r
+ public bool drawLineNumber\r
+ {\r
+ get;\r
+ set;\r
+ }\r
+\r
+ public bool EnableHilight\r
+ {\r
+ get;\r
+ set;\r
+ }\r
}\r
\r
- sealed class DocumentSource : IPrintDocumentPageSource, IPrintPreviewPageCollection, IPrintDocumentSource\r
+ sealed class DocumentSource : IPrintDocumentPageSource, IPrintPreviewPageCollection, IPrintDocumentSource,IPrintPreviewSource\r
{\r
IPrintPreviewDxgiPackageTarget dxgiPreviewTarget;\r
bool paginateCalled = false;\r
PrintableViewFactory factory;\r
D2DPrintPreviewRender previewRender;\r
PrintableView previewView;\r
+ int maxPreviePageCount;\r
\r
public ParseCommandHandler ParseHF;\r
public string Header = string.Empty;\r
public string Fotter = string.Empty;\r
\r
- public DocumentSource(FooTextBox textbox)\r
+ public DocumentSource(FooTextBox textbox,Padding padding)\r
{\r
- this.factory = new PrintableViewFactory(textbox);\r
- this.ParseHF = (s, e) => { return e.Original; };\r
+ this.factory = new PrintableViewFactory(textbox, padding);\r
}\r
\r
- public void GetPreviewPageCollection(IPrintDocumentPackageTarget docPackageTarget,out IPrintPreviewPageCollection docPageCollection)\r
+ internal enum SyntaxHilightApplibility\r
+ {\r
+ Apply,\r
+ NoApply,\r
+ }\r
+\r
+ [DisplayPrintOptionResourceID("SyntaxHilight")]\r
+ internal SyntaxHilightApplibility EnableHilight\r
+ {\r
+ get\r
+ {\r
+ return this.factory.EnableHilight ? SyntaxHilightApplibility.Apply : SyntaxHilightApplibility.NoApply;\r
+ }\r
+ set\r
+ {\r
+ this.factory.EnableHilight = value == SyntaxHilightApplibility.Apply;\r
+ }\r
+ }\r
+\r
+ internal enum LineNumberVisiblity\r
+ {\r
+ Visible,\r
+ Hidden\r
+ }\r
+\r
+ [DisplayPrintOptionResourceID("ShowLineNumber")]\r
+ internal LineNumberVisiblity ShowLineNumber\r
+ {\r
+ get\r
+ {\r
+ return this.factory.drawLineNumber ? LineNumberVisiblity.Visible : LineNumberVisiblity.Hidden;\r
+ }\r
+ set\r
+ {\r
+ this.factory.drawLineNumber = value == LineNumberVisiblity.Visible;\r
+ }\r
+ }\r
+\r
+ public void GetPreviewPageCollection(IPrintDocumentPackageTarget docPackageTarget, out IPrintPreviewPageCollection docPageCollection)\r
{\r
Guid guid = new Guid(PreviewPackageIds.IID_PREVIEWPACKAGETARGET_DXGI);\r
IntPtr target;\r
PrintTaskOptions options = (PrintTaskOptions)printTaskOptions;\r
PrintPageDescription pagedesc = options.GetPageDescription(1);\r
\r
- D2DRenderBase render = this.factory.CreateRender(pagedesc, docPackageTarget);\r
+ D2DPrintRender render = this.factory.CreateRender(pagedesc, docPackageTarget);\r
PrintableView view = this.factory.CreateView(pagedesc, render, this.Header, this.Fotter);\r
\r
bool result = false;\r
while (!result)\r
{\r
if(!string.IsNullOrEmpty(this.Header))\r
- view.Header = this.ParseHF(this, new ParseCommandEventArgs(currentPage, -1, this.Header));\r
+ view.Header = this.ParseHF(this, new ParseCommandEventArgs(currentPage, this.maxPreviePageCount, this.Header));\r
if (!string.IsNullOrEmpty(this.Fotter))\r
- view.Footer = this.ParseHF(this, new ParseCommandEventArgs(currentPage, -1, this.Fotter));\r
+ view.Footer = this.ParseHF(this, new ParseCommandEventArgs(currentPage, this.maxPreviePageCount, this.Fotter));\r
\r
- render.BeginDraw();\r
+ render.BegineDraw();\r
view.Draw(view.PageBound);\r
render.EndDraw();\r
result = view.TryPageDown();\r
\r
this.dxgiPreviewTarget.InvalidatePreview();\r
\r
+ this.maxPreviePageCount = maxPage;\r
+\r
this.paginateCalled = true;\r
}\r
\r
+ public void InvalidatePreview()\r
+ {\r
+ this.dxgiPreviewTarget.InvalidatePreview();\r
+ }\r
+\r
public void MakePage(uint desiredJobPage, float width, float height)\r
{\r
if (width <= 0 || height <= 0)\r
for (int i = 1; i < desiredJobPage; i++)\r
this.previewView.TryPageDown();\r
\r
+ if (!string.IsNullOrEmpty(this.Header))\r
+ this.previewView.Header = this.ParseHF(this, new ParseCommandEventArgs((int)desiredJobPage, this.maxPreviePageCount, this.Header));\r
+ if (!string.IsNullOrEmpty(this.Fotter))\r
+ this.previewView.Footer = this.ParseHF(this, new ParseCommandEventArgs((int)desiredJobPage, this.maxPreviePageCount, this.Fotter));\r
+\r
this.previewRender.Resize(width, height);\r
this.previewRender.SetScale((float)(this.previewView.PageBound.Width / width)); //BeginDraw()で倍率が1に戻る\r
\r
- this.previewRender.BeginDraw();\r
+ this.previewRender.BegineDraw();\r
this.previewView.Draw(this.previewView.PageBound);\r
this.previewRender.EndDraw(this.dxgiPreviewTarget,desiredJobPage);\r
}\r