Ignore:
Timestamp:
Aug 2, 2010, 9:27:30 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.3 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp

    r651 r769  
    325325}
    326326
    327 static bool webframe_scrollOverflow(WebCore::Frame* frame, int dx, int dy)
    328 {
    329     if (!frame || !frame->document() || !frame->eventHandler())
     327bool QWEBKIT_EXPORT qtwebkit_webframe_scrollOverflow(QWebFrame* qFrame, int dx, int dy, const QPoint& pos)
     328{
     329    WebCore::Frame* frame = QWebFramePrivate::core(qFrame);
     330    if (!frame || !frame->document() || !frame->view() || !frame->eventHandler())
    330331        return false;
    331332
    332     Node* node = frame->document()->focusedNode();
    333     if (!node)
    334         node = frame->document()->elementFromPoint(frame->eventHandler()->currentMousePosition().x(),
    335                                                    frame->eventHandler()->currentMousePosition().y());
     333    QPoint contentsPos = frame->view()->windowToContents(pos);
     334    Node* node = frame->document()->elementFromPoint(contentsPos.x(), contentsPos.y());
    336335    if (!node)
    337336        return false;
     
    351350    bool scrolledVertical = false;
    352351
    353     if (dx > 0)
    354         scrolledHorizontal = renderLayer->scroll(ScrollRight, ScrollByPixel, dx);
    355     else if (dx < 0)
    356         scrolledHorizontal = renderLayer->scroll(ScrollLeft, ScrollByPixel, qAbs(dx));
    357 
    358     if (dy > 0)
    359         scrolledVertical = renderLayer->scroll(ScrollDown, ScrollByPixel, dy);
    360     else if (dy < 0)
    361         scrolledVertical = renderLayer->scroll(ScrollUp, ScrollByPixel, qAbs(dy));
    362 
    363     return (scrolledHorizontal || scrolledVertical);
    364 }
     352    do {
     353        if (dx > 0)
     354            scrolledHorizontal = renderLayer->scroll(ScrollRight, ScrollByPixel, dx);
     355        else if (dx < 0)
     356            scrolledHorizontal = renderLayer->scroll(ScrollLeft, ScrollByPixel, qAbs(dx));
     357
     358        if (dy > 0)
     359            scrolledVertical = renderLayer->scroll(ScrollDown, ScrollByPixel, dy);
     360        else if (dy < 0)
     361            scrolledVertical = renderLayer->scroll(ScrollUp, ScrollByPixel, qAbs(dy));
     362
     363        if (scrolledHorizontal || scrolledVertical)
     364            return true;
     365
     366        renderLayer = renderLayer->parent();
     367    } while (renderLayer);
     368
     369    return false;
     370}
     371
     372
     373
     374
    365375
    366376/*!
     
    10481058
    10491059/*!
    1050   \since 4.7
    10511060  \internal
    10521061  Scrolls nested frames starting at this frame, \a dx pixels to the right
    10531062  and \a dy pixels downward. Both \a dx and \a dy may be negative. First attempts
    1054   to scroll elements with CSS overflow followed by this frame. If this
     1063  to scroll elements with CSS overflow followed by this frame. If this
    10551064  frame doesn't scroll, attempts to scroll the parent
    1056 
    1057   \sa QWebFrame::scroll
    1058 */
    1059 bool QWEBKIT_EXPORT qtwebkit_webframe_scrollRecursively(QWebFrame* qFrame, int dx, int dy)
    1060 {
    1061     Frame* frame = QWebFramePrivate::core(qFrame);
    1062     bool scrolledHorizontal = false;
    1063     bool scrolledVertical = false;
    1064     bool scrolledOverflow = webframe_scrollOverflow(frame, dx, dy);
    1065 
    1066     if (!scrolledOverflow) {
    1067         if (!frame || !frame->view())
    1068             return false;
    1069 
    1070         do {
    1071             IntSize scrollOffset = frame->view()->scrollOffset();
    1072             IntPoint maxScrollOffset = frame->view()->maximumScrollPosition();
    1073 
    1074             if (dx > 0) // scroll right
    1075                 scrolledHorizontal = scrollOffset.width() < maxScrollOffset.x();
    1076             else if (dx < 0) // scroll left
    1077                 scrolledHorizontal = scrollOffset.width() > 0;
    1078 
    1079             if (dy > 0) // scroll down
    1080                 scrolledVertical = scrollOffset.height() < maxScrollOffset.y();
    1081             else if (dy < 0) //scroll up
    1082                 scrolledVertical = scrollOffset.height() > 0;
    1083 
    1084             if (scrolledHorizontal || scrolledVertical) {
    1085                 frame->view()->scrollBy(IntSize(dx, dy));
    1086                 return true;
    1087             }
    1088             frame = frame->tree()->parent();
    1089         } while (frame && frame->view());
    1090     }
    1091     return (scrolledHorizontal || scrolledVertical || scrolledOverflow);
     1065*/
     1066void QWEBKIT_EXPORT qtwebkit_webframe_scrollRecursively(QWebFrame* qFrame, int dx, int dy, const QPoint& pos)
     1067{
     1068    if (!qFrame)
     1069        return;
     1070
     1071    if (qtwebkit_webframe_scrollOverflow(qFrame, dx, dy, pos))
     1072        return;
     1073
     1074    bool scrollHorizontal = false;
     1075    bool scrollVertical = false;
     1076
     1077    do {
     1078        if (dx > 0)  // scroll right
     1079            scrollHorizontal = qFrame->scrollBarValue(Qt::Horizontal) < qFrame->scrollBarMaximum(Qt::Horizontal);
     1080        else if (dx < 0)  // scroll left
     1081            scrollHorizontal = qFrame->scrollBarValue(Qt::Horizontal) > qFrame->scrollBarMinimum(Qt::Horizontal);
     1082
     1083        if (dy > 0)  // scroll down
     1084            scrollVertical = qFrame->scrollBarValue(Qt::Vertical) < qFrame->scrollBarMaximum(Qt::Vertical);
     1085        else if (dy < 0) //scroll up
     1086            scrollVertical = qFrame->scrollBarValue(Qt::Vertical) > qFrame->scrollBarMinimum(Qt::Vertical);
     1087
     1088        if (scrollHorizontal || scrollVertical) {
     1089            qFrame->scroll(dx, dy);
     1090            return;
     1091        }
     1092
     1093        qFrame = qFrame->parentFrame();
     1094    } while (qFrame);
    10921095}
    10931096
Note: See TracChangeset for help on using the changeset viewer.