OLD | NEW |
---|---|
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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
51 window.open(url); | 51 window.open(url); |
52 } | 52 } |
53 | 53 |
54 /** | 54 /** |
55 * The minimum number of pixels to offset the toolbar by from the bottom and | 55 * The minimum number of pixels to offset the toolbar by from the bottom and |
56 * right side of the screen. | 56 * right side of the screen. |
57 */ | 57 */ |
58 PDFViewer.MIN_TOOLBAR_OFFSET = 15; | 58 PDFViewer.MIN_TOOLBAR_OFFSET = 15; |
59 | 59 |
60 /** | 60 /** |
61 * The timer interval for drag scroll when we have selection and mouse is | |
Sam McNally
2015/02/06 03:43:06
The period of time to wait between updating the vi
Deepak
2015/02/06 08:33:42
Done.
| |
62 * dragged out of the viewport. The callback function will get called after | |
63 * this interval till timer get cleared. | |
64 */ | |
65 PDFViewer.DRAG_TIMER_INTERVAL = 100; | |
66 | |
67 /** | |
68 * The maximum scroll velocity when we have selection and drag mouse out of | |
Sam McNally
2015/02/06 03:43:07
The maximum drag scroll velocity.
Deepak
2015/02/06 08:33:43
Done.
| |
69 * viewport. | |
70 */ | |
71 PDFViewer.MAX_SCROLL_VELOCITY = 100; | |
72 | |
73 /** | |
61 * Creates a new PDFViewer. There should only be one of these objects per | 74 * Creates a new PDFViewer. There should only be one of these objects per |
62 * document. | 75 * document. |
63 * @constructor | 76 * @constructor |
64 * @param {Object} streamDetails The stream object which points to the data | 77 * @param {Object} streamDetails The stream object which points to the data |
65 * contained in the PDF. | 78 * contained in the PDF. |
66 */ | 79 */ |
67 function PDFViewer(streamDetails) { | 80 function PDFViewer(streamDetails) { |
68 this.streamDetails_ = streamDetails; | 81 this.streamDetails_ = streamDetails; |
69 this.loaded_ = false; | 82 this.loaded_ = false; |
70 this.parentWindow_ = null; | 83 this.parentWindow_ = null; |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
186 if ((zoomDelta > MIN_ZOOM_DELTA) && !this.setZoomInProgress_) | 199 if ((zoomDelta > MIN_ZOOM_DELTA) && !this.setZoomInProgress_) |
187 this.viewport_.setZoom(zoomChangeInfo.newZoomFactor); | 200 this.viewport_.setZoom(zoomChangeInfo.newZoomFactor); |
188 }.bind(this)); | 201 }.bind(this)); |
189 } | 202 } |
190 | 203 |
191 // Parse open pdf parameters. | 204 // Parse open pdf parameters. |
192 this.paramsParser_ = new OpenPDFParamsParser(); | 205 this.paramsParser_ = new OpenPDFParamsParser(); |
193 this.navigator_ = new Navigator(this.streamDetails_.originalUrl, | 206 this.navigator_ = new Navigator(this.streamDetails_.originalUrl, |
194 this.viewport_, this.paramsParser_, onNavigateInCurrentTab, | 207 this.viewport_, this.paramsParser_, onNavigateInCurrentTab, |
195 onNavigateInNewTab); | 208 onNavigateInNewTab); |
209 this.mousemoveCallback_ = null; | |
210 this.timerId_ = null; | |
211 this.scrollVelocity_ = null; | |
196 } | 212 } |
197 | 213 |
198 PDFViewer.prototype = { | 214 PDFViewer.prototype = { |
199 /** | 215 /** |
200 * @private | 216 * @private |
201 * Handle key events. These may come from the user directly or via the | 217 * Handle key events. These may come from the user directly or via the |
202 * scripting API. | 218 * scripting API. |
203 * @param {KeyboardEvent} e the event to handle. | 219 * @param {KeyboardEvent} e the event to handle. |
204 */ | 220 */ |
205 handleKeyEvent_: function(e) { | 221 handleKeyEvent_: function(e) { |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
512 this.errorScreen_.text = message.data.loadFailedString; | 528 this.errorScreen_.text = message.data.loadFailedString; |
513 break; | 529 break; |
514 case 'cancelStreamUrl': | 530 case 'cancelStreamUrl': |
515 chrome.mimeHandlerPrivate.abortStream(); | 531 chrome.mimeHandlerPrivate.abortStream(); |
516 break; | 532 break; |
517 case 'bookmarks': | 533 case 'bookmarks': |
518 this.bookmarks_ = message.data.bookmarks; | 534 this.bookmarks_ = message.data.bookmarks; |
519 if (this.isMaterial_) | 535 if (this.isMaterial_) |
520 this.bookmarksPane.bookmarks = message.data.bookmarks; | 536 this.bookmarksPane.bookmarks = message.data.bookmarks; |
521 break; | 537 break; |
538 case 'setIsSelecting': | |
539 if (message.data.isSelecting && !this.mousemoveCallback_) { | |
540 this.mousemoveCallback_ = this.selectionDragListener_.bind(this); | |
Sam McNally
2015/02/06 03:43:07
I meant only do this once and then reuse the same
Deepak
2015/02/06 08:33:43
Done.
| |
541 this.plugin_.addEventListener('mousemove', | |
Sam McNally
2015/02/06 03:43:07
Break after the (.
Deepak
2015/02/06 08:33:43
ok, I will run clang format for this.
| |
542 this.mousemoveCallback_, false); | |
543 } else { | |
544 this.clearTimerInterval_(); | |
545 if (this.mousemoveCallback_) { | |
546 this.plugin_.removeEventListener('mousemove', | |
Sam McNally
2015/02/06 03:43:07
Ditto.
Deepak
2015/02/06 08:33:43
Done.
| |
547 this.mousemoveCallback_, false); | |
548 this.mousemoveCallback_ = null; | |
Sam McNally
2015/02/06 03:43:07
Delete.
Deepak
2015/02/06 08:33:43
Done.
| |
549 } | |
550 } | |
551 break; | |
522 } | 552 } |
523 }, | 553 }, |
524 | 554 |
525 /** | 555 /** |
556 * @private | |
557 * Start the timer to call dragScrollPage_ function at regular interval till | |
Sam McNally
2015/02/06 03:43:07
until the timer is stopped.
Deepak
2015/02/06 08:33:43
Done.
| |
558 * timer get cleared. | |
559 */ | |
560 setTimerInterval_: function() { | |
Sam McNally
2015/02/06 03:43:07
startDragScrollTimer_
Deepak
2015/02/06 08:33:43
Done.
| |
561 this.timerId_ = | |
562 window.setInterval(this.dragScrollPage_.bind(this), | |
563 PDFViewer.DRAG_TIMER_INTERVAL); | |
564 }, | |
565 | |
566 /** | |
567 * @private | |
568 * Clear the timer if it is active and reset timerId_. | |
Sam McNally
2015/02/06 03:43:06
Stops the drag scroll timer if it is active.
Deepak
2015/02/06 08:33:43
Done.
| |
569 */ | |
570 clearTimerInterval_: function() { | |
Sam McNally
2015/02/06 03:43:07
stopDragScrollTimer_
Deepak
2015/02/06 08:33:43
Done.
| |
571 if (this.timerId_ !== null) { | |
572 window.clearInterval(this.timerId_); | |
573 this.timerId_ = null; | |
574 } | |
575 }, | |
576 | |
577 /** | |
578 * @private | |
579 * Handles scrolling in the page when we drag mouse out of the viewport and | |
Sam McNally
2015/02/06 03:43:07
Scrolls the viewport by the current scroll velocit
Deepak
2015/02/06 08:33:43
Done.
| |
580 * does not get mousemove event. | |
581 */ | |
582 dragScrollPage_: function() { | |
583 var position = this.viewport_.position; | |
584 position.y += this.scrollVelocity_.y; | |
585 position.x += this.scrollVelocity_.x; | |
586 this.viewport_.position = position; | |
587 }, | |
588 | |
589 /** | |
590 * @private | |
591 * Calculate velocity of scroll in the x and y direction when we drag mouse | |
Sam McNally
2015/02/06 03:43:07
Calculate the velocity to scroll while dragging us
Deepak
2015/02/06 08:33:43
Done.
| |
592 * out of the viewport and does not move mouse. The scroll velocity depends | |
593 * upon mouse pointer distance from the viewport. | |
594 * @return {Object} Object with x and y direction scroll velocity. | |
595 */ | |
596 calculateVelocity_: function(event) { | |
597 var x = Math.min(Math.max(-event.offsetX, event.offsetX - | |
Sam McNally
2015/02/06 03:43:07
Please clang-format this.
Deepak
2015/02/06 08:33:43
Done.
| |
598 this.plugin_.offsetWidth, 0), PDFViewer.MAX_SCROLL_VELOCITY) * | |
599 Math.sign(event.offsetX); | |
600 var y = Math.min(Math.max(-event.offsetY, event.offsetY - | |
601 this.plugin_.offsetHeight, 0), PDFViewer.MAX_SCROLL_VELOCITY) * | |
602 Math.sign(event.offsetY); | |
603 return {x: x, y: y}; | |
604 }, | |
605 | |
606 /** | |
607 * @private | |
608 * Handles mousemove events. Scrolls page when mouse move happen reacting to | |
Sam McNally
2015/02/06 03:43:07
This doesn't do any scrolling itself. It just upda
Deepak
2015/02/06 08:33:43
Done.
| |
609 * the direction of scroll. When mouse move event does not come then we are | |
610 * scrolling based on timer. | |
611 * @param {Object} event The mousemove event. | |
612 */ | |
613 selectionDragListener_: function(event) { | |
614 var position = this.viewport_.position; | |
Sam McNally
2015/02/06 03:43:06
These bounds checks aren't necessary. Remove them.
Deepak
2015/02/06 08:33:42
Done.
| |
615 var viewportRect = { | |
616 x1: position.x / this.viewport_.zoom, | |
617 y1: position.y / this.viewport_.zoom, | |
618 x2: (position.x + this.viewport_.size.width) / this.viewport_.zoom, | |
619 y2: (position.y + this.viewport_.size.height) / this.viewport_.zoom | |
620 }; | |
621 var point = { | |
622 x: event.pageX / this.viewport_.zoom, | |
623 y: event.pageY / this.viewport_.zoom | |
624 }; | |
625 | |
626 if ((point.x >= viewportRect.x1 && point.x <= viewportRect.x2) && | |
627 (point.y >= viewportRect.y1 && point.y <= viewportRect.y2)) { | |
628 this.clearTimerInterval_(); | |
629 return; | |
630 } | |
631 this.scrollVelocity_ = this.calculateVelocity_(event); | |
632 if ((this.scrollVelocity_.x != 0 || this.scrollVelocity_.y != 0) && | |
633 !this.timerId_) { | |
634 this.setTimerInterval_(); | |
Sam McNally
2015/02/06 03:43:07
Please make setTimerInterval_ idempotent and simpl
Deepak
2015/02/06 08:33:43
Done.
| |
635 } | |
636 if (!this.scrollVelocity_.x && !this.scrollVelocity_.y) | |
637 this.clearTimerInterval_(); | |
638 }, | |
raymes
2015/02/06 03:11:07
Can we move all this stuff into a new class in a s
Deepak
2015/02/06 08:33:43
ya, sure , I will definitely move this code in sep
| |
639 | |
640 /** | |
526 * @private | 641 * @private |
527 * A callback that's called before the zoom changes. Notify the plugin to stop | 642 * A callback that's called before the zoom changes. Notify the plugin to stop |
528 * reacting to scroll events while zoom is taking place to avoid flickering. | 643 * reacting to scroll events while zoom is taking place to avoid flickering. |
529 */ | 644 */ |
530 beforeZoom_: function() { | 645 beforeZoom_: function() { |
531 this.plugin_.postMessage({ | 646 this.plugin_.postMessage({ |
532 type: 'stopScrolling' | 647 type: 'stopScrolling' |
533 }); | 648 }); |
534 }, | 649 }, |
535 | 650 |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
755 * Each bookmark is an Object containing a: | 870 * Each bookmark is an Object containing a: |
756 * - title | 871 * - title |
757 * - page (optional) | 872 * - page (optional) |
758 * - array of children (themselves bookmarks) | 873 * - array of children (themselves bookmarks) |
759 * @type {Array} the top-level bookmarks of the PDF. | 874 * @type {Array} the top-level bookmarks of the PDF. |
760 */ | 875 */ |
761 get bookmarks() { | 876 get bookmarks() { |
762 return this.bookmarks_; | 877 return this.bookmarks_; |
763 } | 878 } |
764 }; | 879 }; |
OLD | NEW |