From 2a213028c077f59087e6d35f3a4fa76a1a52ab20 Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Thu, 9 Oct 2025 18:44:34 +0300 Subject: [PATCH] Add progress bar to downloading images --- src/DrawingProgram/DrawingProgram.cpp | 28 +++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/DrawingProgram/DrawingProgram.cpp b/src/DrawingProgram/DrawingProgram.cpp index 8080253..ca043a7 100644 --- a/src/DrawingProgram/DrawingProgram.cpp +++ b/src/DrawingProgram/DrawingProgram.cpp @@ -438,16 +438,16 @@ void DrawingProgram::drag_drop_update() { else if(!droppedItem.isFile && is_valid_http_url(droppedItem.droppedData)) { auto img(std::make_shared()); img->coords = world.drawData.cam.c; + Vector2f imDim = Vector2f{100.0f, 100.0f}; + img->d.p1 = droppedItem.pos - imDim; + img->d.p2 = droppedItem.pos + imDim; + img->d.imageID = {0, 0}; img->commit_update(*this); uint64_t placement = components.client_list().size(); auto objAdd = components.client_insert(placement, img); img->client_send_place(*this); add_undo_place_component(objAdd); droppedDownloadingFiles.emplace_back(objAdd, world.main.window.size.cast(), FileDownloader::download_data_from_url(droppedItem.droppedData)); - Vector2f imDim = Vector2f{100.0f, 100.0f}; - img->d.p1 = droppedItem.pos - imDim; - img->d.p2 = droppedItem.pos + imDim; - img->d.imageID = {0, 0}; } } } @@ -707,6 +707,26 @@ void DrawingProgram::draw(SkCanvas* canvas, const DrawData& drawData) { } } else { + if(!drawData.main->takingScreenshot) { + for(auto& droppedDownFile : droppedDownloadingFiles) { + if(droppedDownFile.comp->obj->collabListInfo.lock()) { + canvas->save(); + auto img = std::static_pointer_cast(droppedDownFile.comp->obj); + img->canvas_do_calculated_transform(canvas); + SkPaint p; + p.setStroke(true); + p.setStrokeWidth(10.0f); + p.setStrokeCap(SkPaint::kRound_Cap); + p.setColor4f(drawData.main->toolbar.io->theme->fillColor5); + Vector2f center = (img->d.p1 + img->d.p2) * 0.5f; + + const float DOWNLOAD_ARC_RADIUS = 50.0f; + canvas->drawArc(SkRect::MakeLTRB(center.x() - DOWNLOAD_ARC_RADIUS, center.y() - DOWNLOAD_ARC_RADIUS, center.x() + DOWNLOAD_ARC_RADIUS, center.y() + DOWNLOAD_ARC_RADIUS), 0.0f, droppedDownFile.downData->progress * 360.0f, false, p); + canvas->restore(); + } + } + } + canvas->saveLayer(nullptr, nullptr); canvas->clear(SkColor4f{0.0f, 0.0f, 0.0f, 0.0f}); compCache.refresh_all_draw_cache(drawData);