Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Unified Diff: tools/viewer/Viewer.cpp

Issue 1982643004: Implement touch control (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: SkMutex Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/viewer/Viewer.h ('k') | tools/viewer/sk_app/Window.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/viewer/Viewer.cpp
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 7dd265e6e2183cd75c4e726410be8a845aa12d41..d492cdeefeb854246b90d5e721cfa43c28662cb9 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* viewer = reinterpret_cast<Viewer*>(userData);
+
+ return viewer->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;
« no previous file with comments | « tools/viewer/Viewer.h ('k') | tools/viewer/sk_app/Window.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698