Support drag-n-drop image in viewer
diff --git a/skia/viewer/src/main.cpp b/skia/viewer/src/main.cpp index 204e539..9f22592 100644 --- a/skia/viewer/src/main.cpp +++ b/skia/viewer/src/main.cpp
@@ -41,6 +41,8 @@ std::unique_ptr<rive::ArtboardInstance> artboardInstance; std::unique_ptr<rive::Scene> currentScene; +sk_sp<SkImage> gImage; + static void delete_file() { currentScene = nullptr; artboardInstance = nullptr; @@ -104,8 +106,15 @@ assert(fileBytes.size() != 0); auto file = rive::File::import(rive::toSpan(fileBytes), &skiaFactory); if (!file) { - fileBytes.clear(); fprintf(stderr, "failed to import file\n"); + + auto data = SkData::MakeWithCopy(fileBytes.data(), fileBytes.size()); + gImage = SkImage::MakeFromEncoded(data); + if (gImage) { + fprintf(stderr, "interpreted as image\n"); + } + + fileBytes.clear(); return; } @@ -333,6 +342,11 @@ currentScene->draw(&renderer); renderer.restore(); + } else { + // no scene ... + if (gImage) { + canvas->drawImage(gImage, 0, 0); + } } context->flush();