1 module rpui.basic_rpdl_exts;
2 
3 import rpui.primitives;
4 import rpdl.accessors;
5 import rpdl.exception;
6 import rpdl.node;
7 
8 Rect getRect(Node node, in string path) {
9     return Rect(node.getVec4f(path));
10 }
11 
12 Rect optRect(Node node, in string path, in Rect defaultVal = Rect.init) {
13     try {
14         return node.getRect(path);
15     } catch (NotFoundException) {
16         return defaultVal;
17     }
18 }
19 
20 FrameRect getFrameRect(Node accessorNode, in string path) {
21     Node node = accessorNode.getNode(path);
22 
23     if (node is null) {
24         throw new NotFoundException("Node with path \"" ~ path ~ "\" not found");
25     }
26 
27     if (node.length == 1) {
28         const float val = accessorNode.getNumber(path ~ ".0");
29         return FrameRect(val, val, val, val);
30     }
31 
32     if (node.length == 2) {
33         const float vertical = accessorNode.getNumber(path ~ ".0");
34         const float horizontal = accessorNode.getNumber(path ~ ".1");
35         return FrameRect(horizontal, vertical, horizontal, vertical);
36     }
37 
38     if (node.length == 3) {
39         const float top = accessorNode.getNumber(path ~ ".0");
40         const float horizontal = accessorNode.getNumber(path ~ ".1");
41         const float bottom = accessorNode.getNumber(path ~ ".2");
42         return FrameRect(horizontal, top, horizontal, bottom);
43     }
44 
45     return FrameRect(accessorNode.getVec4f(path));
46 }
47 
48 FrameRect optFrameRect(Node node, in string path,
49     in FrameRect defaultVal = FrameRect.init)
50 {
51     try {
52         return node.getFrameRect(path);
53     } catch (NotFoundException) {
54         return defaultVal;
55     }
56 }
57 
58 IntRect getIntRect(Node node, in string path) {
59     return IntRect(node.getVec4i(path));
60 }
61 
62 IntRect optIntRect(Node node, in string path, in IntRect defaultVal = IntRect.init) {
63     try {
64         return node.getIntRect(path);
65     } catch (NotFoundException) {
66         return defaultVal;
67     }
68 }