Chromium Code Reviews| Index: tools/viewer/Viewer.cpp |
| diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp |
| index 7dd265e6e2183cd75c4e726410be8a845aa12d41..23d90129e102b156ab807f2519fda8a1ef3ff9ba 100644 |
| --- a/tools/viewer/Viewer.cpp |
| +++ b/tools/viewer/Viewer.cpp |
| @@ -28,6 +28,13 @@ static void on_paint_handler(SkCanvas* canvas, void* userData) { |
| return vv->onPaint(canvas); |
| } |
| +static bool on_touch_handler(int owner, Window::InputState state, float x, float y, void* userData) |
| +{ |
| + Viewer* vv = reinterpret_cast<Viewer*>(userData); |
|
djsollen
2016/05/17 18:48:02
Viewer* viewer =
liyuqian
2016/05/17 19:06:34
Done.
|
| + |
| + return vv->onTouch(owner, state, x, y); |
| +} |
| + |
| DEFINE_bool2(fullscreen, f, true, "Run fullscreen."); |
| DEFINE_string(key, "", "Space-separated key/value pairs to add to JSON identifying this builder."); |
| DEFINE_string2(match, m, nullptr, |
| @@ -65,6 +72,7 @@ Viewer::Viewer(int argc, char** argv, void* platformData) |
| // register callbacks |
| fCommands.attach(fWindow); |
| fWindow->registerPaintFunc(on_paint_handler, this); |
| + fWindow->registerTouchFunc(on_touch_handler, this); |
| // add key-bindings |
| fCommands.addCommand('s', "Overlays", "Toggle stats display", [this]() { |
| @@ -112,7 +120,6 @@ Viewer::Viewer(int argc, char** argv, void* platformData) |
| // set up first frame |
| fCurrentSlide = 0; |
| setupCurrentSlide(-1); |
| - updateMatrix(); |
| fWindow->show(); |
| } |
| @@ -205,10 +212,9 @@ void Viewer::changeZoomLevel(float delta) { |
| } else { |
| fZoomScale = SK_Scalar1; |
| } |
| - this->updateMatrix(); |
| } |
| -void Viewer::updateMatrix(){ |
| +SkMatrix Viewer::computeMatrix() { |
| SkMatrix m; |
| m.reset(); |
| @@ -224,12 +230,10 @@ void Viewer::updateMatrix(){ |
| m.postTranslate(cx, cy); |
| } |
| - // TODO: add gesture support |
| - // Apply any gesture matrix |
| - //m.preConcat(fGesture.localM()); |
| - //m.preConcat(fGesture.globalM()); |
| + m.preConcat(fGesture.localM()); |
| + m.preConcat(fGesture.globalM()); |
| - fLocalMatrix = m; |
| + return m; |
| } |
| void Viewer::onPaint(SkCanvas* canvas) { |
| @@ -251,7 +255,7 @@ void Viewer::onPaint(SkCanvas* canvas) { |
| matrix.setRectToRect(slideBounds, contentRect, SkMatrix::kCenter_ScaleToFit); |
| canvas->concat(matrix); |
| } |
| - canvas->concat(fLocalMatrix); |
| + canvas->concat(computeMatrix()); |
| fSlides[fCurrentSlide]->draw(canvas); |
| canvas->restoreToCount(count); |
| @@ -262,6 +266,26 @@ void Viewer::onPaint(SkCanvas* canvas) { |
| fCommands.drawHelp(canvas); |
| } |
| +bool Viewer::onTouch(int owner, Window::InputState state, float x, float y) { |
| + void* castedOwner = reinterpret_cast<void*>(owner); |
| + switch (state) { |
| + case Window::kUp_InputState: { |
| + fGesture.touchEnd(castedOwner); |
| + break; |
| + } |
| + case Window::kDown_InputState: { |
| + fGesture.touchBegin(castedOwner, x, y); |
| + break; |
| + } |
| + case Window::kMove_InputState: { |
| + fGesture.touchMoved(castedOwner, x, y); |
| + break; |
| + } |
| + } |
| + fWindow->inval(); |
| + return true; |
| +} |
| + |
| void Viewer::drawStats(SkCanvas* canvas) { |
| static const float kPixelPerMS = 2.0f; |
| static const int kDisplayWidth = 130; |