Added clipboard code back (has issues)

This commit is contained in:
Yousef Khadadeh 2025-12-29 19:57:36 +03:00
parent 3df74095a3
commit fb3b13d303
22 changed files with 181 additions and 53 deletions

View file

@ -29,6 +29,12 @@ void BrushStrokeCanvasComponent::load_file(cereal::PortableBinaryInputArchive& a
a(d->points, d->color, d->hasRoundCaps);
}
std::unique_ptr<CanvasComponent> BrushStrokeCanvasComponent::get_data_copy() const {
auto toRet = std::make_unique<BrushStrokeCanvasComponent>();
toRet->d = d;
return toRet;
}
CanvasComponentType BrushStrokeCanvasComponent::get_type() const {
return CanvasComponentType::BRUSHSTROKE;
}

View file

@ -22,6 +22,7 @@ class BrushStrokeCanvasComponent : public CanvasComponent {
virtual void load(cereal::PortableBinaryInputArchive& a) override;
virtual void save_file(cereal::PortableBinaryOutputArchive& a) const override;
virtual void load_file(cereal::PortableBinaryInputArchive& a, VersionNumber version) override;
virtual std::unique_ptr<CanvasComponent> get_data_copy() const override;
struct Data {
std::vector<BrushStrokeCanvasComponentPoint> points;

View file

@ -8,6 +8,12 @@
void CanvasComponent::update(DrawingProgram& drawP) {
}
void CanvasComponent::remap_resource_ids(const std::unordered_map<NetworkingObjects::NetObjID, NetworkingObjects::NetObjID>& resourceOldToNewMap) {
}
void CanvasComponent::get_used_resources(std::unordered_set<NetworkingObjects::NetObjID>& resourceSet) const {
}
CanvasComponent* CanvasComponent::allocate_comp(CanvasComponentType type) {
switch(type) {
case CanvasComponentType::BRUSHSTROKE:

View file

@ -19,8 +19,11 @@ class CanvasComponent {
virtual void save_file(cereal::PortableBinaryOutputArchive& a) const = 0;
virtual void load_file(cereal::PortableBinaryInputArchive& a, VersionNumber version) = 0;
virtual void update(DrawingProgram& drawP);
virtual void get_used_resources(std::unordered_set<NetworkingObjects::NetObjID>& resourceSet) const;
virtual void remap_resource_ids(const std::unordered_map<NetworkingObjects::NetObjID, NetworkingObjects::NetObjID>& resourceOldToNewMap);
virtual void set_data_from(const CanvasComponent& other) = 0;
virtual std::unique_ptr<CanvasComponent> get_data_copy() const = 0;
protected:
friend class CanvasComponentContainer;
friend class CanvasComponentAllocator;

View file

@ -15,6 +15,13 @@ CanvasComponentContainer::CanvasComponentContainer(NetworkingObjects::NetObjMana
compAllocator->comp->compContainer = this;
}
CanvasComponentContainer::CanvasComponentContainer(NetworkingObjects::NetObjManager& objMan, const CopyData& copyData) {
compAllocator = objMan.make_obj_direct<CanvasComponentAllocator>(copyData.obj->get_type());
compAllocator->comp->compContainer = this;
compAllocator->comp->set_data_from(*copyData.obj);
coords = copyData.coords;
}
void CanvasComponentContainer::register_class(NetObjManager& objMan) {
objMan.register_class<CanvasComponentContainer, CanvasComponentContainer, CanvasComponentContainer, CanvasComponentContainer>({
.writeConstructorFuncClient = write_constructor_func,
@ -26,6 +33,13 @@ void CanvasComponentContainer::register_class(NetObjManager& objMan) {
});
}
std::shared_ptr<CanvasComponentContainer::CopyData> CanvasComponentContainer::get_data_copy() const {
auto toRet = std::make_shared<CopyData>();
toRet->coords = coords;
toRet->obj = compAllocator->comp->get_data_copy();
return toRet;
}
void CanvasComponentContainer::send_comp_update(DrawingProgram& drawP, bool finalUpdate) {
drawP.world.delayedUpdateObjectManager.send_update_to_all<CanvasComponentAllocator>(compAllocator, finalUpdate);
}

View file

@ -25,10 +25,18 @@ class CanvasComponentContainer {
constexpr static int COMP_COLLIDE_MIN_SHIFT_TINY = 9;
constexpr static int COMP_MIPMAP_LEVEL_ONE = 2;
constexpr static int COMP_MIPMAP_LEVEL_TWO = 5;
struct CopyData {
CoordSpaceHelper coords;
std::unique_ptr<CanvasComponent> obj;
};
CanvasComponentContainer();
CanvasComponentContainer(NetworkingObjects::NetObjManager& objMan, CanvasComponentType type);
CanvasComponentContainer(NetworkingObjects::NetObjManager& objMan, const CopyData& copyData);
static void register_class(NetworkingObjects::NetObjManager& t);
std::shared_ptr<CopyData> get_data_copy() const;
void save_file(cereal::PortableBinaryOutputArchive& a) const;
void load_file(cereal::PortableBinaryInputArchive& a, VersionNumber version);
CanvasComponent& get_comp() const;

View file

@ -52,6 +52,12 @@ void EllipseCanvasComponent::initialize_draw_data(DrawingProgram& drawP) {
create_collider();
}
std::unique_ptr<CanvasComponent> EllipseCanvasComponent::get_data_copy() const {
auto toRet = std::make_unique<EllipseCanvasComponent>();
toRet->d = d;
return toRet;
}
void EllipseCanvasComponent::set_data_from(const CanvasComponent& other) {
auto& otherEllipse = static_cast<const EllipseCanvasComponent&>(other);
d = otherEllipse.d;

View file

@ -10,6 +10,7 @@ class EllipseCanvasComponent : public CanvasComponent {
virtual void load(cereal::PortableBinaryInputArchive& a) override;
virtual void save_file(cereal::PortableBinaryOutputArchive& a) const override;
virtual void load_file(cereal::PortableBinaryInputArchive& a, VersionNumber version) override;
virtual std::unique_ptr<CanvasComponent> get_data_copy() const override;
virtual void set_data_from(const CanvasComponent& other) override;
// User input data

View file

@ -29,6 +29,12 @@ void ImageCanvasComponent::load_file(cereal::PortableBinaryInputArchive& a, Vers
a(d.p1, d.p2, d.imageID);
}
std::unique_ptr<CanvasComponent> ImageCanvasComponent::get_data_copy() const {
auto toRet = std::make_unique<ImageCanvasComponent>();
toRet->d = d;
return toRet;
}
void ImageCanvasComponent::draw_download_progress_bar(SkCanvas* canvas, const DrawData& drawData, float progress) const {
if(progress == 0.0f)
return;
@ -53,6 +59,14 @@ void ImageCanvasComponent::set_data_from(const CanvasComponent& other) {
d = otherImage.d;
}
void ImageCanvasComponent::remap_resource_ids(const std::unordered_map<NetworkingObjects::NetObjID, NetworkingObjects::NetObjID>& resourceOldToNewMap) {
d.imageID = resourceOldToNewMap.at(d.imageID);
}
void ImageCanvasComponent::get_used_resources(std::unordered_set<NetworkingObjects::NetObjID>& resourceSet) const {
resourceSet.emplace(d.imageID);
}
void ImageCanvasComponent::draw(SkCanvas* canvas, const DrawData& drawData) const {
ResourceDisplay* display = drawData.rMan->get_display_data(d.imageID);
if(display)

View file

@ -11,7 +11,10 @@ class ImageCanvasComponent : public CanvasComponent {
virtual void save_file(cereal::PortableBinaryOutputArchive& a) const override;
virtual void load_file(cereal::PortableBinaryInputArchive& a, VersionNumber version) override;
virtual CanvasComponentType get_type() const override;
std::unique_ptr<CanvasComponent> get_data_copy() const override;
virtual void set_data_from(const CanvasComponent& other) override;
virtual void remap_resource_ids(const std::unordered_map<NetworkingObjects::NetObjID, NetworkingObjects::NetObjID>& resourceOldToNewMap) override;
virtual void get_used_resources(std::unordered_set<NetworkingObjects::NetObjID>& resourceSet) const override;
void draw_download_progress_bar(SkCanvas* canvas, const DrawData& drawData, float progress) const;

View file

@ -27,6 +27,12 @@ void RectangleCanvasComponent::load_file(cereal::PortableBinaryInputArchive& a,
a(d.strokeColor, d.fillColor, d.cornerRadius, d.strokeWidth, d.p1, d.p2, d.fillStrokeMode);
}
std::unique_ptr<CanvasComponent> RectangleCanvasComponent::get_data_copy() const {
auto toRet = std::make_unique<RectangleCanvasComponent>();
toRet->d = d;
return toRet;
}
void RectangleCanvasComponent::draw(SkCanvas* canvas, const DrawData& drawData) const {
if(d.fillStrokeMode == 0 || d.fillStrokeMode == 2) {
SkPaint p;

View file

@ -11,6 +11,7 @@ class RectangleCanvasComponent : public CanvasComponent {
virtual void save_file(cereal::PortableBinaryOutputArchive& a) const override;
virtual void load_file(cereal::PortableBinaryInputArchive& a, VersionNumber version) override;
virtual CanvasComponentType get_type() const override;
std::unique_ptr<CanvasComponent> get_data_copy() const override;
virtual void set_data_from(const CanvasComponent& other) override;
// User input data

View file

@ -58,6 +58,12 @@ void TextBoxCanvasComponent::load_file(cereal::PortableBinaryInputArchive& a, Ve
}
}
std::unique_ptr<CanvasComponent> TextBoxCanvasComponent::get_data_copy() const {
auto toRet = std::make_unique<TextBoxCanvasComponent>();
toRet->d = d;
return toRet;
}
void TextBoxCanvasComponent::set_data_from(const CanvasComponent& other) {
auto& otherTextBox = static_cast<const TextBoxCanvasComponent&>(other);
d = otherTextBox.d;

View file

@ -15,6 +15,7 @@ class TextBoxCanvasComponent : public CanvasComponent {
virtual void load(cereal::PortableBinaryInputArchive& a) override;
virtual void save_file(cereal::PortableBinaryOutputArchive& a) const override;
virtual void load_file(cereal::PortableBinaryInputArchive& a, VersionNumber version) override;
std::unique_ptr<CanvasComponent> get_data_copy() const override;
virtual void set_data_from(const CanvasComponent& other) override;
// User input data