#pragma once #include "Element.hpp" #include "../../RichText/TextBox.hpp" #include #include #include "../../FontData.hpp" #include "../../InputManager.hpp" namespace GUIStuff { template struct TextBoxData { T* data = nullptr; std::function(const std::string&)> fromStr; std::function toStr; bool singleLine = true; bool updateEveryEdit = false; bool immutable = false; InputManager::TextInputProperties textInputProps; std::function onEdit; std::function onEnter; }; template class TextBox : public Element { public: TextBox(GUIManager& gui); void layout(const Clay_ElementId& id, const TextBoxData& userInfo); virtual void clay_draw(SkCanvas* canvas, UpdateInputData& io, Clay_RenderCommand* command, bool skiaAA) override; virtual bool input_mouse_button_callback(const InputManager::MouseButtonCallbackArgs& button, bool mouseHovering) override; virtual bool input_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion, bool mouseHovering) override; virtual void input_key_callback(const InputManager::KeyCallbackArgs& key) override; ~TextBox(); private: void init_textbox(UpdateInputData& io); bool update_data(); bool isSelected = false; TextBoxData userInfo; std::shared_ptr textbox; std::shared_ptr cur; std::shared_ptr> rect; }; }