diff options
author | Mike Reed <reed@google.com> | 2018-05-15 10:09:52 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-05-15 14:29:43 +0000 |
commit | 81f60ecd9cc0e7c507f9e1f05862bee6a19ee0c6 (patch) | |
tree | 6022389b6b7aa8789d8f86759ed208c24a3d3c03 | |
parent | 6bbd386a0e4bf13cd7abb887900018a56e24091b (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>
-rw-r--r-- | gm/gm.h | 6 | ||||
-rw-r--r-- | tools/viewer/GMSlide.cpp | 9 | ||||
-rw-r--r-- | tools/viewer/GMSlide.h | 3 | ||||
-rw-r--r-- | tools/viewer/Slide.h | 4 | ||||
-rw-r--r-- | tools/viewer/Viewer.cpp | 25 |
5 files changed, 47 insertions, 0 deletions
@@ -10,6 +10,7 @@ #include "SkBitmap.h" #include "SkCanvas.h" +#include "SkMetaData.h" #include "SkPaint.h" #include "SkSize.h" #include "SkString.h" @@ -89,6 +90,9 @@ namespace skiagm { return this->onHandleKey(uni); } + bool getControls(SkMetaData* controls) { return this->onGetControls(controls); } + void setControls(const SkMetaData& controls) { this->onSetControls(controls); } + virtual void modifyGrContextOptions(GrContextOptions* options) {} /** draws a standard message that the GM is only intended to be used with the GPU.*/ @@ -103,6 +107,8 @@ namespace skiagm { virtual bool onAnimate(const SkAnimTimer&) { return false; } virtual bool onHandleKey(SkUnichar uni) { return false; } + virtual bool onGetControls(SkMetaData*) { return false; } + virtual void onSetControls(const SkMetaData&) {} private: Mode fMode; 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); } |