diff options
author | 2017-12-01 11:23:53 -0500 | |
---|---|---|
committer | 2017-12-01 17:05:29 +0000 | |
commit | 3ac99cfaa2d434c71d9c82fc234fadd55fe96394 (patch) | |
tree | 68308de18fc2b30000b472e38c968ad4e8db0912 /tools/viewer | |
parent | 762d5e7e1ce918ce3dd7652cc7becdcbc69f47d5 (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.cpp | 23 | ||||
-rw-r--r-- | tools/viewer/Viewer.h | 2 |
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; |