Index: tools/viewer/Viewer.cpp |
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp |
index d492cdeefeb854246b90d5e721cfa43c28662cb9..12b9ebf294f0a7216dcc520941171e336f7c4f94 100644 |
--- a/tools/viewer/Viewer.cpp |
+++ b/tools/viewer/Viewer.cpp |
@@ -190,6 +190,28 @@ void Viewer::updateTitle() { |
} |
void Viewer::setupCurrentSlide(int previousSlide) { |
+ fGesture.reset(); |
+ fDefaultMatrix.reset(); |
+ fDefaultMatrixInv.reset(); |
+ |
+ if (fWindow->supportsContentRect() && fWindow->scaleContentToFit()) { |
+ const SkRect contentRect = fWindow->getContentRect(); |
+ const SkISize slideSize = fSlides[fCurrentSlide]->getDimensions(); |
+ const SkRect slideBounds = SkRect::MakeIWH(slideSize.width(), slideSize.height()); |
+ if (contentRect.width() > 0 && contentRect.height() > 0) { |
+ fDefaultMatrix.setRectToRect(slideBounds, contentRect, SkMatrix::kStart_ScaleToFit); |
+ bool inverted = fDefaultMatrix.invert(&fDefaultMatrixInv); |
+ SkASSERT(inverted); |
+ } |
+ } |
+ |
+ if (fWindow->supportsContentRect()) { |
+ const SkISize slideSize = fSlides[fCurrentSlide]->getDimensions(); |
+ SkRect windowRect = fWindow->getContentRect(); |
+ fDefaultMatrixInv.mapRect(&windowRect); |
+ fGesture.setTransLimit(SkRect::MakeWH(slideSize.width(), slideSize.height()), windowRect); |
+ } |
+ |
this->updateTitle(); |
fSlides[fCurrentSlide]->load(); |
if (previousSlide >= 0) { |
@@ -247,14 +269,7 @@ void Viewer::onPaint(SkCanvas* canvas) { |
} |
canvas->clear(SK_ColorWHITE); |
- if (fWindow->supportsContentRect() && fWindow->scaleContentToFit()) { |
- const SkRect contentRect = fWindow->getContentRect(); |
- const SkISize slideSize = fSlides[fCurrentSlide]->getDimensions(); |
- const SkRect slideBounds = SkRect::MakeIWH(slideSize.width(), slideSize.height()); |
- SkMatrix matrix; |
- matrix.setRectToRect(slideBounds, contentRect, SkMatrix::kCenter_ScaleToFit); |
- canvas->concat(matrix); |
- } |
+ canvas->concat(fDefaultMatrix); |
canvas->concat(computeMatrix()); |
fSlides[fCurrentSlide]->draw(canvas); |
@@ -268,17 +283,18 @@ void Viewer::onPaint(SkCanvas* canvas) { |
bool Viewer::onTouch(int owner, Window::InputState state, float x, float y) { |
void* castedOwner = reinterpret_cast<void*>(owner); |
+ SkPoint touchPoint = fDefaultMatrixInv.mapXY(x, y); |
switch (state) { |
case Window::kUp_InputState: { |
fGesture.touchEnd(castedOwner); |
break; |
} |
case Window::kDown_InputState: { |
- fGesture.touchBegin(castedOwner, x, y); |
+ fGesture.touchBegin(castedOwner, touchPoint.fX, touchPoint.fY); |
break; |
} |
case Window::kMove_InputState: { |
- fGesture.touchMoved(castedOwner, x, y); |
+ fGesture.touchMoved(castedOwner, touchPoint.fX, touchPoint.fY); |
break; |
} |
} |