diff --git a/include/Helpers/FileDownloader.cpp b/include/Helpers/FileDownloader.cpp index 50b41e6..68f3ca4 100644 --- a/include/Helpers/FileDownloader.cpp +++ b/include/Helpers/FileDownloader.cpp @@ -26,6 +26,8 @@ std::shared_ptr FileDownloader::download_data_from h.eHandle = curl_easy_init(); curl_easy_setopt(h.eHandle, CURLOPT_URL, url.data()); curl_easy_setopt(h.eHandle, CURLOPT_NOSIGNAL, 1); + curl_easy_setopt(h.eHandle, CURLOPT_FOLLOWLOCATION, CURLFOLLOW_ALL); + curl_easy_setopt(h.eHandle, CURLOPT_USERAGENT, "InfiniPaint/1.0"); disable_ssl_verification(h.eHandle); save_to_string(h.eHandle, &h.data->str); diff --git a/src/DrawingProgram/DrawingProgram.cpp b/src/DrawingProgram/DrawingProgram.cpp index 040639a..8080253 100644 --- a/src/DrawingProgram/DrawingProgram.cpp +++ b/src/DrawingProgram/DrawingProgram.cpp @@ -462,23 +462,28 @@ void DrawingProgram::update_downloading_dropped_files() { ResourceData newResource; newResource.data = std::make_shared(downFile.downData->str); - newResource.name = "downloaded file"; ServerClientID imageID = world.rMan.add_resource(newResource); - std::shared_ptr display = world.rMan.get_display_data(imageID); - Vector2f imTrueDim = display->get_dimensions(); + if(display->get_type() == ResourceDisplay::Type::FILE) { + Logger::get().log("WORLDFATAL", "Failed to parse image from URL"); + client_erase_set({downFile.comp}); + } + else { + Vector2f imTrueDim = display->get_dimensions(); - float imWidth = imTrueDim.x() / (imTrueDim.x() + imTrueDim.y()); - float imHeight = imTrueDim.y() / (imTrueDim.x() + imTrueDim.y()); - Vector2f imDim = Vector2f{downFile.windowSizeWhenDropped.x() * imWidth, downFile.windowSizeWhenDropped.x() * imHeight} * display->get_dimension_scale(); - img->d.p1 = dropPos - imDim; - img->d.p2 = dropPos + imDim; - img->d.imageID = imageID; - img->commit_update(*this); - img->client_send_update(*this, true); + float imWidth = imTrueDim.x() / (imTrueDim.x() + imTrueDim.y()); + float imHeight = imTrueDim.y() / (imTrueDim.x() + imTrueDim.y()); + Vector2f imDim = Vector2f{downFile.windowSizeWhenDropped.x() * imWidth, downFile.windowSizeWhenDropped.x() * imHeight} * display->get_dimension_scale(); + img->d.p1 = dropPos - imDim; + img->d.p2 = dropPos + imDim; + img->d.imageID = imageID; + img->commit_update(*this); + img->client_send_update(*this, true); + } return true; } case FileDownloader::DownloadData::Status::FAILURE: + Logger::get().log("WORLDFATAL", "Failed to download data from URL"); client_erase_set({downFile.comp}); return true; case FileDownloader::DownloadData::Status::IN_PROGRESS: diff --git a/src/ResourceDisplay/FileResourceDisplay.cpp b/src/ResourceDisplay/FileResourceDisplay.cpp index 06cbc7a..1aeb2a9 100644 --- a/src/ResourceDisplay/FileResourceDisplay.cpp +++ b/src/ResourceDisplay/FileResourceDisplay.cpp @@ -53,3 +53,7 @@ Vector2f FileResourceDisplay::get_dimensions() const { float FileResourceDisplay::get_dimension_scale() const { return 0.1f; } + +ResourceDisplay::Type FileResourceDisplay::get_type() const { + return ResourceDisplay::Type::FILE; +} diff --git a/src/ResourceDisplay/FileResourceDisplay.hpp b/src/ResourceDisplay/FileResourceDisplay.hpp index 4e53324..9ebf1ec 100644 --- a/src/ResourceDisplay/FileResourceDisplay.hpp +++ b/src/ResourceDisplay/FileResourceDisplay.hpp @@ -10,6 +10,7 @@ class FileResourceDisplay : public ResourceDisplay { virtual void draw(SkCanvas* canvas, const DrawData& drawData, const SkRect& imRect) override; virtual Vector2f get_dimensions() const override; virtual float get_dimension_scale() const override; + virtual Type get_type() const override; private: std::string fileName; }; diff --git a/src/ResourceDisplay/ImageResourceDisplay.cpp b/src/ResourceDisplay/ImageResourceDisplay.cpp index 98adf33..a35525f 100644 --- a/src/ResourceDisplay/ImageResourceDisplay.cpp +++ b/src/ResourceDisplay/ImageResourceDisplay.cpp @@ -87,3 +87,7 @@ Vector2f ImageResourceDisplay::get_dimensions() const { float ImageResourceDisplay::get_dimension_scale() const { return 0.3f; } + +ResourceDisplay::Type ImageResourceDisplay::get_type() const { + return ResourceDisplay::Type::IMAGE; +} diff --git a/src/ResourceDisplay/ImageResourceDisplay.hpp b/src/ResourceDisplay/ImageResourceDisplay.hpp index 9d05f1e..2078579 100644 --- a/src/ResourceDisplay/ImageResourceDisplay.hpp +++ b/src/ResourceDisplay/ImageResourceDisplay.hpp @@ -11,6 +11,7 @@ class ImageResourceDisplay : public ResourceDisplay { virtual void draw(SkCanvas* canvas, const DrawData& drawData, const SkRect& imRect) override; virtual Vector2f get_dimensions() const override; virtual float get_dimension_scale() const override; + virtual Type get_type() const override; private: struct FrameData { sk_sp data; diff --git a/src/ResourceDisplay/ResourceDisplay.hpp b/src/ResourceDisplay/ResourceDisplay.hpp index a45618f..f89d18a 100644 --- a/src/ResourceDisplay/ResourceDisplay.hpp +++ b/src/ResourceDisplay/ResourceDisplay.hpp @@ -11,11 +11,17 @@ class ResourceManager; class ResourceDisplay { public: + enum class Type { + FILE, + IMAGE, + SVG + }; virtual void update(World& w) = 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; virtual float get_dimension_scale() const = 0; + virtual Type get_type() const = 0; virtual ~ResourceDisplay(); }; diff --git a/src/ResourceDisplay/SvgResourceDisplay.cpp b/src/ResourceDisplay/SvgResourceDisplay.cpp index 26282bc..7c0be3c 100644 --- a/src/ResourceDisplay/SvgResourceDisplay.cpp +++ b/src/ResourceDisplay/SvgResourceDisplay.cpp @@ -50,3 +50,7 @@ Vector2f SvgResourceDisplay::get_dimensions() const { float SvgResourceDisplay::get_dimension_scale() const { return 0.3f; } + +ResourceDisplay::Type SvgResourceDisplay::get_type() const { + return ResourceDisplay::Type::SVG; +} diff --git a/src/ResourceDisplay/SvgResourceDisplay.hpp b/src/ResourceDisplay/SvgResourceDisplay.hpp index e761d95..d986294 100644 --- a/src/ResourceDisplay/SvgResourceDisplay.hpp +++ b/src/ResourceDisplay/SvgResourceDisplay.hpp @@ -12,6 +12,7 @@ class SvgResourceDisplay : public ResourceDisplay { virtual void draw(SkCanvas* canvas, const DrawData& drawData, const SkRect& imRect) override; virtual Vector2f get_dimensions() const override; virtual float get_dimension_scale() const override; + virtual Type get_type() const override; private: sk_sp svgDom; bool mustUpdateDraw = false; diff --git a/src/main.cpp b/src/main.cpp index 3fe2eb3..50ed17c 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -687,16 +687,18 @@ SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) { mS.m->input.text.newInput = event->text.text; break; case SDL_EVENT_DROP_FILE: + mS.m->window.scale = SDL_GetWindowPixelDensity(mS.window); mS.m->input.droppedItems.emplace_back(InputManager::DroppedItem{ true, - Vector2f{event->drop.x, event->drop.y}, + Vector2f{event->drop.x, event->drop.y} * mS.m->window.scale, event->drop.data }); break; case SDL_EVENT_DROP_TEXT: + mS.m->window.scale = SDL_GetWindowPixelDensity(mS.window); mS.m->input.droppedItems.emplace_back(InputManager::DroppedItem{ false, - Vector2f{event->drop.x, event->drop.y}, + Vector2f{event->drop.x, event->drop.y} * mS.m->window.scale, event->drop.data }); break;