diff --git a/src/DrawingProgram/Tools/BrushTool.cpp b/src/DrawingProgram/Tools/BrushTool.cpp index 5a832ca..9314f62 100644 --- a/src/DrawingProgram/Tools/BrushTool.cpp +++ b/src/DrawingProgram/Tools/BrushTool.cpp @@ -30,7 +30,6 @@ #include "../../GUIStuff/ElementHelpers/CheckBoxHelpers.hpp" #define MINIMUM_DISTANCE_TO_NEXT_POINT 0.002f -#define SMOOTH_FACTOR 0.707f #define DRAW_MINIMUM_LIMIT 1.0f BrushTool::BrushTool(DrawingProgram& initDrawP): @@ -171,7 +170,7 @@ void BrushTool::input_mouse_motion_callback(const InputManager::MouseMotionCallb } } - smooth_out_points(SMOOTH_FACTOR); + smooth_out_points(drawP.world.main.conf.tabletOptions.brushPressureSmoothingFactor); containerPtr->send_comp_update(drawP, false); containerPtr->commit_update(drawP); } @@ -190,7 +189,7 @@ void BrushTool::input_pen_axis_callback(const InputManager::PenAxisCallbackArgs& auto& brushPoints = *brushStroke.d.points; float width = toolConfig.get_relative_width_stroke_size(drawP, containerPtr->coords.inverseScale).first.value() * penWidth; brushPoints.back().width = std::max(brushPoints.back().width, width); - smooth_out_points(SMOOTH_FACTOR); + smooth_out_points(drawP.world.main.conf.tabletOptions.brushPressureSmoothingFactor); containerPtr->send_comp_update(drawP, false); containerPtr->commit_update(drawP); } diff --git a/src/DrawingProgram/Tools/TextBoxTool.cpp b/src/DrawingProgram/Tools/TextBoxTool.cpp index 0155f77..4441416 100644 --- a/src/DrawingProgram/Tools/TextBoxTool.cpp +++ b/src/DrawingProgram/Tools/TextBoxTool.cpp @@ -69,6 +69,7 @@ void TextBoxTool::input_mouse_button_on_canvas_callback(const InputManager::Mous objInfoBeingEdited = drawP.layerMan.add_component_to_layer_being_edited(newContainer); } else if(!button.down && objInfoBeingEdited) { + make_sure_textbox_is_big(); auto editTool = std::make_unique(drawP); editTool->edit_start(objInfoBeingEdited, false); drawP.toolToSwitchToAfterUpdate = std::move(editTool); @@ -96,6 +97,16 @@ void TextBoxTool::input_mouse_motion_callback(const InputManager::MouseMotionCal } } +void TextBoxTool::make_sure_textbox_is_big() { + if(objInfoBeingEdited) { + const Vector2f TEXTBOX_MINIMUM_DIMENSIONS{200.0f, 100.0f}; + NetworkingObjects::NetObjOwnerPtr& containerPtr = objInfoBeingEdited->obj; + TextBoxCanvasComponent& textBox = static_cast(containerPtr->get_comp()); + if(vec_distance(textBox.d.p1, textBox.d.p2) < 20.0f) + textBox.d.p2 = textBox.d.p1 + TEXTBOX_MINIMUM_DIMENSIONS; + } +} + void TextBoxTool::erase_component(CanvasComponentContainer::ObjInfo* erasedComp) { if(objInfoBeingEdited == erasedComp) objInfoBeingEdited = nullptr; @@ -119,6 +130,7 @@ bool TextBoxTool::prevent_undo_or_redo() { void TextBoxTool::commit() { if(objInfoBeingEdited) { NetworkingObjects::NetObjOwnerPtr& containerPtr = objInfoBeingEdited->obj; + make_sure_textbox_is_big(); containerPtr->commit_update(drawP); containerPtr->send_comp_update(drawP, true); drawP.layerMan.add_undo_place_component(objInfoBeingEdited); diff --git a/src/DrawingProgram/Tools/TextBoxTool.hpp b/src/DrawingProgram/Tools/TextBoxTool.hpp index b4bcda9..a3dff1f 100644 --- a/src/DrawingProgram/Tools/TextBoxTool.hpp +++ b/src/DrawingProgram/Tools/TextBoxTool.hpp @@ -39,6 +39,7 @@ class TextBoxTool : public DrawingProgramToolBase { virtual void input_mouse_motion_callback(const InputManager::MouseMotionCallbackArgs& motion) override; private: void commit(); + void make_sure_textbox_is_big(); Vector2f startAt; Vector2f endAt; diff --git a/src/GlobalConfig.cpp b/src/GlobalConfig.cpp index 9953bf4..4f613d4 100644 --- a/src/GlobalConfig.cpp +++ b/src/GlobalConfig.cpp @@ -67,6 +67,7 @@ nlohmann::json GlobalConfig::get_config_json(const InputManager& input) const { #endif json tablet; + tablet["brushPressureSmoothingFactor"] = tabletOptions.brushPressureSmoothingFactor; tablet["pressureAffectsBrushWidth"] = tabletOptions.pressureAffectsBrushWidth; tablet["middleClickButton"] = tabletOptions.middleClickButton; tablet["rightClickButton"] = tabletOptions.rightClickButton; @@ -136,6 +137,7 @@ void GlobalConfig::set_config_json(InputManager& input, const nlohmann::json& j, #endif try{j.at("antialiasing").get_to(antialiasing);} catch(...) {} + try{j.at("tablet").at("brushPressureSmoothingFactor").get_to(tabletOptions.brushPressureSmoothingFactor);} catch(...) {} try{j.at("tablet").at("pressureAffectsBrushWidth").get_to(tabletOptions.pressureAffectsBrushWidth);} catch(...) {} try{j.at("tablet").at("middleClickButton").get_to(tabletOptions.middleClickButton);} catch(...) {} try{j.at("tablet").at("rightClickButton").get_to(tabletOptions.rightClickButton);} catch(...) {} diff --git a/src/GlobalConfig.hpp b/src/GlobalConfig.hpp index 80da8f1..b7713de 100644 --- a/src/GlobalConfig.hpp +++ b/src/GlobalConfig.hpp @@ -72,6 +72,7 @@ class GlobalConfig { bool ignoreMouseMovementWhenPenInProximity = false; bool disableTouchWhenPenInProximity = false; float brushMinimumSize = 0.0f; + float brushPressureSmoothingFactor = 0.707f; bool zoomWhilePenDownAndButtonHeld = true; } tabletOptions; diff --git a/src/Screens/FileSelectScreen.cpp b/src/Screens/FileSelectScreen.cpp index 2eac137..a5fb21e 100644 --- a/src/Screens/FileSelectScreen.cpp +++ b/src/Screens/FileSelectScreen.cpp @@ -942,6 +942,7 @@ void FileSelectScreen::settings_view() { checkbox_boolean_field(gui, "disable touch when pen in proximity", "Disable touch when pen in proximity", &main.conf.tabletOptions.disableTouchWhenPenInProximity); checkbox_boolean_field(gui, "make all tools share same size", "Make all tools share size", &main.toolConfig.globalConf.useGlobalRelativeWidth); slider_scalar_field(gui, "tablet brush minimum size", "Brush relative minimum size", &main.conf.tabletOptions.brushMinimumSize, 0.0f, 1.0f, {.decimalPrecision = 3}); + slider_scalar_field(gui, "tablet brush pressure smoothing factor", "Brush pressure smoothing factor", &main.conf.tabletOptions.brushPressureSmoothingFactor, 0.0f, 1.0f, {.decimalPrecision = 3}); checkbox_boolean_field(gui, "pen pressure width", "Pen pressure affects brush size", &main.conf.tabletOptions.pressureAffectsBrushWidth); #ifndef __ANDROID__ checkbox_boolean_field(gui, "use mobile UI", "Use mobile UI (requires restart)", &main.conf.mobileUI); diff --git a/src/Toolbar.cpp b/src/Toolbar.cpp index 769aa0c..84f3c1c 100644 --- a/src/Toolbar.cpp +++ b/src/Toolbar.cpp @@ -1593,6 +1593,7 @@ void Toolbar::general_settings_inner_gui() { input_scalar_field(gui, "middle click", "Middle click pen button", &main.conf.tabletOptions.middleClickButton, 1, 255); input_scalar_field(gui, "right click", "Right click pen button", &main.conf.tabletOptions.rightClickButton, 1, 255); slider_scalar_field(gui, "tablet brush minimum size", "Brush relative minimum size", &main.conf.tabletOptions.brushMinimumSize, 0.0f, 1.0f, {.decimalPrecision = 3}); + slider_scalar_field(gui, "tablet brush pressure smoothing factor", "Brush pressure smoothing factor", &main.conf.tabletOptions.brushPressureSmoothingFactor, 0.0f, 1.0f, {.decimalPrecision = 3}); checkbox_boolean_field(gui, "tablet zoom with button method", "Zoom when pen touching tablet and pen button assigned to middle click is held", &main.conf.tabletOptions.zoomWhilePenDownAndButtonHeld); #ifdef _WIN32 checkbox_boolean_field(gui, "mouse ignore when pen proximity", "Ignore mouse movement when pen in proximity", &main.conf.tabletOptions.ignoreMouseMovementWhenPenInProximity);