OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 // This file provides the DragAction object, which performs drag on a page |
| 6 // using given start and end positions: |
| 7 // 1. var action = new __DragAction(callback) |
| 8 // 2. action.start(drag_options) |
| 9 'use strict'; |
| 10 |
| 11 (function() { |
| 12 function DragGestureOptions(opt_options) { |
| 13 this.element_ = opt_options.element; |
| 14 this.left_start_ratio_ = opt_options.left_start_ratio; |
| 15 this.top_start_ratio_ = opt_options.top_start_ratio; |
| 16 this.left_end_ratio_ = opt_options.left_end_ratio; |
| 17 this.top_end_ratio_ = opt_options.top_end_ratio; |
| 18 this.speed_ = opt_options.speed; |
| 19 this.gesture_source_type_ = opt_options.gesture_source_type; |
| 20 } |
| 21 |
| 22 function supportedByBrowser() { |
| 23 return !!(window.chrome && |
| 24 chrome.gpuBenchmarking && |
| 25 chrome.gpuBenchmarking.smoothDrag); |
| 26 } |
| 27 |
| 28 // This class performs drag action using given start and end positions, |
| 29 // by a single drag gesture. |
| 30 function DragAction(opt_callback) { |
| 31 this.beginMeasuringHook = function() {} |
| 32 this.endMeasuringHook = function() {} |
| 33 |
| 34 this.callback_ = opt_callback; |
| 35 } |
| 36 |
| 37 DragAction.prototype.start = function(opt_options) { |
| 38 this.options_ = new DragGestureOptions(opt_options); |
| 39 requestAnimationFrame(this.startGesture_.bind(this)); |
| 40 }; |
| 41 |
| 42 DragAction.prototype.startGesture_ = function() { |
| 43 this.beginMeasuringHook(); |
| 44 |
| 45 var rect = __GestureCommon_GetBoundingVisibleRect(this.options_.element_); |
| 46 var start_left = |
| 47 rect.left + (rect.width * this.options_.left_start_ratio_); |
| 48 var start_top = |
| 49 rect.top + (rect.height * this.options_.top_start_ratio_); |
| 50 var end_left = |
| 51 rect.left + (rect.width * this.options_.left_end_ratio_); |
| 52 var end_top = |
| 53 rect.top + (rect.height * this.options_.top_end_ratio_); |
| 54 chrome.gpuBenchmarking.smoothDrag( |
| 55 start_left, start_top, end_left, end_top, |
| 56 this.onGestureComplete_.bind(this), this.options_.gesture_source_type_, |
| 57 this.options_.speed_); |
| 58 }; |
| 59 |
| 60 DragAction.prototype.onGestureComplete_ = function() { |
| 61 this.endMeasuringHook(); |
| 62 |
| 63 // We're done. |
| 64 if (this.callback_) |
| 65 this.callback_(); |
| 66 }; |
| 67 |
| 68 window.__DragAction = DragAction; |
| 69 window.__DragAction_SupportedByBrowser = supportedByBrowser; |
| 70 })(); |
OLD | NEW |