#include "DrawingProgramLayerListItem.hpp" #include "DrawingProgramLayerFolder.hpp" #include #include "DrawingProgramLayer.hpp" #include "../../World.hpp" using namespace NetworkingObjects; DrawingProgramLayerListItem::DrawingProgramLayerListItem() {} DrawingProgramLayerListItem::DrawingProgramLayerListItem(NetworkingObjects::NetObjManager& netObjMan, const std::string& initName, bool isFolder) { if(isFolder) { folderData = std::make_unique(); folderData->folderList = netObjMan.make_obj>(); } else { layerData = std::make_unique(); layerData->components = netObjMan.make_obj(); } nameData = netObjMan.make_obj(); nameData->name = initName; displayData = netObjMan.make_obj(); } void DrawingProgramLayerListItem::reassign_netobj_ids_call() { if(folderData) folderData->folderList.reassign_ids(); else layerData->components.reassign_ids(); nameData.reassign_ids(); displayData.reassign_ids(); } bool DrawingProgramLayerListItem::is_folder() const { return folderData != nullptr; } DrawingProgramLayerFolder& DrawingProgramLayerListItem::get_folder() const { return *folderData; } DrawingProgramLayer& DrawingProgramLayerListItem::get_layer() const { return *layerData; } void DrawingProgramLayerListItem::draw(SkCanvas* canvas, const DrawData& drawData) const { if(displayData->visible) { canvas->saveLayerAlphaf(nullptr, displayData->alpha); if(folderData) folderData->draw(canvas, drawData); else layerData->draw(canvas, drawData); canvas->restore(); } } void DrawingProgramLayerListItem::set_name(NetworkingObjects::DelayUpdateSerializedClassManager& delayedNetObjMan, const std::string& newName) const { if(nameData && nameData->name != newName) { nameData->name = newName; delayedNetObjMan.send_update_to_all(nameData, false); } } const std::string& DrawingProgramLayerListItem::get_name() const { return nameData->name; } void DrawingProgramLayerListItem::set_alpha(NetworkingObjects::DelayUpdateSerializedClassManager& delayedNetObjMan, float newAlpha) const { if(displayData && displayData->alpha != newAlpha) { displayData->alpha = newAlpha; delayedNetObjMan.send_update_to_all(displayData, false); } } float DrawingProgramLayerListItem::get_alpha() const { return displayData->alpha; } void DrawingProgramLayerListItem::set_visible(NetworkingObjects::DelayUpdateSerializedClassManager& delayedNetObjMan, bool newVisible) const { if(displayData && displayData->visible != newVisible) { displayData->visible = newVisible; delayedNetObjMan.send_update_to_all(displayData, false); } } bool DrawingProgramLayerListItem::get_visible() const { return displayData->visible; } void DrawingProgramLayerListItem::register_class(World& w) { w.netObjMan.register_class({ .writeConstructorFuncClient = write_constructor_func, .readConstructorFuncClient = read_constructor_func, .readUpdateFuncClient = nullptr, .writeConstructorFuncServer = write_constructor_func, .readConstructorFuncServer = read_constructor_func, .readUpdateFuncServer = nullptr, }); w.delayedUpdateObjectManager.register_class(w.netObjMan); w.delayedUpdateObjectManager.register_class(w.netObjMan); } void DrawingProgramLayerListItem::write_constructor_func(const NetworkingObjects::NetObjTemporaryPtr& o, cereal::PortableBinaryOutputArchive& a) { a(o->is_folder()); if(o->is_folder()) o->folderData->folderList.write_create_message(a); else o->layerData->components.write_create_message(a); o->nameData.write_create_message(a); o->displayData.write_create_message(a); } void DrawingProgramLayerListItem::read_constructor_func(const NetworkingObjects::NetObjTemporaryPtr& o, cereal::PortableBinaryInputArchive& a, const std::shared_ptr& c) { bool isFolder; a(isFolder); if(isFolder) { o->folderData = std::make_unique(); o->folderData->folderList = o.get_obj_man()->read_create_message>(a, c); } else { o->layerData = std::make_unique(); o->layerData->components = o.get_obj_man()->read_create_message(a, c); } o->nameData = o.get_obj_man()->read_create_message(a, c); o->displayData = o.get_obj_man()->read_create_message(a, c); }