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

Unified Diff: chrome/browser/resources/pdf/viewport.js

Issue 2503633002: Propagate browser zoom changes to embedded PDFs. (Closed)
Patch Set: Use American spelling of behaviour. Created 4 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/pdf/pdf.js ('k') | chrome/browser/resources/pdf/zoom_manager.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/pdf/viewport.js
diff --git a/chrome/browser/resources/pdf/viewport.js b/chrome/browser/resources/pdf/viewport.js
index 80a5a06ac646bb69e61dcda69a07bfb53a2ea208..607f70ed90745e88c8186d10fc24b715a302a7cb 100644
--- a/chrome/browser/resources/pdf/viewport.js
+++ b/chrome/browser/resources/pdf/viewport.js
@@ -72,7 +72,8 @@ function Viewport(window,
this.beforeZoomCallback_ = beforeZoomCallback;
this.afterZoomCallback_ = afterZoomCallback;
this.allowedToChangeZoom_ = false;
- this.zoom_ = 1;
+ this.internalZoom_ = 1;
+ this.zoomManager_ = new InactiveZoomManager(this, 1);
this.documentDimensions_ = null;
this.pageDimensions_ = [];
this.scrollbarWidth_ = scrollbarWidth;
@@ -199,7 +200,7 @@ Viewport.prototype = {
* respectively.
*/
documentHasScrollbars: function() {
- return this.documentNeedsScrollbars_(this.zoom_);
+ return this.documentNeedsScrollbars_(this.zoom);
},
/**
@@ -207,7 +208,7 @@ Viewport.prototype = {
* Helper function called when the zoomed document size changes.
*/
contentSizeChanged_: function() {
- var zoomedDimensions = this.getZoomedDocumentDimensions_(this.zoom_);
+ var zoomedDimensions = this.getZoomedDocumentDimensions_(this.zoom);
if (zoomedDimensions) {
this.sizer_.style.width = zoomedDimensions.width + 'px';
this.sizer_.style.height = zoomedDimensions.height +
@@ -258,7 +259,7 @@ Viewport.prototype = {
* @type {Object} the size of the viewport excluding scrollbars.
*/
get size() {
- var needsScrollbars = this.documentNeedsScrollbars_(this.zoom_);
+ var needsScrollbars = this.documentNeedsScrollbars_(this.zoom);
var scrollbarWidth = needsScrollbars.vertical ? this.scrollbarWidth_ : 0;
var scrollbarHeight = needsScrollbars.horizontal ? this.scrollbarWidth_ : 0;
return {
@@ -271,7 +272,15 @@ Viewport.prototype = {
* @type {number} the zoom level of the viewport.
*/
get zoom() {
- return this.zoom_;
+ return this.zoomManager_.applyBrowserZoom(this.internalZoom_);
+ },
+
+ /**
+ * Set the zoom manager.
+ * @type {ZoomManager} manager the zoom manager to set.
+ */
+ set zoomManager(manager) {
+ this.zoomManager_ = manager;
},
/**
@@ -324,15 +333,15 @@ Viewport.prototype = {
}
// Record the scroll position (relative to the top-left of the window).
var currentScrollPos = {
- x: this.position.x / this.zoom_,
- y: this.position.y / this.zoom_
+ x: this.position.x / this.zoom,
+ y: this.position.y / this.zoom
};
- this.zoom_ = newZoom;
+ this.internalZoom_ = newZoom;
this.contentSizeChanged_();
// Scroll to the scaled scroll position.
this.position = {
- x: currentScrollPos.x * newZoom,
- y: currentScrollPos.y * newZoom
+ x: currentScrollPos.x * this.zoom,
+ y: currentScrollPos.y * this.zoom
};
},
@@ -347,7 +356,7 @@ Viewport.prototype = {
assert(this.allowedToChangeZoom_,
'Called Viewport.setPinchZoomInternal_ without calling ' +
'Viewport.mightZoom_.');
- this.zoom_ = clampScale(this.zoom_ * scaleDelta);
+ this.internalZoom_ = clampScale(this.internalZoom_ * scaleDelta);
var newCenterInContent = this.frameToContent(center);
var delta = {
@@ -357,8 +366,8 @@ Viewport.prototype = {
// Record the scroll position (relative to the pinch center).
var currentScrollPos = {
- x: this.position.x - delta.x * this.zoom_,
- y: this.position.y - delta.y * this.zoom_
+ x: this.position.x - delta.x * this.zoom,
+ y: this.position.y - delta.y * this.zoom
};
this.contentSizeChanged_();
@@ -379,8 +388,8 @@ Viewport.prototype = {
// TODO(mcnee) Add a helper Point class to avoid duplicating operations
// on plain {x,y} objects.
return {
- x: (framePoint.x + this.position.x) / this.zoom_,
- y: (framePoint.y + this.position.y) / this.zoom_
+ x: (framePoint.x + this.position.x) / this.zoom,
+ y: (framePoint.y + this.position.y) / this.zoom
};
},
@@ -399,6 +408,29 @@ Viewport.prototype = {
},
/**
+ * Gets notified of the browser zoom changing seperately from the
+ * internal zoom.
+ * @param {number} oldBrowserZoom the previous value of the browser zoom.
+ */
+ updateZoomFromBrowserChange: function(oldBrowserZoom) {
+ this.mightZoom_(function() {
+ // Record the scroll position (relative to the top-left of the window).
+ var oldZoom = oldBrowserZoom * this.internalZoom_;
+ var currentScrollPos = {
+ x: this.position.x / oldZoom,
+ y: this.position.y / oldZoom
+ };
+ this.contentSizeChanged_();
+ // Scroll to the scaled scroll position.
+ this.position = {
+ x: currentScrollPos.x * this.zoom,
+ y: currentScrollPos.y * this.zoom
+ };
+ this.updateViewport_();
+ }.bind(this));
+ },
+
+ /**
* @type {number} the width of scrollbars in the viewport in pixels.
*/
get scrollbarWidth() {
@@ -448,15 +480,15 @@ Viewport.prototype = {
* @return {int} the index of the most visible page.
*/
getMostVisiblePage: function() {
- var firstVisiblePage = this.getPageAtY_(this.position.y / this.zoom_);
+ var firstVisiblePage = this.getPageAtY_(this.position.y / this.zoom);
if (firstVisiblePage == this.pageDimensions_.length - 1)
return firstVisiblePage;
var viewportRect = {
- x: this.position.x / this.zoom_,
- y: this.position.y / this.zoom_,
- width: this.size.width / this.zoom_,
- height: this.size.height / this.zoom_
+ x: this.position.x / this.zoom,
+ y: this.position.y / this.zoom,
+ width: this.size.width / this.zoom,
+ height: this.size.height / this.zoom
};
var firstVisiblePageVisibility = getIntersectionHeight(
this.pageDimensions_[firstVisiblePage], viewportRect) /
@@ -477,7 +509,7 @@ Viewport.prototype = {
* @param {Object} pageDimensions the dimensions of a given page
* @param {boolean} widthOnly a bool indicating whether fit-to-page or
* fit-to-width should be computed.
- * @return {number} the zoom to use
+ * @return {number} the internal zoom to set
*/
computeFittingZoom_: function(pageDimensions, widthOnly) {
// First compute the zoom without scrollbars.
@@ -528,7 +560,7 @@ Viewport.prototype = {
zoomHeight = windowWithScrollbars.height / pageDimensions.height;
zoom = Math.min(zoomWidth, zoomHeight);
}
- return zoom;
+ return this.zoomManager_.internalZoomComponent(zoom);
},
/**
@@ -570,7 +602,7 @@ Viewport.prototype = {
if (scrollToTopOfPage) {
this.position = {
x: 0,
- y: this.pageDimensions_[page].y * this.zoom_
+ y: this.pageDimensions_[page].y * this.zoom
};
}
this.updateViewport_();
@@ -593,7 +625,7 @@ Viewport.prototype = {
this.fittingType_ = Viewport.FittingType.NONE;
var nextZoom = Viewport.ZOOM_FACTORS[0];
for (var i = 0; i < Viewport.ZOOM_FACTORS.length; i++) {
- if (Viewport.ZOOM_FACTORS[i] < this.zoom_)
+ if (Viewport.ZOOM_FACTORS[i] < this.internalZoom_)
nextZoom = Viewport.ZOOM_FACTORS[i];
}
this.setZoomInternal_(nextZoom);
@@ -609,7 +641,7 @@ Viewport.prototype = {
this.fittingType_ = Viewport.FittingType.NONE;
var nextZoom = Viewport.ZOOM_FACTORS[Viewport.ZOOM_FACTORS.length - 1];
for (var i = Viewport.ZOOM_FACTORS.length - 1; i >= 0; i--) {
- if (Viewport.ZOOM_FACTORS[i] > this.zoom_)
+ if (Viewport.ZOOM_FACTORS[i] > this.internalZoom_)
nextZoom = Viewport.ZOOM_FACTORS[i];
}
this.setZoomInternal_(nextZoom);
@@ -632,7 +664,8 @@ Viewport.prototype = {
vectorDelta(e.center, this.firstPinchCenterInFrame_);
var needsScrollbars = this.documentNeedsScrollbars_(
- clampScale(this.zoom_ * scaleDelta));
+ this.zoomManager_.applyBrowserZoom(
+ clampScale(this.internalZoom_ * scaleDelta)));
this.pinchCenter_ = e.center;
@@ -666,7 +699,7 @@ Viewport.prototype = {
this.oldCenterInContent =
this.frameToContent(frameToPluginCoordinate(e.center));
- var needsScrollbars = this.documentNeedsScrollbars_(this.zoom_);
+ var needsScrollbars = this.documentNeedsScrollbars_(this.zoom);
this.keepContentCentered_ = !needsScrollbars.horizontal;
// We keep track of begining of the pinch.
// By doing so we will be able to compute the pan distance.
@@ -710,8 +743,8 @@ Viewport.prototype = {
if (this.fittingType_ != Viewport.FittingType.FIT_TO_PAGE)
toolbarOffset = this.topToolbarHeight_;
this.position = {
- x: dimensions.x * this.zoom_,
- y: dimensions.y * this.zoom_ - toolbarOffset
+ x: dimensions.x * this.zoom,
+ y: dimensions.y * this.zoom - toolbarOffset
};
this.updateViewport_();
}.bind(this));
@@ -778,14 +811,14 @@ Viewport.prototype = {
// Compute the space on the left of the document if the document fits
// completely in the screen.
var spaceOnLeft = (this.size.width -
- this.documentDimensions_.width * this.zoom_) / 2;
+ this.documentDimensions_.width * this.zoom) / 2;
spaceOnLeft = Math.max(spaceOnLeft, 0);
return {
- x: x * this.zoom_ + spaceOnLeft - this.window_.pageXOffset,
- y: insetDimensions.y * this.zoom_ - this.window_.pageYOffset,
- width: insetDimensions.width * this.zoom_,
- height: insetDimensions.height * this.zoom_
+ x: x * this.zoom + spaceOnLeft - this.window_.pageXOffset,
+ y: insetDimensions.y * this.zoom - this.window_.pageYOffset,
+ width: insetDimensions.width * this.zoom,
+ height: insetDimensions.height * this.zoom
};
}
};
« no previous file with comments | « chrome/browser/resources/pdf/pdf.js ('k') | chrome/browser/resources/pdf/zoom_manager.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698