Rewrote how input text box focus is decided
This commit is contained in:
parent
1585e0aa67
commit
8b3e321ab5
41 changed files with 317 additions and 490 deletions
|
|
@ -268,6 +268,10 @@ void DrawingProgram::input_pen_axis_callback(const InputManager::PenAxisCallback
|
|||
drawTool->input_pen_axis_callback(axis);
|
||||
}
|
||||
|
||||
std::optional<InputManager::TextBoxStartInfo> DrawingProgram::get_text_box_start_info() {
|
||||
return drawTool->get_text_box_start_info();
|
||||
}
|
||||
|
||||
void DrawingProgram::server_init_no_file() {
|
||||
layerMan.server_init_no_file();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ class DrawingProgram {
|
|||
void input_pen_touch_callback(const InputManager::PenTouchCallbackArgs& touch);
|
||||
void input_pen_motion_callback(const InputManager::PenMotionCallbackArgs& motion);
|
||||
void input_pen_axis_callback(const InputManager::PenAxisCallbackArgs& axis);
|
||||
std::optional<InputManager::TextBoxStartInfo> get_text_box_start_info();
|
||||
|
||||
void set_right_click_popup_location(const Vector2f& newLoc);
|
||||
void clear_right_click_popup();
|
||||
|
|
|
|||
|
|
@ -65,3 +65,4 @@ void DrawingProgramToolBase::input_pen_button_callback(const InputManager::PenBu
|
|||
void DrawingProgramToolBase::input_pen_touch_callback(const InputManager::PenTouchCallbackArgs& touch) {}
|
||||
void DrawingProgramToolBase::input_pen_motion_callback(const InputManager::PenMotionCallbackArgs& motion) {}
|
||||
void DrawingProgramToolBase::input_pen_axis_callback(const InputManager::PenAxisCallbackArgs& axis) {}
|
||||
std::optional<InputManager::TextBoxStartInfo> DrawingProgramToolBase::get_text_box_start_info() { return std::nullopt; }
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ class DrawingProgramToolBase {
|
|||
virtual void input_pen_touch_callback(const InputManager::PenTouchCallbackArgs& touch);
|
||||
virtual void input_pen_motion_callback(const InputManager::PenMotionCallbackArgs& motion);
|
||||
virtual void input_pen_axis_callback(const InputManager::PenAxisCallbackArgs& axis);
|
||||
virtual std::optional<InputManager::TextBoxStartInfo> get_text_box_start_info();
|
||||
virtual ~DrawingProgramToolBase();
|
||||
static std::unique_ptr<DrawingProgramToolBase> allocate_tool_type(DrawingProgram& drawP, DrawingProgramToolType t);
|
||||
protected:
|
||||
|
|
|
|||
|
|
@ -176,6 +176,12 @@ void EditTool::input_mouse_motion_callback(const InputManager::MouseMotionCallba
|
|||
drawP.selection.input_mouse_motion_callback_modify_selection(motion);
|
||||
}
|
||||
|
||||
std::optional<InputManager::TextBoxStartInfo> EditTool::get_text_box_start_info() {
|
||||
if(objInfoBeingEdited)
|
||||
return compEditTool->get_text_box_start_info();
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
void EditTool::right_click_popup_gui(Toolbar& t, Vector2f popupPos) {
|
||||
if(objInfoBeingEdited)
|
||||
return compEditTool->right_click_popup_gui(t, popupPos);
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ class EditTool : public DrawingProgramToolBase {
|
|||
virtual void input_key_callback(const InputManager::KeyCallbackArgs& key) override;
|
||||
virtual void input_mouse_button_on_canvas_callback(const InputManager::MouseButtonCallbackArgs& button) override;
|
||||
virtual void input_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion) override;
|
||||
virtual std::optional<InputManager::TextBoxStartInfo> get_text_box_start_info() override;
|
||||
~EditTool();
|
||||
|
||||
void add_point_handle(const HandleData& handle);
|
||||
|
|
|
|||
|
|
@ -16,5 +16,6 @@ void DrawingProgramEditToolBase::input_text_callback(const InputManager::TextCal
|
|||
void DrawingProgramEditToolBase::input_key_callback(const InputManager::KeyCallbackArgs& key) {}
|
||||
void DrawingProgramEditToolBase::input_mouse_button_on_canvas_callback(const InputManager::MouseButtonCallbackArgs& button, bool isDraggingPoint) {}
|
||||
void DrawingProgramEditToolBase::input_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion, bool isDraggingPoint) {}
|
||||
std::optional<InputManager::TextBoxStartInfo> DrawingProgramEditToolBase::get_text_box_start_info() { return std::nullopt; }
|
||||
|
||||
DrawingProgramEditToolBase::~DrawingProgramEditToolBase() {}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ class DrawingProgramEditToolBase {
|
|||
virtual void input_key_callback(const InputManager::KeyCallbackArgs& key);
|
||||
virtual void input_mouse_button_on_canvas_callback(const InputManager::MouseButtonCallbackArgs& button, bool isDraggingPoint);
|
||||
virtual void input_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion, bool isDraggingPoint);
|
||||
virtual std::optional<InputManager::TextBoxStartInfo> get_text_box_start_info();
|
||||
virtual ~DrawingProgramEditToolBase();
|
||||
protected:
|
||||
DrawingProgram& drawP;
|
||||
|
|
|
|||
|
|
@ -203,7 +203,7 @@ void TextBoxEditTool::edit_gui(Toolbar& t) {
|
|||
}
|
||||
|
||||
void TextBoxEditTool::input_paste_callback(const CustomEvents::PasteEvent& paste) {
|
||||
if(textboxID.has_value() && textboxID.value() == drawP.world.main.input.text.current_textbox_editing_id()) {
|
||||
if(userInput && userInput->id == drawP.world.main.input.currentTextboxID.value()) {
|
||||
auto& a = static_cast<TextBoxCanvasComponent&>(comp->obj->get_comp());
|
||||
if(userInput->input_paste_callback(paste)) {
|
||||
commit_update_and_layout_func();
|
||||
|
|
@ -213,7 +213,7 @@ void TextBoxEditTool::input_paste_callback(const CustomEvents::PasteEvent& paste
|
|||
}
|
||||
|
||||
void TextBoxEditTool::input_text_key_callback(const InputManager::KeyCallbackArgs& key) {
|
||||
if(textboxID.has_value() && textboxID.value() == drawP.world.main.input.text.current_textbox_editing_id()) {
|
||||
if(userInput && userInput->id == drawP.world.main.input.currentTextboxID.value()) {
|
||||
auto& a = static_cast<TextBoxCanvasComponent&>(comp->obj->get_comp());
|
||||
auto changes = userInput->input_key_callback(drawP.world.main.input, key);
|
||||
if(changes.textEdited || changes.cursorChanged) {
|
||||
|
|
@ -224,7 +224,7 @@ void TextBoxEditTool::input_text_key_callback(const InputManager::KeyCallbackArg
|
|||
}
|
||||
|
||||
void TextBoxEditTool::input_text_callback(const InputManager::TextCallbackArgs& text) {
|
||||
if(textboxID.has_value() && textboxID.value() == drawP.world.main.input.text.current_textbox_editing_id()) {
|
||||
if(userInput && userInput->id == drawP.world.main.input.currentTextboxID.value()) {
|
||||
auto& a = static_cast<TextBoxCanvasComponent&>(comp->obj->get_comp());
|
||||
userInput->add_text_to_textbox(text.str);
|
||||
commit_update_and_layout_func();
|
||||
|
|
@ -275,6 +275,25 @@ void TextBoxEditTool::input_mouse_motion_callback(const InputManager::MouseMotio
|
|||
}
|
||||
}
|
||||
|
||||
std::optional<InputManager::TextBoxStartInfo> TextBoxEditTool::get_text_box_start_info() {
|
||||
if(userInput) {
|
||||
InputManager::TextInputProperties tProps {
|
||||
.inputType = SDL_TextInputType::SDL_TEXTINPUT_TYPE_TEXT,
|
||||
.capitalization = SDL_Capitalization::SDL_CAPITALIZE_NONE,
|
||||
.autocorrect = true,
|
||||
.multiline = true,
|
||||
.androidInputType = InputManager::AndroidInputType::ANDROIDTEXT_TYPE_CLASS_TEXT
|
||||
};
|
||||
|
||||
return InputManager::TextBoxStartInfo {
|
||||
.id = userInput->id,
|
||||
.rect = std::nullopt,
|
||||
.inputProperties = tProps,
|
||||
};
|
||||
}
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
void TextBoxEditTool::right_click_popup_gui(Toolbar& t, Vector2f popupPos) {
|
||||
using namespace GUIStuff;
|
||||
using namespace ElementHelpers;
|
||||
|
|
@ -375,8 +394,8 @@ void TextBoxEditTool::commit_edit_updates(std::any& prevData) {
|
|||
auto& a = static_cast<TextBoxCanvasComponent&>(comp->obj->get_comp());
|
||||
a.d.editing = false;
|
||||
comp->obj->commit_update(drawP);
|
||||
if(textboxID.has_value())
|
||||
drawP.world.main.input.remove_text_box(textboxID.value());
|
||||
userInput = nullptr;
|
||||
CustomEvents::emit_event(CustomEvents::RefreshTextBoxInputEvent{});
|
||||
}
|
||||
|
||||
TextBoxEditTool::TextBoxEditToolAllData TextBoxEditTool::get_all_data(const TextBoxCanvasComponent& a) {
|
||||
|
|
@ -406,14 +425,8 @@ void TextBoxEditTool::edit_start(EditTool& editTool, std::any& prevData) {
|
|||
|
||||
comp->obj->commit_update(drawP);
|
||||
|
||||
userInput = std::make_unique<RichTextUserInput>(textbox, cur, currentModsPtr);
|
||||
textboxID = drawP.world.main.input.set_text_box_back(std::nullopt, {
|
||||
.inputType = SDL_TextInputType::SDL_TEXTINPUT_TYPE_TEXT,
|
||||
.capitalization = SDL_Capitalization::SDL_CAPITALIZE_NONE,
|
||||
.autocorrect = true,
|
||||
.multiline = true,
|
||||
.androidInputType = InputManager::AndroidInputType::ANDROIDTEXT_TYPE_CLASS_TEXT
|
||||
});
|
||||
userInput = std::make_unique<RichTextUserInput>(drawP.world.main.input.text_box_get_new_id(), textbox, cur, currentModsPtr);
|
||||
CustomEvents::emit_event(CustomEvents::RefreshTextBoxInputEvent{});
|
||||
}
|
||||
|
||||
bool TextBoxEditTool::edit_update() {
|
||||
|
|
|
|||
|
|
@ -22,9 +22,9 @@ class TextBoxEditTool : public DrawingProgramEditToolBase {
|
|||
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;
|
||||
virtual std::optional<InputManager::TextBoxStartInfo> get_text_box_start_info() override;
|
||||
private:
|
||||
std::unique_ptr<RichTextUserInput> userInput;
|
||||
std::optional<unsigned> textboxID;
|
||||
|
||||
struct TextBoxEditToolAllData {
|
||||
TextBoxCanvasComponent::Data textboxData;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue