@@ -4,26 +4,23 @@ import std;
44import CppUtils.Terminal.Area;
55import CppUtils.Container.Size;
66import CppUtils.Chrono.Concept;
7+ export import CppUtils.Terminal.FixedAreaBuffer;
78
89export namespace CppUtils::Terminal
910{
10- template<Chrono::Duration Duration = std::chrono::milliseconds>
11+ template<std::size_t Width, std::size_t Height, std::size_t NbFrames, Chrono::Duration Duration = std::chrono::milliseconds>
1112 class Spinner final: public Widget
1213 {
1314 public:
14- inline Spinner(const Container::Size2& size, std::vector<AreaBuffer>&& frames, const Duration& duration = std::chrono::milliseconds{50}):
15- m_size{size},
16- m_frames{std::move(frames)},
15+ using Frame = FixedAreaBuffer<Width, Height>;
16+ using Frames = std::array<Frame, NbFrames>;
17+ static constexpr auto size = Frame::size;
18+
19+ inline Spinner(const Frames& frames, const Duration& duration = std::chrono::milliseconds{50}):
20+ m_frames{frames},
1721 m_duration{duration}
1822 {}
1923
20- inline auto editFrame(std::size_t frame, AreaBuffer&& buffer) noexcept -> void
21- {
22- if (frame >= std::size(m_frames))
23- return;
24- m_frames[frame] = std::move(buffer);
25- }
26-
2724 inline auto draw(WritableAreaView& view) noexcept -> void
2825 {
2926 if (std::empty(m_frames))
@@ -35,18 +32,12 @@ export namespace CppUtils::Terminal
3532 requestUpdate(m_duration);
3633 }
3734
38- [[nodiscard]] inline constexpr auto getSize() const noexcept -> const auto&
39- {
40- return m_size;
41- }
42-
4335 private:
44- Container::Size2 m_size;
4536 std::size_t m_frame = 0;
46- std::vector<AreaBuffer> m_frames;
37+ const Frames& m_frames;
4738 Duration m_duration;
4839 };
4940
50- template<Chrono::Duration Duration>
51- Spinner(const Container::Size2& size, std::vector<AreaBuffer::Buffer >&& frames, const Duration& duration) -> Spinner<Duration>;
41+ template<std::size_t Width, std::size_t Height, std::size_t NbFrames, Chrono::Duration Duration = std::chrono::milliseconds >
42+ Spinner(std::array<FixedAreaBuffer<Width, Height>, NbFrames >&& frames, const Duration& duration = std::chrono::milliseconds{50} ) -> Spinner<Width, Height, NbFrames, Duration>;
5243}
0 commit comments