// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md #pragma once #include #include #include #include #include #include namespace service::gui { class DrawCommandsQueue { public: using CommandList = std::list>; struct QueueItem { CommandList commands; ::gui::RefreshModes refreshMode = ::gui::RefreshModes::GUI_REFRESH_FAST; }; using QueueContainer = std::vector; explicit DrawCommandsQueue(std::size_t expectedSize); void enqueue(QueueItem &&item); auto stop() -> void; [[nodiscard]] auto dequeue() -> std::optional; [[nodiscard]] auto getMaxRefreshModeAndClear() -> ::gui::RefreshModes; void clear(); [[nodiscard]] auto size() const noexcept -> QueueContainer::size_type; private: QueueContainer queue; mutable cpp_freertos::MutexStandard queueMutex; }; } // namespace service::gui