aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/sk_app
diff options
context:
space:
mode:
Diffstat (limited to 'tools/sk_app')
-rw-r--r--tools/sk_app/Window.cpp87
-rw-r--r--tools/sk_app/Window.h81
2 files changed, 57 insertions, 111 deletions
diff --git a/tools/sk_app/Window.cpp b/tools/sk_app/Window.cpp
index d7904fd8a7..436b6b9aa9 100644
--- a/tools/sk_app/Window.cpp
+++ b/tools/sk_app/Window.cpp
@@ -13,45 +13,7 @@
namespace sk_app {
-static void default_backend_created_func(void* userData) {}
-
-static bool default_char_func(SkUnichar c, uint32_t modifiers, void* userData) {
- return false;
-}
-
-static bool default_key_func(Window::Key key, Window::InputState state, uint32_t modifiers,
- void* userData) {
- return false;
-}
-
-static bool default_mouse_func(int x, int y, Window::InputState state, uint32_t modifiers,
- void* userData) {
- return false;
-}
-
-static bool default_mouse_wheel_func(float delta, uint32_t modifiers, void* userData) {
- return false;
-}
-
-static bool default_touch_func(intptr_t owner, Window::InputState state, float x, float y,
- void* userData) {
- return false;
-}
-
-static void default_ui_state_changed_func(
- const SkString& stateName, const SkString& stateValue, void* userData) {}
-
-static void default_paint_func(SkCanvas*, void* userData) {}
-
-Window::Window() : fBackendCreatedFunc(default_backend_created_func)
- , fCharFunc(default_char_func)
- , fKeyFunc(default_key_func)
- , fMouseFunc(default_mouse_func)
- , fMouseWheelFunc(default_mouse_wheel_func)
- , fTouchFunc(default_touch_func)
- , fUIStateChangedFunc(default_ui_state_changed_func)
- , fPaintFunc(default_paint_func) {
-}
+Window::Window() {}
void Window::detach() {
delete fWindowContext;
@@ -59,31 +21,60 @@ void Window::detach() {
}
void Window::onBackendCreated() {
- fBackendCreatedFunc(fBackendCreatedUserData);
+ for (int i = 0; i < fLayers.count(); ++i) {
+ fLayers[i]->onBackendCreated();
+ }
}
bool Window::onChar(SkUnichar c, uint32_t modifiers) {
- return fCharFunc(c, modifiers, fCharUserData);
+ for (int i = fLayers.count() - 1; i >= 0; --i) {
+ if (fLayers[i]->onChar(c, modifiers)) {
+ return true;
+ }
+ }
+ return false;
}
bool Window::onKey(Key key, InputState state, uint32_t modifiers) {
- return fKeyFunc(key, state, modifiers, fKeyUserData);
+ for (int i = fLayers.count() - 1; i >= 0; --i) {
+ if (fLayers[i]->onKey(key, state, modifiers)) {
+ return true;
+ }
+ }
+ return false;
}
bool Window::onMouse(int x, int y, InputState state, uint32_t modifiers) {
- return fMouseFunc(x, y, state, modifiers, fMouseUserData);
+ for (int i = fLayers.count() - 1; i >= 0; --i) {
+ if (fLayers[i]->onMouse(x, y, state, modifiers)) {
+ return true;
+ }
+ }
+ return false;
}
bool Window::onMouseWheel(float delta, uint32_t modifiers) {
- return fMouseWheelFunc(delta, modifiers, fMouseWheelUserData);
+ for (int i = fLayers.count() - 1; i >= 0; --i) {
+ if (fLayers[i]->onMouseWheel(delta, modifiers)) {
+ return true;
+ }
+ }
+ return false;
}
bool Window::onTouch(intptr_t owner, InputState state, float x, float y) {
- return fTouchFunc(owner, state, x, y, fTouchUserData);
+ for (int i = fLayers.count() - 1; i >= 0; --i) {
+ if (fLayers[i]->onTouch(owner, state, x, y)) {
+ return true;
+ }
+ }
+ return false;
}
void Window::onUIStateChanged(const SkString& stateName, const SkString& stateValue) {
- return fUIStateChangedFunc(stateName, stateValue, fUIStateChangedUserData);
+ for (int i = 0; i < fLayers.count(); ++i) {
+ fLayers[i]->onUIStateChanged(stateName, stateValue);
+ }
}
void Window::onPaint() {
@@ -96,7 +87,9 @@ void Window::onPaint() {
// draw into the canvas of this surface
SkCanvas* canvas = backbuffer->getCanvas();
- fPaintFunc(canvas, fPaintUserData);
+ for (int i = 0; i < fLayers.count(); ++i) {
+ fLayers[i]->onPaint(canvas);
+ }
canvas->flush();
diff --git a/tools/sk_app/Window.h b/tools/sk_app/Window.h
index 4d40780964..77478b598e 100644
--- a/tools/sk_app/Window.h
+++ b/tools/sk_app/Window.h
@@ -130,55 +130,23 @@ public:
kMove_InputState // only valid for mouse
};
- // return value of 'true' means 'I have handled this event'
- typedef void(*OnBackendCreatedFunc)(void* userData);
- typedef bool(*OnCharFunc)(SkUnichar c, uint32_t modifiers, void* userData);
- typedef bool(*OnKeyFunc)(Key key, InputState state, uint32_t modifiers, void* userData);
- typedef bool(*OnMouseFunc)(int x, int y, InputState state, uint32_t modifiers, void* userData);
- typedef bool(*OnMouseWheelFunc)(float delta, uint32_t modifiers, void* userData);
- typedef bool(*OnTouchFunc)(intptr_t owner, InputState state, float x, float y, void* userData);
- typedef void(*OnUIStateChangedFunc)(
- const SkString& stateName, const SkString& stateValue, void* userData);
- typedef void(*OnPaintFunc)(SkCanvas*, void* userData);
-
- void registerBackendCreatedFunc(OnBackendCreatedFunc func, void* userData) {
- fBackendCreatedFunc = func;
- fBackendCreatedUserData = userData;
- }
-
- void registerCharFunc(OnCharFunc func, void* userData) {
- fCharFunc = func;
- fCharUserData = userData;
- }
-
- void registerKeyFunc(OnKeyFunc func, void* userData) {
- fKeyFunc = func;
- fKeyUserData = userData;
- }
-
- void registerMouseFunc(OnMouseFunc func, void* userData) {
- fMouseFunc = func;
- fMouseUserData = userData;
- }
-
- void registerMouseWheelFunc(OnMouseWheelFunc func, void* userData) {
- fMouseWheelFunc = func;
- fMouseWheelUserData = userData;
- }
-
- void registerPaintFunc(OnPaintFunc func, void* userData) {
- fPaintFunc = func;
- fPaintUserData = userData;
- }
-
- void registerTouchFunc(OnTouchFunc func, void* userData) {
- fTouchFunc = func;
- fTouchUserData = userData;
- }
+ class Layer {
+ public:
+ virtual ~Layer() = default;
+
+ // return value of 'true' means 'I have handled this event'
+ virtual void onBackendCreated() {}
+ virtual bool onChar(SkUnichar c, uint32_t modifiers) { return false; }
+ virtual bool onKey(Key key, InputState state, uint32_t modifiers) { return false; }
+ virtual bool onMouse(int x, int y, InputState state, uint32_t modifiers) { return false; }
+ virtual bool onMouseWheel(float delta, uint32_t modifiers) { return false; }
+ virtual bool onTouch(intptr_t owner, InputState state, float x, float y) { return false; }
+ virtual void onUIStateChanged(const SkString& stateName, const SkString& stateValue) {}
+ virtual void onPaint(SkCanvas*) {}
+ };
- void registerUIStateChangedFunc(OnUIStateChangedFunc func, void* userData) {
- fUIStateChangedFunc = func;
- fUIStateChangedUserData = userData;
+ void pushLayer(Layer* layer) {
+ fLayers.push(layer);
}
void onBackendCreated();
@@ -207,22 +175,7 @@ public:
protected:
Window();
- OnBackendCreatedFunc fBackendCreatedFunc;
- void* fBackendCreatedUserData;
- OnCharFunc fCharFunc;
- void* fCharUserData;
- OnKeyFunc fKeyFunc;
- void* fKeyUserData;
- OnMouseFunc fMouseFunc;
- void* fMouseUserData;
- OnMouseWheelFunc fMouseWheelFunc;
- void* fMouseWheelUserData;
- OnTouchFunc fTouchFunc;
- void* fTouchUserData;
- OnUIStateChangedFunc fUIStateChangedFunc;
- void* fUIStateChangedUserData;
- OnPaintFunc fPaintFunc;
- void* fPaintUserData;
+ SkTDArray<Layer*> fLayers;
DisplayParams fRequestedDisplayParams;
WindowContext* fWindowContext = nullptr;