Fixed segmentation fault when copying textbox

This commit is contained in:
Yousef Khadadeh 2025-11-16 16:49:47 +03:00
parent 79f7135746
commit f0f289d785
13 changed files with 27 additions and 25 deletions

View file

@ -37,14 +37,14 @@ DrawComponentType DrawBrushStroke::get_type() const {
#ifndef IS_SERVER
std::shared_ptr<DrawComponent> DrawBrushStroke::copy() const {
std::shared_ptr<DrawComponent> DrawBrushStroke::copy(DrawingProgram& drawP) const {
auto a = std::make_shared<DrawBrushStroke>();
a->d = d;
a->coords = coords;
return a;
}
std::shared_ptr<DrawComponent> DrawBrushStroke::deep_copy() const {
std::shared_ptr<DrawComponent> DrawBrushStroke::deep_copy(DrawingProgram& drawP) const {
auto a = std::make_shared<DrawBrushStroke>();
a->d = d;
a->coords = coords;

View file

@ -36,8 +36,8 @@ class DrawBrushStroke : public DrawComponent {
std::shared_ptr<Data> d = std::make_shared<Data>(); // It's a pointer here since brush strokes cant be edited
#ifndef IS_SERVER
virtual std::shared_ptr<DrawComponent> copy() const override;
virtual std::shared_ptr<DrawComponent> deep_copy() const override;
virtual std::shared_ptr<DrawComponent> copy(DrawingProgram& drawP) const override;
virtual std::shared_ptr<DrawComponent> deep_copy(DrawingProgram& drawP) const override;
virtual void draw(SkCanvas* canvas, const DrawData& drawData) override;
virtual void initialize_draw_data(DrawingProgram& drawP) override;

View file

@ -100,8 +100,8 @@ class DrawComponent {
void calculate_world_bounds();
virtual SCollision::AABB<float> get_obj_coord_bounds() const = 0;
virtual std::shared_ptr<DrawComponent> copy() const = 0;
virtual std::shared_ptr<DrawComponent> deep_copy() const = 0;
virtual std::shared_ptr<DrawComponent> copy(DrawingProgram& drawP) const = 0;
virtual std::shared_ptr<DrawComponent> deep_copy(DrawingProgram& drawP) const = 0;
virtual void draw(SkCanvas* canvas, const DrawData& drawData) = 0;
void commit_update(DrawingProgram& drawP, bool invalidateCache = true); // invalidateCache = false version should be thread safe

View file

@ -27,14 +27,14 @@ void DrawEllipse::load_file(cereal::PortableBinaryInputArchive& a, VersionNumber
}
#ifndef IS_SERVER
std::shared_ptr<DrawComponent> DrawEllipse::copy() const {
std::shared_ptr<DrawComponent> DrawEllipse::copy(DrawingProgram& drawP) const {
auto a = std::make_shared<DrawEllipse>();
a->d = d;
a->coords = coords;
return a;
}
std::shared_ptr<DrawComponent> DrawEllipse::deep_copy() const {
std::shared_ptr<DrawComponent> DrawEllipse::deep_copy(DrawingProgram& drawP) const {
auto a = std::make_shared<DrawEllipse>();
a->d = d;
a->coords = coords;

View file

@ -27,8 +27,8 @@ class DrawEllipse : public DrawComponent {
} d;
#ifndef IS_SERVER
virtual std::shared_ptr<DrawComponent> copy() const override;
virtual std::shared_ptr<DrawComponent> deep_copy() const override;
virtual std::shared_ptr<DrawComponent> copy(DrawingProgram& drawP) const override;
virtual std::shared_ptr<DrawComponent> deep_copy(DrawingProgram& drawP) const override;
virtual void draw(SkCanvas* canvas, const DrawData& drawData) override;
virtual void initialize_draw_data(DrawingProgram& drawP) override;

View file

@ -43,14 +43,14 @@ void DrawImage::remap_resource_ids(std::unordered_map<ServerClientID, ServerClie
}
#ifndef IS_SERVER
std::shared_ptr<DrawComponent> DrawImage::copy() const {
std::shared_ptr<DrawComponent> DrawImage::copy(DrawingProgram& drawP) const {
auto a = std::make_shared<DrawImage>();
a->d = d;
a->coords = coords;
return a;
}
std::shared_ptr<DrawComponent> DrawImage::deep_copy() const {
std::shared_ptr<DrawComponent> DrawImage::deep_copy(DrawingProgram& drawP) const {
auto a = std::make_shared<DrawImage>();
a->d = d;
a->coords = coords;

View file

@ -28,8 +28,8 @@ class DrawImage : public DrawComponent {
} d;
#ifndef IS_SERVER
virtual std::shared_ptr<DrawComponent> copy() const override;
virtual std::shared_ptr<DrawComponent> deep_copy() const override;
virtual std::shared_ptr<DrawComponent> copy(DrawingProgram& drawP) const override;
virtual std::shared_ptr<DrawComponent> deep_copy(DrawingProgram& drawP) const override;
virtual void draw(SkCanvas* canvas, const DrawData& drawData) override;
virtual void initialize_draw_data(DrawingProgram& drawP) override;

View file

@ -30,14 +30,14 @@ void DrawRectangle::load_file(cereal::PortableBinaryInputArchive& a, VersionNumb
}
#ifndef IS_SERVER
std::shared_ptr<DrawComponent> DrawRectangle::copy() const {
std::shared_ptr<DrawComponent> DrawRectangle::copy(DrawingProgram& drawP) const {
auto a = std::make_shared<DrawRectangle>();
a->d = d;
a->coords = coords;
return a;
}
std::shared_ptr<DrawComponent> DrawRectangle::deep_copy() const {
std::shared_ptr<DrawComponent> DrawRectangle::deep_copy(DrawingProgram& drawP) const {
auto a = std::make_shared<DrawRectangle>();
a->d = d;
a->coords = coords;

View file

@ -28,8 +28,8 @@ class DrawRectangle : public DrawComponent {
} d;
#ifndef IS_SERVER
virtual std::shared_ptr<DrawComponent> copy() const override;
virtual std::shared_ptr<DrawComponent> deep_copy() const override;
virtual std::shared_ptr<DrawComponent> copy(DrawingProgram& drawP) const override;
virtual std::shared_ptr<DrawComponent> deep_copy(DrawingProgram& drawP) const override;
virtual void draw(SkCanvas* canvas, const DrawData& drawData) override;
virtual void initialize_draw_data(DrawingProgram& drawP) override;

View file

@ -61,20 +61,22 @@ void DrawTextBox::load_file(cereal::PortableBinaryInputArchive& a, VersionNumber
}
#ifndef IS_SERVER
std::shared_ptr<DrawComponent> DrawTextBox::copy() const {
std::shared_ptr<DrawComponent> DrawTextBox::copy(DrawingProgram& drawP) const {
auto a = std::make_shared<DrawTextBox>();
a->d = d;
a->coords = coords;
a->textBox->set_rich_text_data(textBox->get_rich_text_data());
a->init_text_box(drawP);
return a;
}
std::shared_ptr<DrawComponent> DrawTextBox::deep_copy() const {
std::shared_ptr<DrawComponent> DrawTextBox::deep_copy(DrawingProgram& drawP) const {
auto a = std::make_shared<DrawTextBox>();
a->d = d;
a->coords = coords;
a->textBox->set_rich_text_data(textBox->get_rich_text_data());
a->collisionTree = collisionTree;
a->init_text_box(drawP);
return a;
}

View file

@ -29,8 +29,8 @@ class DrawTextBox : public DrawComponent {
} d;
#ifndef IS_SERVER
virtual std::shared_ptr<DrawComponent> copy() const override;
virtual std::shared_ptr<DrawComponent> deep_copy() const override;
virtual std::shared_ptr<DrawComponent> copy(DrawingProgram& drawP) const override;
virtual std::shared_ptr<DrawComponent> deep_copy(DrawingProgram& drawP) const override;
virtual void draw(SkCanvas* canvas, const DrawData& drawData) override;
virtual void initialize_draw_data(DrawingProgram& drawP) override;