Improved brush tool performance
This commit is contained in:
parent
8df34da421
commit
0a474c16a0
14 changed files with 33 additions and 27 deletions
|
|
@ -45,8 +45,10 @@ void BrushTool::switch_tool(DrawingProgramToolType newTool) {
|
|||
}
|
||||
|
||||
void BrushTool::erase_component(CanvasComponentContainer::ObjInfo* erasedComp) {
|
||||
if(objInfoBeingEdited == erasedComp)
|
||||
if(objInfoBeingEdited == erasedComp) {
|
||||
objInfoBeingEdited = nullptr;
|
||||
commitUpdate = false;
|
||||
}
|
||||
}
|
||||
|
||||
void BrushTool::smooth_out_points(float smoothFactor) {
|
||||
|
|
@ -171,8 +173,7 @@ void BrushTool::input_mouse_motion_callback(const InputManager::MouseMotionCallb
|
|||
}
|
||||
|
||||
smooth_out_points(drawP.world.main.conf.tabletOptions.brushPressureSmoothingFactor);
|
||||
containerPtr->send_comp_update(drawP, false);
|
||||
containerPtr->commit_update(drawP);
|
||||
commitUpdate = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -190,8 +191,7 @@ void BrushTool::input_pen_axis_callback(const InputManager::PenAxisCallbackArgs&
|
|||
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(drawP.world.main.conf.tabletOptions.brushPressureSmoothingFactor);
|
||||
containerPtr->send_comp_update(drawP, false);
|
||||
containerPtr->commit_update(drawP);
|
||||
commitUpdate = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -222,6 +222,13 @@ bool BrushTool::extensive_point_checking_back(const BrushStrokeCanvasComponent&
|
|||
void BrushTool::tool_update() {
|
||||
if(!drawP.world.main.g.gui.cursor_obstructed())
|
||||
drawP.world.main.input.hideCursor = true;
|
||||
|
||||
if(commitUpdate && objInfoBeingEdited) {
|
||||
NetworkingObjects::NetObjOwnerPtr<CanvasComponentContainer>& containerPtr = objInfoBeingEdited->obj;
|
||||
containerPtr->send_comp_update(drawP, false);
|
||||
containerPtr->commit_update(drawP);
|
||||
commitUpdate = false;
|
||||
}
|
||||
}
|
||||
|
||||
void BrushTool::commit_stroke() {
|
||||
|
|
@ -237,6 +244,7 @@ void BrushTool::commit_stroke() {
|
|||
components->erase(components, containerPtr->objInfo);
|
||||
}
|
||||
objInfoBeingEdited = nullptr;
|
||||
commitUpdate = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ class BrushTool : public DrawingProgramToolBase {
|
|||
|
||||
float penWidth = 1.0f;
|
||||
bool addedTemporaryPoint = false;
|
||||
bool commitUpdate = false;
|
||||
|
||||
CanvasComponentContainer::ObjInfo* objInfoBeingEdited = nullptr;
|
||||
|
||||
|
|
|
|||
|
|
@ -318,10 +318,8 @@ bool EditTool::is_editable(CanvasComponentContainer::ObjInfo* comp) {
|
|||
|
||||
void EditTool::tool_update() {
|
||||
if(objInfoBeingEdited) {
|
||||
compEditTool->edit_update();
|
||||
objInfoBeingEdited->obj->send_comp_update(drawP, false);
|
||||
bool shouldNotReset = compEditTool->edit_update();
|
||||
if(!shouldNotReset)
|
||||
switch_tool(get_type());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ void BrushEditTool::edit_gui(Toolbar& t) {
|
|||
|
||||
auto& a = static_cast<BrushStrokeCanvasComponent&>(comp->obj->get_comp());
|
||||
auto& gui = drawP.world.main.g.gui;
|
||||
auto commit_update_func = [&] { comp->obj->commit_update(drawP); };
|
||||
auto commit_update_func = [&] { commitUpdate = true; };
|
||||
|
||||
gui.new_id("edit tool brush", [&] {
|
||||
text_label_centered(gui, "Edit Brush Stroke");
|
||||
|
|
@ -53,7 +53,7 @@ void BrushEditTool::gui_phone_toolbox(PhoneDrawingProgramScreen& t) {
|
|||
|
||||
auto& a = static_cast<BrushStrokeCanvasComponent&>(comp->obj->get_comp());
|
||||
auto& gui = drawP.world.main.g.gui;
|
||||
auto commit_update_func = [&] { comp->obj->commit_update(drawP); };
|
||||
auto commit_update_func = [&] { commitUpdate = true; };
|
||||
|
||||
gui.new_id("edit tool brush", [&] {
|
||||
left_to_right_line_layout(gui, [&]() {
|
||||
|
|
@ -78,6 +78,9 @@ void BrushEditTool::edit_start(EditTool& editTool, std::any& prevData) {
|
|||
void BrushEditTool::commit_edit_updates(std::any& prevData) {
|
||||
}
|
||||
|
||||
bool BrushEditTool::edit_update() {
|
||||
return true;
|
||||
void BrushEditTool::edit_update() {
|
||||
if(commitUpdate) {
|
||||
comp->obj->commit_update(drawP);
|
||||
commitUpdate = false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,10 +28,11 @@ class BrushEditTool : public DrawingProgramEditToolBase {
|
|||
BrushEditTool(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_update() override;
|
||||
virtual void edit_gui(Toolbar& t) override;
|
||||
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
|
||||
virtual Vector4f* color_picker_color(Vector4f* oldColor) override;
|
||||
private:
|
||||
bool commitUpdate = false;
|
||||
Vector4f oldColor;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ class DrawingProgramEditToolBase {
|
|||
DrawingProgramEditToolBase(DrawingProgram& initDrawP, CanvasComponentContainer::ObjInfo* initComp);
|
||||
virtual void edit_start(EditTool& editTool, std::any& prevData) = 0;
|
||||
virtual void commit_edit_updates(std::any& prevData) = 0;
|
||||
virtual bool edit_update() = 0;
|
||||
virtual void edit_update() = 0;
|
||||
virtual void edit_gui(Toolbar& t) = 0;
|
||||
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) = 0;
|
||||
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos);
|
||||
|
|
|
|||
|
|
@ -122,6 +122,5 @@ void EllipseDrawEditTool::edit_start(EditTool& editTool, std::any& prevData) {
|
|||
void EllipseDrawEditTool::commit_edit_updates(std::any& prevData) {
|
||||
}
|
||||
|
||||
bool EllipseDrawEditTool::edit_update() {
|
||||
return true;
|
||||
void EllipseDrawEditTool::edit_update() {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,11 +31,10 @@ class EllipseDrawEditTool : public DrawingProgramEditToolBase {
|
|||
virtual void edit_start(EditTool& editTool, std::any& prevData) override;
|
||||
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
|
||||
virtual void commit_edit_updates(std::any& prevData) override;
|
||||
virtual bool edit_update() override;
|
||||
virtual void edit_update() override;
|
||||
virtual void edit_gui(Toolbar& t) override;
|
||||
virtual Vector4f* color_picker_color(Vector4f* oldColor) override;
|
||||
private:
|
||||
void commit();
|
||||
|
||||
std::optional<EllipseCanvasComponent::Data> oldData;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -59,8 +59,7 @@ void ImageEditTool::commit_edit_updates(std::any& prevData) {
|
|||
comp->obj->commit_update(drawP);
|
||||
}
|
||||
|
||||
bool ImageEditTool::edit_update() {
|
||||
return true;
|
||||
void ImageEditTool::edit_update() {
|
||||
}
|
||||
|
||||
void ImageEditTool::edit_gui(Toolbar& t) {
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class ImageEditTool : public DrawingProgramEditToolBase {
|
|||
ImageEditTool(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_update() override;
|
||||
virtual void edit_gui(Toolbar& t) override;
|
||||
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -120,6 +120,5 @@ void RectDrawEditTool::edit_start(EditTool& editTool, std::any& prevData) {
|
|||
void RectDrawEditTool::commit_edit_updates(std::any& prevData) {
|
||||
}
|
||||
|
||||
bool RectDrawEditTool::edit_update() {
|
||||
return true;
|
||||
void RectDrawEditTool::edit_update() {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ class RectDrawEditTool : public DrawingProgramEditToolBase {
|
|||
RectDrawEditTool(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_update() override;
|
||||
virtual void edit_gui(Toolbar& t) override;
|
||||
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
|
||||
virtual Vector4f* color_picker_color(Vector4f* oldColor) override;
|
||||
|
|
|
|||
|
|
@ -796,6 +796,5 @@ void TextBoxEditTool::edit_start(EditTool& editTool, std::any& prevData) {
|
|||
CustomEvents::emit_event(CustomEvents::RefreshTextBoxInputEvent{});
|
||||
}
|
||||
|
||||
bool TextBoxEditTool::edit_update() {
|
||||
return true;
|
||||
void TextBoxEditTool::edit_update() {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ class TextBoxEditTool : public DrawingProgramEditToolBase {
|
|||
|
||||
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_update() override;
|
||||
virtual void edit_gui(Toolbar& t) override;
|
||||
virtual void gui_phone_toolbox(PhoneDrawingProgramScreen& t) override;
|
||||
virtual void right_click_popup_gui(Toolbar& t, Vector2f popupPos) override;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue