aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/viewer/Viewer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/viewer/Viewer.cpp')
-rw-r--r--tools/viewer/Viewer.cpp23
1 files changed, 23 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.