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

Side by Side Diff: chrome/browser/resources/pdf/pdf.js

Issue 2400743002: Improved Pinch-Zoom for PDF. (Closed)
Patch Set: Created 4 years, 2 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 'use strict'; 5 'use strict';
6 6
7 /** 7 /**
8 * @return {number} Width of a scrollbar in pixels 8 * @return {number} Width of a scrollbar in pixels
9 */ 9 */
10 function getScrollbarWidth() { 10 function getScrollbarWidth() {
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 this.zoomToolbar_ = $('zoom-toolbar'); 184 this.zoomToolbar_ = $('zoom-toolbar');
185 this.zoomToolbar_.addEventListener('fit-to-width', 185 this.zoomToolbar_.addEventListener('fit-to-width',
186 this.viewport_.fitToWidth.bind(this.viewport_)); 186 this.viewport_.fitToWidth.bind(this.viewport_));
187 this.zoomToolbar_.addEventListener('fit-to-page', 187 this.zoomToolbar_.addEventListener('fit-to-page',
188 this.fitToPage_.bind(this)); 188 this.fitToPage_.bind(this));
189 this.zoomToolbar_.addEventListener('zoom-in', 189 this.zoomToolbar_.addEventListener('zoom-in',
190 this.viewport_.zoomIn.bind(this.viewport_)); 190 this.viewport_.zoomIn.bind(this.viewport_));
191 this.zoomToolbar_.addEventListener('zoom-out', 191 this.zoomToolbar_.addEventListener('zoom-out',
192 this.viewport_.zoomOut.bind(this.viewport_)); 192 this.viewport_.zoomOut.bind(this.viewport_));
193 193
194 // We add Hammer.js in order to handle touch events like pinch-zoom.
195 this.hammertime_ = new Hammer($('plugin'));
196
197 // We must preventDefault if there is a two finger touch. By doing so browser
198 // zoom does not interfere with our way of handling the event.
199 this.plugin_.addEventListener('touchstart', function(e) {
200 if (e.touches.length >= 2) {
201 e.preventDefault();
202 this.hammertime_.get('pinch').set({enable: true});
203 }
204 }.bind(this));
205
206 this.plugin_.addEventListener('touchend', function(e) {
207 this.hammertime_.get('pinch').set({enable: false});
208 }.bind(this));
209
210 this.hammertime_.on('pinchstart', function(ev) {
211 this.pinchZoomStart(ev);
212 }.bind(this.viewport_));
213
214 this.hammertime_.on('pinch', function(ev) {
215 if(!this.didPinch_) {
Kevin McNee - google account 2016/10/06 21:53:17 Style: missing space
Kevin McNee - google account 2016/10/13 18:19:23 Done.
216 this.didPinch_ = true;
Kevin McNee - google account 2016/10/07 19:08:49 There are several places where we access viewport'
Kevin McNee - google account 2016/10/13 18:19:23 Done.
217 window.requestAnimationFrame(function() {
218 this.didPinch_ = false;
219 this.pinchZoom(ev);
220 }.bind(this));
221 }
222 }.bind(this.viewport_));
Kevin McNee - google account 2016/10/07 19:08:49 I'm not really a fan of these kind of binds. It ma
Kevin McNee - google account 2016/10/13 18:19:23 Done.
223
224 this.hammertime_.on('pinchend', function(ev) {
225 if(!this.didPinchEnd_) {
Kevin McNee - google account 2016/10/06 21:53:17 Style: missing space
Kevin McNee - google account 2016/10/13 18:19:23 Done.
226 this.didPinchEnd_ = true;
227 window.requestAnimationFrame(function() {
Kevin McNee - google account 2016/10/06 21:53:17 Comment from previous review: bokan: I don't think
Kevin McNee - google account 2016/10/07 19:08:49 The method that this calls, pinchZoomEnd, does a f
bokan 2016/10/07 19:16:03 It's been a while since I've looked at this. I thi
Kevin McNee - google account 2016/10/07 19:38:11 Oh, I see. I'll double check, but assuming the eve
Kevin McNee - google account 2016/10/13 18:04:02 It looks like this was preventing a race where a p
228 this.didPinchEnd_ = false;
229 this.pinchZoomEnd(ev);
230 }.bind(this));
231 }
232 }.bind(this.viewport_));
233
194 if (toolbarEnabled) { 234 if (toolbarEnabled) {
195 this.toolbar_ = $('toolbar'); 235 this.toolbar_ = $('toolbar');
196 this.toolbar_.hidden = false; 236 this.toolbar_.hidden = false;
197 this.toolbar_.addEventListener('save', this.save_.bind(this)); 237 this.toolbar_.addEventListener('save', this.save_.bind(this));
198 this.toolbar_.addEventListener('print', this.print_.bind(this)); 238 this.toolbar_.addEventListener('print', this.print_.bind(this));
199 this.toolbar_.addEventListener('rotate-right', 239 this.toolbar_.addEventListener('rotate-right',
200 this.rotateClockwise_.bind(this)); 240 this.rotateClockwise_.bind(this));
201 // Must attach to mouseup on the plugin element, since it eats mousedown 241 // Must attach to mouseup on the plugin element, since it eats mousedown
202 // and click events. 242 // and click events.
203 this.plugin_.addEventListener('mouseup', 243 this.plugin_.addEventListener('mouseup',
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 }, 702 },
663 703
664 /** 704 /**
665 * @private 705 * @private
666 * A callback that's called after the zoom changes. Notify the plugin of the 706 * A callback that's called after the zoom changes. Notify the plugin of the
667 * zoom change and to continue reacting to scroll events. 707 * zoom change and to continue reacting to scroll events.
668 */ 708 */
669 afterZoom_: function() { 709 afterZoom_: function() {
670 var position = this.viewport_.position; 710 var position = this.viewport_.position;
671 var zoom = this.viewport_.zoom; 711 var zoom = this.viewport_.zoom;
712 var pinchVector = this.viewport_.pinchPanVector_;
713 var pinchCenter = this.viewport_.pinchCenter_;
714 var doRender = this.viewport.doRender_;
Kevin McNee - google account 2016/10/07 19:08:49 Consistent use of viewport / viewport_
Kevin McNee - google account 2016/10/13 18:19:23 Done.
715
716 if (!pinchVector)
717 pinchVector = {x: 0, y: 0};
718 if (!pinchCenter)
719 pinchCenter = {x: 0, y: 0};
672 this.plugin_.postMessage({ 720 this.plugin_.postMessage({
673 type: 'viewport', 721 type: 'viewport',
674 zoom: zoom, 722 zoom: zoom,
675 xOffset: position.x, 723 xOffset: position.x,
676 yOffset: position.y 724 yOffset: position.y,
725 render: doRender, // Render or not
Kevin McNee - google account 2016/10/06 21:53:17 Comment from previous review: bokan: I think a bet
wjmaclean 2016/10/07 12:30:21 Agreed, needsReraster is better. Nit: update comm
Kevin McNee - google account 2016/10/13 18:19:23 Done.
726 px: pinchCenter.x,
727 py: pinchCenter.y,
728 pinchVectorX: pinchVector.x,
729 pinchVectorY: pinchVector.y
677 }); 730 });
678 this.zoomManager_.onPdfZoomChange(); 731 this.zoomManager_.onPdfZoomChange();
679 }, 732 },
680 733
681 /** 734 /**
682 * @private 735 * @private
683 * A callback that's called after the viewport changes. 736 * A callback that's called after the viewport changes.
684 */ 737 */
685 viewportChanged_: function() { 738 viewportChanged_: function() {
686 if (!this.documentDimensions_) 739 if (!this.documentDimensions_)
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 * Each bookmark is an Object containing a: 912 * Each bookmark is an Object containing a:
860 * - title 913 * - title
861 * - page (optional) 914 * - page (optional)
862 * - array of children (themselves bookmarks) 915 * - array of children (themselves bookmarks)
863 * @type {Array} the top-level bookmarks of the PDF. 916 * @type {Array} the top-level bookmarks of the PDF.
864 */ 917 */
865 get bookmarks() { 918 get bookmarks() {
866 return this.bookmarks_; 919 return this.bookmarks_;
867 } 920 }
868 }; 921 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698