This commit is contained in:
Benjamin Stover 2010-08-27 16:25:53 -07:00
Родитель ae2ef79e71
Коммит 446bfddcd3
4 изменённых файлов: 83 добавлений и 43 удалений

Просмотреть файл

@ -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;