QWebFrame *QtScrollerFilter::scrollingFrameAt_QWebView(QWebView *view, const QPoint &pos) const { if (!view->page()) return 0; QWebFrame *mainFrame = view->page()->mainFrame(); QWebHitTestResult hitTest = mainFrame->hitTestContent(pos); QWebFrame *hitFrame = hitTest.frame(); if (!hitFrame) return 0; QRect vsbrect = hitFrame->scrollBarGeometry(Qt::Vertical); QRect hsbrect = hitFrame->scrollBarGeometry(Qt::Horizontal); if (!vsbrect.isEmpty() && vsbrect.contains(hitTest.pos() - hitFrame->scrollPosition())) return 0; if (!hsbrect.isEmpty() && hsbrect.contains(hitTest.pos() - hitFrame->scrollPosition())) return 0; QSize range = hitFrame->contentsSize() - hitFrame->geometry().size(); while (hitFrame && range.width() <= 1 && range.height() <= 1) hitFrame = hitFrame->parentFrame(); return hitFrame; }
QPoint QWebFrameProto::scrollPosition() const { scriptDeprecated("QWebFrame will not be available in future versions"); QWebFrame *item = qscriptvalue_cast<QWebFrame*>(thisObject()); if (item) return item->scrollPosition(); return QPoint(); }
// scroll by dx, dy // return true if the widget was scrolled bool scrollWidget(const int dx, const int dy) { QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea*>(widget); if (scrollArea) { const int x = scrollArea->horizontalScrollBar()->value(); const int y = scrollArea->verticalScrollBar()->value(); scrollArea->horizontalScrollBar()->setValue(x - dx); scrollArea->verticalScrollBar()->setValue(y - dy); return (scrollArea->horizontalScrollBar()->value() != x || scrollArea->verticalScrollBar()->value() != y); } QWebView *webView = qobject_cast<QWebView*>(widget); if (webView) { QWebFrame *frame = webView->page()->mainFrame(); const QPoint position = frame->scrollPosition(); frame->setScrollPosition(position - QPoint(dx, dy)); return frame->scrollPosition() != position; } return false; }
void message_view::page_down() { QWebFrame* frame = m_bodyv->page()->mainFrame(); if (!frame) return; QPoint pos = frame->scrollPosition(); int y = m_bodyv->geometry().height() + pos.y(); if (y > frame->contentsSize().height()-frame->geometry().height()) y = frame->contentsSize().height()-frame->geometry().height(); pos.setY(y); frame->setScrollPosition(pos); }
void CustomWebView::handleAutoscroll () { if (!ScrollDelta_) return; AccumulatedScrollShift_ += ScrollDelta_; if (std::abs (AccumulatedScrollShift_) >= 1) { QWebFrame *mf = page ()->mainFrame (); QPoint pos = mf->scrollPosition (); pos += QPoint (0, AccumulatedScrollShift_); mf->setScrollPosition (pos); AccumulatedScrollShift_ -= static_cast<int> (AccumulatedScrollShift_); } }
void PhpWebView::showXPath() { QWebFrame *frame = page()->frameAt(rightClick); if (frame) { XPathInspector *dlg = new XPathInspector(this, this); if (selectedElements.count() == 0) { QPoint point = frame->scrollPosition(); point += rightClick; QWebElement elem = getElementByCoord(frame->documentElement(), point); dlg->setActiveElement(elem); } else { dlg->setFewActiveElements(selectedElements); } dlg->show(); } }
bool SessionTab::sendMouseEvent(QMouseEvent::Type type, const QPoint& point, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers) { QWebFrame* frame = webPage->mainFrame(); QPoint relativePoint; unsigned int scrollX = 0; unsigned int scrollY = 0; QPoint savedScrollPos = frame->scrollPosition(); unsigned int w = frame->geometry().width() - frame->scrollBarGeometry(Qt::Vertical).width(); unsigned int h = frame->geometry().height() - frame->scrollBarGeometry(Qt::Horizontal).height(); // unsigned int maxScrollX = frame->scrollBarMaximum(Qt::Horizontal); // unsigned int maxScrollY = frame->scrollBarMaximum(Qt::Vertical); if (point.x() > (w - 1)) { scrollX = point.x() - w + 1; relativePoint.setX(w - 1); } else { relativePoint.setX(point.x()); } if (point.y() > (h - 1)) { scrollY = point.y() - h + 1; relativePoint.setY(h - 1); } else { relativePoint.setY(point.y()); } QMouseEvent event(type, relativePoint, button, buttons, modifiers); frame->setScrollPosition(QPoint(scrollX, scrollY)); bool ret = sendEvent(&event); qDebug() << "Mouse event" << type << relativePoint; frame->setScrollPosition(savedScrollPos); return ret; }
void WebView::scrollPageUp() { QWebFrame* frame = this->page()->mainFrame(); QPoint point = frame->scrollPosition(); frame->setScrollPosition(point - QPoint(0, this->page()->mainFrame()->geometry().height())); }
void WebView::scrollUp() { QWebFrame* frame = this->page()->mainFrame(); QPoint point = frame->scrollPosition(); frame->setScrollPosition(point - QPoint(0, 100)); }
void EWAHTMLSelector::drawElementsRects( const QRect& visible ) { QPainter p( this ); if( !p.isActive() ) { return; } QRect r = visible; if( r.isNull() ) { r = rect(); } p.setPen( m_bkgndPen ); p.setBrush( m_bkgndPen.brush() ); p.setOpacity(0.3); p.drawRect( r ); if( !m_element.isNull() ) { QRect elementUnderCursor = m_element.geometry(); if( r.intersects( elementUnderCursor ) ) { elementUnderCursor = elementUnderCursor.intersected( r ); if( elementUnderCursor.isValid() ) { QWebFrame *pFrame = m_element.webFrame(); if( !pFrame ) { pFrame = m_webViewPtr->page()->mainFrame(); } QPoint pnt = elementUnderCursor.center() - pFrame->scrollPosition(); elementUnderCursor.moveCenter( pnt ); p.setPen( m_markerPen ); p.setBrush( m_markerPen.brush() ); p.setOpacity(0.5); p.drawRoundedRect( elementUnderCursor, 14, 14 ); } } } if( !m_elSelected.isNull() ) { QRect selectedElement = m_elSelected.geometry(); if( r.intersects( selectedElement ) ) { selectedElement = selectedElement.intersected( r ); if( selectedElement.isValid() ) { QWebFrame *pFrame = m_elSelected.webFrame(); if( !pFrame ) { pFrame = m_webViewPtr->page()->mainFrame(); } QPoint pnt = selectedElement.center() - pFrame->scrollPosition(); selectedElement.moveCenter( pnt ); p.setPen( Qt::white ); p.setBrush( Qt::white ); p.setOpacity(0.7); p.drawRoundedRect( selectedElement, 14, 14 ); } } } }
QPoint scrollPosition() const { QWebFrame* frame = currentFrame(); return frame ? frame->scrollPosition() : QPoint(); }