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();