diff options
author | Brian Osman <brianosman@google.com> | 2017-12-19 11:15:16 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-12-20 16:59:04 +0000 |
commit | 56a24813a4f905aa26cb90c7f835549677ac6975 (patch) | |
tree | 77648218a50f8c02cfc0ecceea9299de36a4aa3b /tools/sk_app | |
parent | 16a127fa6000e2715e2d2ad4d0c9110c7fbd4cac (diff) |
Move stats code to new layer (with configurable list of timers)
Bug: skia:
Change-Id: I3ca5c8c7047309983018339ec7b71b9aea5ee786
Reviewed-on: https://skia-review.googlesource.com/86921
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Diffstat (limited to 'tools/sk_app')
-rw-r--r-- | tools/sk_app/Window.cpp | 58 | ||||
-rw-r--r-- | tools/sk_app/Window.h | 11 |
2 files changed, 32 insertions, 37 deletions
diff --git a/tools/sk_app/Window.cpp b/tools/sk_app/Window.cpp index 6713c4c2c9..29e4864ba1 100644 --- a/tools/sk_app/Window.cpp +++ b/tools/sk_app/Window.cpp @@ -20,61 +20,49 @@ void Window::detach() { fWindowContext = nullptr; } -void Window::onBackendCreated() { +void Window::visitLayers(std::function<void(Layer*)> visitor) { for (int i = 0; i < fLayers.count(); ++i) { - fLayers[i]->onBackendCreated(); + if (fLayers[i]->fActive) { + visitor(fLayers[i]); + } } } -bool Window::onChar(SkUnichar c, uint32_t modifiers) { +bool Window::signalLayers(std::function<bool(Layer*)> visitor) { for (int i = fLayers.count() - 1; i >= 0; --i) { - if (fLayers[i]->onChar(c, modifiers)) { + if (fLayers[i]->fActive && visitor(fLayers[i])) { return true; } } return false; } +void Window::onBackendCreated() { + this->visitLayers([](Layer* layer) { layer->onBackendCreated(); }); +} + +bool Window::onChar(SkUnichar c, uint32_t modifiers) { + return this->signalLayers([=](Layer* layer) { return layer->onChar(c, modifiers); }); +} + bool Window::onKey(Key key, InputState state, uint32_t modifiers) { - for (int i = fLayers.count() - 1; i >= 0; --i) { - if (fLayers[i]->onKey(key, state, modifiers)) { - return true; - } - } - return false; + return this->signalLayers([=](Layer* layer) { return layer->onKey(key, state, modifiers); }); } bool Window::onMouse(int x, int y, InputState state, uint32_t modifiers) { - for (int i = fLayers.count() - 1; i >= 0; --i) { - if (fLayers[i]->onMouse(x, y, state, modifiers)) { - return true; - } - } - return false; + return this->signalLayers([=](Layer* layer) { return layer->onMouse(x, y, state, modifiers); }); } bool Window::onMouseWheel(float delta, uint32_t modifiers) { - for (int i = fLayers.count() - 1; i >= 0; --i) { - if (fLayers[i]->onMouseWheel(delta, modifiers)) { - return true; - } - } - return false; + return this->signalLayers([=](Layer* layer) { return layer->onMouseWheel(delta, modifiers); }); } bool Window::onTouch(intptr_t owner, InputState state, float x, float y) { - for (int i = fLayers.count() - 1; i >= 0; --i) { - if (fLayers[i]->onTouch(owner, state, x, y)) { - return true; - } - } - return false; + return this->signalLayers([=](Layer* layer) { return layer->onTouch(owner, state, x, y); }); } void Window::onUIStateChanged(const SkString& stateName, const SkString& stateValue) { - for (int i = 0; i < fLayers.count(); ++i) { - fLayers[i]->onUIStateChanged(stateName, stateValue); - } + this->visitLayers([=](Layer* layer) { layer->onUIStateChanged(stateName, stateValue); }); } void Window::onPaint() { @@ -87,12 +75,8 @@ void Window::onPaint() { // draw into the canvas of this surface SkCanvas* canvas = backbuffer->getCanvas(); - for (int i = 0; i < fLayers.count(); ++i) { - fLayers[i]->onPrePaint(); - } - for (int i = 0; i < fLayers.count(); ++i) { - fLayers[i]->onPaint(canvas); - } + this->visitLayers([](Layer* layer) { layer->onPrePaint(); }); + this->visitLayers([=](Layer* layer) { layer->onPaint(canvas); }); canvas->flush(); diff --git a/tools/sk_app/Window.h b/tools/sk_app/Window.h index b541e241a2..927d8a9677 100644 --- a/tools/sk_app/Window.h +++ b/tools/sk_app/Window.h @@ -132,8 +132,12 @@ public: class Layer { public: + Layer() : fActive(true) {} virtual ~Layer() = default; + bool getActive() { return fActive; } + void setActive(bool active) { fActive = active; } + // return value of 'true' means 'I have handled this event' virtual void onBackendCreated() {} virtual void onAttach(Window* window) {} @@ -145,6 +149,10 @@ public: virtual void onUIStateChanged(const SkString& stateName, const SkString& stateValue) {} virtual void onPrePaint() {} virtual void onPaint(SkCanvas*) {} + + private: + friend class Window; + bool fActive; }; void pushLayer(Layer* layer) { @@ -189,6 +197,9 @@ protected: void markInvalProcessed(); bool fIsContentInvalidated = false; // use this to avoid duplicate invalidate events + + void visitLayers(std::function<void(Layer*)> visitor); + bool signalLayers(std::function<bool(Layer*)> visitor); }; } // namespace sk_app |