aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/viewer
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2018-05-15 10:09:52 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-05-15 14:29:43 +0000
commit81f60ecd9cc0e7c507f9e1f05862bee6a19ee0c6 (patch)
tree6022389b6b7aa8789d8f86759ed208c24a3d3c03 /tools/viewer
parent6bbd386a0e4bf13cd7abb887900018a56e24091b (diff)
Allow slides/gms to extend the UI
Bug: skia: Change-Id: Ia5971d827e6e05ab6cc30af3105b3b32ee691a34 Reviewed-on: https://skia-review.googlesource.com/128321 Reviewed-by: Mike Reed <reed@google.com> Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'tools/viewer')
-rw-r--r--tools/viewer/GMSlide.cpp9
-rw-r--r--tools/viewer/GMSlide.h3
-rw-r--r--tools/viewer/Slide.h4
-rw-r--r--tools/viewer/Viewer.cpp25
4 files changed, 41 insertions, 0 deletions
diff --git a/tools/viewer/GMSlide.cpp b/tools/viewer/GMSlide.cpp
index 40a9c99d0b..cfd4853330 100644
--- a/tools/viewer/GMSlide.cpp
+++ b/tools/viewer/GMSlide.cpp
@@ -34,3 +34,12 @@ bool GMSlide::animate(const SkAnimTimer& timer) {
bool GMSlide::onChar(SkUnichar c) {
return fGM->handleKey(c);
}
+
+bool GMSlide::onGetControls(SkMetaData* controls) {
+ return fGM->getControls(controls);
+}
+
+void GMSlide::onSetControls(const SkMetaData& controls) {
+ fGM->setControls(controls);
+}
+
diff --git a/tools/viewer/GMSlide.h b/tools/viewer/GMSlide.h
index 2a3faa943f..c03cc8abde 100644
--- a/tools/viewer/GMSlide.h
+++ b/tools/viewer/GMSlide.h
@@ -23,6 +23,9 @@ public:
bool onChar(SkUnichar c) override;
+ bool onGetControls(SkMetaData*) override;
+ void onSetControls(const SkMetaData&) override;
+
private:
skiagm::GM* fGM;
};
diff --git a/tools/viewer/Slide.h b/tools/viewer/Slide.h
index e23a2eb78d..127b32da02 100644
--- a/tools/viewer/Slide.h
+++ b/tools/viewer/Slide.h
@@ -15,6 +15,7 @@
class SkCanvas;
class SkAnimTimer;
+class SkMetaData;
class Slide : public SkRefCnt {
public:
@@ -33,6 +34,9 @@ public:
virtual bool onMouse(SkScalar x, SkScalar y, sk_app::Window::InputState state,
uint32_t modifiers) { return false; }
+ virtual bool onGetControls(SkMetaData*) { return false; }
+ virtual void onSetControls(const SkMetaData&) {}
+
SkString getName() { return fName; }
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index cfb8c61add..c54950850c 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -1646,6 +1646,31 @@ void Viewer::drawImGui() {
&SkPaint::isVerticalText, &SkPaint::setVerticalText);
}
+ {
+ SkMetaData controls;
+ if (fSlides[fCurrentSlide]->onGetControls(&controls)) {
+ if (ImGui::CollapsingHeader("Current Slide")) {
+ SkMetaData::Iter iter(controls);
+ const char* name;
+ SkMetaData::Type type;
+ int count;
+ bool found = false;
+ while ((name = iter.next(&type, &count)) != nullptr && found == false) {
+ if (type == SkMetaData::kScalar_Type) {
+ float val[3];
+ SkASSERT(count == 3);
+ controls.findScalars(name, &count, val);
+ if (ImGui::SliderFloat(name, &val[0], val[1], val[2])) {
+ controls.setScalars(name, 3, val);
+ fSlides[fCurrentSlide]->onSetControls(controls);
+ found = paramsChanged = true;
+ }
+ }
+ }
+ }
+ }
+ }
+
if (fShowSlidePicker) {
ImGui::SetNextTreeNodeOpen(true);
}