Drag drop URLs only parses images, and ignores files
This commit is contained in:
parent
32a654b731
commit
27d334e234
10 changed files with 43 additions and 13 deletions
|
|
@ -26,6 +26,8 @@ std::shared_ptr<FileDownloader::DownloadData> 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);
|
||||
|
||||
|
|
|
|||
|
|
@ -462,23 +462,28 @@ void DrawingProgram::update_downloading_dropped_files() {
|
|||
|
||||
ResourceData newResource;
|
||||
newResource.data = std::make_shared<std::string>(downFile.downData->str);
|
||||
newResource.name = "downloaded file";
|
||||
ServerClientID imageID = world.rMan.add_resource(newResource);
|
||||
|
||||
std::shared_ptr<ResourceDisplay> 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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<SkImage> data;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<SkSVGDOM> svgDom;
|
||||
bool mustUpdateDraw = false;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue