24#include <QApplication>
34 setContentsMargins(0, 0, 0, 0);
39 return m_orientations;
46 if (m_orientations == Qt::Vertical) {
47 setPixmap(QIcon(
QSL(
":/autoscroll/data/scroll_vertical.png")).pixmap(33));
48 }
else if (m_orientations == Qt::Horizontal) {
49 setPixmap(QIcon(
QSL(
":/autoscroll/data/scroll_horizontal.png")).pixmap(33));
51 setPixmap(QIcon(
QSL(
":/autoscroll/data/scroll_all.png")).pixmap(33));
57void ScrollIndicator::paintEvent(QPaintEvent *event)
60 p.setRenderHint(QPainter::Antialiasing);
63 r.adjust(1, 1, -1, -1);
71 QRadialGradient g(r.center(), r.height() / 2.0);
73 g.setColorAt(0.7, c2);
79 QLabel::paintEvent(event);
85 , m_settingsFile(settingsFile)
88 m_indicator->installEventFilter(
this);
90 QSettings settings(m_settingsFile, QSettings::IniFormat);
91 settings.beginGroup(
"AutoScroll");
94 m_frameScroller->
setScrollDivider(settings.value(
"ScrollDivider", 8.0).toDouble());
108 if (m_indicator->isVisible()) {
109 QRect rect = indicatorGlobalRect();
113 if (rect.left() > event->globalPosition().toPoint().x()) {
114 xlength =
event->globalPosition().toPoint().x() - rect.left();
116 else if (rect.right() < event->globalPosition().toPoint().x()) {
117 xlength =
event->globalPosition().toPoint().x() - rect.right();
119 if (rect.top() > event->globalPosition().toPoint().y()) {
120 ylength =
event->globalPosition().toPoint().y() - rect.top();
122 else if (rect.bottom() < event->globalPosition().toPoint().y()) {
123 ylength =
event->globalPosition().toPoint().y() - rect.bottom();
134 bool middleButton =
event->buttons() == Qt::MiddleButton;
135 auto* view = qobject_cast<WebView*>(obj);
139 if (m_view != view && middleButton) {
140 return showIndicator(view, event->position().toPoint());
142 else if (!m_indicator->isVisible() && middleButton) {
143 return showIndicator(view, event->position().toPoint());
147 if (m_indicator->isVisible()) {
159 if (m_indicator->isVisible()) {
160 if (!indicatorGlobalRect().contains(event->globalPosition().toPoint())) {
174 if (m_indicator->isVisible()) {
189 QSettings settings(m_settingsFile, QSettings::IniFormat);
190 settings.beginGroup(
"AutoScroll");
191 settings.setValue(
"ScrollDivider", divider);
197bool AutoScroller::eventFilter(QObject* obj, QEvent* event)
199 if (obj == m_indicator) {
200 switch (event->type()) {
207 case QEvent::MouseButtonPress:
219bool AutoScroller::showIndicator(
WebView* view,
const QPoint &pos)
227 QString source =
QL1S(
"var out = {"
228 " vertical: window.innerWidth > document.documentElement.clientWidth,"
229 " horizontal: window.innerHeight > document.documentElement.clientHeight"
235 bool vertical = map.value(
QSL(
"vertical")).toBool();
236 bool horizontal = map.value(
QSL(
"horizontal")).toBool();
238 if (!vertical && !horizontal) {
242 Qt::Orientations orientations;
244 orientations |= Qt::Vertical;
247 orientations |= Qt::Horizontal;
254 p.setX(pos.x() - m_indicator->width() / 2);
255 p.setY(pos.y() - m_indicator->height() / 2);
258 m_indicator->move(m_view->mapTo(m_view->
overlayWidget(), p));
264 QApplication::setOverrideCursor(Qt::ArrowCursor);
269void AutoScroller::stopScrolling()
272 QApplication::restoreOverrideCursor();
275 m_indicator->setParent(
nullptr);
279QRect AutoScroller::indicatorGlobalRect()
const
281 QPoint pos = m_indicator->parentWidget()->mapToGlobal(m_indicator->geometry().topLeft());
282 return QRect(pos.x(), pos.y(), m_indicator->width(), m_indicator->height());
bool isContentEditable() const
QVariant execJavaScript(const QString &scriptSource, quint32 worldId=UnsafeJsWorld, int timeout=500)
WebHitTestResult hitTestContent(const QPoint &pos) const
virtual QWidget * overlayWidget()=0
QWidget * inputWidget() const