From 695864281bd480bbfdb9afb752a4cb47663e6f12 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 15 Jul 2016 13:04:44 +0200 Subject: [PATCH] QtWebEngine: Implement pixel scroll position in JS --- qutebrowser/browser/webengine/webenginetab.py | 17 +++++++++-------- qutebrowser/javascript/scroll.js | 10 ++++++---- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 322e72c25..e8763eb56 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -185,6 +185,7 @@ class WebEngineScroller(browsertab.AbstractScroller): def __init__(self, tab, parent=None): super().__init__(tab, parent) self._pos_perc = (None, None) + self._pos_px = QPoint() def _init_widget(self, widget): super()._init_widget(widget) @@ -203,20 +204,20 @@ class WebEngineScroller(browsertab.AbstractScroller): @pyqtSlot() def _on_scroll_pos_changed(self): - def update_scroll_pos_perc(jsret): - assert len(jsret) == 2, jsret - self._pos_perc = jsret - self.perc_changed.emit(*jsret) + def update_scroll_pos(jsret): + assert isinstance(jsret, dict) + self._pos_perc = (jsret['perc']['x'], jsret['perc']['y']) + self._pos_px = QPoint(jsret['px']['x'], jsret['px']['y']) + self.perc_changed.emit(*self._pos_perc) js_code = """ {scroll_js} - scroll_pos_perc(); + scroll_pos(); """.format(scroll_js=utils.read_file('javascript/scroll.js')) - self._tab.run_js_async(js_code, update_scroll_pos_perc) + self._tab.run_js_async(js_code, update_scroll_pos) def pos_px(self): - log.stub() - return QPoint(0, 0) + return self._pos_px def pos_perc(self): return self._pos_perc diff --git a/qutebrowser/javascript/scroll.js b/qutebrowser/javascript/scroll.js index b15edf3d4..edb08850e 100644 --- a/qutebrowser/javascript/scroll.js +++ b/qutebrowser/javascript/scroll.js @@ -39,7 +39,7 @@ function scroll_delta_page(x, y) { window.scrollBy(dx, dy); } -function scroll_pos_perc() { +function scroll_pos() { var elem = document.documentElement; var dx = (elem.scrollWidth - elem.clientWidth); var dy = (elem.scrollHeight - elem.clientHeight); @@ -58,8 +58,10 @@ function scroll_pos_perc() { perc_y = 100 / dy * window.scrollY; } - // console.log(perc_x); - // console.log(perc_y); + var pos_perc = {'x': perc_x, 'y': perc_y}; + var pos_px = {'x': window.scrollX, 'y': window.scrollY}; + var pos = {'perc': pos_perc, 'px': pos_px}; - return [perc_x, perc_y]; + // console.log(JSON.stringify(pos)); + return pos; }