#pragma once #include "../../../CanvasComponents/TextBoxCanvasComponent.hpp" #include "DrawingProgramEditToolBase.hpp" #include #include #include "../../../RichTextUserInput.hpp" class DrawingProgram; class TextBoxEditTool : public DrawingProgramEditToolBase { public: TextBoxEditTool(DrawingProgram& initDrawP, CanvasComponentContainer::ObjInfo* initComp); virtual void edit_start(EditTool& editTool, std::any& prevData) override; virtual void commit_edit_updates(std::any& prevData) override; virtual bool edit_update() override; virtual void edit_gui() override; virtual void right_click_popup_gui(Vector2f popupPos) override; virtual void input_paste_callback(const CustomEvents::PasteEventData& paste) override; virtual void input_text_key_callback(const InputManager::KeyCallbackArgs& key) override; virtual void input_text_callback(const InputManager::TextCallbackArgs& text) override; virtual void input_mouse_button_on_canvas_callback(const InputManager::MouseButtonCallbackArgs& button, bool isDraggingPoint) override; virtual void input_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion, bool isDraggingPoint) override; private: std::unique_ptr userInput; std::optional textboxID; struct TextBoxEditToolAllData { TextBoxCanvasComponent::Data textboxData; RichText::TextData richText; }; uint32_t newFontSize = 15; Vector4f newTextColor{1.0f, 1.0f, 1.0f, 1.0f}; Vector4f newHighlightColor{1.0f, 1.0f, 1.0f, 0.0f}; bool newIsBold = false; bool newIsItalic = false; bool newIsUnderlined = false; bool newIsLinethrough = false; bool newIsOverline = false; std::string newFontName; RichText::ParagraphStyleData currentPStyle; uint8_t get_new_decoration_value(); void set_styles_at_selection(TextBoxCanvasComponent& a); void add_undo_if_selecting_area(TextBoxCanvasComponent& a, const std::function& func); void add_undo(const std::function& func); void hold_undo_data(const std::string& undoName, TextBoxCanvasComponent& a); void release_undo_data(const std::string& undoName); void commit_update_func(); void commit_update_and_layout_func(); std::unordered_map> undoHeldData; std::shared_ptr currentModsPtr = std::make_shared(); std::vector sortedFontList; TextBoxEditToolAllData get_all_data(const TextBoxCanvasComponent& a); };