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)
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);
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()
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)
{
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;
- }
}
/// <summary>
D2DPrintPreviewRender previewRender;
PrintableView previewView;
int maxPreviePageCount;
+ Document doc;
+ IHilighter hilighter;
public ParseCommandHandler ParseHF;
public string Header = string.Empty;
/// <param name="padding"></param>
/// <param name="fontName"></param>
/// <param name="fontSize"></param>
- 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
[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
[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)
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;
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())
this.previewView.Dispose();
if (this.previewRender != null)
this.previewRender.Dispose();
+ if (this.doc != null)
+ this.doc.Dispose();
+ Marshal.ReleaseComObject(this.dxgiPreviewTarget);
}
}
}