aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/viewer
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2017-12-01 11:23:53 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-01 17:05:29 +0000
commit3ac99cfaa2d434c71d9c82fc234fadd55fe96394 (patch)
tree68308de18fc2b30000b472e38c968ad4e8db0912 /tools/viewer
parent762d5e7e1ce918ce3dd7652cc7becdcbc69f47d5 (diff)
Add 'Save to SKP' option to Viewer
Bug: skia: Change-Id: Iea3794ce8710c84f2529b78b21655f2bf6aaa90e Reviewed-on: https://skia-review.googlesource.com/79160 Reviewed-by: Jim Van Verth <jvanverth@google.com> Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'tools/viewer')
-rw-r--r--tools/viewer/Viewer.cpp23
-rw-r--r--tools/viewer/Viewer.h2
2 files changed, 25 insertions, 0 deletions
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 8c320938fb..c2e03b18cd 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -30,6 +30,7 @@
#include "SkOnce.h"
#include "SkOSFile.h"
#include "SkOSPath.h"
+#include "SkPictureRecorder.h"
#include "SkRandom.h"
#include "SkScan.h"
#include "SkStream.h"
@@ -265,6 +266,7 @@ Viewer::Viewer(int argc, char** argv, void* platformData)
, fCumulativeMeasurementCount(0)
, fDisplayStats(false)
, fRefresh(false)
+ , fSaveToSKP(false)
, fShowImGuiDebugWindow(false)
, fShowSlidePicker(false)
, fShowImGuiTestWindow(false)
@@ -481,6 +483,10 @@ Viewer::Viewer(int argc, char** argv, void* platformData)
this->updateTitle();
fWindow->inval();
});
+ fCommands.addCommand('K', "IO", "Save slide to SKP", [this]() {
+ fSaveToSKP = true;
+ fWindow->inval();
+ });
// set up slides
this->initSlides();
@@ -866,6 +872,23 @@ void Viewer::drawSlide(SkCanvas* canvas) {
}
}
+ if (fSaveToSKP) {
+ SkPictureRecorder recorder;
+ SkCanvas* recorderCanvas = recorder.beginRecording(
+ SkRect::Make(fSlides[fCurrentSlide]->getDimensions()));
+ // In xform-canvas mode, record the transformed output
+ std::unique_ptr<SkCanvas> xformCanvas = nullptr;
+ if (ColorMode::kColorManagedSRGB8888_NonLinearBlending == fColorMode) {
+ xformCanvas = SkCreateColorSpaceXformCanvas(recorderCanvas, cs);
+ recorderCanvas = xformCanvas.get();
+ }
+ fSlides[fCurrentSlide]->draw(recorderCanvas);
+ sk_sp<SkPicture> picture(recorder.finishRecordingAsPicture());
+ SkFILEWStream stream("sample_app.skp");
+ picture->serialize(&stream);
+ fSaveToSKP = false;
+ }
+
// If we're in F16, or we're zooming, or we're in color correct 8888 and the gamut isn't sRGB,
// we need to render offscreen. We also need to render offscreen if we're in any raster mode,
// because the window surface is actually GL.
diff --git a/tools/viewer/Viewer.h b/tools/viewer/Viewer.h
index 53b75b2de3..ff47b35f7f 100644
--- a/tools/viewer/Viewer.h
+++ b/tools/viewer/Viewer.h
@@ -81,6 +81,8 @@ private:
bool fDisplayStats;
bool fRefresh; // whether to continuously refresh for measuring render time
+ bool fSaveToSKP;
+
SkPaint fImGuiFontPaint;
SkPaint fImGuiGamutPaint;
bool fShowImGuiDebugWindow;