/* * Copyright 2024 jacqueline * * SPDX-License-Identifier: GPL-3.0-only */ #pragma once #include #include #include #include "hal/lv_hal_indev.h" #include "lua.hpp" #include "input_trigger.hpp" namespace input { struct HookCallback { std::string name; std::function fn; }; class Hook { public: Hook(std::string name, std::optional cb); auto invoke(lv_indev_data_t*) -> void; auto override(std::optional) -> void; auto name() const -> const std::string& { return name_; } auto callback() -> std::optional; // Not copyable or movable. Hook(const Hook&) = delete; Hook& operator=(const Hook&) = delete; private: std::string name_; std::optional default_; std::optional override_; }; class TriggerHooks { public: TriggerHooks(std::string name, std::optional cb) : TriggerHooks(name, cb, cb, cb) {} TriggerHooks(std::string name, std::optional click, std::optional long_press, std::optional repeat); auto update(bool, lv_indev_data_t*) -> void; auto override(Trigger::State, std::optional) -> void; auto name() const -> const std::string&; auto hooks() -> std::vector>; // Not copyable or movable. TriggerHooks(const TriggerHooks&) = delete; TriggerHooks& operator=(const TriggerHooks&) = delete; private: std::string name_; Trigger trigger_; Hook click_; Hook long_press_; Hook repeat_; }; } // namespace input