Skip to content

Commit 6cf7257

Browse files
committed
Moving slider styler elements to style and renaming various *elements to *styler
1 parent 71ceea7 commit 6cf7257

File tree

6 files changed

+575
-548
lines changed

6 files changed

+575
-548
lines changed

lib/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ set(ELEMENTS_SOURCES
4040
src/element/style/menu.cpp
4141
src/element/style/radio_button.cpp
4242
src/element/style/slide_switch.cpp
43+
src/element/style/slider.cpp
4344
src/element/style/thumbwheel.cpp
4445
src/element/grid.cpp
4546
src/element/image.cpp

lib/include/elements/element/slider.hpp

-349
Original file line numberDiff line numberDiff line change
@@ -169,355 +169,6 @@ namespace cycfi::elements
169169
init_value
170170
};
171171
}
172-
173-
////////////////////////////////////////////////////////////////////////////
174-
// Basic Thumb (You can use this as the slider's thumb)
175-
////////////////////////////////////////////////////////////////////////////
176-
template <unsigned _size>
177-
class basic_thumb_element : public element
178-
{
179-
public:
180-
181-
static unsigned const size = _size;
182-
183-
basic_thumb_element(color c = colors::black)
184-
: _color(c)
185-
{}
186-
187-
view_limits limits(basic_context const& ctx) const override;
188-
void draw(context const& ctx) override;
189-
190-
private:
191-
192-
color _color;
193-
};
194-
195-
template <unsigned size>
196-
inline view_limits basic_thumb_element<size>
197-
::limits(basic_context const& /* ctx */) const
198-
{
199-
auto pt = point{float(size), float(size)};
200-
return view_limits{pt, pt};
201-
}
202-
203-
template <unsigned size>
204-
inline void basic_thumb_element<size>::draw(context const& ctx)
205-
{
206-
auto& thm = get_theme();
207-
auto& cnv = ctx.canvas;
208-
auto indicator_color = thm.indicator_color.level(1.5);
209-
auto cp = circle{center_point(ctx.bounds), size/2.0f};
210-
211-
draw_thumb(cnv, cp, _color, indicator_color);
212-
}
213-
214-
template <unsigned size>
215-
inline basic_thumb_element<size> basic_thumb(color c = colors::black)
216-
{
217-
return {c};
218-
}
219-
220-
////////////////////////////////////////////////////////////////////////////
221-
// Basic Track (You can use this as the slider's track)
222-
////////////////////////////////////////////////////////////////////////////
223-
template <unsigned _size, bool _vertical = false>
224-
class basic_track_element : public element
225-
{
226-
public:
227-
228-
static unsigned const size = _size;
229-
static bool const vertical = _vertical;
230-
static unsigned const min_length = 64;
231-
232-
basic_track_element(color c = colors::black)
233-
: _color(c)
234-
{}
235-
236-
view_limits limits(basic_context const& ctx) const override;
237-
void draw(context const& ctx) override;
238-
239-
private:
240-
241-
color _color;
242-
};
243-
244-
template <unsigned size, bool vertical>
245-
inline view_limits basic_track_element<size, vertical>
246-
::limits(basic_context const& /* ctx */) const
247-
{
248-
auto sz = float(size);
249-
auto min_length_ = float(min_length);
250-
auto p1 = vertical ? point{sz, min_length} : point{ min_length_, sz};
251-
auto p2 = vertical ? point{sz, full_extent} : point{ full_extent, sz};
252-
return view_limits{p1, p2};
253-
}
254-
255-
template <unsigned size, bool vertical>
256-
inline void basic_track_element<size, vertical>
257-
::draw(context const& ctx)
258-
{
259-
draw_track(ctx.canvas, ctx.bounds);
260-
}
261-
262-
template <unsigned size, bool vertical = false>
263-
inline basic_track_element<size, vertical>
264-
basic_track(color c = colors::black)
265-
{
266-
return {c};
267-
}
268-
269-
////////////////////////////////////////////////////////////////////////////
270-
// Slider Element Base (common base class for slider elements)
271-
////////////////////////////////////////////////////////////////////////////
272-
template <int _size, concepts::Element Subject>
273-
class slider_element_base : public proxy<Subject>
274-
{
275-
public:
276-
277-
static unsigned const size = _size;
278-
using base_type = proxy<Subject>;
279-
using base_type::base_type;
280-
281-
view_limits limits(basic_context const& ctx) const override;
282-
void prepare_subject(context& ctx) override;
283-
};
284-
285-
template <int size, concepts::Element Subject>
286-
inline view_limits
287-
slider_element_base<size, Subject>::limits(basic_context const& ctx) const
288-
{
289-
auto sl = this->subject().limits(ctx);
290-
if (sl.min.x < sl.min.y) // is vertical?
291-
{
292-
sl.min.x += size;
293-
sl.max.x += size;
294-
clamp_max(sl.max.x, full_extent);
295-
}
296-
else
297-
{
298-
sl.min.y += size;
299-
sl.max.y += size;
300-
clamp_max(sl.max.y, full_extent);
301-
}
302-
return sl;
303-
}
304-
305-
template <int size, concepts::Element Subject>
306-
inline void
307-
slider_element_base<size, Subject>::prepare_subject(context& ctx)
308-
{
309-
if (ctx.bounds.width() < ctx.bounds.height()) // is vertical?
310-
{
311-
ctx.bounds.left += size/2;
312-
ctx.bounds.right -= size/2;
313-
}
314-
else
315-
{
316-
ctx.bounds.top += size/2;
317-
ctx.bounds.bottom -= size/2;
318-
}
319-
}
320-
321-
////////////////////////////////////////////////////////////////////////////
322-
// Slider Marks (You can use this to place tick marks on slider)
323-
////////////////////////////////////////////////////////////////////////////
324-
325-
////////////////////////////////////////////////////////////////////////////
326-
// deprecated
327-
////////////////////////////////////////////////////////////////////////////
328-
template <
329-
std::size_t _size, std::size_t _num_divs
330-
, std::size_t _major_divs, concepts::Element Subject>
331-
class slider_marks_element : public slider_element_base<_size, Subject>
332-
{
333-
public:
334-
335-
static_assert(_major_divs > 0, "Major divisions must be greater than zero");
336-
337-
using base_type = slider_element_base<_size, Subject>;
338-
using base_type::base_type;
339-
340-
void draw(context const& ctx) override;
341-
};
342-
343-
void draw_slider_marks(
344-
canvas& cnv, rect bounds, float size, std::size_t major_divs
345-
, std::size_t minor_divs, color c);
346-
347-
template <
348-
std::size_t _size, std::size_t _num_divs
349-
, std::size_t _major_divs, concepts::Element Subject>
350-
inline void
351-
slider_marks_element<_size, _num_divs, _major_divs, Subject>
352-
::draw(context const& ctx)
353-
{
354-
// Draw linear lines
355-
draw_slider_marks(
356-
ctx.canvas, ctx.bounds, _size, _num_divs
357-
, _major_divs, colors::light_gray);
358-
359-
// Draw the subject
360-
base_type::draw(ctx);
361-
}
362-
363-
template <
364-
std::size_t _size, std::size_t _num_divs = 50
365-
, std::size_t _major_divs = 10, concepts::Element Subject>
366-
[[deprecated("Use slider_marks_lin instead")]]
367-
inline slider_marks_element<_size, _num_divs, _major_divs, remove_cvref_t<Subject>>
368-
slider_marks(Subject&& subject)
369-
{
370-
return {std::forward<Subject>(subject)};
371-
}
372-
////////////////////////////////////////////////////////////////////////////
373-
374-
template <
375-
std::size_t _size, std::size_t _major_divs
376-
, std::size_t _minor_divs, concepts::Element Subject>
377-
class slider_marks_lin_element : public slider_element_base<_size, Subject>
378-
{
379-
public:
380-
381-
static_assert(_major_divs > 0, "Major divisions must be greater than zero");
382-
383-
using base_type = slider_element_base<_size, Subject>;
384-
using base_type::base_type;
385-
386-
void draw(context const& ctx) override;
387-
};
388-
389-
void draw_slider_marks_lin(
390-
canvas& cnv, rect bounds, float size, std::size_t major_divs
391-
, std::size_t minor_divs, color c);
392-
393-
template <
394-
std::size_t _size, std::size_t _major_divs
395-
, std::size_t _minor_divs, concepts::Element Subject>
396-
inline void
397-
slider_marks_lin_element<_size, _major_divs, _minor_divs, Subject>
398-
::draw(context const& ctx)
399-
{
400-
// Draw linear lines
401-
draw_slider_marks_lin(
402-
ctx.canvas, ctx.bounds, _size, _major_divs
403-
, _minor_divs, colors::light_gray);
404-
405-
// Draw the subject
406-
base_type::draw(ctx);
407-
}
408-
409-
template <
410-
std::size_t _size, std::size_t _major_divs = 10
411-
, std::size_t _minor_divs = 5, concepts::Element Subject>
412-
inline slider_marks_lin_element<_size, _major_divs, _minor_divs, remove_cvref_t<Subject>>
413-
slider_marks_lin(Subject&& subject)
414-
{
415-
return {std::forward<Subject>(subject)};
416-
}
417-
418-
template <
419-
std::size_t _size, std::size_t _major_divs
420-
, std::size_t _minor_divs, concepts::Element Subject>
421-
class slider_marks_log_element : public slider_element_base<_size, Subject>
422-
{
423-
424-
public:
425-
426-
static_assert(_major_divs > 0, "Major divisions must be greater than zero");
427-
428-
using base_type = slider_element_base<_size, Subject>;
429-
using base_type::base_type;
430-
431-
void draw(context const& ctx) override;
432-
};
433-
434-
void draw_slider_marks_log(
435-
canvas& cnv, rect bounds, float size, std::size_t major_divs
436-
, std::size_t minor_divs, color c);
437-
438-
template <
439-
std::size_t _size, std::size_t _major_divs
440-
, std::size_t _minor_divs, concepts::Element Subject>
441-
inline void
442-
slider_marks_log_element<_size, _major_divs, _minor_divs, Subject>
443-
::draw(context const& ctx)
444-
{
445-
// Draw logarithmic lines
446-
draw_slider_marks_log(
447-
ctx.canvas, ctx.bounds, _size, _major_divs
448-
, _minor_divs, colors::light_gray);
449-
450-
// Draw the subject
451-
base_type::draw(ctx);
452-
}
453-
454-
template <
455-
std::size_t _size, std::size_t _major_divs = 5
456-
, std::size_t _minor_divs = 10, concepts::Element Subject>
457-
inline slider_marks_log_element<_size, _major_divs, _minor_divs, remove_cvref_t<Subject>>
458-
slider_marks_log(Subject&& subject)
459-
{
460-
return {std::forward<Subject>(subject)};
461-
}
462-
463-
////////////////////////////////////////////////////////////////////////////
464-
// Slider Labels (You can use this to place slider labels with sliders)
465-
////////////////////////////////////////////////////////////////////////////
466-
template <int _size, concepts::Element Subject, std::size_t num_labels>
467-
class slider_labels_element
468-
: public slider_element_base<abs(_size), Subject>
469-
{
470-
public:
471-
472-
constexpr static int const size = _size;
473-
using base_type = slider_element_base<abs(_size), Subject>;
474-
using string_array = std::array<std::string, num_labels>;
475-
476-
slider_labels_element(
477-
Subject subject
478-
, float font_size
479-
)
480-
: base_type(std::move(subject))
481-
, _font_size(font_size)
482-
{}
483-
484-
void draw(context const& ctx) override;
485-
486-
string_array _labels;
487-
float _font_size;
488-
};
489-
490-
void draw_slider_labels(
491-
canvas& cnv
492-
, rect bounds
493-
, float size
494-
, float font_size
495-
, std::string const labels[]
496-
, std::size_t _num_labels
497-
);
498-
499-
template <int size, concepts::Element Subject, std::size_t num_labels>
500-
inline void
501-
slider_labels_element<size, Subject, num_labels>::draw(context const& ctx)
502-
{
503-
// Draw the subject
504-
base_type::draw(ctx);
505-
506-
// Draw the labels
507-
draw_slider_labels(
508-
ctx.canvas, ctx.bounds, size
509-
, _font_size, _labels.data(), num_labels);
510-
}
511-
512-
template <int size, concepts::Element Subject, typename... S>
513-
inline slider_labels_element<size, remove_cvref_t<Subject>, sizeof...(S)>
514-
slider_labels(Subject&& subject, float font_size, S&&... s)
515-
{
516-
auto r = slider_labels_element<size, remove_cvref_t<Subject>, sizeof...(S)>
517-
{std::forward<Subject>(subject), font_size};
518-
r._labels = {{std::move(s)...}};
519-
return r;
520-
}
521172
}
522173

523174
#endif

lib/include/elements/element/style.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <elements/element/style/pane.hpp>
2020
#include <elements/element/style/radio_button.hpp>
2121
#include <elements/element/style/slide_switch.hpp>
22+
#include <elements/element/style/slider.hpp>
2223
#include <elements/element/style/tab.hpp>
2324
#include <elements/element/style/text_entry.hpp>
2425
#include <elements/element/style/thumbwheel.hpp>

0 commit comments

Comments
 (0)