Skip to content

Commit 70a257f

Browse files
committed
Use base injection instead of proxy
1 parent bdc9fe4 commit 70a257f

File tree

2 files changed

+56
-63
lines changed

2 files changed

+56
-63
lines changed

lib/include/elements/element/style/sprite_button.hpp

+45-39
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,12 @@
1111

1212
namespace cycfi::elements
1313
{
14-
template <typename Subject>
15-
class sprite_button_styler : public proxy<Subject>
14+
template <typename Base>
15+
class sprite_button_styler : public Base
1616
{
1717
public:
1818

19-
using base_type = proxy<Subject>;
20-
21-
sprite_button_styler(Subject subject);
19+
using Base::Base;
2220

2321
void draw(context const& ctx) override;
2422
};
@@ -27,63 +25,71 @@ namespace cycfi::elements
2725
concepts::MomentaryButton Base = basic_button
2826
, concepts::SpriteSubject Styler
2927
>
30-
inline proxy<sprite_button_styler<remove_cvref_t<Styler>>, Base>
31-
momentary_button(Styler&& s)
32-
{
33-
using styler_type = sprite_button_styler<remove_cvref_t<Styler>>;
34-
return {styler_type{std::forward<Styler>(s)}};
35-
}
28+
inline proxy<remove_cvref_t<Styler>, sprite_button_styler<Base>>
29+
momentary_button(Styler&& s);
3630

3731
template <
3832
concepts::ToggleButton Base = basic_toggle_button
3933
, concepts::SpriteSubject Styler
4034
>
41-
inline proxy<sprite_button_styler<remove_cvref_t<Styler>>, Base>
42-
toggle_button(Styler&& s)
43-
{
44-
using styler_type = sprite_button_styler<remove_cvref_t<Styler>>;
45-
return {styler_type{std::forward<Styler>(s)}};
46-
}
35+
inline proxy<remove_cvref_t<Styler>, sprite_button_styler<Base>>
36+
toggle_button(Styler&& s);
4737

4838
template <
4939
concepts::LatchingButton Base = basic_latching_button
5040
, concepts::SpriteSubject Styler
5141
>
52-
inline proxy<sprite_button_styler<remove_cvref_t<Styler>>, Base>
53-
latching_button(Styler&& s)
54-
{
55-
using styler_type = sprite_button_styler<remove_cvref_t<Styler>>;
56-
return {styler_type{std::forward<Styler>(s)}};
57-
}
42+
inline proxy<remove_cvref_t<Styler>, sprite_button_styler<Base>>
43+
latching_button(Styler&& s);
5844

5945
//--------------------------------------------------------------------------
6046
// Inlines
6147
//--------------------------------------------------------------------------
6248

63-
template <typename Subject>
64-
inline sprite_button_styler<Subject>::sprite_button_styler(Subject subject)
65-
: base_type{std::move(subject)}
66-
{}
67-
68-
template <typename Subject>
69-
inline void sprite_button_styler<Subject>::draw(context const& ctx)
49+
template <typename Base>
50+
inline void sprite_button_styler<Base>::draw(context const& ctx)
7051
{
71-
auto btn = find_parent<basic_button*>(ctx);
72-
if (!btn)
73-
return;
74-
75-
auto sp = find_subject<sprite*>(this);
76-
if (sp)
52+
if (auto sp = find_subject<sprite*>(this))
7753
{
78-
auto value = btn->value();
79-
auto hilite = btn->hilite();
54+
auto value = this->value();
55+
auto hilite = this->hilite();
8056
if (!ctx.enabled && sp->num_frames() > 4)
8157
sp->index(4); // disabled
8258
else
8359
sp->index((value? 2 : 0) + hilite); // enabled
84-
sp->draw(ctx);
60+
Base::draw(ctx);
8561
}
8662
}
63+
64+
template <
65+
concepts::MomentaryButton Base
66+
, concepts::SpriteSubject Styler
67+
>
68+
inline proxy<remove_cvref_t<Styler>, sprite_button_styler<Base>>
69+
momentary_button(Styler&& s)
70+
{
71+
return {std::forward<Styler>(s)};
72+
}
73+
74+
template <
75+
concepts::ToggleButton Base
76+
, concepts::SpriteSubject Styler
77+
>
78+
inline proxy<remove_cvref_t<Styler>, sprite_button_styler<Base>>
79+
toggle_button(Styler&& s)
80+
{
81+
return {std::forward<Styler>(s)};
82+
}
83+
84+
template <
85+
concepts::LatchingButton Base
86+
, concepts::SpriteSubject Styler
87+
>
88+
inline proxy<remove_cvref_t<Styler>, sprite_button_styler<Base>>
89+
latching_button(Styler&& s)
90+
{
91+
return {std::forward<Styler>(s)};
92+
}
8793
}
8894

8995
#endif

lib/include/elements/element/style/sprite_dial.hpp

+11-24
Original file line numberDiff line numberDiff line change
@@ -12,52 +12,39 @@
1212

1313
namespace cycfi::elements
1414
{
15-
template <typename Subject>
16-
class sprite_dial_styler : public proxy<Subject>
15+
template <typename Base>
16+
class sprite_dial_styler : public Base
1717
{
1818
public:
1919

20-
using base_type = proxy<Subject>;
21-
22-
sprite_dial_styler(Subject subject);
20+
using Base::Base;
2321

2422
void draw(context const& ctx) override;
2523
};
2624

2725
template <concepts::SpriteSubject Styler>
28-
inline proxy<sprite_dial_styler<remove_cvref_t<Styler>>, basic_dial>
26+
inline proxy<remove_cvref_t<Styler>, sprite_dial_styler<basic_dial>>
2927
dial(Styler&& styler, double init_value = 0.0);
3028

3129
//--------------------------------------------------------------------------
3230
// Inlines
3331
//--------------------------------------------------------------------------
3432

35-
template <typename Subject>
36-
inline sprite_dial_styler<Subject>::sprite_dial_styler(Subject subject)
37-
: base_type{std::move(subject)}
38-
{}
39-
40-
template <typename Subject>
41-
inline void sprite_dial_styler<Subject>::draw(context const& ctx)
33+
template <typename Base>
34+
inline void sprite_dial_styler<Base>::draw(context const& ctx)
4235
{
43-
auto dial = find_parent<basic_dial*>(ctx);
44-
if (!dial)
45-
return;
46-
47-
auto sp = find_subject<sprite*>(this);
48-
if (sp)
36+
if (auto sp = find_subject<sprite*>(this))
4937
{
50-
sp->index(dial->value() * (sp->num_frames()-1));
51-
sp->draw(ctx);
38+
sp->index(this->value() * (sp->num_frames()-1));
39+
Base::draw(ctx);
5240
}
5341
}
5442

5543
template <concepts::SpriteSubject Styler>
56-
inline proxy<sprite_dial_styler<remove_cvref_t<Styler>>, basic_dial>
44+
inline proxy<remove_cvref_t<Styler>, sprite_dial_styler<basic_dial>>
5745
dial(Styler&& styler, double init_value)
5846
{
59-
using styler_type = sprite_dial_styler<remove_cvref_t<Styler>>;
60-
return {styler_type{std::forward<Styler>(styler)}, init_value};
47+
return {std::forward<Styler>(styler), init_value};
6148
}
6249
}
6350

0 commit comments

Comments
 (0)