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 }