зеркало из https://github.com/mozilla/gecko-dev.git
support for zoom (disabled)
This commit is contained in:
Родитель
ae2ef79e71
Коммит
446bfddcd3
|
@ -41,6 +41,10 @@
|
|||
|
||||
let Ci = Components.interfaces;
|
||||
|
||||
const kBrowserFormZoomLevelMin = 1.0;
|
||||
const kBrowserFormZoomLevelMax = 2.0;
|
||||
const kBrowserViewZoomLevelPrecision = 10000;
|
||||
|
||||
function BrowserView(container, visibleRectFactory) {
|
||||
Util.bindAll(this);
|
||||
this.init(container, visibleRectFactory);
|
||||
|
@ -74,7 +78,6 @@ BrowserView.prototype = {
|
|||
init: function init(container, visibleRectFactory) {
|
||||
this._container = container;
|
||||
this._browser = null;
|
||||
this._browserViewportState = null;
|
||||
this._visibleRectFactory = visibleRectFactory;
|
||||
messageManager.addMessageListener("Browser:MozScrolledAreaChanged", this);
|
||||
},
|
||||
|
@ -82,34 +85,6 @@ BrowserView.prototype = {
|
|||
uninit: function uninit() {
|
||||
},
|
||||
|
||||
getVisibleRect: function getVisibleRect() {
|
||||
return this._visibleRectFactory();
|
||||
},
|
||||
|
||||
getCriticalRect: function getCriticalRect() {
|
||||
let bvs = this._browserViewportState;
|
||||
let vr = this.getVisibleRect();
|
||||
return BrowserView.Util.visibleRectToCriticalRect(vr, bvs);
|
||||
},
|
||||
|
||||
clampZoomLevel: function clampZoomLevel(zl) {
|
||||
let bounded = Math.min(Math.max(ZoomManager.MIN, zl), ZoomManager.MAX);
|
||||
|
||||
let bvs = this._browserViewportState;
|
||||
if (bvs) {
|
||||
let md = bvs.metaData;
|
||||
if (md && md.minZoom)
|
||||
bounded = Math.max(bounded, md.minZoom);
|
||||
if (md && md.maxZoom)
|
||||
bounded = Math.min(bounded, md.maxZoom);
|
||||
|
||||
bounded = Math.max(bounded, this.getPageZoomLevel());
|
||||
}
|
||||
|
||||
let rounded = Math.round(bounded * kBrowserViewZoomLevelPrecision) / kBrowserViewZoomLevelPrecision;
|
||||
return rounded || 1.0;
|
||||
},
|
||||
|
||||
/**
|
||||
* Swap out the current browser and browser viewport state with a new pair.
|
||||
*/
|
||||
|
@ -124,7 +99,6 @@ BrowserView.prototype = {
|
|||
}
|
||||
|
||||
this._browser = browser;
|
||||
this._browserViewportState = browserViewportState;
|
||||
|
||||
if (browser) {
|
||||
browser.setAttribute("type", "content-primary");
|
||||
|
|
|
@ -61,6 +61,7 @@ let WebProgressListener = {
|
|||
};
|
||||
sendAsyncMessage("WebProgress:LocationChange", json);
|
||||
|
||||
let cwu = Util.getWindowUtils(content);
|
||||
let scrollOffset = Util.getScrollOffset(content);
|
||||
cwu.setDisplayport(scrollOffset.x - 200, scrollOffset.y - 400,
|
||||
content.innerWidth + 400, content.innerHeight + 800);
|
||||
|
@ -379,10 +380,9 @@ let ContentScroll = {
|
|||
let json = aMessage.json;
|
||||
switch (aMessage.name) {
|
||||
case "Content:ScrollTo":
|
||||
content.scrollTo(json.x, json.y);
|
||||
// content.scrollTo(json.x, json.y);
|
||||
let cwu = Util.getWindowUtils(content);
|
||||
let scrollOffset = Util.getScrollOffset(content);
|
||||
cwu.setDisplayport(scrollOffset.x - 200, scrollOffset.y - 400,
|
||||
cwu.setDisplayport(json.x - 200, json.y - 400,
|
||||
content.innerWidth + 400, content.innerHeight + 800);
|
||||
break;
|
||||
|
||||
|
@ -391,7 +391,8 @@ let ContentScroll = {
|
|||
break;
|
||||
|
||||
case "Content:ZoomLevel":
|
||||
// XXX not working yet
|
||||
content.document.body.style.MozTransformOrigin = "top left";
|
||||
content.document.body.style.MozTransform = "scale(" + json.zoomLevel + ")";
|
||||
break;
|
||||
|
||||
case "Content:FastScrollTo": {
|
||||
|
|
|
@ -398,6 +398,14 @@
|
|||
<field name="_pendingPixelsX">0</field>
|
||||
<field name="_pendingPixelsY">0</field>
|
||||
|
||||
<property name="widthInCssPx"
|
||||
onget="return this._widthInDevicePx / this.zoomLevel;"
|
||||
readonly="true"/>
|
||||
|
||||
<property name="heightInCssPx"
|
||||
onget="return this._heightInDevicePx / this.zoomLevel;"
|
||||
readonly="true"/>
|
||||
|
||||
<property name="widthInDevicePx"
|
||||
onget="return this._widthInDevicePx;"
|
||||
readonly="true"/>
|
||||
|
@ -418,8 +426,9 @@
|
|||
<parameter name="zl"/>
|
||||
<body>
|
||||
<![CDATA[
|
||||
throw "Not supported yet!";
|
||||
return;
|
||||
if (zl <= 0) throw "Bad zoom level given.";
|
||||
|
||||
this._zoomLevel = zl;
|
||||
this.messageManager.sendAsyncMessage("Content:ZoomLevel", { zoomLevel: zl });
|
||||
]]>
|
||||
|
@ -431,6 +440,7 @@
|
|||
<parameter name="height"/>
|
||||
<body>
|
||||
<![CDATA[
|
||||
return;
|
||||
this.messageManager.sendAsyncMessage("Content:SetCssViewportSize", {
|
||||
width: width,
|
||||
height: height
|
||||
|
|
|
@ -244,7 +244,6 @@ var Browser = {
|
|||
// Tell the UI to resize the browser controls
|
||||
BrowserUI.sizeControls(w, h);
|
||||
|
||||
// bv.updateDefaultZoom();
|
||||
// XXX this should really only happen on browser startup, not every resize
|
||||
Browser.hideSidebars();
|
||||
|
||||
|
@ -625,7 +624,6 @@ var Browser = {
|
|||
BrowserUI.lockToolbar();
|
||||
|
||||
bv.setBrowser(tab.browser, tab.browserViewportState);
|
||||
// bv.updateDefaultZoom();
|
||||
|
||||
document.getElementById("tabs").selectedTab = tab.chromeTab;
|
||||
|
||||
|
@ -2375,6 +2373,11 @@ Tab.prototype = {
|
|||
browser.webProgress.addProgressListener(this._listener, flags);
|
||||
|
||||
browser.setAttribute("src", aURI);
|
||||
|
||||
let self = this;
|
||||
browser.messageManager.addMessageListener("MozScrolledAreaChanged", function() {
|
||||
self.updateDefaultZoomLevel();
|
||||
});
|
||||
},
|
||||
|
||||
_destroyBrowser: function _destroyBrowser() {
|
||||
|
@ -2392,19 +2395,71 @@ Tab.prototype = {
|
|||
}
|
||||
},
|
||||
|
||||
clampZoomLevel: function clampZoomLevel(zl) {
|
||||
let browser = this._browser;
|
||||
if (!browser.contentWindow) {
|
||||
let bounded = Math.min(Math.max(ZoomManager.MIN, zl), ZoomManager.MAX);
|
||||
|
||||
let md = this.metaData;
|
||||
if (md && md.minZoom)
|
||||
bounded = Math.max(bounded, md.minZoom);
|
||||
if (md && md.maxZoom)
|
||||
bounded = Math.min(bounded, md.maxZoom);
|
||||
|
||||
bounded = Math.max(bounded, this.getPageZoomLevel());
|
||||
|
||||
let rounded = Math.round(bounded * kBrowserViewZoomLevelPrecision) / kBrowserViewZoomLevelPrecision;
|
||||
return rounded || 1.0;
|
||||
}
|
||||
return 1;
|
||||
},
|
||||
|
||||
/**
|
||||
* Set up the initial zoom level. While the bvs.defaultZoomLevel of a tab is
|
||||
* equal to bvs.zoomLevel this mean that not user action has happended and
|
||||
* we can safely alter the zoom on a window resize or on a page load
|
||||
* XXX document me
|
||||
*/
|
||||
resetZoomLevel: function resetZoomLevel() {
|
||||
return;
|
||||
let browser = this._browser;
|
||||
if (!browser.contentWindow)
|
||||
this._defaultZoomLevel = browser.zoomLevel;
|
||||
},
|
||||
|
||||
let bvs = this._browserViewportState;
|
||||
bvs.defaultZoomLevel = bvs.zoomLevel;
|
||||
/**
|
||||
* XXX document me
|
||||
*/
|
||||
updateDefaultZoomLevel: function updateDefaultZoomLevel() {
|
||||
let browser = this._browser;
|
||||
if (!browser.contentWindow) {
|
||||
let isDefault = (browser.zoomLevel == this._defaultZoomLevel);
|
||||
this._defaultZoomLevel = this.getDefaultZoomLevel();
|
||||
if (isDefault)
|
||||
browser.zoomLevel = this._defaultZoomLevel;
|
||||
}
|
||||
},
|
||||
|
||||
getDefaultZoomLevel: function getDefaultZoomLevel() {
|
||||
let md = this.metaData;
|
||||
if (md && md.defaultZoom)
|
||||
return this.clampZoomLevel(md.defaultZoom);
|
||||
|
||||
let pageZoom = this.getPageZoomLevel();
|
||||
|
||||
// If pageZoom is "almost" 100%, zoom in to exactly 100% (bug 454456).
|
||||
let granularity = Services.prefs.getIntPref("browser.ui.zoom.pageFitGranularity");
|
||||
let threshold = 1 - 1 / granularity;
|
||||
if (threshold < pageZoom && pageZoom < 1)
|
||||
pageZoom = 1;
|
||||
|
||||
return this.clampZoomLevel(pageZoom);
|
||||
},
|
||||
|
||||
getPageZoomLevel: function getPageZoomLevel() {
|
||||
let browserW = this._browser.widthInCssPx;
|
||||
return this._browser.getBoundingClientRect().width / browserW;
|
||||
},
|
||||
|
||||
updateThumbnail: function updateThumbnail() {
|
||||
return;
|
||||
|
||||
if (!this._browser)
|
||||
return;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче