コード例 #1
0
ファイル: mousegestures.cpp プロジェクト: AlexTalker/qupzilla
bool MouseGestures::mousePress(QObject* obj, QMouseEvent* event)
{
    m_view = qobject_cast<WebView*>(obj);

    QWebFrame* frame = m_view.data()->page()->mainFrame();

    if (frame->scrollBarGeometry(Qt::Vertical).contains(event->pos()) ||
        frame->scrollBarGeometry(Qt::Horizontal).contains(event->pos())
       ) {
        return false;
    }

    if (m_enableRockerNavigation && event->buttons() == (Qt::RightButton | Qt::LeftButton)) {
        bool accepted = false;

        if (event->button() == Qt::LeftButton && m_view.data()->history()->canGoBack()) {
            m_view.data()->back();
            accepted = true;
        }
        else if (event->button() == Qt::RightButton && m_view.data()->history()->canGoForward()) {
            m_view.data()->forward();
            accepted = true;
        }

        if (accepted) {
            m_blockNextLeftMouseRelease = true;
            m_blockNextRightMouseRelease = true;
            return true;
        }
    }

    m_filter->mouseButtonPressEvent(event);

    return false;
}
コード例 #2
0
ファイル: qtscrollerfilter.cpp プロジェクト: nhinze/rhodes
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;
}
コード例 #3
0
ファイル: qwebframeproto.cpp プロジェクト: xtuple/qt-client
QRect QWebFrameProto::scrollBarGeometry(Qt::Orientation orientation) const
{
  scriptDeprecated("QWebFrame will not be available in future versions");
  QWebFrame *item = qscriptvalue_cast<QWebFrame*>(thisObject());
  if (item)
    return item->scrollBarGeometry(orientation);
  return QRect();
}
コード例 #4
0
ファイル: session_tab.cpp プロジェクト: mlapshin/revisor
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;
}