Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "Viewer.h" | 8 #include "Viewer.h" |
| 9 | 9 |
| 10 #include "GMSlide.h" | 10 #include "GMSlide.h" |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 95 } | 95 } |
| 96 this->setupCurrentSlide(previousSlide); | 96 this->setupCurrentSlide(previousSlide); |
| 97 }); | 97 }); |
| 98 fCommands.addCommand(Window::Key::kUp, "Up", "Transform", "Zoom in", [this]( ) { | 98 fCommands.addCommand(Window::Key::kUp, "Up", "Transform", "Zoom in", [this]( ) { |
| 99 this->changeZoomLevel(1.f / 32.f); | 99 this->changeZoomLevel(1.f / 32.f); |
| 100 fWindow->inval(); | 100 fWindow->inval(); |
| 101 }); | 101 }); |
| 102 fCommands.addCommand(Window::Key::kDown, "Down", "Transform", "Zoom out", [t his]() { | 102 fCommands.addCommand(Window::Key::kDown, "Down", "Transform", "Zoom out", [t his]() { |
| 103 this->changeZoomLevel(-1.f / 32.f); | 103 this->changeZoomLevel(-1.f / 32.f); |
| 104 fWindow->inval(); | 104 fWindow->inval(); |
| 105 }); | 105 }); |
|
djsollen
2016/05/17 12:40:25
It seems more natural to me to implement the touch
| |
| 106 | 106 |
| 107 // set up slides | 107 // set up slides |
| 108 this->initSlides(); | 108 this->initSlides(); |
| 109 | 109 |
| 110 fAnimTimer.run(); | 110 fAnimTimer.run(); |
| 111 | 111 |
| 112 // set up first frame | 112 // set up first frame |
| 113 fCurrentSlide = 0; | 113 fCurrentSlide = 0; |
| 114 setupCurrentSlide(-1); | 114 setupCurrentSlide(-1); |
| 115 updateMatrix(); | |
| 116 | 115 |
| 117 fWindow->show(); | 116 fWindow->show(); |
| 118 } | 117 } |
| 119 | 118 |
| 120 void Viewer::initSlides() { | 119 void Viewer::initSlides() { |
| 121 const skiagm::GMRegistry* gms(skiagm::GMRegistry::Head()); | 120 const skiagm::GMRegistry* gms(skiagm::GMRegistry::Head()); |
| 122 while (gms) { | 121 while (gms) { |
| 123 SkAutoTDelete<skiagm::GM> gm(gms->factory()(nullptr)); | 122 SkAutoTDelete<skiagm::GM> gm(gms->factory()(nullptr)); |
| 124 | 123 |
| 125 if (!SkCommandLineFlags::ShouldSkip(FLAGS_match, gm->getName())) { | 124 if (!SkCommandLineFlags::ShouldSkip(FLAGS_match, gm->getName())) { |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 198 fZoomLevel += delta; | 197 fZoomLevel += delta; |
| 199 if (fZoomLevel > 0) { | 198 if (fZoomLevel > 0) { |
| 200 fZoomLevel = SkMinScalar(fZoomLevel, MAX_ZOOM_LEVEL); | 199 fZoomLevel = SkMinScalar(fZoomLevel, MAX_ZOOM_LEVEL); |
| 201 fZoomScale = fZoomLevel + SK_Scalar1; | 200 fZoomScale = fZoomLevel + SK_Scalar1; |
| 202 } else if (fZoomLevel < 0) { | 201 } else if (fZoomLevel < 0) { |
| 203 fZoomLevel = SkMaxScalar(fZoomLevel, MIN_ZOOM_LEVEL); | 202 fZoomLevel = SkMaxScalar(fZoomLevel, MIN_ZOOM_LEVEL); |
| 204 fZoomScale = SK_Scalar1 / (SK_Scalar1 - fZoomLevel); | 203 fZoomScale = SK_Scalar1 / (SK_Scalar1 - fZoomLevel); |
| 205 } else { | 204 } else { |
| 206 fZoomScale = SK_Scalar1; | 205 fZoomScale = SK_Scalar1; |
| 207 } | 206 } |
| 208 this->updateMatrix(); | |
| 209 } | 207 } |
| 210 | 208 |
| 211 void Viewer::updateMatrix(){ | 209 SkMatrix Viewer::computeMatrix() { |
| 212 SkMatrix m; | 210 SkMatrix m; |
| 213 m.reset(); | 211 m.reset(); |
| 214 | 212 |
| 215 if (fZoomLevel) { | 213 if (fZoomLevel) { |
| 216 SkPoint center; | 214 SkPoint center; |
| 217 //m = this->getLocalMatrix();//.invert(&m); | 215 //m = this->getLocalMatrix();//.invert(&m); |
| 218 m.mapXY(fZoomCenterX, fZoomCenterY, ¢er); | 216 m.mapXY(fZoomCenterX, fZoomCenterY, ¢er); |
| 219 SkScalar cx = center.fX; | 217 SkScalar cx = center.fX; |
| 220 SkScalar cy = center.fY; | 218 SkScalar cy = center.fY; |
| 221 | 219 |
| 222 m.setTranslate(-cx, -cy); | 220 m.setTranslate(-cx, -cy); |
| 223 m.postScale(fZoomScale, fZoomScale); | 221 m.postScale(fZoomScale, fZoomScale); |
| 224 m.postTranslate(cx, cy); | 222 m.postTranslate(cx, cy); |
| 225 } | 223 } |
| 226 | 224 |
| 227 // TODO: add gesture support | 225 m.preConcat(fWindow->getGestureLocalM()); |
| 228 // Apply any gesture matrix | 226 m.preConcat(fWindow->getGestureGlobalM()); |
| 229 //m.preConcat(fGesture.localM()); | |
| 230 //m.preConcat(fGesture.globalM()); | |
| 231 | 227 |
| 232 fLocalMatrix = m; | 228 return m; |
| 233 } | 229 } |
| 234 | 230 |
| 235 void Viewer::onPaint(SkCanvas* canvas) { | 231 void Viewer::onPaint(SkCanvas* canvas) { |
| 236 | 232 |
| 237 int count = canvas->save(); | 233 int count = canvas->save(); |
| 238 | 234 |
| 239 if (fWindow->supportsContentRect()) { | 235 if (fWindow->supportsContentRect()) { |
| 240 SkRect contentRect = fWindow->getContentRect(); | 236 SkRect contentRect = fWindow->getContentRect(); |
| 241 canvas->clipRect(contentRect); | 237 canvas->clipRect(contentRect); |
| 242 canvas->translate(contentRect.fLeft, contentRect.fTop); | 238 canvas->translate(contentRect.fLeft, contentRect.fTop); |
| 243 } | 239 } |
| 244 | 240 |
| 245 canvas->clear(SK_ColorWHITE); | 241 canvas->clear(SK_ColorWHITE); |
| 246 if (fWindow->supportsContentRect() && fWindow->scaleContentToFit()) { | 242 if (fWindow->supportsContentRect() && fWindow->scaleContentToFit()) { |
| 247 const SkRect contentRect = fWindow->getContentRect(); | 243 const SkRect contentRect = fWindow->getContentRect(); |
| 248 const SkISize slideSize = fSlides[fCurrentSlide]->getDimensions(); | 244 const SkISize slideSize = fSlides[fCurrentSlide]->getDimensions(); |
| 249 const SkRect slideBounds = SkRect::MakeIWH(slideSize.width(), slideSize. height()); | 245 const SkRect slideBounds = SkRect::MakeIWH(slideSize.width(), slideSize. height()); |
| 250 SkMatrix matrix; | 246 SkMatrix matrix; |
| 251 matrix.setRectToRect(slideBounds, contentRect, SkMatrix::kCenter_ScaleTo Fit); | 247 matrix.setRectToRect(slideBounds, contentRect, SkMatrix::kCenter_ScaleTo Fit); |
| 252 canvas->concat(matrix); | 248 canvas->concat(matrix); |
| 253 } | 249 } |
| 254 canvas->concat(fLocalMatrix); | 250 canvas->concat(computeMatrix()); |
| 255 | 251 |
| 256 fSlides[fCurrentSlide]->draw(canvas); | 252 fSlides[fCurrentSlide]->draw(canvas); |
| 257 canvas->restoreToCount(count); | 253 canvas->restoreToCount(count); |
| 258 | 254 |
| 259 if (fDisplayStats) { | 255 if (fDisplayStats) { |
| 260 drawStats(canvas); | 256 drawStats(canvas); |
| 261 } | 257 } |
| 262 fCommands.drawHelp(canvas); | 258 fCommands.drawHelp(canvas); |
| 263 } | 259 } |
| 264 | 260 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 314 // Record measurements | 310 // Record measurements |
| 315 fMeasurements[fCurrentMeasurement++] = ms; | 311 fMeasurements[fCurrentMeasurement++] = ms; |
| 316 fCurrentMeasurement &= (kMeasurementCount - 1); // fast mod | 312 fCurrentMeasurement &= (kMeasurementCount - 1); // fast mod |
| 317 SkASSERT(fCurrentMeasurement < kMeasurementCount); | 313 SkASSERT(fCurrentMeasurement < kMeasurementCount); |
| 318 | 314 |
| 319 fAnimTimer.updateTime(); | 315 fAnimTimer.updateTime(); |
| 320 if (fSlides[fCurrentSlide]->animate(fAnimTimer) || fDisplayStats) { | 316 if (fSlides[fCurrentSlide]->animate(fAnimTimer) || fDisplayStats) { |
| 321 fWindow->inval(); | 317 fWindow->inval(); |
| 322 } | 318 } |
| 323 } | 319 } |
| OLD | NEW |