2 * Copyright (C) 2013 FooProject
3 * * 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
4 * the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
6 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
7 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
9 You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
12 using System.Collections.Generic;
13 using Windows.Graphics.Display;
14 using Windows.UI.Xaml.Media;
15 using Windows.UI.Xaml.Media.Imaging;
18 using DXGI = SharpDX.DXGI;
19 using D2D = SharpDX.Direct2D1;
20 using D3D = SharpDX.Direct3D;
21 using D3D11 = SharpDX.Direct3D11;
22 using FooEditEngine.Metro;
23 using DotNetTextStore;
24 using DotNetTextStore.UnmanagedAPI.TSF;
25 using DotNetTextStore.UnmanagedAPI.WinDef;
27 namespace FooEditEngine
29 class D2DPrintRender : D2DRenderBase,ITextRender,IPrintableTextRender
32 D2D.DeviceContext D2DContext;
33 D2D.PrintControl Control;
34 D2D.CommandList CommandList;
36 ImagingFactory WICFactory = new ImagingFactory();
39 public D2DPrintRender(string fontName,double fontSize, Size size, uint dpi, IPrintDocumentPackageTarget docPackageTarget)
42 base.ConstructRender = this.ConstructRenderHandler;
43 base.ConstrctedResource = this.ConstructedResourceHandler;
44 base.DestructRender = this.DestructRenderHandler;
45 base.ReCreateTarget = this.ReCreateTargetHandler;
46 base.GetDpi = this.GetDpi;
47 base.ConstructDeviceResource(size.Width, size.Height);
48 base.InitTextFormat(fontName, (float)fontSize);
50 this.CreateSurface(size,dpi,docPackageTarget);
53 new void GetDpi(out float dpix, out float dpiy)
59 public override void BeginDraw()
61 this.CommandList = new D2D.CommandList(this.D2DContext);
62 this.D2DContext.Target = this.CommandList;
66 public override void EndDraw()
69 this.CommandList.Close();
70 this.Control.AddPage(this.CommandList, this.Size);
71 this.CommandList.Dispose();
74 void CreateSurface(Size size, uint dpi, IPrintDocumentPackageTarget docPackageTarget)
76 D2D.PrintControlProperties printControlProperties = new D2D.PrintControlProperties();
77 printControlProperties.RasterDPI = dpi;
78 printControlProperties.ColorSpace = D2D.ColorSpace.SRgb;
79 printControlProperties.FontSubset = D2D.PrintFontSubsetMode.Default;
81 this.Control = new D2D.PrintControl(this.D2DDevice, this.WICFactory, new ComObject(docPackageTarget), printControlProperties);
83 this.Size = new Size2F((float)size.Width, (float)size.Height);
88 D2D.RenderTarget ConstructRenderHandler(D2D.Factory1 factory, D2D.RenderTargetProperties prop, double width, double height)
90 this.D2DDevice = new D2D.Device(factory,this.DXGIDevice);
91 this.D2DContext = new D2D.DeviceContext(this.D2DDevice, D2D.DeviceContextOptions.None);
92 return this.D2DContext;
95 void ConstructedResourceHandler()
99 void DestructRenderHandler()
101 if (this.Control != null)
103 this.Control.Close();
104 this.Control.Dispose();
106 if (this.WICFactory != null)
107 this.WICFactory.Dispose();
108 if (this.D2DDevice != null)
109 this.D2DDevice.Dispose();
110 if (this.D2DContext != null)
111 this.D2DContext.Dispose();
114 void ReCreateTargetHandler()
118 public float HeaderHeight
120 get { return (float)this.emSize.Height; }
123 public float FooterHeight
125 get { return (float)this.emSize.Height; }