| OLD | NEW |
| (Empty) |
| 1 // Copyright 2013 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 PinchAction object, which zooms into or out of a | |
| 6 // page by a given scale factor: | |
| 7 // 1. var action = new __PinchAction(callback) | |
| 8 // 2. action.start(pinch_options) | |
| 9 'use strict'; | |
| 10 | |
| 11 (function() { | |
| 12 | |
| 13 function PinchGestureOptions(opt_options) { | |
| 14 if (opt_options) { | |
| 15 this.element_ = opt_options.element; | |
| 16 this.left_anchor_ratio_ = opt_options.left_anchor_ratio; | |
| 17 this.top_anchor_ratio_ = opt_options.top_anchor_ratio; | |
| 18 this.scale_factor_ = opt_options.scale_factor; | |
| 19 this.speed_ = opt_options.speed; | |
| 20 } else { | |
| 21 this.element_ = document.body; | |
| 22 this.left_anchor_ratio_ = 0.5; | |
| 23 this.top_anchor_ratio_ = 0.5; | |
| 24 this.scale_factor_ = 2.0; | |
| 25 this.speed_ = 800; | |
| 26 } | |
| 27 } | |
| 28 | |
| 29 function supportedByBrowser() { | |
| 30 return !!(window.chrome && | |
| 31 chrome.gpuBenchmarking && | |
| 32 chrome.gpuBenchmarking.pinchBy); | |
| 33 } | |
| 34 | |
| 35 // This class zooms into or out of a page, given a number of pixels for | |
| 36 // the synthetic pinch gesture to cover. | |
| 37 function PinchAction(opt_callback) { | |
| 38 var self = this; | |
| 39 | |
| 40 this.beginMeasuringHook = function() {} | |
| 41 this.endMeasuringHook = function() {} | |
| 42 | |
| 43 this.callback_ = opt_callback; | |
| 44 }; | |
| 45 | |
| 46 PinchAction.prototype.start = function(opt_options) { | |
| 47 this.options_ = new PinchGestureOptions(opt_options); | |
| 48 | |
| 49 requestAnimationFrame(this.startPass_.bind(this)); | |
| 50 }; | |
| 51 | |
| 52 PinchAction.prototype.startPass_ = function() { | |
| 53 this.beginMeasuringHook(); | |
| 54 | |
| 55 var rect = __GestureCommon_GetBoundingVisibleRect(this.options_.element_); | |
| 56 var anchor_left = | |
| 57 rect.left + rect.width * this.options_.left_anchor_ratio_; | |
| 58 var anchor_top = | |
| 59 rect.top + rect.height * this.options_.top_anchor_ratio_; | |
| 60 chrome.gpuBenchmarking.pinchBy(this.options_.scale_factor_, | |
| 61 anchor_left, anchor_top, | |
| 62 this.onGestureComplete_.bind(this), | |
| 63 this.options_.speed_); | |
| 64 }; | |
| 65 | |
| 66 PinchAction.prototype.onGestureComplete_ = function() { | |
| 67 this.endMeasuringHook(); | |
| 68 | |
| 69 if (this.callback_) | |
| 70 this.callback_(); | |
| 71 }; | |
| 72 | |
| 73 window.__PinchAction = PinchAction; | |
| 74 window.__PinchAction_SupportedByBrowser = supportedByBrowser; | |
| 75 })(); | |
| OLD | NEW |