aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/sk_app
diff options
context:
space:
mode:
authorGravatar Brian Osman <brianosman@google.com>2017-12-19 11:15:16 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-20 16:59:04 +0000
commit56a24813a4f905aa26cb90c7f835549677ac6975 (patch)
tree77648218a50f8c02cfc0ecceea9299de36a4aa3b /tools/sk_app
parent16a127fa6000e2715e2d2ad4d0c9110c7fbd4cac (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.cpp58
-rw-r--r--tools/sk_app/Window.h11
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