VulkanViewer on Android
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1903253003
Review URL: https://codereview.chromium.org/1903253003
diff --git a/tools/vulkan/viewer/GMSlide.h b/tools/vulkan/viewer/GMSlide.h
index c9ed084..6b03527 100644
--- a/tools/vulkan/viewer/GMSlide.h
+++ b/tools/vulkan/viewer/GMSlide.h
@@ -16,6 +16,8 @@
GMSlide(skiagm::GM* gm);
~GMSlide() override;
+ SkISize getDimensions() const override { return fGM->getISize(); }
+
void draw(SkCanvas* canvas) override;
bool animate(const SkAnimTimer&) override;
diff --git a/tools/vulkan/viewer/SKPSlide.h b/tools/vulkan/viewer/SKPSlide.h
index 73fd5a1..42845fa 100644
--- a/tools/vulkan/viewer/SKPSlide.h
+++ b/tools/vulkan/viewer/SKPSlide.h
@@ -16,6 +16,8 @@
SKPSlide(const SkString& name, const SkString& path);
~SKPSlide() override;
+ SkISize getDimensions() const override { return fCullRect.size(); }
+
void draw(SkCanvas* canvas) override;
void load() override;
void unload() override;
diff --git a/tools/vulkan/viewer/Slide.h b/tools/vulkan/viewer/Slide.h
index f75e3fd..cdc225b 100644
--- a/tools/vulkan/viewer/Slide.h
+++ b/tools/vulkan/viewer/Slide.h
@@ -9,6 +9,7 @@
#define Slide_DEFINED
#include "SkRefCnt.h"
+#include "SkSize.h"
#include "SkString.h"
class SkCanvas;
@@ -18,6 +19,8 @@
public:
virtual ~Slide() {}
+ virtual SkISize getDimensions() const = 0;
+
virtual void draw(SkCanvas* canvas) = 0;
virtual bool animate(const SkAnimTimer&) { return false; }
virtual void load() {}
diff --git a/tools/vulkan/viewer/VulkanViewer.cpp b/tools/vulkan/viewer/VulkanViewer.cpp
index a88a337..faa3014 100644
--- a/tools/vulkan/viewer/VulkanViewer.cpp
+++ b/tools/vulkan/viewer/VulkanViewer.cpp
@@ -81,10 +81,12 @@
// set up slides
this->initSlides();
+ fAnimTimer.run();
+
// set up first frame
fCurrentSlide = 0;
setupCurrentSlide(-1);
- fLocalMatrix.reset();
+ updateMatrix();
fWindow->show();
}
@@ -254,10 +256,24 @@
void VulkanViewer::onPaint(SkCanvas* canvas) {
- canvas->clear(SK_ColorWHITE);
-
int count = canvas->save();
- canvas->setMatrix(fLocalMatrix);
+
+ if (fWindow->supportsContentRect()) {
+ SkRect contentRect = fWindow->getContentRect();
+ canvas->clipRect(contentRect);
+ canvas->translate(contentRect.fLeft, contentRect.fTop);
+ }
+
+ canvas->clear(SK_ColorWHITE);
+ if (fWindow->supportsContentRect() && fWindow->scaleContentToFit()) {
+ const SkRect contentRect = fWindow->getContentRect();
+ const SkISize slideSize = fSlides[fCurrentSlide]->getDimensions();
+ const SkRect slideBounds = SkRect::MakeIWH(slideSize.width(), slideSize.height());
+ SkMatrix matrix;
+ matrix.setRectToRect(slideBounds, contentRect, SkMatrix::kCenter_ScaleToFit);
+ canvas->concat(matrix);
+ }
+ canvas->concat(fLocalMatrix);
fSlides[fCurrentSlide]->draw(canvas);
canvas->restoreToCount(count);
@@ -282,6 +298,12 @@
SkPaint paint;
canvas->save();
+ if (fWindow->supportsContentRect()) {
+ SkRect contentRect = fWindow->getContentRect();
+ canvas->clipRect(contentRect);
+ canvas->translate(contentRect.fLeft, contentRect.fTop);
+ }
+
canvas->clipRect(rect);
paint.setColor(SK_ColorBLACK);
canvas->drawRect(rect, paint);