From 81f60ecd9cc0e7c507f9e1f05862bee6a19ee0c6 Mon Sep 17 00:00:00 2001 From: Mike Reed Date: Tue, 15 May 2018 10:09:52 -0400 Subject: Allow slides/gms to extend the UI Bug: skia: Change-Id: Ia5971d827e6e05ab6cc30af3105b3b32ee691a34 Reviewed-on: https://skia-review.googlesource.com/128321 Reviewed-by: Mike Reed Commit-Queue: Mike Reed --- tools/viewer/GMSlide.cpp | 9 +++++++++ tools/viewer/GMSlide.h | 3 +++ tools/viewer/Slide.h | 4 ++++ tools/viewer/Viewer.cpp | 25 +++++++++++++++++++++++++ 4 files changed, 41 insertions(+) (limited to 'tools/viewer') 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); } -- cgit v1.2.3