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

Side by Side Diff: src/views/SkTouchGesture.cpp

Issue 1996613002: Correct gesture scale and translation (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: nits 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 unified diff | Download patch
« no previous file with comments | « include/views/SkTouchGesture.h ('k') | tools/viewer/Viewer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2010 Google Inc. 2 * Copyright 2010 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 8 #include <algorithm>
9 9
10 #include "SkTouchGesture.h" 10 #include "SkTouchGesture.h"
11 #include "SkMatrix.h" 11 #include "SkMatrix.h"
12 #include "SkTime.h" 12 #include "SkTime.h"
13 13
14 #define DISCRETIZE_TRANSLATE_TO_AVOID_FLICKER true 14 #define DISCRETIZE_TRANSLATE_TO_AVOID_FLICKER true
15 15
16 static const SkScalar MAX_FLING_SPEED = SkIntToScalar(1500); 16 static const SkScalar MAX_FLING_SPEED = SkIntToScalar(1500);
17 17
18 static SkScalar pin_max_fling(SkScalar speed) { 18 static SkScalar pin_max_fling(SkScalar speed) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 /////////////////////////////////////////////////////////////////////////////// 102 ///////////////////////////////////////////////////////////////////////////////
103 103
104 SkTouchGesture::SkTouchGesture() { 104 SkTouchGesture::SkTouchGesture() {
105 this->reset(); 105 this->reset();
106 } 106 }
107 107
108 SkTouchGesture::~SkTouchGesture() { 108 SkTouchGesture::~SkTouchGesture() {
109 } 109 }
110 110
111 void SkTouchGesture::reset() { 111 void SkTouchGesture::reset() {
112 fIsTransLimited = false;
112 fTouches.reset(); 113 fTouches.reset();
113 fState = kEmpty_State; 114 fState = kEmpty_State;
114 fLocalM.reset(); 115 fLocalM.reset();
115 fGlobalM.reset(); 116 fGlobalM.reset();
116 117
117 fLastUpMillis = SkTime::GetMSecs() - 2*MAX_DBL_TAP_INTERVAL; 118 fLastUpMillis = SkTime::GetMSecs() - 2*MAX_DBL_TAP_INTERVAL;
118 fLastUpP.set(0, 0); 119 fLastUpP.set(0, 0);
119 } 120 }
120 121
121 void SkTouchGesture::flushLocalM() { 122 void SkTouchGesture::flushLocalM() {
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 this->flushLocalM(); 287 this->flushLocalM();
287 SkASSERT(kZoom_State == fState); 288 SkASSERT(kZoom_State == fState);
288 fState = kEmpty_State; 289 fState = kEmpty_State;
289 break; 290 break;
290 default: 291 default:
291 SkASSERT(kZoom_State == fState); 292 SkASSERT(kZoom_State == fState);
292 break; 293 break;
293 } 294 }
294 295
295 fTouches.removeShuffle(index); 296 fTouches.removeShuffle(index);
297
298 limitTrans();
296 } 299 }
297 300
298 float SkTouchGesture::computePinch(const Rec& rec0, const Rec& rec1) { 301 float SkTouchGesture::computePinch(const Rec& rec0, const Rec& rec1) {
299 double dx = rec0.fStartX - rec1.fStartX; 302 double dx = rec0.fStartX - rec1.fStartX;
300 double dy = rec0.fStartY - rec1.fStartY; 303 double dy = rec0.fStartY - rec1.fStartY;
301 double dist0 = sqrt(dx*dx + dy*dy); 304 double dist0 = sqrt(dx*dx + dy*dy);
302 305
303 dx = rec0.fLastX - rec1.fLastX; 306 dx = rec0.fLastX - rec1.fLastX;
304 dy = rec0.fLastY - rec1.fLastY; 307 dy = rec0.fLastY - rec1.fLastY;
305 double dist1 = sqrt(dx*dx + dy*dy); 308 double dist1 = sqrt(dx*dx + dy*dy);
(...skipping 14 matching lines...) Expand all
320 fTouches.reset(); 323 fTouches.reset();
321 fState = kEmpty_State; 324 fState = kEmpty_State;
322 found = true; 325 found = true;
323 } 326 }
324 } 327 }
325 328
326 fLastUpMillis = now; 329 fLastUpMillis = now;
327 fLastUpP.set(x, y); 330 fLastUpP.set(x, y);
328 return found; 331 return found;
329 } 332 }
333
334 void SkTouchGesture::setTransLimit(const SkRect& contentRect, const SkRect& wind owRect) {
335 fIsTransLimited = true;
336 fContentRect = contentRect;
337 fWindowRect = windowRect;
338 }
339
340 void SkTouchGesture::limitTrans() {
341 if (!fIsTransLimited) {
342 return;
343 }
344
345 SkRect scaledContent = fContentRect;
346 fGlobalM.mapRect(&scaledContent);
347 const SkScalar ZERO = 0;
348
349 fGlobalM.postTranslate(ZERO, std::min(ZERO, fWindowRect.fBottom - scaledCont ent.fTop));
350 fGlobalM.postTranslate(ZERO, std::max(ZERO, fWindowRect.fTop - scaledContent .fBottom));
351 fGlobalM.postTranslate(std::min(ZERO, fWindowRect.fRight - scaledContent.fLe ft), ZERO);
352 fGlobalM.postTranslate(std::max(ZERO, fWindowRect.fLeft - scaledContent.fRig ht), ZERO);
353 }
OLDNEW
« no previous file with comments | « include/views/SkTouchGesture.h ('k') | tools/viewer/Viewer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698