diff --git a/app/mobile.js b/app/mobile.js --- a/app/mobile.js +++ b/app/mobile.js @@ -58,16 +58,19 @@ pref("toolkit.screen.lock", false); pref("zoom.minPercent", 20); pref("zoom.maxPercent", 400); pref("toolkit.zoomManager.zoomValues", ".2,.3,.5,.67,.8,.9,1,1.1,1.2,1.33,1.5,1.7,2,2.4,3,4"); pref("zoom.dpiScale", 150); /* use custom widget for html:select */ pref("ui.use_native_popup_windows", true); +/* allow scrollbars to float above chrome ui */ +pref("ui.scrollbarsCanOverlapContent", 1); + /* use long press to display a context menu */ pref("ui.click_hold_context_menus", true); /* cache prefs */ pref("browser.cache.disk.enable", false); pref("browser.cache.disk.capacity", 0); // kilobytes pref("browser.cache.memory.enable", true); diff --git a/chrome/content/bindings.xml b/chrome/content/bindings.xml --- a/chrome/content/bindings.xml +++ b/chrome/content/bindings.xml @@ -163,22 +163,20 @@ - + - + diff --git a/chrome/content/browser.js b/chrome/content/browser.js --- a/chrome/content/browser.js +++ b/chrome/content/browser.js @@ -1116,27 +1116,34 @@ var Browser = { this._handleCertException(aMessage); break; } } }; Browser.MainDragger = function MainDragger() { + this._contentStack = document.getElementById("content-stack"); + this._verticalScrollbar = document.getElementById("vertical-scroller"); + this._horizontalScrollbar = document.getElementById("horizontal-scroller"); }; Browser.MainDragger.prototype = { isDraggable: function isDraggable(target, scroller) { return { x: true, y: true }; }, dragStart: function dragStart(clientX, clientY, target, scroller) { + this._sizeScrollbars(); + this._updateScrollbars(); + this._contentStack.setAttribute("panning", "true"); }, dragStop: function dragStop(dx, dy, scroller) { + this._contentStack.removeAttribute("panning"); this.dragMove(Browser.snapSidebars(), 0, scroller); Browser.tryUnfloatToolbar(); }, dragMove: function dragMove(dx, dy, scroller) { let doffset = new Point(dx, dy); // First calculate any panning to take sidebars out of view @@ -1146,16 +1153,17 @@ Browser.MainDragger.prototype = { this._panScroller(Browser.contentScrollboxScroller, doffset); // Any leftover panning in doffset would bring controls into view. Add to sidebar // away panning for the total scroll offset. doffset.add(panOffset); Browser.tryFloatToolbar(doffset.x, 0); this._panScroller(Browser.controlsScrollboxScroller, doffset); this._panScroller(Browser.pageScrollboxScroller, doffset); + this._updateScrollbars(); return !doffset.equals(dx, dy); }, /** Return offset that pans controls away from screen. Updates doffset with leftovers. */ _panControlsAwayOffset: function(doffset) { let x = 0, y = 0, rect; @@ -1178,16 +1186,33 @@ Browser.MainDragger.prototype = { }, /** Pan scroller by the given amount. Updates doffset with leftovers. */ _panScroller: function _panScroller(scroller, doffset) { let { x: x0, y: y0 } = Browser.getScrollboxPosition(scroller); scroller.scrollBy(doffset.x, doffset.y); let { x: x1, y: y1 } = Browser.getScrollboxPosition(scroller); doffset.subtract(x1 - x0, y1 - y0); + }, + + _sizeScrollbars: function _sizeScrollbars() { + let browser = Browser.selectedBrowser; + let width = window.innerWidth, height = window.innerHeight; + this._widthRatio = width / (browser.contentDocumentWidth * browser.scale); + this._heightRatio = height / (browser.contentDocumentHeight * browser.scale); + + this._horizontalScrollbar.style.width = width * this._widthRatio + "px"; + this._verticalScrollbar.style.height = height * this._heightRatio + "px"; + }, + + _updateScrollbars: function _updateScrollbars() { + let browser = Browser.selectedBrowser; + let { x: scrollX, y: scrollY } = browser.getPosition(); + this._horizontalScrollbar.left = scrollX * this._widthRatio; + this._verticalScrollbar.top = scrollY * this._heightRatio; } }; function nsBrowserAccess() { } diff --git a/chrome/content/browser.xul b/chrome/content/browser.xul --- a/chrome/content/browser.xul +++ b/chrome/content/browser.xul @@ -219,17 +219,17 @@ - + #ifdef MOZ_PLATFORM_MAEMO #endif @@ -274,16 +274,18 @@ @@ -504,17 +506,17 @@ #ifdef MOZ_SERVICES_SYNC #endif -