Skip to content

Commit ee0184e

Browse files
committed
Added vtile_spaced and htile_spaced: tiles with specified spaces in between elements.
1 parent e5f5077 commit ee0184e

File tree

5 files changed

+48
-40
lines changed

5 files changed

+48
-40
lines changed

examples/buttons/main.cpp

+4-23
Original file line numberDiff line numberDiff line change
@@ -183,34 +183,22 @@ auto make_buttons(view& view_)
183183

184184
return
185185
margin({20, 20, 20, 20},
186-
vtile(
186+
vtile_spaced(15.0, // space in between
187187
mbutton,
188-
vspace(15),
189188
tbutton,
190-
vspace(15),
191189
hold(lbutton),
192-
vspace(15),
193190
hold(reset),
194-
vspace(15),
195191
note,
196-
vspace(15),
197192
disabled_button,
198-
vspace(15),
199-
htile(
193+
htile_spaced(10.0, // space in between
200194
label("Enabled"),
201-
hspace(10),
202195
align_left(slide_btn1),
203-
hspace(10),
204196
label("Slide Buttons"),
205197
align_right(slide_btn2),
206-
hspace(10),
207198
disabled_label
208199
),
209-
vspace(15),
210200
hgrid(left, center, right),
211-
vspace(15),
212201
hgrid(left_rounded, center_square, right_rounded),
213-
vspace(15),
214202
custom
215203
)
216204
);
@@ -234,15 +222,11 @@ auto make_controls(view& view_)
234222
auto check_boxes =
235223
group("Check boxes",
236224
margin({10, 45, 20, 20},
237-
vtile(
225+
vtile_spaced(10.0, // space in between
238226
align_left(check_box1),
239-
vspace(10),
240227
align_left(check_box2),
241-
vspace(10),
242228
align_left(check_box3),
243-
vspace(10),
244229
align_left(check_box4),
245-
vspace(10),
246230
align_left(check_box5)
247231
)
248232
)
@@ -259,13 +243,10 @@ auto make_controls(view& view_)
259243
auto radio_buttons =
260244
group("Radio Buttons",
261245
margin({10, 45, 20, 20},
262-
vtile(
246+
vtile_spaced(10.0, // space in between
263247
align_left(radio_button1),
264-
vspace(10),
265248
align_left(radio_button2),
266-
vspace(10),
267249
align_left(radio_button3),
268-
vspace(10),
269250
align_left(radio_button4)
270251
)
271252
)

examples/model/main.cpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ using elements::basic_knob;
112112
using elements::selection_menu;
113113
using elements::input_box;
114114
using elements::label;
115-
using elements::hspace;
116115
using elements::view;
117116
using elements::app;
118117
using elements::window;
@@ -267,9 +266,8 @@ auto make_preset_menu(my_model& model, view& view_)
267266
align_top(
268267
align_center(
269268
hsize(180,
270-
htile(
269+
htile_spaced(10.0,
271270
label("Preset:"),
272-
hspace(10),
273271
preset_menu.first
274272
)
275273
)

examples/range_slider/main.cpp

+4-8
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,12 @@ auto make_range_slider = [] (view& _view, auto _range_slider, std::string _title
8989
return margin(
9090
{10, 10, 10, 10},
9191
layer(
92-
vtile(
93-
vspace(10),
92+
vtile_spaced(10,
9493
align_center(
9594
label(_title).font_size(18)
9695
),
97-
vspace(10),
9896
margin(
99-
{50, 10, 50, 10},
97+
{50, 10, 50, 0},
10098
hold(_range_slider)
10199
),
102100
layer(
@@ -221,14 +219,12 @@ auto make_log_range_slider(view& _view) {
221219
return margin(
222220
{10, 10, 10, 10},
223221
layer(
224-
vtile(
225-
vspace(10),
222+
vtile_spaced(10,
226223
align_center(
227224
label("Overlapping Logarithmic range slider").font_size(18)
228225
),
229-
vspace(10),
230226
margin(
231-
{50, 10, 50, 10},
227+
{50, 10, 50, 0},
232228
hold(_range_slider)
233229
),
234230
layer(

examples/status_bars/main.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,10 @@ auto make_bars(view& view_)
6868

6969
return
7070
margin({20, 20, 20, 20},
71-
htile(
71+
htile_spaced(20,
7272
align_middle(start_stop),
73-
hspace(10),
74-
vtile(
73+
vtile_spaced(10,
7574
vsize(27, hold(prog_bar)),
76-
vspace(10),
7775
vsize(27, hold(bsy_bar))
7876
)
7977
)

lib/include/elements/element/tile.hpp

+37-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#include <elements/view.hpp>
1010
#include <elements/element/composite.hpp>
11+
#include <elements/element/margin.hpp>
1112
#include <memory>
1213

1314
namespace cycfi::elements
@@ -32,7 +33,7 @@ namespace cycfi::elements
3233

3334
using vtile_composite = vector_composite<vtile_element>;
3435

35-
template <typename... E>
36+
template <concepts::Element... E>
3637
inline auto vtile(E&&... elements)
3738
{
3839
using composite = array_composite<sizeof...(elements), vtile_element>;
@@ -42,6 +43,23 @@ namespace cycfi::elements
4243
return r;
4344
}
4445

46+
template <concepts::Element FE, concepts::Element... E>
47+
inline auto vtile_spaced(float space, FE&& first, E&&... rest)
48+
{
49+
using composite = array_composite<1+(sizeof...(rest)), vtile_element>;
50+
composite r{};
51+
52+
std::size_t i = 0;
53+
r[i] = share(std::forward<FE>(first));
54+
auto fill_interleaved = [&, i = 1](auto&& e) mutable
55+
{
56+
r[i++] = share(margin_top(space, std::forward<decltype(e)>(e)));
57+
};
58+
59+
(fill_interleaved(rest), ...);
60+
return r;
61+
}
62+
4563
////////////////////////////////////////////////////////////////////////////
4664
// Horizontal Tiles
4765
////////////////////////////////////////////////////////////////////////////
@@ -62,7 +80,7 @@ namespace cycfi::elements
6280

6381
using htile_composite = vector_composite<htile_element>;
6482

65-
template <typename... E>
83+
template <concepts::Element... E>
6684
inline auto htile(E&&... elements)
6785
{
6886
using composite = array_composite<sizeof...(elements), htile_element>;
@@ -71,6 +89,23 @@ namespace cycfi::elements
7189
r = container{{share(std::forward<E>(elements))...}};
7290
return r;
7391
}
92+
93+
template <concepts::Element FE, concepts::Element... E>
94+
inline auto htile_spaced(float space, FE&& first, E&&... rest)
95+
{
96+
using composite = array_composite<1+(sizeof...(rest)), htile_element>;
97+
composite r{};
98+
99+
std::size_t i = 0;
100+
r[i] = share(std::forward<FE>(first));
101+
auto fill_interleaved = [&, i = 1](auto&& e) mutable
102+
{
103+
r[i++] = share(margin_left(space, std::forward<decltype(e)>(e)));
104+
};
105+
106+
(fill_interleaved(rest), ...);
107+
return r;
108+
}
74109
}
75110

76111
#endif

0 commit comments

Comments
 (0)