1 /**
2 Copyright: Copyright (c) 2013-2014 Andrey Penechko.
3 License: a$(WEB boost.org/LICENSE_1_0.txt, Boost License 1.0).
4 Authors: Andrey Penechko.
5 */
6
7 module anchovy.gui.interfaces.iguirenderer;
8
9 import anchovy.graphics.texture;
10
11 public import anchovy.graphics.interfaces.irenderer;
12
13 import anchovy.gui;
14
15 enum HoriAlignment
16 {
17 NONE = 1<<0,
18 LEFT = 1<<1,
19 CENTER = 1<<2,
20 RIGHT = 1<<3,
21 }
22
23 enum VertAlignment
24 {
25 NONE = 1<<4,
26 TOP = 1<<5,
27 CENTER = 1<<6,
28 BOTTOM = 1<<7,
29 }
30
31 enum AlignmentType
32 {
33 NONE_NONE = HoriAlignment.NONE | VertAlignment.NONE,
34 NONE_TOP = HoriAlignment.NONE | VertAlignment.TOP,
35 NONE_CENTER = HoriAlignment.NONE | VertAlignment.CENTER,
36 NONE_BOTTOM = HoriAlignment.NONE | VertAlignment.BOTTOM,
37
38 LEFT_NONE = HoriAlignment.LEFT | VertAlignment.NONE,
39 LEFT_TOP = HoriAlignment.LEFT | VertAlignment.TOP,
40 LEFT_CENTER = HoriAlignment.LEFT | VertAlignment.CENTER,
41 LEFT_BOTTOM = HoriAlignment.LEFT | VertAlignment.BOTTOM,
42
43 CENTER_NONE = HoriAlignment.CENTER | VertAlignment.NONE,
44 CENTER_TOP = HoriAlignment.CENTER | VertAlignment.TOP,
45 CENTER_CENTER = HoriAlignment.CENTER | VertAlignment.CENTER,
46 CENTER_BOTTOM = HoriAlignment.CENTER | VertAlignment.BOTTOM,
47
48 RIGHT_NONE = HoriAlignment.RIGHT | VertAlignment.NONE,
49 RIGHT_TOP = HoriAlignment.RIGHT | VertAlignment.TOP,
50 RIGHT_CENTER = HoriAlignment.RIGHT | VertAlignment.CENTER,
51 RIGHT_BOTTOM = HoriAlignment.RIGHT | VertAlignment.BOTTOM,
52 }
53
54 interface IGuiRenderer
55 {
56 Texture getFontTexture();
57 ref FontManager fontManager() @property;
58 TextLine createTextLine(string fontName = "normal");
59
60 void drawControlBack(Widget widget, Rect staticRect);
61
62 /// draws text line with alignment specified relative to point
63 void drawTextLine(TextLine line, ivec2 position, in AlignmentType alignment);
64
65 /// draws text line with alignment specified relative to rectangle
66 void drawTextLine(TextLine line, in Rect area, in AlignmentType alignment);
67 void pushClientArea(Rect area);
68 void popClientArea();
69 void setClientArea(Rect area);
70 IRenderer renderer() @property;
71 }