OSDN Git Service

一部クラスにsealedを付けた
[fooeditengine/FooEditEngine.git] / Metro / FooEditEngine / Print / D2DPrintRender.cs
1 /*
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.
5
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.
8
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/>.
10  */
11 using System;
12 using System.Collections.Generic;
13 using Windows.Graphics.Display;
14 using Windows.UI.Xaml.Media;
15 using Windows.UI.Xaml.Media.Imaging;
16 using SharpDX;
17 using SharpDX.WIC;
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;
26
27 namespace FooEditEngine
28 {
29     sealed class D2DPrintRender : D2DRenderBase, ITextRender, IPrintableTextRender
30     {
31         D2D.Device D2DDevice;
32         D2D.DeviceContext D2DContext;
33         D2D.PrintControl Control;
34         D2D.CommandList CommandList;
35         Size2F Size;
36         ImagingFactory WICFactory = new ImagingFactory();
37         int dpi;
38
39         public D2DPrintRender(string fontName,double fontSize, Size size, uint dpi, IPrintDocumentPackageTarget docPackageTarget)
40             : base()
41         {
42             base.ConstructDeviceResource(size.Width, size.Height);
43             base.InitTextFormat(fontName, (float)fontSize);
44
45             this.CreateSurface(size,dpi,docPackageTarget);
46         }
47
48         public override void GetDpi(out float dpix, out float dpiy)
49         {
50             dpix = this.dpi;
51             dpiy = this.dpi;
52         }
53
54         public override void BegineDraw()
55         {
56             this.CommandList = new D2D.CommandList(this.D2DContext);
57             this.D2DContext.Target = this.CommandList;
58             base.BegineDraw();
59         }
60
61         public override void EndDraw()
62         {
63             base.EndDraw();
64             this.CommandList.Close();
65             this.Control.AddPage(this.CommandList, this.Size);
66             this.CommandList.Dispose();
67         }
68
69         void CreateSurface(Size size, uint dpi, IPrintDocumentPackageTarget docPackageTarget)
70         {
71             D2D.PrintControlProperties printControlProperties = new D2D.PrintControlProperties();
72             printControlProperties.RasterDPI = dpi;
73             printControlProperties.ColorSpace = D2D.ColorSpace.SRgb;
74             printControlProperties.FontSubset = D2D.PrintFontSubsetMode.Default;
75
76             this.Control = new D2D.PrintControl(this.D2DDevice, this.WICFactory, new ComObject(docPackageTarget), printControlProperties);
77
78             this.Size = new Size2F((float)size.Width, (float)size.Height);
79
80             this.dpi = (int)dpi;
81         }
82
83         protected override D2D.RenderTarget ConstructRender(D2D.Factory1 factory, D2D.RenderTargetProperties prop, double width, double height)
84         {
85             this.D2DDevice = new D2D.Device(factory,this.DXGIDevice);
86             this.D2DContext = new D2D.DeviceContext(this.D2DDevice, D2D.DeviceContextOptions.None);
87             return this.D2DContext;
88         }
89
90         protected override void ConstrctedResource()
91         {
92         }
93
94         protected override void DestructRender()
95         {
96             if (this.Control != null)
97             {
98                 this.Control.Close();
99                 this.Control.Dispose();
100             }
101             if (this.WICFactory != null)
102                 this.WICFactory.Dispose();
103             if (this.D2DDevice != null)
104                 this.D2DDevice.Dispose();
105             if (this.D2DContext != null)
106                 this.D2DContext.Dispose();
107         }
108
109         protected override void ReCreateTarget()
110         {
111         }
112
113         public float HeaderHeight
114         {
115             get { return (float)this.emSize.Height; }
116         }
117
118         public float FooterHeight
119         {
120             get { return (float)this.emSize.Height; }
121         }
122     }
123 }