diff --git a/src/DrawingProgram/DrawingProgram.hpp b/src/DrawingProgram/DrawingProgram.hpp index 850e7bf..5e19c3e 100644 --- a/src/DrawingProgram/DrawingProgram.hpp +++ b/src/DrawingProgram/DrawingProgram.hpp @@ -87,7 +87,7 @@ class DrawingProgram { struct GlobalControls { float relativeWidth = 15.0f; - Vector4f foregroundColor{0.9f, 0.9f, 0.9f, 1.0f}; + Vector4f foregroundColor{1.0f, 1.0f, 1.0f, 1.0f}; Vector4f backgroundColor{0.0f, 0.0f, 0.0f, 1.0f}; WorldVec previousMouseWorldPos = {0, 0}; WorldVec currentMouseWorldPos = {0, 0}; diff --git a/src/ResourceDisplay/FileResourceDisplay.cpp b/src/ResourceDisplay/FileResourceDisplay.cpp index 6a1e689..06cbc7a 100644 --- a/src/ResourceDisplay/FileResourceDisplay.cpp +++ b/src/ResourceDisplay/FileResourceDisplay.cpp @@ -17,7 +17,7 @@ bool FileResourceDisplay::update_draw() const { void FileResourceDisplay::update(World& w) { } -bool FileResourceDisplay::load(const std::string& fileName, const std::string& fileData) { +bool FileResourceDisplay::load(ResourceManager& rMan, const std::string& fileName, const std::string& fileData) { this->fileName = fileName; return true; } diff --git a/src/ResourceDisplay/FileResourceDisplay.hpp b/src/ResourceDisplay/FileResourceDisplay.hpp index 9cea121..4e53324 100644 --- a/src/ResourceDisplay/FileResourceDisplay.hpp +++ b/src/ResourceDisplay/FileResourceDisplay.hpp @@ -5,7 +5,7 @@ class FileResourceDisplay : public ResourceDisplay { public: virtual void update(World& w) override; - virtual bool load(const std::string& fileName, const std::string& fileData) override; + virtual bool load(ResourceManager& rMan, const std::string& fileName, const std::string& fileData) override; virtual bool update_draw() const override; virtual void draw(SkCanvas* canvas, const DrawData& drawData, const SkRect& imRect) override; virtual Vector2f get_dimensions() const override; diff --git a/src/ResourceDisplay/ImageResourceDisplay.cpp b/src/ResourceDisplay/ImageResourceDisplay.cpp index 751040f..08186e8 100644 --- a/src/ResourceDisplay/ImageResourceDisplay.cpp +++ b/src/ResourceDisplay/ImageResourceDisplay.cpp @@ -39,7 +39,7 @@ void ImageResourceDisplay::update(World& w) { } } -bool ImageResourceDisplay::load(const std::string& fileName, const std::string& fileData) { +bool ImageResourceDisplay::load(ResourceManager& rMan, const std::string& fileName, const std::string& fileData) { sk_sp newData = SkData::MakeWithoutCopy(fileData.c_str(), fileData.size()); std::unique_ptr codec = SkCodec::MakeFromData(newData, decoders); mustUpdateDraw = true; diff --git a/src/ResourceDisplay/ImageResourceDisplay.hpp b/src/ResourceDisplay/ImageResourceDisplay.hpp index c2692ce..9d05f1e 100644 --- a/src/ResourceDisplay/ImageResourceDisplay.hpp +++ b/src/ResourceDisplay/ImageResourceDisplay.hpp @@ -6,7 +6,7 @@ class ImageResourceDisplay : public ResourceDisplay { public: virtual void update(World& w) override; - virtual bool load(const std::string& fileName, const std::string& fileData) override; + virtual bool load(ResourceManager& rMan, const std::string& fileName, const std::string& fileData) override; virtual bool update_draw() const override; virtual void draw(SkCanvas* canvas, const DrawData& drawData, const SkRect& imRect) override; virtual Vector2f get_dimensions() const override; diff --git a/src/ResourceDisplay/ResourceDisplay.hpp b/src/ResourceDisplay/ResourceDisplay.hpp index 52645b2..a45618f 100644 --- a/src/ResourceDisplay/ResourceDisplay.hpp +++ b/src/ResourceDisplay/ResourceDisplay.hpp @@ -7,11 +7,12 @@ using namespace Eigen; struct DrawData; class World; +class ResourceManager; class ResourceDisplay { public: virtual void update(World& w) = 0; - virtual bool load(const std::string& fileName, const std::string& fileData) = 0; + virtual bool load(ResourceManager& rMan, const std::string& fileName, const std::string& fileData) = 0; virtual bool update_draw() const = 0; virtual void draw(SkCanvas* canvas, const DrawData& drawData, const SkRect& imRect) = 0; virtual Vector2f get_dimensions() const = 0; diff --git a/src/ResourceDisplay/SvgResourceDisplay.cpp b/src/ResourceDisplay/SvgResourceDisplay.cpp index 2c1065b..26282bc 100644 --- a/src/ResourceDisplay/SvgResourceDisplay.cpp +++ b/src/ResourceDisplay/SvgResourceDisplay.cpp @@ -12,7 +12,7 @@ void SvgResourceDisplay::update(World& w) { mustUpdateDraw = false; } -bool SvgResourceDisplay::load(const std::string& fileName, const std::string& fileData) { +bool SvgResourceDisplay::load(ResourceManager& rMan, const std::string& fileName, const std::string& fileData) { SkMemoryStream strm(fileData.c_str(), fileData.size()); svgDom = SkSVGDOM::Builder().make(strm); @@ -23,11 +23,20 @@ bool SvgResourceDisplay::load(const std::string& fileName, const std::string& fi svgRootSize = svgDom->containerSize(); + if(svgRootSize.width() == 0 || svgRootSize.height() == 0) { + svgDom->setContainerSize({1000, 1000}); + svgRootSize = svgDom->containerSize(); + } + + if(svgRootSize.width() == 0 || svgRootSize.height() == 0) + return false; + return true; } void SvgResourceDisplay::draw(SkCanvas* canvas, const DrawData& drawData, const SkRect& imRect) { canvas->save(); + canvas->clipRect(imRect); canvas->translate(imRect.x(), imRect.y()); canvas->scale(imRect.width() / svgRootSize.width(), imRect.height() / svgRootSize.height()); svgDom->render(canvas); diff --git a/src/ResourceDisplay/SvgResourceDisplay.hpp b/src/ResourceDisplay/SvgResourceDisplay.hpp index 1e7acaf..e761d95 100644 --- a/src/ResourceDisplay/SvgResourceDisplay.hpp +++ b/src/ResourceDisplay/SvgResourceDisplay.hpp @@ -7,7 +7,7 @@ class SvgResourceDisplay : public ResourceDisplay { public: virtual void update(World& w) override; - virtual bool load(const std::string& fileName, const std::string& fileData) override; + virtual bool load(ResourceManager& rMan, const std::string& fileName, const std::string& fileData) override; virtual bool update_draw() const override; virtual void draw(SkCanvas* canvas, const DrawData& drawData, const SkRect& imRect) override; virtual Vector2f get_dimensions() const override; diff --git a/src/ResourceManager.cpp b/src/ResourceManager.cpp index 9be611a..67c5165 100644 --- a/src/ResourceManager.cpp +++ b/src/ResourceManager.cpp @@ -117,19 +117,19 @@ std::shared_ptr ResourceManager::get_display_data(const ServerC return nullptr; auto imgResource(std::make_shared()); - if(imgResource->load(resourceIt->second.name, *resourceIt->second.data)) { + if(imgResource->load(*this, resourceIt->second.name, *resourceIt->second.data)) { displays[fileID] = imgResource; return imgResource; } auto svgResource(std::make_shared()); - if(svgResource->load(resourceIt->second.name, *resourceIt->second.data)) { + if(svgResource->load(*this, resourceIt->second.name, *resourceIt->second.data)) { displays[fileID] = svgResource; return svgResource; } auto fileResource(std::make_shared()); - fileResource->load(resourceIt->second.name, *resourceIt->second.data); + fileResource->load(*this, resourceIt->second.name, *resourceIt->second.data); displays[fileID] = fileResource; return fileResource; } diff --git a/src/ResourceManager.hpp b/src/ResourceManager.hpp index 1dab201..ab8d0b3 100644 --- a/src/ResourceManager.hpp +++ b/src/ResourceManager.hpp @@ -44,11 +44,12 @@ class ResourceManager { std::optional get_resource(const ServerClientID& id) const; ClientPortionID get_max_id(ServerPortionID serverID) const; const std::unordered_map& resource_list(); + + World& world; private: std::unordered_map resources; std::unordered_map> displays; static std::array decoders; - World& world; };