/* * SPDX-FileCopyrightText: 2026 M5Stack Technology CO LTD * * SPDX-License-Identifier: MIT */ #pragma once #include #include #include #include #include #include #include #include namespace view { /** * @brief * */ class LauncherView { public: ~LauncherView(); enum State_t { STATE_STARTUP, STATE_NORMAL, }; std::function onAppClicked; void init(std::vector appPorps); void update(); private: std::unique_ptr _panel; std::vector> _icon_panels; std::vector> _icon_images; std::vector> _lr_indicator_panels; std::vector> _lr_indicators_images; std::unique_ptr _startup_anim; int _clicked_app_id = -1; State_t _state = STATE_STARTUP; void handle_state_startup(); void handle_state_normal(); }; /** * @brief * */ class Screensaver : public uitk::games::dvd_screensaver::DvdScreensaver { public: ~Screensaver(); void onInit() override; void onBuildLevel() override; void onRender(float dt) override; void onLogoCollide(int logoGroupId) override; private: std::unique_ptr _prev_screen; std::unique_ptr _screen; std::unique_ptr _logo; std::unique_ptr _left_eye; std::unique_ptr _right_eye; std::unique_ptr _mouth; int _color_index = 0; }; } // namespace view