1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-20 10:46:35 +01:00

WebScrollBarManager: Improve viewportSize() with knowledge from javascript

This commit is contained in:
David Rosca 2017-01-26 17:59:45 +01:00
parent 7096d3eb88
commit c785e09bdf

View File

@ -72,6 +72,8 @@ struct ScrollBarData {
WebScrollBar *vscrollbar; WebScrollBar *vscrollbar;
WebScrollBar *hscrollbar; WebScrollBar *hscrollbar;
bool vscrollbarVisible = false;
bool hscrollbarVisible = false;
WebScrollBarCornerWidget *corner; WebScrollBarCornerWidget *corner;
}; };
@ -123,8 +125,10 @@ void WebScrollBarManager::addWebView(WebView *view)
auto updateValues = [=]() { auto updateValues = [=]() {
const QSize viewport = viewportSize(view, thickness); const QSize viewport = viewportSize(view, thickness);
data->vscrollbar->updateValues(viewport); data->vscrollbar->updateValues(viewport);
data->vscrollbar->setVisible(data->vscrollbarVisible);
data->hscrollbar->updateValues(viewport); data->hscrollbar->updateValues(viewport);
data->corner->updateVisibility(data->vscrollbar->isVisible() && data->hscrollbar->isVisible(), thickness); data->hscrollbar->setVisible(data->hscrollbarVisible);
data->corner->updateVisibility(data->vscrollbarVisible && data->hscrollbarVisible, thickness);
}; };
connect(view, &WebView::viewportResized, this, updateValues); connect(view, &WebView::viewportResized, this, updateValues);
@ -141,10 +145,10 @@ void WebScrollBarManager::addWebView(WebView *view)
if (!p) { if (!p) {
return; return;
} }
updateValues();
const QVariantMap map = res.toMap(); const QVariantMap map = res.toMap();
data->vscrollbar->setVisible(map.value(QSL("vertical")).toBool()); data->vscrollbarVisible = map.value(QSL("vertical")).toBool();
data->hscrollbar->setVisible(map.value(QSL("horizontal")).toBool()); data->hscrollbarVisible = map.value(QSL("horizontal")).toBool();
updateValues();
}); });
}); });
@ -202,10 +206,21 @@ void WebScrollBarManager::removeUserScript()
QSize WebScrollBarManager::viewportSize(WebView *view, int thickness) const QSize WebScrollBarManager::viewportSize(WebView *view, int thickness) const
{ {
QSize viewport = view->size(); QSize viewport = view->size();
const QSize content = view->page()->contentsSize().toSize();
thickness /= view->devicePixelRatioF(); thickness /= view->devicePixelRatioF();
ScrollBarData *data = m_scrollbars.value(view);
Q_ASSERT(data);
if (data->vscrollbarVisible) {
viewport.setWidth(viewport.width() - thickness);
} else if (data->hscrollbarVisible) {
viewport.setHeight(viewport.height() - thickness);
}
#if 0
const QSize content = view->page()->contentsSize().toSize();
// Check both axis // Check both axis
if (content.width() - viewport.width() > 0) { if (content.width() - viewport.width() > 0) {
viewport.setHeight(viewport.height() - thickness); viewport.setHeight(viewport.height() - thickness);
@ -223,6 +238,7 @@ QSize WebScrollBarManager::viewportSize(WebView *view, int thickness) const
if (viewport.width() == view->width() && content.height() - viewport.height() > 0) { if (viewport.width() == view->width() && content.height() - viewport.height() > 0) {
viewport.setWidth(viewport.width() - thickness); viewport.setWidth(viewport.width() - thickness);
} }
#endif
return viewport; return viewport;
} }