1 ///
2 module fluid.separator;
3 
4 import fluid.node;
5 import fluid.utils;
6 import fluid.backend;
7 import fluid.structs;
8 
9 import fluid.io.canvas;
10 
11 @safe:
12 
13 
14 /// A separator node creates a line, used to separate unrelated parts of content.
15 enum vseparator = NodeBuilder!(Separator, (a) {
16 
17     a.isHorizontal = false;
18     a.layout = .layout!("center", "fill");
19 
20 }).init;
21 
22 /// ditto
23 enum hseparator = NodeBuilder!(Separator, (a) {
24 
25     a.isHorizontal = true;
26     a.layout = .layout!("fill", "center");
27 
28 }).init;
29 
30 /// ditto
31 class Separator : Node {
32 
33     CanvasIO canvasIO;
34 
35     public {
36 
37         bool isHorizontal;
38 
39     }
40 
41     override void resizeImpl(Vector2) {
42 
43         use(canvasIO);
44         minSize = Vector2(1, 1);
45 
46     }
47 
48     override void drawImpl(Rectangle outer, Rectangle inner) {
49 
50         auto style = pickStyle();
51 
52         style.drawBackground(io, canvasIO, outer);
53 
54         if (isHorizontal) {
55 
56             auto start = Vector2(start(inner).x, center(inner).y);
57             auto end = Vector2(end(inner).x, center(inner).y);
58 
59             style.drawLine(io, canvasIO, start, end);
60 
61         }
62 
63         else {
64 
65             auto start = Vector2(center(inner).x, start(inner).y);
66             auto end = Vector2(center(inner).x, end(inner).y);
67 
68             style.drawLine(io, canvasIO, start, end);
69 
70         }
71 
72     }
73 
74 }