OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * Implementation of a custom scrolling behavior. | 6 * Implementation of a custom scrolling behavior. |
7 * This behavior overrides native scrolling for an area. This area can be a | 7 * This behavior overrides native scrolling for an area. This area can be a |
8 * single defined part of a page, the entire page, or several different parts | 8 * single defined part of a page, the entire page, or several different parts |
9 * of a page. | 9 * of a page. |
10 * | 10 * |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 // TODO(jacobr): this assert fires asynchronously which could be confusing. | 232 // TODO(jacobr): this assert fires asynchronously which could be confusing. |
233 if (_scrollTechnique == ScrollerScrollTechnique.RELATIVE_POSITIONING) { | 233 if (_scrollTechnique == ScrollerScrollTechnique.RELATIVE_POSITIONING) { |
234 _element.computedStyle.then((CSSStyleDeclaration style) { | 234 _element.computedStyle.then((CSSStyleDeclaration style) { |
235 assert(style.position != "static"); | 235 assert(style.position != "static"); |
236 }); | 236 }); |
237 } | 237 } |
238 | 238 |
239 _initLayer(); | 239 _initLayer(); |
240 } | 240 } |
241 | 241 |
242 EventListenerList get onScrollerStart() { | 242 EventListenerList get onScrollerStart { |
243 if (_onScrollerStart === null) { | 243 if (_onScrollerStart === null) { |
244 _onScrollerStart = new SimpleEventListenerList(); | 244 _onScrollerStart = new SimpleEventListenerList(); |
245 } | 245 } |
246 return _onScrollerStart; | 246 return _onScrollerStart; |
247 } | 247 } |
248 | 248 |
249 EventListenerList get onScrollerEnd() { | 249 EventListenerList get onScrollerEnd { |
250 if (_onScrollerEnd === null) { | 250 if (_onScrollerEnd === null) { |
251 _onScrollerEnd = new SimpleEventListenerList(); | 251 _onScrollerEnd = new SimpleEventListenerList(); |
252 } | 252 } |
253 return _onScrollerEnd; | 253 return _onScrollerEnd; |
254 } | 254 } |
255 | 255 |
256 EventListenerList get onScrollerDragEnd() { | 256 EventListenerList get onScrollerDragEnd { |
257 if (_onScrollerDragEnd === null) { | 257 if (_onScrollerDragEnd === null) { |
258 _onScrollerDragEnd = new SimpleEventListenerList(); | 258 _onScrollerDragEnd = new SimpleEventListenerList(); |
259 } | 259 } |
260 return _onScrollerDragEnd; | 260 return _onScrollerDragEnd; |
261 } | 261 } |
262 | 262 |
263 EventListenerList get onContentMoved() { | 263 EventListenerList get onContentMoved { |
264 if (_onContentMoved === null) { | 264 if (_onContentMoved === null) { |
265 _onContentMoved = new SimpleEventListenerList(); | 265 _onContentMoved = new SimpleEventListenerList(); |
266 } | 266 } |
267 return _onContentMoved; | 267 return _onContentMoved; |
268 } | 268 } |
269 | 269 |
270 EventListenerList get onDecelStart() { | 270 EventListenerList get onDecelStart { |
271 if (_onDecelStart === null) { | 271 if (_onDecelStart === null) { |
272 _onDecelStart = new SimpleEventListenerList(); | 272 _onDecelStart = new SimpleEventListenerList(); |
273 } | 273 } |
274 return _onDecelStart; | 274 return _onDecelStart; |
275 } | 275 } |
276 | 276 |
277 | 277 |
278 /** | 278 /** |
279 * Add a scroll listener. This allows other classes to subscribe to scroll | 279 * Add a scroll listener. This allows other classes to subscribe to scroll |
280 * notifications from this scroller. | 280 * notifications from this scroller. |
(...skipping 20 matching lines...) Expand all Loading... |
301 if (newPosition > maxPosition) { | 301 if (newPosition > maxPosition) { |
302 newPosition -= (newPosition - maxPosition) / 2; | 302 newPosition -= (newPosition - maxPosition) / 2; |
303 } | 303 } |
304 } | 304 } |
305 return newPosition; | 305 return newPosition; |
306 } | 306 } |
307 | 307 |
308 /** | 308 /** |
309 * Coordinate we would end up at if we did nothing. | 309 * Coordinate we would end up at if we did nothing. |
310 */ | 310 */ |
311 Coordinate get currentTarget() { | 311 Coordinate get currentTarget { |
312 Coordinate end = _momentum.destination; | 312 Coordinate end = _momentum.destination; |
313 if (end === null) { | 313 if (end === null) { |
314 end = _contentOffset; | 314 end = _contentOffset; |
315 } | 315 } |
316 return end; | 316 return end; |
317 } | 317 } |
318 | 318 |
319 Coordinate get contentOffset() => _contentOffset; | 319 Coordinate get contentOffset => _contentOffset; |
320 | 320 |
321 /** | 321 /** |
322 * Animate the position of the scroller to the specified [x], [y] coordinates | 322 * Animate the position of the scroller to the specified [x], [y] coordinates |
323 * by applying the throw gesture with the correct velocity to end at that | 323 * by applying the throw gesture with the correct velocity to end at that |
324 * location. | 324 * location. |
325 */ | 325 */ |
326 void throwTo(num x, num y, [num decelerationFactor = null]) { | 326 void throwTo(num x, num y, [num decelerationFactor = null]) { |
327 reconfigure(() { | 327 reconfigure(() { |
328 final snappedTarget = _snapToBounds(x, y); | 328 final snappedTarget = _snapToBounds(x, y); |
329 // If a deceleration factor is not specified, use the existing | 329 // If a deceleration factor is not specified, use the existing |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 * none is provided then the content's current x offset will be used. | 391 * none is provided then the content's current x offset will be used. |
392 * Returns the percent of the page scrolled horizontally. | 392 * Returns the percent of the page scrolled horizontally. |
393 */ | 393 */ |
394 num getHorizontalScrollPercent([num x = null]) { | 394 num getHorizontalScrollPercent([num x = null]) { |
395 x = x !== null ? x : _contentOffset.x; | 395 x = x !== null ? x : _contentOffset.x; |
396 return (x - _minPoint.x) / (_maxPoint.x - _minPoint.x); | 396 return (x - _minPoint.x) / (_maxPoint.x - _minPoint.x); |
397 } | 397 } |
398 | 398 |
399 num getMaxPointY()=> _maxPoint.y; | 399 num getMaxPointY()=> _maxPoint.y; |
400 num getMinPointY() => _minPoint.y; | 400 num getMinPointY() => _minPoint.y; |
401 Momentum get momentum() => _momentum; | 401 Momentum get momentum => _momentum; |
402 | 402 |
403 /** | 403 /** |
404 * Provide access to the touch handler that the scroller created to manage | 404 * Provide access to the touch handler that the scroller created to manage |
405 * touch events. | 405 * touch events. |
406 */ | 406 */ |
407 TouchHandler getTouchHandler() => _touchHandler; | 407 TouchHandler getTouchHandler() => _touchHandler; |
408 num getVerticalOffset() => _contentOffset.y; | 408 num getVerticalOffset() => _contentOffset.y; |
409 | 409 |
410 /** | 410 /** |
411 * [y] value is used as reference for percent measurement. If | 411 * [y] value is used as reference for percent measurement. If |
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 for (EventListener listener in _listeners) { | 722 for (EventListener listener in _listeners) { |
723 listener(evt); | 723 listener(evt); |
724 } | 724 } |
725 } | 725 } |
726 } | 726 } |
727 | 727 |
728 class ScrollerScrollTechnique { | 728 class ScrollerScrollTechnique { |
729 static const TRANSFORM_3D = 1; | 729 static const TRANSFORM_3D = 1; |
730 static const RELATIVE_POSITIONING = 2; | 730 static const RELATIVE_POSITIONING = 2; |
731 } | 731 } |
OLD | NEW |