mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 17:25:36 +00:00
Bug 562773 - Viewport is not resized on window resize / orientation change [r=mfinkle r=stechz]
This commit is contained in:
parent
87c9c63a2b
commit
70803a9023
@ -125,23 +125,19 @@ let Util = {
|
||||
getViewportMetadata: function getViewportMetadata(browser) {
|
||||
let dpiScale = gPrefService.getIntPref("zoom.dpiScale") / 100;
|
||||
|
||||
// Device size in CSS pixels:
|
||||
let deviceWidth = window.innerWidth / dpiScale;
|
||||
let deviceHeight = window.innerHeight / dpiScale;
|
||||
|
||||
let doctype = browser.contentDocument.doctype;
|
||||
if (doctype && /(WAP|WML|Mobile)/.test(doctype.publicId))
|
||||
return { reason: "doctype", result: true, defaultZoom: dpiScale, width: deviceWidth };
|
||||
return { defaultZoom: dpiScale, autoSize: true };
|
||||
|
||||
let windowUtils = browser.contentWindow
|
||||
.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||
.getInterface(Ci.nsIDOMWindowUtils);
|
||||
let handheldFriendly = windowUtils.getDocumentMetadata("HandheldFriendly");
|
||||
if (handheldFriendly == "true")
|
||||
return { reason: "handheld", defaultZoom: dpiScale, width: deviceWidth };
|
||||
return { defaultZoom: dpiScale, autoSize: true };
|
||||
|
||||
if (browser.contentDocument instanceof XULDocument)
|
||||
return { reason: "chrome", defaultZoom: 1.0, autoSize: true, allowZoom: false };
|
||||
return { defaultZoom: 1.0, autoSize: true, allowZoom: false };
|
||||
|
||||
// viewport details found here
|
||||
// http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html
|
||||
@ -155,18 +151,17 @@ let Util = {
|
||||
let viewportWidthStr = windowUtils.getDocumentMetadata("viewport-width");
|
||||
let viewportHeightStr = windowUtils.getDocumentMetadata("viewport-height");
|
||||
|
||||
viewportScale = Util.clamp(viewportScale, kViewportMinScale, kViewportMaxScale);
|
||||
viewportScale = Util.clamp(viewportScale, kViewportMinScale, kViewportMaxScale);
|
||||
viewportMinScale = Util.clamp(viewportMinScale, kViewportMinScale, kViewportMaxScale);
|
||||
viewportMaxScale = Util.clamp(viewportMaxScale, kViewportMinScale, kViewportMaxScale);
|
||||
|
||||
// If initial scale is 1.0 and width is not set, assume width=device-width
|
||||
if (viewportScale == 1.0 && !viewportWidthStr)
|
||||
viewportWidthStr = "device-width";
|
||||
let autoSize = (viewportWidthStr == "device-width" ||
|
||||
viewportHeightStr == "device-height" ||
|
||||
(viewportScale == 1.0 && !viewportWidthStr));
|
||||
|
||||
let viewportWidth = viewportWidthStr == "device-width" ? deviceWidth
|
||||
: Util.clamp(parseInt(viewportWidthStr), kViewportMinWidth, kViewportMaxWidth);
|
||||
let viewportHeight = viewportHeightStr == "device-height" ? deviceHeight
|
||||
: Util.clamp(parseInt(viewportHeightStr), kViewportMinHeight, kViewportMaxHeight);
|
||||
let viewportWidth = Util.clamp(parseInt(viewportWidthStr), kViewportMinWidth, kViewportMaxWidth);
|
||||
let viewportHeight = Util.clamp(parseInt(viewportHeightStr), kViewportMinHeight, kViewportMaxHeight);
|
||||
|
||||
// Zoom level is the final (device pixel : CSS pixel) ratio for content.
|
||||
// Since web content specifies scale as (reference pixel : CSS pixel) ratio,
|
||||
@ -175,29 +170,19 @@ let Util = {
|
||||
//
|
||||
// See bug 561445 or any of the examples of chrome/tests/browser_viewport_XX.html
|
||||
// for more information and examples.
|
||||
let defaultZoom = viewportScale * dpiScale;
|
||||
let minZoom = viewportMinScale * dpiScale;
|
||||
let maxZoom = viewportMaxScale * dpiScale;
|
||||
let defaultZoom = viewportScale * dpiScale;
|
||||
let minZoom = viewportMinScale * dpiScale;
|
||||
let maxZoom = viewportMaxScale * dpiScale;
|
||||
|
||||
// If (scale * width) < device-width, increase the width (bug 561413).
|
||||
let maxInitialZoom = defaultZoom || maxZoom;
|
||||
if (maxInitialZoom && viewportWidth)
|
||||
viewportWidth = Math.max(viewportWidth, window.innerWidth / maxInitialZoom);
|
||||
|
||||
if (viewportScale > 0 || viewportWidth > 0 || viewportHeight > 0 || viewportMinScale > 0 || viewportMaxScale > 0) {
|
||||
return {
|
||||
reason: "viewport",
|
||||
defaultZoom: defaultZoom,
|
||||
minZoom: minZoom,
|
||||
maxZoom: maxZoom,
|
||||
width: viewportWidth,
|
||||
height: viewportHeight,
|
||||
autoSize: viewportWidthStr == "device-width" || viewportHeightStr == "device-height",
|
||||
allowZoom: windowUtils.getDocumentMetadata("viewport-user-scalable") != "no"
|
||||
};
|
||||
}
|
||||
|
||||
return { reason: null, allowZoom: true };
|
||||
return {
|
||||
defaultZoom: defaultZoom,
|
||||
minZoom: minZoom,
|
||||
maxZoom: maxZoom,
|
||||
width: viewportWidth,
|
||||
height: viewportHeight,
|
||||
autoSize: autoSize,
|
||||
allowZoom: windowUtils.getDocumentMetadata("viewport-user-scalable") != "no"
|
||||
};
|
||||
},
|
||||
|
||||
clamp: function(num, min, max) {
|
||||
|
Loading…
Reference in New Issue
Block a user