Skip to content

Commit df29c9b

Browse files
committed
Templatify addWithLayout
1 parent 4bdf828 commit df29c9b

File tree

4 files changed

+74
-86
lines changed

4 files changed

+74
-86
lines changed

src/ui/include/growl/ui/pack.h

+67-15
Original file line numberDiff line numberDiff line change
@@ -51,32 +51,84 @@ struct PackInfo {
5151
float computedHeight = 0;
5252
};
5353

54+
template <class T>
5455
class Packer {
5556
public:
56-
Packer(Node* node, PackInfo* pack)
57+
Packer(T* node, PackInfo* pack)
5758
: node{node}
5859
, pack{pack} {}
5960

60-
Node* getNode() {
61+
T* getNode() {
6162
return node;
6263
}
6364

64-
Packer& expand();
65-
Packer& fill();
66-
Packer& width(Value width);
67-
Packer& height(Value height);
68-
Packer& align(Align align);
65+
Packer<T>& expand() {
66+
pack->expand = true;
67+
return *this;
68+
}
69+
70+
Packer<T>& fill() {
71+
pack->fill = true;
72+
return *this;
73+
}
74+
75+
Packer<T>& width(Value width) {
76+
pack->prefWidth = width;
77+
return *this;
78+
}
79+
80+
Packer<T>& height(Value height) {
81+
pack->prefHeight = height;
82+
return *this;
83+
}
84+
85+
Packer<T>& align(Align align) {
86+
pack->alignment = align;
87+
return *this;
88+
}
89+
90+
Packer<T>& margin(Value margin) {
91+
pack->marginTop = margin;
92+
pack->marginBottom = margin;
93+
pack->marginLeft = margin;
94+
pack->marginRight = margin;
95+
return *this;
96+
}
6997

70-
Packer& margin(Value margin);
71-
Packer& marginTop(Value margin);
72-
Packer& marginBottom(Value margin);
73-
Packer& marginLeft(Value margin);
74-
Packer& marginRight(Value margin);
75-
Packer& marginX(Value margin);
76-
Packer& marginY(Value margin);
98+
Packer<T>& marginTop(Value margin) {
99+
pack->marginTop = margin;
100+
return *this;
101+
}
102+
103+
Packer<T>& marginBottom(Value margin) {
104+
pack->marginBottom = margin;
105+
return *this;
106+
}
107+
108+
Packer<T>& marginLeft(Value margin) {
109+
pack->marginLeft = margin;
110+
return *this;
111+
}
112+
113+
Packer<T>& marginRight(Value margin) {
114+
pack->marginRight = margin;
115+
return *this;
116+
}
117+
118+
Packer<T>& marginX(Value margin) {
119+
pack->marginLeft = margin;
120+
pack->marginRight = margin;
121+
return *this;
122+
}
123+
124+
Packer<T>& marginY(Value margin) {
125+
pack->marginTop = margin;
126+
pack->marginBottom = margin;
127+
return *this;
128+
}
77129

78130
private:
79-
Node* node;
131+
T* node;
80132
PackInfo* pack;
81133
};
82134

src/ui/include/growl/ui/widget.h

+7-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,13 @@ class Widget : public Node {
1010
Widget(std::string&& name);
1111

1212
virtual Node* addChild(std::unique_ptr<Node> node) override;
13-
Packer addWithLayout(std::unique_ptr<Node> child);
13+
14+
template <class T, class... Args>
15+
Packer<T> addWithLayout(Args&&... args) {
16+
Node* n = addChild(std::make_unique<T>(std::forward<Args>(args)...));
17+
return Packer{
18+
static_cast<T*>(n), &(pack_info.at(pack_info.size() - 1))};
19+
}
1420

1521
void invalidate();
1622
void invalidateHierarchy();

src/ui/src/pack.cpp

-65
Original file line numberDiff line numberDiff line change
@@ -16,68 +16,3 @@ float Value::evaluate(Node* context) {
1616
}
1717
return 0;
1818
}
19-
20-
Packer& Packer::expand() {
21-
pack->expand = true;
22-
return *this;
23-
}
24-
25-
Packer& Packer::fill() {
26-
pack->fill = true;
27-
return *this;
28-
}
29-
30-
Packer& Packer::width(Value width) {
31-
pack->prefWidth = width;
32-
return *this;
33-
}
34-
35-
Packer& Packer::height(Value height) {
36-
pack->prefHeight = height;
37-
return *this;
38-
}
39-
40-
Packer& Packer::align(Align align) {
41-
pack->alignment = align;
42-
return *this;
43-
}
44-
45-
Packer& Packer::margin(Value margin) {
46-
pack->marginTop = margin;
47-
pack->marginBottom = margin;
48-
pack->marginLeft = margin;
49-
pack->marginRight = margin;
50-
return *this;
51-
}
52-
53-
Packer& Packer::marginTop(Value margin) {
54-
pack->marginTop = margin;
55-
return *this;
56-
}
57-
58-
Packer& Packer::marginBottom(Value margin) {
59-
pack->marginBottom = margin;
60-
return *this;
61-
}
62-
63-
Packer& Packer::marginLeft(Value margin) {
64-
pack->marginLeft = margin;
65-
return *this;
66-
}
67-
68-
Packer& Packer::marginRight(Value margin) {
69-
pack->marginRight = margin;
70-
return *this;
71-
}
72-
73-
Packer& Packer::marginX(Value margin) {
74-
pack->marginLeft = margin;
75-
pack->marginRight = margin;
76-
return *this;
77-
}
78-
79-
Packer& Packer::marginY(Value margin) {
80-
pack->marginTop = margin;
81-
pack->marginBottom = margin;
82-
return *this;
83-
}

src/ui/src/widget.cpp

-5
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,6 @@ Node* Widget::addChild(std::unique_ptr<Node> node) {
1919
return Node::addChild(std::move(node));
2020
}
2121

22-
Packer Widget::addWithLayout(std::unique_ptr<Node> child) {
23-
Node* n = addChild(std::move(child));
24-
return Packer{n, &(pack_info.at(pack_info.size() - 1))};
25-
}
26-
2722
void Widget::invalidate() {
2823
invalidated = true;
2924
}

0 commit comments

Comments
 (0)