Add sample mouse support to Viewer
Bug: skia:6830
Change-Id: I1a6bb781465a29cec4946462e234d63c48693454
Reviewed-on: https://skia-review.googlesource.com/66543
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
diff --git a/tools/viewer/SampleSlide.cpp b/tools/viewer/SampleSlide.cpp
index 93a495e..68dab92 100644
--- a/tools/viewer/SampleSlide.cpp
+++ b/tools/viewer/SampleSlide.cpp
@@ -12,13 +12,17 @@
#include "SkOSFile.h"
#include "SkStream.h"
-SampleSlide::SampleSlide(const SkViewFactory* factory) : fViewFactory(factory) {
+using namespace sk_app;
+
+SampleSlide::SampleSlide(const SkViewFactory* factory)
+ : fViewFactory(factory)
+ , fClick(nullptr) {
SkView* view = (*factory)();
SampleCode::RequestTitle(view, &fName);
view->unref();
}
-SampleSlide::~SampleSlide() {}
+SampleSlide::~SampleSlide() { delete fClick; }
void SampleSlide::draw(SkCanvas* canvas) {
SkASSERT(fView);
@@ -45,6 +49,47 @@
return fView->doQuery(&evt);
}
+bool SampleSlide::onMouse(SkScalar x, SkScalar y, Window::InputState state,
+ uint32_t modifiers) {
+ // map to SkView modifiers
+ unsigned modifierKeys = 0;
+ modifierKeys |= (state & Window::kShift_ModifierKey) ? kShift_SkModifierKey : 0;
+ modifierKeys |= (state & Window::kControl_ModifierKey) ? kControl_SkModifierKey : 0;
+ modifierKeys |= (state & Window::kOption_ModifierKey) ? kOption_SkModifierKey : 0;
+ modifierKeys |= (state & Window::kCommand_ModifierKey) ? kCommand_SkModifierKey : 0;
+
+ bool handled = false;
+ switch (state) {
+ case Window::kDown_InputState: {
+ delete fClick;
+ fClick = fView->findClickHandler(SkIntToScalar(x), SkIntToScalar(y), modifierKeys);
+ if (fClick) {
+ SkView::DoClickDown(fClick, x, y, modifierKeys);
+ handled = true;
+ }
+ break;
+ }
+ case Window::kMove_InputState: {
+ if (fClick) {
+ SkView::DoClickMoved(fClick, x, y, modifierKeys);
+ handled = true;
+ }
+ break;
+ }
+ case Window::kUp_InputState: {
+ if (fClick) {
+ SkView::DoClickUp(fClick, x, y, modifierKeys);
+ delete fClick;
+ fClick = nullptr;
+ handled = true;
+ }
+ break;
+ }
+ }
+
+ return handled;
+}
+
#if defined(SK_BUILD_FOR_ANDROID)
// these are normally defined in SkOSWindow_unix, but we don't
// want to include that