Chromium Code Reviews| Index: chrome/browser/resources/pdf/pdf.js |
| diff --git a/chrome/browser/resources/pdf/pdf.js b/chrome/browser/resources/pdf/pdf.js |
| index fb4d3ee53a3d7d19b7c918089fcc09b3de7097a1..ea49e24f09a761203e665d860a3f7998c8baa80d 100644 |
| --- a/chrome/browser/resources/pdf/pdf.js |
| +++ b/chrome/browser/resources/pdf/pdf.js |
| @@ -157,6 +157,10 @@ function PDFViewer(streamDetails) { |
| this.paramsParser_ = new OpenPDFParamsParser(); |
| this.navigator_ = new Navigator(this.streamDetails_.originalUrl, |
| this.viewport_, this.paramsParser_); |
| + this.isSelecting_ = false; |
| + this.mousemoveCallback_ = null; |
| + this.timerId_ = null; |
| + this.dragDirection_; |
| } |
| PDFViewer.prototype = { |
| @@ -450,6 +454,105 @@ PDFViewer.prototype = { |
| case 'bookmarks': |
| this.bookmarks_ = message.data.bookmarks; |
| break; |
| + case 'setIsSelecting': |
| + this.isSelecting_ = message.data.isSelecting; |
|
Sam McNally
2015/02/04 02:56:01
this.isSelecting_ isn't used anywhere else. Remove
Deepak
2015/02/04 13:50:54
Done.
|
| + if (this.isSelecting_) { |
| + this.mousemoveCallback_ = this.selectionDragListener_.bind(this); |
|
Sam McNally
2015/02/04 02:56:01
2 space indent.
Also, only set mousemoveCallback_
Deepak
2015/02/04 13:50:54
Done.
|
| + this.plugin_.addEventListener('mousemove', |
| + this.mousemoveCallback_, false); |
| + } else { |
| + this.plugin_.removeEventListener('mousemove', |
|
Sam McNally
2015/02/04 02:56:02
Ditto.
Deepak
2015/02/04 13:50:54
Done.
|
| + this.mousemoveCallback_, false); |
| + this.clearTimer_(); |
| + } |
| + break; |
| + } |
| + }, |
| + |
| + /** |
| + * @private |
| + * Clear the timer if it is active and reset timerId. |
| + */ |
| + clearTimer_: function() { |
| + if (this.timerId_) { |
| + window.clearTimeout(this.timerId_); |
|
Sam McNally
2015/02/04 02:56:01
Use clearInterval here.
Deepak
2015/02/04 13:50:54
Done.
|
| + this.timerId_ = null; |
| + } |
| + }, |
| + |
| + /** |
| + * @private |
| + * Handles scrolling in the page when we drag mouse out of the viewport and |
| + * does not move mouse, Then no mouse move event came so we are scrolling |
| + * based on timer in drag direction. |
| + */ |
| + dragScrollPage_: function() { |
| + this.clearTimer_(); |
| + var position = this.viewport_.position; |
| + switch (this.dragDirection_) { |
| + case 'up': |
| + position.y -= ((Viewport.SCROLL_INCREMENT) / this.viewport_.zoom); |
| + break; |
| + case 'down': |
| + position.y += ((Viewport.SCROLL_INCREMENT) / this.viewport_.zoom); |
| + break; |
| + case 'left': |
| + position.x -= ((Viewport.SCROLL_INCREMENT) / this.viewport_.zoom); |
| + break; |
| + case 'right': |
| + position.x += ((Viewport.SCROLL_INCREMENT) / this.viewport_.zoom); |
| + break; |
| + } |
| + this.viewport_.position = position; |
| + this.timerId_ = window.setTimeout(this.dragScrollPage_.bind(this), 50); |
|
Sam McNally
2015/02/04 02:56:01
Remove.
Deepak
2015/02/04 13:50:54
Done.
|
| + }, |
| + |
| + /** |
| + * @private |
| + * Handles mousemove events. Scrolls page when mouse move happen reacting to |
| + * the direction of scroll. |
| + * @param {Object} event The mouse move event. |
| + */ |
| + selectionDragListener_: function(event) { |
| + var position = this.viewport_.position; |
| + var viewportRect = { |
| + x1: position.x / this.viewport_.zoom, |
| + y1: position.y / this.viewport_.zoom, |
| + x2: (position.x + this.viewport_.size.width) / this.viewport_.zoom, |
| + y2: (position.y + this.viewport_.size.height) / this.viewport_.zoom |
| + }; |
| + var point = { |
| + x: event.pageX / this.viewport_.zoom, |
| + y: event.pageY / this.viewport_.zoom |
| + }; |
| + |
| + if ((point.x >= viewportRect.x1 && point.x <= viewportRect.x2) && |
| + (point.y >= viewportRect.y1 && point.y <= viewportRect.y2)) { |
| + this.clearTimer_(); |
| + return; |
| + } |
| + |
| + if (this.viewport_.documentHasScrollbars().vertical) { |
|
Sam McNally
2015/02/04 02:56:01
This won't work for diagonal scrolls. Instead, cal
Deepak
2015/02/04 13:50:54
Done.
|
| + if (point.y < viewportRect.y1 && viewportRect.y1 > 0) { |
| + this.dragDirection_ = 'up'; |
| + this.dragScrollPage_(); |
|
Sam McNally
2015/02/04 02:56:01
Instead of calling dragScrollPage_ here, after cal
Deepak
2015/02/04 13:50:54
Done.
|
| + } else if ((point.y > viewportRect.y2) && |
| + (event.pageY < (this.viewport_.documentDimensions_.height * |
| + this.viewport_.zoom))) { |
| + this.dragDirection_ = 'down'; |
| + this.dragScrollPage_(); |
| + } |
| + } |
| + if (this.viewport_.documentHasScrollbars().horizontal) { |
| + if (point.x < viewportRect.x1 && viewportRect.x1 > 0) { |
| + this.dragDirection_ = 'left'; |
| + this.dragScrollPage_(); |
| + } else if ((point.x > viewportRect.x2) && |
| + (event.pageX < this.viewport_.documentDimensions_.width * |
| + this.viewport_.zoom)) { |
| + this.dragDirection_ = 'right'; |
| + this.dragScrollPage_(); |
| + } |
| } |
| }, |