Reviewed by Eric.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 31 Mar 2006 11:24:53 +0000 (11:24 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 31 Mar 2006 11:24:53 +0000 (11:24 +0000)
        - various Point / Size related cleanup

        First, I clarified the semantics of some operations to keep a
        better distinction between IntPoint and IntSize:

        * platform/IntPoint.h:
        (WebCore::IntPoint::move): new convenience to move a point by separate
        x and y deltas.
        (WebCore::operator+=): You can't add a point to a point, you can only add
        a size to a point.
        (WebCore::operator+): ditto
        (WebCore::operator-): point - point = size; point - size = point
        (WebCore::operator-=): only allow subtracting a size for the mutating version
        * platform/IntRect.h:
        (WebCore::IntRect::move): tweaked to use IntPoint::move, also, move by an IntSize,
        not an IntPoint.
        * platform/IntSize.h:
        (WebCore::IntSize::shrunkTo): analog to expandedTo
        (WebCore::IntSize::clampNegativeToZero): a handy helper
        (WebCore::operator-): Added unary minus operator

        Made the same changes for FloatPoint:

        * platform/FloatPoint.h:
        (WebCore::FloatPoint::move):
        (WebCore::operator+=):
        (WebCore::operator-=):
        (WebCore::operator+):
        (WebCore::operator-):
        * platform/FloatRect.h:
        (WebCore::FloatRect::move):
        * platform/FloatSize.h:
        (WebCore::operator-):

        Then I changed a bunch of stuff to pass around IntPoint instead of separate x and y
        coordinates. The main one was:

        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::scrollOffset): new method, return an IntSize
        (WebCore::ScrollView::contentsToViewport): take and return an IntPoint
        (WebCore::ScrollView::viewportToContents): take and return an IntPoint
        * platform/win/ScrollViewWin.cpp:
        (WebCore::ScrollView::updateContents): handle things in terms of scrollOffset,
        not scrollPoint
        (WebCore::ScrollView::visibleContentRect):
        (WebCore::ScrollView::contentsX):
        (WebCore::ScrollView::contentsY):
        (WebCore::ScrollView::viewportToContents):
        (WebCore::ScrollView::contentsToViewport):
        (WebCore::scrollOffset):
        (WebCore::ScrollView::maximumScroll):
        (WebCore::ScrollView::scrollBy):
        (WebCore::ScrollView::updateScrollBars):

        The rest is mainly updates for these changes.

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::eventMayStartDrag):
        (WebCore::FrameMac::dragHysteresisExceeded):
        (WebCore::FrameMac::handleMouseMoveEvent):
        (WebCore::FrameMac::mouseDown):
        (WebCore::FrameMac::shouldDragAutoNode):
        (WebCore::FrameMac::sendContextMenuEvent):
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge isPointInsideSelection:]):
        * dom/EventTargetNode.cpp:
        (WebCore::EventTargetNode::dispatchMouseEvent):
        (WebCore::EventTargetNode::dispatchWheelEvent):
        * khtml/ecma/kjs_window.cpp:
        (KJS::WindowFunc::callAsFunction):
        * page/Frame.cpp:
        (WebCore::Frame::shouldDragAutoNode):
        (WebCore::Frame::isPointInsideSelection):
        (WebCore::Frame::selectClosestWordFromMouseEvent):
        (WebCore::Frame::handleMousePressEventDoubleClick):
        (WebCore::Frame::handleMousePressEventTripleClick):
        (WebCore::Frame::handleMousePressEventSingleClick):
        (WebCore::Frame::handleMouseMoveEventPart2):
        (WebCore::Frame::handleMouseReleaseEvent):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::dispatchDragEvent):
        (WebCore::FrameView::prepareMouseEvent):
        (WebCore::FrameView::handleWheelEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::draggableNode):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::positionForPoint):
        * rendering/render_list.cpp:
        (WebCore::RenderListMarker::paint):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@13605 268f45cc-cd09-0410-ab3c-d52691b4dbfc

22 files changed:
WebCore/ChangeLog
WebCore/bridge/mac/FrameMac.h
WebCore/bridge/mac/FrameMac.mm
WebCore/bridge/mac/WebCoreFrameBridge.mm
WebCore/dom/EventTargetNode.cpp
WebCore/khtml/ecma/kjs_window.cpp
WebCore/page/Frame.cpp
WebCore/page/Frame.h
WebCore/page/FrameView.cpp
WebCore/platform/FloatPoint.h
WebCore/platform/FloatRect.h
WebCore/platform/FloatSize.h
WebCore/platform/IntPoint.h
WebCore/platform/IntRect.h
WebCore/platform/IntSize.h
WebCore/platform/ScrollView.h
WebCore/platform/mac/ScrollViewMac.mm
WebCore/platform/win/ScrollViewWin.cpp
WebCore/rendering/RenderLayer.cpp
WebCore/rendering/RenderObject.cpp
WebCore/rendering/RenderObject.h
WebCore/rendering/render_list.cpp

index df052a146c370245123363db35077b663f27a7b8..8563280ea45f79bdc67d55ae6059960ccd840bf0 100644 (file)
@@ -1,3 +1,102 @@
+2006-03-30  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Eric.
+        
+        - various Point / Size related cleanup
+        
+        First, I clarified the semantics of some operations to keep a
+        better distinction between IntPoint and IntSize:
+        
+        * platform/IntPoint.h:
+        (WebCore::IntPoint::move): new convenience to move a point by separate
+        x and y deltas.
+        (WebCore::operator+=): You can't add a point to a point, you can only add
+        a size to a point.
+        (WebCore::operator+): ditto
+        (WebCore::operator-): point - point = size; point - size = point
+        (WebCore::operator-=): only allow subtracting a size for the mutating version
+        * platform/IntRect.h:
+        (WebCore::IntRect::move): tweaked to use IntPoint::move, also, move by an IntSize,
+        not an IntPoint.
+        * platform/IntSize.h:
+        (WebCore::IntSize::shrunkTo): analog to expandedTo
+        (WebCore::IntSize::clampNegativeToZero): a handy helper
+        (WebCore::operator-): Added unary minus operator
+
+        Made the same changes for FloatPoint:
+        
+        * platform/FloatPoint.h:
+        (WebCore::FloatPoint::move):
+        (WebCore::operator+=):
+        (WebCore::operator-=):
+        (WebCore::operator+):
+        (WebCore::operator-):
+        * platform/FloatRect.h:
+        (WebCore::FloatRect::move):
+        * platform/FloatSize.h:
+        (WebCore::operator-):
+
+        Then I changed a bunch of stuff to pass around IntPoint instead of separate x and y
+        coordinates. The main one was:
+        
+        * platform/ScrollView.h:
+        * platform/mac/ScrollViewMac.mm:
+        (WebCore::ScrollView::scrollOffset): new method, return an IntSize
+        (WebCore::ScrollView::contentsToViewport): take and return an IntPoint
+        (WebCore::ScrollView::viewportToContents): take and return an IntPoint
+        * platform/win/ScrollViewWin.cpp:
+        (WebCore::ScrollView::updateContents): handle things in terms of scrollOffset,
+        not scrollPoint
+        (WebCore::ScrollView::visibleContentRect):
+        (WebCore::ScrollView::contentsX):
+        (WebCore::ScrollView::contentsY):
+        (WebCore::ScrollView::viewportToContents):
+        (WebCore::ScrollView::contentsToViewport):
+        (WebCore::scrollOffset):
+        (WebCore::ScrollView::maximumScroll):
+        (WebCore::ScrollView::scrollBy):
+        (WebCore::ScrollView::updateScrollBars):
+
+        The rest is mainly updates for these changes.
+
+        * bridge/mac/FrameMac.h:
+        * bridge/mac/FrameMac.mm:
+        (WebCore::FrameMac::eventMayStartDrag):
+        (WebCore::FrameMac::dragHysteresisExceeded):
+        (WebCore::FrameMac::handleMouseMoveEvent):
+        (WebCore::FrameMac::mouseDown):
+        (WebCore::FrameMac::shouldDragAutoNode):
+        (WebCore::FrameMac::sendContextMenuEvent):
+        * bridge/mac/WebCoreFrameBridge.mm:
+        (-[WebCoreFrameBridge isPointInsideSelection:]):
+        * dom/EventTargetNode.cpp:
+        (WebCore::EventTargetNode::dispatchMouseEvent):
+        (WebCore::EventTargetNode::dispatchWheelEvent):
+        * khtml/ecma/kjs_window.cpp:
+        (KJS::WindowFunc::callAsFunction):
+        * page/Frame.cpp:
+        (WebCore::Frame::shouldDragAutoNode):
+        (WebCore::Frame::isPointInsideSelection):
+        (WebCore::Frame::selectClosestWordFromMouseEvent):
+        (WebCore::Frame::handleMousePressEventDoubleClick):
+        (WebCore::Frame::handleMousePressEventTripleClick):
+        (WebCore::Frame::handleMousePressEventSingleClick):
+        (WebCore::Frame::handleMouseMoveEventPart2):
+        (WebCore::Frame::handleMouseReleaseEvent):
+        * page/Frame.h:
+        * page/FrameView.cpp:
+        (WebCore::FrameView::dispatchDragEvent):
+        (WebCore::FrameView::prepareMouseEvent):
+        (WebCore::FrameView::handleWheelEvent):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::scrollRectToVisible):
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::draggableNode):
+        * rendering/RenderObject.h:
+        (WebCore::RenderObject::positionForPoint):
+        * rendering/render_list.cpp:
+        (WebCore::RenderListMarker::paint):
+
 2006-03-30  Maciej Stachowiak  <mjs@apple.com>
 
         - fixed windows build
index dc0809d510fdce1ea089b7e0e21b63db0140525c..49cf389a476455e9641fa066af7e97af746aea3d 100644 (file)
@@ -283,7 +283,7 @@ public:
     virtual void partClearedInBegin();
     
     // Implementation of CSS property -khtml-user-drag == auto
-    virtual bool shouldDragAutoNode(Node*, int x, int y) const;
+    virtual bool shouldDragAutoNode(Node*, const IntPoint&) const;
 
     void setMarkedTextRange(const Range* , NSArray* attributes, NSArray* ranges);
     virtual Range* markedTextRange() const { return m_markedTextRange.get(); }
@@ -339,7 +339,7 @@ private:
     bool _mouseDownMayStartSelect;
     PlatformMouseEvent m_mouseDown;
     // in our view's coords
-    int _mouseDownX, _mouseDownY;
+    IntPoint m_mouseDownPos;
     float _mouseDownTimestamp;
     int _activationEventNumber;
     
index 386aede202585b0f2ce6953d68c47adca70093d1..bfe6d340543e3d3ecc97360817dc1c82364515d1 100644 (file)
@@ -1525,12 +1525,11 @@ bool FrameMac::eventMayStartDrag(NSEvent *event) const
     }
 
     NSPoint loc = [event locationInWindow];
-    int mouseDownX, mouseDownY;
-    d->m_view->viewportToContents((int)loc.x, (int)loc.y, mouseDownX, mouseDownY);
+    IntPoint mouseDownPos = d->m_view->viewportToContents(IntPoint(loc));
     RenderObject::NodeInfo nodeInfo(true, false);
-    renderer()->layer()->hitTest(nodeInfo, IntPoint(mouseDownX, mouseDownY));
+    renderer()->layer()->hitTest(nodeInfo, mouseDownPos);
     bool srcIsDHTML;
-    return nodeInfo.innerNode()->renderer()->draggableNode(DHTMLFlag, UAFlag, mouseDownX, mouseDownY, srcIsDHTML);
+    return nodeInfo.innerNode()->renderer()->draggableNode(DHTMLFlag, UAFlag, mouseDownPos.x(), mouseDownPos.y(), srcIsDHTML);
 }
 
 // The link drag hysteresis is much larger than the others because there
@@ -1544,20 +1543,19 @@ const float TextDragDelay = 0.15;
 
 bool FrameMac::dragHysteresisExceeded(float dragLocationX, float dragLocationY) const
 {
-    int dragX, dragY;
-    d->m_view->viewportToContents((int)dragLocationX, (int)dragLocationY, dragX, dragY);
-    float deltaX = fabsf(dragX - _mouseDownX);
-    float deltaY = fabsf(dragY - _mouseDownY);
+    IntPoint dragViewportLocation((int)dragLocationX, (int)dragLocationY);
+    IntPoint dragLocation = d->m_view->viewportToContents(dragViewportLocation);
+    IntSize delta = dragLocation - m_mouseDownPos;
     
     float threshold = GeneralDragHysteresis;
-    if (_dragSrcIsImage) {
+    if (_dragSrcIsImage)
         threshold = ImageDragHysteresis;
-    } else if (_dragSrcIsLink) {
+    else if (_dragSrcIsLink)
         threshold = LinkDragHysteresis;
-    } else if (_dragSrcInSelection) {
+    else if (_dragSrcInSelection)
         threshold = TextDragHysteresis;
-    }
-    return deltaX >= threshold || deltaY >= threshold;
+
+    return fabsf(delta.width()) >= threshold || fabsf(delta.height()) >= threshold;
 }
 
 void FrameMac::handleMouseMoveEvent(const MouseEventWithHitTestResults& event)
@@ -1589,9 +1587,9 @@ void FrameMac::handleMouseMoveEvent(const MouseEventWithHitTestResults& event)
         if (_mouseDownMayStartDrag && !_dragSrc) {
             // try to find an element that wants to be dragged
             RenderObject::NodeInfo nodeInfo(true, false);
-            renderer()->layer()->hitTest(nodeInfo, IntPoint(_mouseDownX, _mouseDownY));
+            renderer()->layer()->hitTest(nodeInfo, m_mouseDownPos);
             Node *node = nodeInfo.innerNode();
-            _dragSrc = (node && node->renderer()) ? node->renderer()->draggableNode(_dragSrcMayBeDHTML, _dragSrcMayBeUA, _mouseDownX, _mouseDownY, _dragSrcIsDHTML) : 0;
+            _dragSrc = (node && node->renderer()) ? node->renderer()->draggableNode(_dragSrcMayBeDHTML, _dragSrcMayBeUA, m_mouseDownPos.x(), m_mouseDownPos.y(), _dragSrcIsDHTML) : 0;
             if (!_dragSrc) {
                 _mouseDownMayStartDrag = false;     // no element is draggable
             } else {
@@ -1602,7 +1600,7 @@ void FrameMac::handleMouseMoveEvent(const MouseEventWithHitTestResults& event)
                 node = nodeInfo.innerNonSharedNode();
                 _dragSrcIsImage = node && node->renderer() && node->renderer()->isImage();
                 
-                _dragSrcInSelection = isPointInsideSelection(_mouseDownX, _mouseDownY);
+                _dragSrcInSelection = isPointInsideSelection(m_mouseDownPos);
             }                
         }
         
@@ -1645,7 +1643,8 @@ void FrameMac::handleMouseMoveEvent(const MouseEventWithHitTestResults& event)
                     if (_dragSrcIsDHTML) {
                         int srcX, srcY;
                         _dragSrc->renderer()->absolutePosition(srcX, srcY);
-                        _dragClipboard->setDragImageElement(_dragSrc.get(), IntPoint(_mouseDownX - srcX, _mouseDownY - srcY));
+                        IntSize delta = m_mouseDownPos - IntPoint(srcX, srcY);
+                        _dragClipboard->setDragImageElement(_dragSrc.get(), IntPoint() + delta);
                     } 
 
                     _mouseDownMayStartDrag = dispatchDragSrcEvent(dragstartEvent, m_mouseDown);
@@ -1926,7 +1925,7 @@ void FrameMac::mouseDown(NSEvent *event)
     _currentEvent = KWQRetain(event);
     m_mouseDown = PlatformMouseEvent(event);
     NSPoint loc = [event locationInWindow];
-    d->m_view->viewportToContents((int)loc.x, (int)loc.y, _mouseDownX, _mouseDownY);
+    m_mouseDownPos = d->m_view->viewportToContents(IntPoint(loc));
     _mouseDownTimestamp = [event timestamp];
 
     _mouseDownMayStartDrag = false;
@@ -2079,16 +2078,14 @@ void FrameMac::mouseMoved(NSEvent *event)
 }
 
 // Called as we walk up the element chain for nodes with CSS property -khtml-user-drag == auto
-bool FrameMac::shouldDragAutoNode(Node* node, int x, int y) const
+bool FrameMac::shouldDragAutoNode(Node* node, const IntPoint& point) const
 {
     // We assume that WebKit only cares about dragging things that can be leaf nodes (text, images, urls).
     // This saves a bunch of expensive calls (creating WC and WK element dicts) as we walk farther up
     // the node hierarchy, and we also don't have to cook up a way to ask WK about non-leaf nodes
     // (since right now WK just hit-tests using a cached lastMouseDown).
     if (!node->hasChildNodes() && d->m_view) {
-        int windowX, windowY;
-        d->m_view->contentsToViewport(x, y, windowX, windowY);
-        NSPoint eventLoc = {windowX, windowY};
+        NSPoint eventLoc = d->m_view->contentsToViewport(point);
         return [_bridge mayStartDragAtEventLocation:eventLoc];
     } else
         return NO;
@@ -2109,15 +2106,13 @@ bool FrameMac::sendContextMenuEvent(NSEvent *event)
     
     PlatformMouseEvent mouseEvent(event);
 
-    int xm, ym;
-    v->viewportToContents(mouseEvent.x(), mouseEvent.y(), xm, ym);
-
-    MouseEventWithHitTestResults mev = doc->prepareMouseEvent(false, true, false, IntPoint(xm, ym), mouseEvent);
+    IntPoint viewportPos = v->viewportToContents(mouseEvent.pos());
+    MouseEventWithHitTestResults mev = doc->prepareMouseEvent(false, true, false, viewportPos, mouseEvent);
 
     swallowEvent = v->dispatchMouseEvent(contextmenuEvent, mev.innerNode(), true, 0, mouseEvent, true);
-    if (!swallowEvent && !isPointInsideSelection(xm, ym) &&
+    if (!swallowEvent && !isPointInsideSelection(viewportPos) &&
         ([_bridge selectWordBeforeMenuEvent] || [_bridge isEditable] || mev.innerNode()->isContentEditable())) {
-        selectClosestWordFromMouseEvent(mouseEvent, mev.innerNode(), xm, ym);
+        selectClosestWordFromMouseEvent(mouseEvent, mev.innerNode());
     }
 
     ASSERT(_currentEvent == event);
index e4eeaf4b4f6507208c10cee3529e3da2c72f1efe..230814a253785b0a53f226e8d809ccfaf66265b6 100644 (file)
@@ -1197,7 +1197,7 @@ static HTMLFormElement *formElementFromDOMElement(DOMElement *element)
 
 - (BOOL)isPointInsideSelection:(NSPoint)point
 {
-    return m_frame->isPointInsideSelection((int)point.x, (int)point.y);
+    return m_frame->isPointInsideSelection(IntPoint(point));
 }
 
 - (NSURL *)URLWithAttributeString:(NSString *)string
index 5ddad4dbfe1177bfd1c0b54161fc8be538707b27..5f6f79dcc95eec42951f86a24a15d0d538f2db8f 100644 (file)
@@ -347,13 +347,12 @@ bool EventTargetNode::dispatchMouseEvent(const PlatformMouseEvent& _mouse, const
 {
     assert(!eventDispatchForbidden());
     
-    int clientX = 0;
-    int clientY = 0;
+    IntPoint clientPos;
     if (FrameView *view = document()->view())
-        view->viewportToContents(_mouse.x(), _mouse.y(), clientX, clientY);
+        clientPos = view->viewportToContents(_mouse.pos());
     
     return dispatchMouseEvent(eventType, _mouse.button(), detail,
-                              clientX, clientY, _mouse.globalX(), _mouse.globalY(),
+                              clientPos.x(), clientPos.y(), _mouse.globalX(), _mouse.globalY(),
                               _mouse.ctrlKey(), _mouse.altKey(), _mouse.shiftKey(), _mouse.metaKey(),
                               false, relatedTarget);
 }
@@ -435,12 +434,10 @@ void EventTargetNode::dispatchWheelEvent(PlatformWheelEvent& e)
     if (!view)
         return;
     
-    int x;
-    int y;
-    view->viewportToContents(e.x(), e.y(), x, y);
+    IntPoint pos = view->viewportToContents(e.pos());
     
     RefPtr<WheelEvent> we = new WheelEvent(e.isHorizontal(), e.delta(),
-                                                   document()->defaultView(), e.globalX(), e.globalY(), x, y,
+                                                   document()->defaultView(), e.globalX(), e.globalY(), pos.x(), pos.y(),
                                                    e.ctrlKey(), e.altKey(), e.shiftKey(), e.metaKey());
     
     ExceptionCode ec = 0;
index a45a9b4f03fd7825ebc4bead1dc7a99aa9bd3987..2508c78f5512b38bb17a2753813f0681e5efd062 100644 (file)
@@ -1663,7 +1663,8 @@ JSValue *WindowFunc::callAsFunction(ExecState *exec, JSObject *thisObj, const Li
     if (args.size() >= 2 && widget) {
       IntRect r = frame->page()->windowRect();
       IntRect sr = screenRect(widget);
-      r.setLocation(sr.location() + IntPoint(args[0]->toInt32(exec), args[1]->toInt32(exec)));
+      r.setLocation(sr.location());
+      r.move(args[0]->toInt32(exec), args[1]->toInt32(exec));
       // Security check (the spec talks about UniversalBrowserWrite to disable this check...)
       if (sr.contains(r))
         frame->page()->setWindowRect(r);
index 49dbab1ad2194b8828d064d406c35092fc3524e5..c3d108dd01367dc3c97863b1b8026e40dbe33808 100644 (file)
@@ -1642,13 +1642,13 @@ void Frame::reparseConfiguration()
         setUserStyleSheet(String());
 }
 
-bool Frame::shouldDragAutoNode(Node *node, int x, int y) const
+bool Frame::shouldDragAutoNode(Node *node, const IntPoint& point) const
 {
     // No KDE impl yet
     return false;
 }
 
-bool Frame::isPointInsideSelection(int x, int y)
+bool Frame::isPointInsideSelection(const IntPoint& point)
 {
     // Treat a collapsed selection like no selection.
     if (!d->m_selection.isRange())
@@ -1657,12 +1657,12 @@ bool Frame::isPointInsideSelection(int x, int y)
         return false;
     
     RenderObject::NodeInfo nodeInfo(true, true);
-    document()->renderer()->layer()->hitTest(nodeInfo, IntPoint(x, y));
+    document()->renderer()->layer()->hitTest(nodeInfo, point);
     Node *innerNode = nodeInfo.innerNode();
     if (!innerNode || !innerNode->renderer())
         return false;
     
-    Position pos(innerNode->renderer()->positionForCoordinates(x, y).deepEquivalent());
+    Position pos(innerNode->renderer()->positionForPoint(point).deepEquivalent());
     if (pos.isNull())
         return false;
 
@@ -1683,12 +1683,13 @@ bool Frame::isPointInsideSelection(int x, int y)
    return false;
 }
 
-void Frame::selectClosestWordFromMouseEvent(const PlatformMouseEvent& mouse, Node *innerNode, int x, int y)
+void Frame::selectClosestWordFromMouseEvent(const PlatformMouseEvent& mouse, Node *innerNode)
 {
     SelectionController selection;
 
     if (innerNode && innerNode->renderer() && mouseDownMayStartSelect() && innerNode->renderer()->shouldSelect()) {
-        VisiblePosition pos(innerNode->renderer()->positionForCoordinates(x, y));
+        IntPoint vPoint = view()->viewportToContents(mouse.pos());
+        VisiblePosition pos(innerNode->renderer()->positionForPoint(vPoint));
         if (pos.isNotNull()) {
             selection.moveTo(pos);
             selection.expandUsingGranularity(WordGranularity);
@@ -1714,11 +1715,8 @@ void Frame::handleMousePressEventDoubleClick(const MouseEventWithHitTestResults&
             // m_beganSelectingText to prevent handleMouseReleaseEvent
             // from setting caret selection.
             d->m_beganSelectingText = true;
-        else {
-            int x, y;
-            view()->viewportToContents(event.event().x(), event.event().y(), x, y);
-            selectClosestWordFromMouseEvent(event.event(), event.innerNode(), x, y);
-        }
+        else
+            selectClosestWordFromMouseEvent(event.event(), event.innerNode());
     }
 }
 
@@ -1729,9 +1727,8 @@ void Frame::handleMousePressEventTripleClick(const MouseEventWithHitTestResults&
     if (event.event().button() == LeftButton && innerNode && innerNode->renderer() &&
         mouseDownMayStartSelect() && innerNode->renderer()->shouldSelect()) {
         SelectionController selection;
-        int x, y;
-        view()->viewportToContents(event.event().x(), event.event().y(), x, y);
-        VisiblePosition pos(innerNode->renderer()->positionForCoordinates(x, y));
+        IntPoint vPoint = view()->viewportToContents(event.event().pos());
+        VisiblePosition pos(innerNode->renderer()->positionForPoint(vPoint));
         if (pos.isNotNull()) {
             selection.moveTo(pos);
             selection.expandUsingGranularity(ParagraphGranularity);
@@ -1760,12 +1757,11 @@ void Frame::handleMousePressEventSingleClick(const MouseEventWithHitTestResults&
 
             // Don't restart the selection when the mouse is pressed on an
             // existing selection so we can allow for text dragging.
-            int x, y;
-            view()->viewportToContents(event.event().x(), event.event().y(), x, y);
-            if (!extendSelection && isPointInsideSelection(x, y))
+            IntPoint vPoint = view()->viewportToContents(event.event().pos());
+            if (!extendSelection && isPointInsideSelection(vPoint))
                 return;
 
-            VisiblePosition visiblePos(innerNode->renderer()->positionForCoordinates(x, y));
+            VisiblePosition visiblePos(innerNode->renderer()->positionForPoint(vPoint));
             if (visiblePos.isNull())
                 visiblePos = VisiblePosition(innerNode, innerNode->caretMinOffset(), DOWNSTREAM);
             Position pos = visiblePos.deepEquivalent();
@@ -1833,9 +1829,8 @@ void Frame::handleMouseMoveEventPart2(const MouseEventWithHitTestResults& event)
         return;
 
     // handle making selection
-    int x, y;
-    view()->viewportToContents(event.event().x(), event.event().y(), x, y);
-    VisiblePosition pos(innerNode->renderer()->positionForCoordinates(x, y));
+    IntPoint vPoint = view()->viewportToContents(event.event().pos());
+    VisiblePosition pos(innerNode->renderer()->positionForPoint(vPoint));
 
     // Don't modify the selection if we're not on a node.
     if (pos.isNull())
@@ -1881,9 +1876,8 @@ void Frame::handleMouseReleaseEvent(const MouseEventWithHitTestResults& event)
         SelectionController selection;
         Node *node = event.innerNode();
         if (node && node->isContentEditable() && node->renderer()) {
-            int x, y;
-            view()->viewportToContents(event.event().x(), event.event().y(), x, y);
-            VisiblePosition pos = node->renderer()->positionForCoordinates(x, y);
+            IntPoint vPoint = view()->viewportToContents(event.event().pos());
+            VisiblePosition pos = node->renderer()->positionForPoint(vPoint);
             selection.moveTo(pos);
         }
         if (shouldChangeSelection(selection))
index b6d2b60d2e2a3524615be05d2149503816b39255..eb1f3bdf2422682f1ad062df95e5001a414818f5 100644 (file)
@@ -148,7 +148,7 @@ public:
   /**
    * Implementation of CSS property -khtml-user-drag == auto
    */
-  virtual bool shouldDragAutoNode(Node*, int x, int y) const;
+  virtual bool shouldDragAutoNode(Node*, const IntPoint&) const;
   
   /**
    * Specifies whether images contained in the document should be loaded
@@ -476,7 +476,7 @@ public:
    */
   String lastModified() const;
 
-  bool isPointInsideSelection(int x, int y);
+  bool isPointInsideSelection(const IntPoint&);
 
   virtual bool tabsToLinks() const;
   virtual bool tabsToAllControls() const;
@@ -521,7 +521,7 @@ public:
   virtual void handleMouseMoveEvent(const MouseEventWithHitTestResults&);
   virtual void handleMouseReleaseEvent(const MouseEventWithHitTestResults&);
   
-  void selectClosestWordFromMouseEvent(const PlatformMouseEvent&, Node* innerNode, int x, int y);
+  void selectClosestWordFromMouseEvent(const PlatformMouseEvent&, Node* innerNode);
 
   virtual void urlSelected(const DeprecatedString& url, const String& target);
   virtual void urlSelected(const ResourceRequest&, const String& target);
index 9b93e49011a0ac8624ae76a426ab0c6ab4cd6f82..60f0650e692f837fa9ed5a0d76b65106cb21913e 100644 (file)
@@ -681,12 +681,11 @@ void FrameView::handleMouseReleaseEvent(const PlatformMouseEvent& mouseEvent)
 
 bool FrameView::dispatchDragEvent(const AtomicString& eventType, Node *dragTarget, const PlatformMouseEvent& event, Clipboard* clipboard)
 {
-    int clientX, clientY;
-    viewportToContents(event.x(), event.y(), clientX, clientY);
+    IntPoint clientPos = viewportToContents(event.pos());
     
     RefPtr<MouseEvent> me = new MouseEvent(eventType,
         true, true, m_frame->document()->defaultView(),
-        0, event.globalX(), event.globalY(), clientX, clientY,
+        0, event.globalX(), event.globalY(), clientPos.x(), clientPos.y(),
         event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(),
         0, 0, clipboard);
 
@@ -942,10 +941,8 @@ MouseEventWithHitTestResults FrameView::prepareMouseEvent(bool readonly, bool ac
     ASSERT(m_frame);
     ASSERT(m_frame->document());
     
-    int xm, ym;
-    viewportToContents(mev.x(), mev.y(), xm, ym);
-
-    return m_frame->document()->prepareMouseEvent(readonly, active, mouseMove, IntPoint(xm, ym), mev);
+    IntPoint vPoint = viewportToContents(mev.pos());
+    return m_frame->document()->prepareMouseEvent(readonly, active, mouseMove, vPoint, mev);
 }
 
 bool FrameView::dispatchMouseEvent(const AtomicString& eventType, Node* targetNode, bool cancelable,
@@ -1020,11 +1017,10 @@ void FrameView::handleWheelEvent(PlatformWheelEvent& e)
     if (doc) {
         RenderObject *docRenderer = doc->renderer();
         if (docRenderer) {
-            int x, y;
-            viewportToContents(e.x(), e.y(), x, y);
+            IntPoint vPoint = viewportToContents(e.pos());
 
             RenderObject::NodeInfo hitTestResult(true, false);
-            doc->renderer()->layer()->hitTest(hitTestResult, IntPoint(x, y)); 
+            doc->renderer()->layer()->hitTest(hitTestResult, vPoint); 
             Node *node = hitTestResult.innerNode();
 
            if (m_frame->passWheelEventToChildWidget(node)) {
index 5d4930239ceb8d4c6c07fe74014c7d06eaa81136..f9d9615f3632e50df06bb6f44d99ec4572aefaf7 100644 (file)
@@ -27,6 +27,8 @@
 #ifndef FLOATPOINT_H_
 #define FLOATPOINT_H_
 
+#include "FloatSize.h"
+
 #if __APPLE__
 
 typedef struct CGPoint CGPoint;
@@ -59,6 +61,7 @@ public:
 
     void setX(float x) { m_x = x; }
     void setY(float y) { m_y = y; }
+    void move(float dx, float dy) { m_x += dx; m_y += dy; }
 
 #if __APPLE__
 
@@ -76,28 +79,31 @@ private:
     float m_x, m_y;
 };
 
-inline FloatPoint& operator+=(FloatPoint& a, const FloatPoint& b)
+inline FloatPoint& operator+=(FloatPoint& a, const FloatSize& b)
 {
-    a.setX(a.x() + b.x());
-    a.setY(a.y() + b.y());
+    a.move(b.width(), b.height());
     return a;
 }
 
-inline FloatPoint& operator-=(FloatPoint& a, const FloatPoint& b)
+inline FloatPoint& operator-=(FloatPoint& a, const FloatSize& b)
 {
-    a.setX(a.x() - b.x());
-    a.setY(a.y() - b.y());
+    a.move(-b.width(), -b.height());
     return a;
 }
 
-inline FloatPoint operator+(const FloatPoint& a, const FloatPoint& b)
+inline FloatPoint operator+(const FloatPoint& a, const FloatSize& b)
+{
+    return FloatPoint(a.x() + b.width(), a.y() + b.height());
+}
+
+inline FloatSize operator-(const FloatPoint& a, const FloatPoint& b)
 {
-    return FloatPoint(a.x() + b.x(), a.y() + b.y());
+    return FloatSize(a.x() - b.x(), a.y() - b.y());
 }
 
-inline FloatPoint operator-(const FloatPoint& a, const FloatPoint& b)
+inline FloatPoint operator-(const FloatPoint& a, const FloatSize& b)
 {
-    return FloatPoint(a.x() - b.x(), a.y() - b.y());
+    return FloatPoint(a.x() - b.width(), a.y() - b.height());
 }
 
 inline bool operator==(const FloatPoint& a, const FloatPoint& b)
index b14f1637ccab4bedf95654a3b6be62bfd2842a0d..85690d8770a77f6f5b4f0c5d4973705693e81707 100644 (file)
@@ -76,8 +76,8 @@ public:
     float right() const { return x() + width(); }
     float bottom() const { return y() + height(); }
 
-    void move(const FloatPoint& p) { m_location += p; } 
-    void move(float dx, float dy) { m_location += FloatPoint(dx, dy); } 
+    void move(const FloatSize& delta) { m_location += delta; } 
+    void move(float dx, float dy) { m_location.move(dx, dy); } 
 
     bool intersects(const FloatRect&) const;
     bool contains(const FloatRect&) const;
index 3838b91eb804743eaac9ca1c378f902ac04273b6..a3104e4a454760f90b4499311b24ade9a49ee1d5 100644 (file)
@@ -108,6 +108,11 @@ inline FloatSize operator-(const FloatSize& a, const FloatSize& b)
     return FloatSize(a.width() - b.width(), a.height() - b.height());
 }
 
+inline FloatSize operator-(const FloatSize& size)
+{
+    return FloatSize(-size.width(), -size.height());
+}
+
 inline bool operator==(const FloatSize& a, const FloatSize& b)
 {
     return a.width() == b.width() && a.height() == b.height();
index 14afc73cebb40e559138929e42f4a8dd17ba8e1a..02ebec21e4c06f60ebce55ffd78d9f20a57549e6 100644 (file)
@@ -26,6 +26,8 @@
 #ifndef INTPOINT_H_
 #define INTPOINT_H_
 
+#include "IntSize.h"
+
 #if __APPLE__
 
 typedef struct CGPoint CGPoint;
@@ -60,6 +62,8 @@ public:
     void setX(int x) { m_x = x; }
     void setY(int y) { m_y = y; }
 
+    void move(int dx, int dy) { m_x += dx; m_y += dy; }
+    
 #if __APPLE__
 
     explicit IntPoint(const CGPoint&); // don't do this implicitly since it's lossy
@@ -81,28 +85,31 @@ private:
     int m_x, m_y;
 };
 
-inline IntPoint& operator+=(IntPoint& a, const IntPoint& b)
+inline IntPoint& operator+=(IntPoint& a, const IntSize& b)
 {
-    a.setX(a.x() + b.x());
-    a.setY(a.y() + b.y());
+    a.move(b.width(), b.height());
     return a;
 }
 
-inline IntPoint& operator-=(IntPoint& a, const IntPoint& b)
+inline IntPoint& operator-=(IntPoint& a, const IntSize& b)
 {
-    a.setX(a.x() - b.x());
-    a.setY(a.y() - b.y());
+    a.move(-b.width(), -b.height());
     return a;
 }
 
-inline IntPoint operator+(const IntPoint& a, const IntPoint& b)
+inline IntPoint operator+(const IntPoint& a, const IntSize& b)
+{
+    return IntPoint(a.x() + b.width(), a.y() + b.height());
+}
+
+inline IntSize operator-(const IntPoint& a, const IntPoint& b)
 {
-    return IntPoint(a.x() + b.x(), a.y() + b.y());
+    return IntSize(a.x() - b.x(), a.y() - b.y());
 }
 
-inline IntPoint operator-(const IntPoint& a, const IntPoint& b)
+inline IntPoint operator-(const IntPoint& a, const IntSize& b)
 {
-    return IntPoint(a.x() - b.x(), a.y() - b.y());
+    return IntPoint(a.x() - b.width(), a.y() - b.height());
 }
 
 inline bool operator==(const IntPoint& a, const IntPoint& b)
index 1885110e8a5a1725aee61ec4e6783471f0cda394..3d53013a688b562671e8f629a739112007cef41a 100644 (file)
@@ -76,8 +76,8 @@ public:
     int right() const { return x() + width(); }
     int bottom() const { return y() + height(); }
 
-    void move(const IntPoint& p) { m_location += p; } 
-    void move(int dx, int dy) { m_location += IntPoint(dx, dy); } 
+    void move(const IntSize& s) { m_location += s; } 
+    void move(int dx, int dy) { m_location.move(dx, dy); } 
 
     bool intersects(const IntRect&) const;
     bool contains(const IntRect&) const;
index 5394c745a6ba2babbe9c105d54cb6927746b2413..934f2562d25e13db579e2350e069d85c7edf95ae 100644 (file)
@@ -68,6 +68,17 @@ public:
             m_height > other.m_height ? m_height : other.m_height);
     }
 
+    IntSize shrunkTo(const IntSize& other) const
+    {
+        return IntSize(m_width < other.m_width ? m_width : other.m_width,
+            m_height < other.m_height ? m_height : other.m_height);
+    }
+
+    void clampNegativeToZero()
+    {
+        *this = expandedTo(IntSize());
+    }
+
 #if __APPLE__
 
     explicit IntSize(const CGSize&); // don't do this implicitly since it's lossy
@@ -113,6 +124,11 @@ inline IntSize operator-(const IntSize& a, const IntSize& b)
     return IntSize(a.width() - b.width(), a.height() - b.height());
 }
 
+inline IntSize operator-(const IntSize& size)
+{
+    return IntSize(-size.width(), -size.height());
+}
+
 inline bool operator==(const IntSize& a, const IntSize& b)
 {
     return a.width() == b.width() && a.height() == b.height();
index 3810f8242e144e18a1aaf5b6044803764d91e69f..5c8002624926f1b783955e2bdd304f28c3f94962 100644 (file)
@@ -41,8 +41,7 @@ namespace WebCore {
         int contentsHeight() const;
         int contentsX() const;
         int contentsY() const;
-        int scrollXOffset() const;
-        int scrollYOffset() const;
+        IntSize scrollOffset() const;
         void scrollBy(int dx, int dy);
         void scrollPointRecursively(int dx, int dy);
 
@@ -67,8 +66,7 @@ namespace WebCore {
         void updateContents(const IntRect&, bool now = false);
 
         IntPoint contentsToViewport(const IntPoint&);
-        void contentsToViewport(int x, int y, int& vx, int& vy);
-        void viewportToContents(int vx, int vy, int& x, int& y);
+        IntPoint viewportToContents(const IntPoint&);
 
         void setStaticBackground(bool);
 
index 52a4d284ad3e21f12ac773a5276d1f4adebc48d7..af3808db7259d2679174d9b2a1710479ada3e4ef 100644 (file)
@@ -144,26 +144,15 @@ int ScrollView::contentsY() const
     return 0;
 }
 
-int ScrollView::scrollXOffset() const
+IntSize ScrollView::scrollOffset() const
 {
     NSView *view = getView();
     
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
     if ([view isKindOfClass:[NSScrollView class]])
-        return (int)[[(NSScrollView *)view contentView] visibleRect].origin.x;
+        return IntPoint([[(NSScrollView *)view contentView] visibleRect].origin) - IntPoint();
     END_BLOCK_OBJC_EXCEPTIONS;
-    return 0;
-}
-
-int ScrollView::scrollYOffset() const
-{
-    NSView *view = getView();
-    
-    BEGIN_BLOCK_OBJC_EXCEPTIONS;
-    if ([view isKindOfClass:[NSScrollView class]])
-        return (int)[[(NSScrollView *)view contentView] visibleRect].origin.y;
-    END_BLOCK_OBJC_EXCEPTIONS;
-    return 0;
+    return IntSize();
 }
 
 void ScrollView::scrollBy(int dx, int dy)
@@ -364,16 +353,9 @@ void ScrollView::updateContents(const IntRect &rect, bool now)
     END_BLOCK_OBJC_EXCEPTIONS;
 }
 
-IntPoint ScrollView::contentsToViewport(const IntPoint &p)
-{
-    int vx, vy;
-    contentsToViewport(p.x(), p.y(), vx, vy);
-    return IntPoint(vx, vy);
-}
-
 // NB, for us "viewport" means the NSWindow's coord system, which is origin lower left
 
-void ScrollView::contentsToViewport(int x, int y, int& vx, int& vy)
+IntPoint ScrollView::contentsToViewport(const IntPoint& contentsPoint)
 {
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
 
@@ -384,20 +366,16 @@ void ScrollView::contentsToViewport(int x, int y, int& vx, int& vy)
     if (docView)
         view = docView;
     
-    NSPoint tempPoint = { x, y }; // workaround for 4213314
+    NSPoint tempPoint = { contentsPoint.x(), contentsPoint.y() }; // workaround for 4213314
     NSPoint np = [view convertPoint:tempPoint toView: nil];
-    vx = (int)np.x;
-    vy = (int)np.y;
-    
-    return;
+    return IntPoint(np);
 
     END_BLOCK_OBJC_EXCEPTIONS;
     
-    vx = 0;
-    vy = 0;
+    return IntPoint();
 }
 
-void ScrollView::viewportToContents(int vx, int vy, int& x, int& y)
+IntPoint ScrollView::viewportToContents(const IntPoint& viewportPoint)
 {
     BEGIN_BLOCK_OBJC_EXCEPTIONS;
 
@@ -408,17 +386,14 @@ void ScrollView::viewportToContents(int vx, int vy, int& x, int& y)
     if (docView)
         view = docView;
     
-    NSPoint tempPoint = { vx, vy }; // workaround for 4213314
+    NSPoint tempPoint = { viewportPoint.x(), viewportPoint.y() }; // workaround for 4213314
     NSPoint np = [view convertPoint:tempPoint fromView: nil];
-    x = (int)np.x;
-    y = (int)np.y;
 
-    return;
+    return IntPoint(np);
 
     END_BLOCK_OBJC_EXCEPTIONS;
 
-    x = 0;
-    y = 0;
+    return IntPoint();
 }
 
 void ScrollView::setStaticBackground(bool b)
index 6b6d98c07336d49f5cb49a067bf2a11876e00b05..3e7aa5fe66348c65e910967fd63c02e6c12f3a13 100644 (file)
@@ -44,7 +44,7 @@ public:
         , hScrollBarMode(ScrollBarAuto)
     {
     }
-    IntPoint scrollPoint;
+    IntSize scrollOffset;
     IntSize contentsSize;
     bool hasStaticBackground;
     bool suppressScrollBars;
@@ -65,7 +65,7 @@ ScrollView::~ScrollView()
 void ScrollView::updateContents(const IntRect& updateRect, bool now)
 {
     IntRect adjustedDirtyRect(updateRect);
-    adjustedDirtyRect.move(-m_data->scrollPoint.x(), -m_data->scrollPoint.y());
+    adjustedDirtyRect.move(-m_data->scrollOffset);
 
     RECT dirtyRect = RECT(adjustedDirtyRect);
 #if PAINT_FLASHING_DEBUG
@@ -98,7 +98,7 @@ FloatRect ScrollView::visibleContentRect() const
     RECT bounds;
     GetClientRect(windowHandle(), &bounds);
     FloatRect contentRect = bounds;
-    contentRect.move(m_data->scrollPoint);
+    contentRect.move(m_data->scrollOffset);
     return contentRect;
 }
 
@@ -120,12 +120,12 @@ void ScrollView::resizeContents(int w,int h)
 
 int ScrollView::contentsX() const
 {
-    return scrollXOffset();
+    return scrollOffset().width();
 }
 
 int ScrollView::contentsY() const
 {
-    return scrollYOffset();
+    return scrollOffset().height();
 }
 
 int ScrollView::contentsWidth() const
@@ -138,58 +138,46 @@ int ScrollView::contentsHeight() const
     return m_data->contentsSize.height();
 }
 
-void ScrollView::viewportToContents(int x1, int y1, int& x2, int& y2)
+IntPoint ScrollView::viewportToContents(const IntPoint& contentsPoint)
 {
-    POINT point = {x1, y1};
+    POINT point = contentsPoint;
     MapWindowPoints(GetAncestor(windowHandle(), GA_ROOT), windowHandle(), &point, 1);
-    x2 = point.x + scrollXOffset();
-    y2 = point.y + scrollYOffset();
+    return IntPoint(point) + scrollOffset();
 }
 
-void ScrollView::contentsToViewport(int x1, int y1, int& x2, int& y2)
+IntPoint ScrollView::contentsToViewport(const IntPoint& viewportPoint)
 {
-    POINT point = {x1 - scrollXOffset(), y1 - scrollYOffset()};
+    POINT point = viewportPoint - scrollOffset();
     MapWindowPoints(windowHandle(), GetAncestor(windowHandle(), GA_ROOT), &point, 1);
-    x2 = point.x;
-    y2 = point.y;
+    return point;
 }
 
-int ScrollView::scrollXOffset() const
+IntSize scrollOffset() const
 {
-    return m_data->scrollPoint.x();
+    return m_data->scrollOffset;
 }
 
-int ScrollView::scrollYOffset() const
+IntSize ScrollView::maximumScroll() const
 {
-    return m_data->scrollPoint.y();
-}
-
-static inline int clampToRange(int value, int min, int max)
-{
-    return max(min(value, max), min);
-}
-
-IntPoint ScrollView::maximumScroll() const
-{
-    const IntSize& docSize = m_data->contentsSize;
-    const IntPoint& scrollPoint = m_data->scrollPoint;
-    return IntPoint(max(docSize.width() - scrollPoint.x(), 0), max(docSize.height() - scrollPoint.y(), 0));
+    IntSize delta = m_data->contentsSize - m_data->scrollOffset;
+    delta.clampNegativeToZero();
+    return delta;
 }
 
 void ScrollView::scrollBy(int dx, int dy)
 {
-    IntPoint scrollPoint = m_data->scrollPoint;
-    const IntPoint& maxScroll = maximumScroll();
-    int newX = max(0, min(scrollPoint.x() + dx, maxScroll.x()));
-    int newY = max(0, min(scrollPoint.y() + dy, maxScroll.y()));
-
-    IntPoint newPoint(newX, newY);
-    if (newPoint != scrollPoint) {
-        m_data->scrollPoint = newPoint;
+    IntSize scrollOffset = m_data->scrollOffset;
+    IntSize maxScroll = maximumScroll();
+    IntSize newScrollOffset = scrollOffset;
+    newScrollOffset.move(dx, dy);
+    newScrollOffset.clampNegativeToZero();
+
+    if (newScrollOffset != scrollScrollOffset) {
+        m_data->scrollOffset = newScrollOffset;
         updateScrollBars();
         // ScrollBar updates can fail, so we check the final delta before scrolling
-        IntPoint scrollDelta = m_data->scrollPoint - scrollPoint;
-        if (scrollDelta == IntPoint(0,0))
+        IntSize scrollDelta = m_data->scrollOffset - scrollOffset;
+        if (scrollDelta == IntSize())
             return;
         if (!m_data->hasStaticBackground)
             // FIXME: This could be made more efficient by passing a valid clip rect for only the document content.
@@ -259,15 +247,12 @@ int ScrollView::updateScrollInfo(short type, int current, int max, int pageSize)
 
 void ScrollView::updateScrollBars()
 { 
-    const IntPoint& maxScroll = maximumScroll();
-
-    int xScroll = max(0, min(scrollXOffset(), maxScroll.x()));
-    xScroll = updateScrollInfo(SB_HORZ, xScroll, contentsWidth()-1, width());
-    m_data->scrollPoint.setX(xScroll);
+    IntSize scroll = scrollOffset().shrunkTo(maximumScroll());
+    scroll.clampNegativeToZero();
 
-    int yScroll = max(0, min(scrollYOffset(), maxScroll.y()));
-    yScroll = updateScrollInfo(SB_VERT, yScroll, contentsHeight()-1, height());
-    m_data->scrollPoint.setY(yScroll);
+    m_data->scrollOffset = 
+        IntSize(updateScrollInfo(SB_HORZ, scroll.width(), contentsWidth() - 1, width()),
+                updateScrollInfo(SB_VERT, scroll.height(), contentsHeight() - 1, height()));
 
     if (m_data->hScrollBarMode != ScrollBarAuto || m_data->suppressScrollBars)
         ShowScrollBar(windowHandle(), SB_HORZ, (m_data->hScrollBarMode != ScrollBarAlwaysOff) && !m_data->suppressScrollBars);
index abeba8c691f6b465132c6f9af3d3d7d309e49ebf..e316be427edc9a50e985de2c50f550061edd35c3 100644 (file)
@@ -640,7 +640,7 @@ void RenderLayer::scrollRectToVisible(const IntRect &rect, const ScrollAlignment
     } else {
         FrameView* view = m_object->document()->view();
         if (view) {
-            IntRect viewRect = IntRect(view->scrollXOffset(), view->scrollYOffset(), view->visibleWidth(), view->visibleHeight());
+            IntRect viewRect = enclosingIntRect(view->visibleContentRect());
             IntRect r = getRectToExpose(viewRect, rect, alignX, alignY);
             
             xOffset = r.x();
index bf4f51897877b997b1b47e00a5ecea91118fce6c..3be6ec6e67eac80826e0af7ef8b518e9b31c1107 100644 (file)
@@ -1654,7 +1654,7 @@ Node* RenderObject::draggableNode(bool dhtmlOK, bool uaOK, int x, int y, bool& d
         if (elt && elt->nodeType() == Node::TEXT_NODE) {
             // Since there's no way for the author to address the -khtml-user-drag style for a text node,
             // we use our own judgement.
-            if (uaOK && canvas()->view()->frame()->shouldDragAutoNode(curr->node(), x, y)) {
+            if (uaOK && canvas()->view()->frame()->shouldDragAutoNode(curr->node(), IntPoint(x, y))) {
                 dhtmlWillDrag = false;
                 return curr->node();
             } else if (curr->shouldSelect()) {
@@ -1669,7 +1669,7 @@ Node* RenderObject::draggableNode(bool dhtmlOK, bool uaOK, int x, int y, bool& d
                 dhtmlWillDrag = true;
                 return curr->node();
             } else if (uaOK && dragMode == DRAG_AUTO
-                       && canvas()->view()->frame()->shouldDragAutoNode(curr->node(), x, y))
+                       && canvas()->view()->frame()->shouldDragAutoNode(curr->node(), IntPoint(x, y)))
             {
                 dhtmlWillDrag = false;
                 return curr->node();
index dadf2d33c301641fc493cc847b47ca209d1dce7d..993fa939dc126689d0f612b28d83afac1f7c6f69 100644 (file)
@@ -31,6 +31,7 @@
 #include "Node.h"
 #include "render_style.h"
 #include "TextAffinity.h"
+#include "VisiblePosition.h"
 #include <kxmlcore/Assertions.h>
 #include <kxmlcore/HashSet.h>
 
@@ -525,6 +526,7 @@ public:
     void setInnerNode(NodeInfo& info);
 
     virtual VisiblePosition positionForCoordinates(int x, int y);
+    VisiblePosition positionForPoint(const IntPoint& point) { return positionForCoordinates(point.x(), point.y()); }
     
     virtual void dirtyLinesFromChangedChild(RenderObject* child);
     
index 23f2b902660383da8d0abfa5a744ffe8984c2cf6..c272fd47472dff14dd36e9a65e36534747fe2c4b 100644 (file)
@@ -387,7 +387,7 @@ void RenderListMarker::paint(PaintInfo& i, int _tx, int _ty)
     if (style()->visibility() != VISIBLE)  return;
 
     IntRect marker = getRelativeMarkerRect();
-    marker.move(IntPoint(_tx, _ty));
+    marker.move(_tx, _ty);
 
     IntRect box(_tx + m_x, _ty + m_y, m_width, m_height);