| Index: chrome/browser/resources/pdf/viewport.js
|
| diff --git a/chrome/browser/resources/pdf/viewport.js b/chrome/browser/resources/pdf/viewport.js
|
| index 44d7fa18e43b5ab8188a213366c21077a2ccb812..13e2adc99532c9934cc659205752dc5d9899e3ad 100644
|
| --- a/chrome/browser/resources/pdf/viewport.js
|
| +++ b/chrome/browser/resources/pdf/viewport.js
|
| @@ -154,15 +154,41 @@ Viewport.prototype = {
|
| },
|
|
|
| /**
|
| + * @private
|
| + * @param {integer} y the y-coordinate to get the page at.
|
| + * @return {integer} the index of a page overlapping the given y-coordinate.
|
| + */
|
| + getPageAtY_: function(y) {
|
| + var min = 0;
|
| + var max = this.pageDimensions_.length - 1;
|
| + while (max >= min) {
|
| + var page = Math.floor(min + ((max - min) / 2));
|
| + var top = this.pageDimensions_[page].y;
|
| + var bottom = top + this.pageDimensions_[page].height;
|
| + if (top <= y && bottom > y)
|
| + return page;
|
| + else if (top > y)
|
| + max = page - 1;
|
| + else
|
| + min = page + 1;
|
| + }
|
| + return 0;
|
| + },
|
| +
|
| + /**
|
| * Returns the page with the most pixels in the current viewport.
|
| * @return {int} the index of the most visible page.
|
| */
|
| getMostVisiblePage: function() {
|
| - // TODO(raymes): Do a binary search here.
|
| + var firstVisiblePage = this.getPageAtY_(this.getCurrentViewportRect_().y);
|
| var mostVisiblePage = {'number': 0, 'area': 0};
|
| - for (var i = 0; i < this.pageDimensions_.length; i++) {
|
| + for (var i = firstVisiblePage; i < this.pageDimensions_.length; i++) {
|
| var area = getIntersectionArea(this.pageDimensions_[i],
|
| this.getCurrentViewportRect_());
|
| + // If we hit a page with 0 area overlap, we must have gone past the
|
| + // pages visible in the viewport so we can break.
|
| + if (area == 0)
|
| + break;
|
| if (area > mostVisiblePage.area) {
|
| mostVisiblePage.area = area;
|
| mostVisiblePage.number = i;
|
|
|