#pragma once #include #include #include #include #include #include #include namespace vamp_zero { class score_page_cache { public: explicit score_page_cache(std::function, modulus::error>(std::string const &)> loader); auto get(std::string path) -> std::expected, modulus::error>; auto clear() -> void; auto size() const -> std::size_t; private: struct entry { std::string path{}; std::shared_ptr texture{}; }; std::function, modulus::error>(std::string const &)> loader_{}; std::vector entries_{}; }; auto score_page_count(vamp_zero::score_document const &score, bool playback = false) -> std::size_t; auto validated_page_path(vamp_zero::score_document const &score, std::size_t index, bool playback = false) -> std::expected; auto validate_score_page(vamp_zero::score_document const &score, std::size_t index, bool playback = false) -> std::expected; auto page_rectangle(luma::rect bounds) -> luma::rect; auto measure_highlight(vamp_zero::score_page const &page, std::optional measure, luma::rect image) -> std::optional; }