SHOW:
|
|
- or go back to the newest paste.
1 | using System; | |
2 | using System.Collections.Generic; | |
3 | using System.Linq; | |
4 | using System.Text; | |
5 | using System.Threading.Tasks; | |
6 | using SharpDX; | |
7 | using SharpDX.Direct2D1; | |
8 | using SharpDX.DirectWrite; | |
9 | ||
10 | namespace NovelReader.DirectX | |
11 | { | |
12 | public class TextRenderer : Component | |
13 | { | |
14 | DeviceManager deviceManager; | |
15 | Brush sceneColorBrush; | |
16 | TextFormat textFormat; | |
17 | RectangleF drawRect; | |
18 | ResourceFontLoader customFontLoader; | |
19 | FontCollection fontCollection; | |
20 | RenderingParams renderingParams; | |
21 | ||
22 | public TextFormat TextFormat | |
23 | { | |
24 | get { return this.textFormat; } | |
25 | } | |
26 | ||
27 | public TextRenderer(int width, int height) | |
28 | { | |
29 | this.drawRect = new RectangleF(0, 0, width, height); | |
30 | } | |
31 | ||
32 | public virtual void Initialize(DeviceManager deviceManager) | |
33 | { | |
34 | this.deviceManager = deviceManager; | |
35 | this.sceneColorBrush = new SolidColorBrush(deviceManager.ContextDirect2D, Color.Black); | |
36 | ||
37 | this.customFontLoader = new ResourceFontLoader(deviceManager.FactoryDirectWrite); | |
38 | this.fontCollection = new FontCollection(deviceManager.FactoryDirectWrite, this.customFontLoader, this.customFontLoader.Key); | |
39 | ||
40 | this.renderingParams = new RenderingParams(deviceManager.FactoryDirectWrite, | |
41 | 1.8f, 1.5f, 0.0f, PixelGeometry.Bgr, RenderingMode.CleartypeNatural); | |
42 | ||
43 | // IPA Pææ | |
44 | //this.textFormat = new TextFormat(deviceManager.FactoryDirectWrite, "IPA Pææ", this.fontCollection, FontWeight.Normal, FontStyle.Normal, FontStretch.Normal, 20); | |
45 | this.textFormat = new TextFormat(deviceManager.FactoryDirectWrite, "Arial", 15); | |
46 | this.textFormat.TextAlignment = TextAlignment.Center; | |
47 | ||
48 | } | |
49 | ||
50 | public virtual void Render(TargetBase target) | |
51 | { | |
52 | DeviceContext context2D = target.DeviceManager.ContextDirect2D; | |
53 | ||
54 | context2D.BeginDraw(); | |
55 | ||
56 | context2D.TextAntialiasMode = TextAntialiasMode.Cleartype; | |
57 | context2D.AntialiasMode = AntialiasMode.PerPrimitive; | |
58 | ||
59 | - | context2D.TextRenderingParams = this.renderingParams; |
59 | + | //context2D.TextRenderingParams = this.renderingParams; |
60 | ||
61 | context2D.Clear(Color.White); | |
62 | ||
63 | DrawText(context2D, "This is test string for vertical.", 15, 15, 10, 5); | |
64 | ||
65 | context2D.EndDraw(); | |
66 | } | |
67 | ||
68 | void DrawText(DeviceContext context2D, string text, int cWidth, int cHeight, int lineLength, int lineMax) | |
69 | { | |
70 | RectangleF cRect = new RectangleF(0, 0, cWidth, cHeight); | |
71 | int index = 0; | |
72 | int line = 0; | |
73 | ||
74 | foreach (char c in text) | |
75 | { | |
76 | if (index > lineLength) | |
77 | { | |
78 | line++; | |
79 | index = 0; | |
80 | } | |
81 | ||
82 | if (line >= lineMax) | |
83 | { | |
84 | break; | |
85 | } | |
86 | cRect.Top = cHeight * index; | |
87 | cRect.Left = cWidth * line; | |
88 | ||
89 | cRect.Right = cRect.Left + cWidth; | |
90 | cRect.Bottom = cRect.Top + cHeight; | |
91 | ||
92 | context2D.DrawText(c.ToString(), this.textFormat, cRect, this.sceneColorBrush); | |
93 | ||
94 | index++; | |
95 | } | |
96 | ||
97 | } | |
98 | } | |
99 | } |