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_percentage_ = opt_options.left_anchor_percentage; 17 this.top_anchor_percentage_ = opt_options.top_anchor_percentage; 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_percentage_ = 0.5; 23 this.top_anchor_percentage_ = 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_percentage_; 58 var anchor_top = 59 rect.top + rect.height * this.options_.top_anchor_percentage_; 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})(); 76