Title: [92438] trunk/Source/WebCore
Revision
92438
Author
simon.fra...@apple.com
Date
2011-08-04 18:07:04 -0700 (Thu, 04 Aug 2011)

Log Message

2011-08-04  Simon Fraser  <simon.fra...@apple.com>

        Add code to determine whether a Range in inside fixed position content
        https://bugs.webkit.org/show_bug.cgi?id=65720

        Reviewed by Sam Weinig.

        Propagate the 'wasFixed' flag out from various methods that
        are used when computing the collection of rects or quads
        for a range. Use the flag in Range to computer whether
        the Range is entirely within, partially within, or outside
        of fixed-position content.

        * WebCore.exp.in:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        * dom/Range.cpp:
        (WebCore::Range::textRects):
        (WebCore::Range::textQuads):
        * dom/Range.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::absoluteQuads):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteQuads):
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteQuads):
        * rendering/RenderInline.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::absoluteQuads):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::absoluteQuads):
        (WebCore::RenderText::absoluteQuadsForRange):
        * rendering/RenderText.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::absoluteQuads):
        * rendering/RenderView.h:
        * rendering/svg/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::absoluteQuads):
        * rendering/svg/RenderSVGHiddenContainer.h:
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::absoluteQuads):
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::absoluteQuads):
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteQuads):
        * rendering/svg/RenderSVGText.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (92437 => 92438)


--- trunk/Source/WebCore/ChangeLog	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/ChangeLog	2011-08-05 01:07:04 UTC (rev 92438)
@@ -1,3 +1,55 @@
+2011-08-04  Simon Fraser  <simon.fra...@apple.com>
+
+        Add code to determine whether a Range in inside fixed position content
+        https://bugs.webkit.org/show_bug.cgi?id=65720
+
+        Reviewed by Sam Weinig.
+
+        Propagate the 'wasFixed' flag out from various methods that
+        are used when computing the collection of rects or quads
+        for a range. Use the flag in Range to computer whether
+        the Range is entirely within, partially within, or outside
+        of fixed-position content.
+
+        * WebCore.exp.in:
+        * accessibility/AccessibilityRenderObject.cpp:
+        (WebCore::AccessibilityRenderObject::boundingBoxRect):
+        * dom/Range.cpp:
+        (WebCore::Range::textRects):
+        (WebCore::Range::textQuads):
+        * dom/Range.h:
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::absoluteQuads):
+        * rendering/RenderBlock.h:
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::absoluteQuads):
+        * rendering/RenderBox.h:
+        * rendering/RenderInline.cpp:
+        (WebCore::RenderInline::absoluteQuads):
+        * rendering/RenderInline.h:
+        * rendering/RenderObject.h:
+        (WebCore::RenderObject::absoluteQuads):
+        * rendering/RenderText.cpp:
+        (WebCore::RenderText::absoluteRectsForRange):
+        (WebCore::RenderText::absoluteQuads):
+        (WebCore::RenderText::absoluteQuadsForRange):
+        * rendering/RenderText.h:
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::absoluteQuads):
+        * rendering/RenderView.h:
+        * rendering/svg/RenderSVGHiddenContainer.cpp:
+        (WebCore::RenderSVGHiddenContainer::absoluteQuads):
+        * rendering/svg/RenderSVGHiddenContainer.h:
+        * rendering/svg/RenderSVGInline.cpp:
+        (WebCore::RenderSVGInline::absoluteQuads):
+        * rendering/svg/RenderSVGInline.h:
+        * rendering/svg/RenderSVGModelObject.cpp:
+        (WebCore::RenderSVGModelObject::absoluteQuads):
+        * rendering/svg/RenderSVGModelObject.h:
+        * rendering/svg/RenderSVGText.cpp:
+        (WebCore::RenderSVGText::absoluteQuads):
+        * rendering/svg/RenderSVGText.h:
+
 2011-08-04  Mark Pilgrim  <pilg...@chromium.org>
 
         Remove LegacyDefaultOptionalArguments flag from Document.idl

Modified: trunk/Source/WebCore/WebCore.exp.in (92437 => 92438)


--- trunk/Source/WebCore/WebCore.exp.in	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/WebCore.exp.in	2011-08-05 01:07:04 UTC (rev 92438)
@@ -756,7 +756,7 @@
 __ZN7WebCore5Range6createEN3WTF10PassRefPtrINS_8DocumentEEENS2_INS_4NodeEEEiS6_i
 __ZN7WebCore5Range6setEndEN3WTF10PassRefPtrINS_4NodeEEEiRi
 __ZN7WebCore5Range8setStartEN3WTF10PassRefPtrINS_4NodeEEEiRi
-__ZN7WebCore5Range9textRectsERN3WTF6VectorINS_7IntRectELm0EEEb
+__ZN7WebCore5Range9textRectsERN3WTF6VectorINS_7IntRectELm0EEEbPNS0_20RangeInFixedPositionE
 __ZN7WebCore5RangeD1Ev
 __ZN7WebCore6Chrome16setStatusbarTextEPNS_5FrameERKN3WTF6StringE
 __ZN7WebCore6Cursor8fromTypeENS0_4TypeE
@@ -1261,7 +1261,7 @@
 __ZNK7WebCore5Range4textEv
 __ZNK7WebCore5Range9endOffsetERi
 __ZNK7WebCore5Range9firstNodeEv
-__ZNK7WebCore5Range9textQuadsERN3WTF6VectorINS_9FloatQuadELm0EEEb
+__ZNK7WebCore5Range9textQuadsERN3WTF6VectorINS_9FloatQuadELm0EEEbPNS0_20RangeInFixedPositionE
 __ZNK7WebCore6Chrome12createWindowEPNS_5FrameERKNS_16FrameLoadRequestERKNS_14WindowFeaturesERKNS_16NavigationActionE
 __ZNK7WebCore6Cursor14platformCursorEv
 __ZNK7WebCore6Editor12selectedTextEv

Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (92437 => 92438)


--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2011-08-05 01:07:04 UTC (rev 92438)
@@ -1428,7 +1428,7 @@
     // For a web area, which will have the most elements of any element, absoluteQuads should be used.
     Vector<FloatQuad> quads;
     if (obj->isText())
-        toRenderText(obj)->absoluteQuads(quads, RenderText::ClipToEllipsis);
+        toRenderText(obj)->absoluteQuads(quads, 0, RenderText::ClipToEllipsis);
     else if (isWebArea())
         obj->absoluteQuads(quads);
     else

Modified: trunk/Source/WebCore/dom/Range.cpp (92437 => 92438)


--- trunk/Source/WebCore/dom/Range.cpp	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/dom/Range.cpp	2011-08-05 01:07:04 UTC (rev 92438)
@@ -1633,14 +1633,20 @@
     return result;
 }
 
-void Range::textRects(Vector<IntRect>& rects, bool useSelectionHeight)
+void Range::textRects(Vector<IntRect>& rects, bool useSelectionHeight, RangeInFixedPosition* inFixed)
 {
     Node* startContainer = m_start.container();
     Node* endContainer = m_end.container();
 
-    if (!startContainer || !endContainer)
+    if (!startContainer || !endContainer) {
+        if (inFixed)
+            *inFixed = NotFixedPosition;
         return;
+    }
 
+    bool allFixed = true;
+    bool someFixed = false;
+
     Node* stopNode = pastLastNode();
     for (Node* node = firstNode(); node != stopNode; node = node->traverseNextNode()) {
         RenderObject* r = node->renderer();
@@ -1649,18 +1655,30 @@
         RenderText* renderText = toRenderText(r);
         int startOffset = node == startContainer ? m_start.offset() : 0;
         int endOffset = node == endContainer ? m_end.offset() : numeric_limits<int>::max();
-        renderText->absoluteRectsForRange(rects, startOffset, endOffset, useSelectionHeight);
+        bool isFixed = false;
+        renderText->absoluteRectsForRange(rects, startOffset, endOffset, useSelectionHeight, &isFixed);
+        allFixed &= isFixed;
+        someFixed |= isFixed;
     }
+    
+    if (inFixed)
+        *inFixed = allFixed ? EntirelyFixedPosition : (someFixed ? PartiallyFixedPosition : NotFixedPosition);
 }
 
-void Range::textQuads(Vector<FloatQuad>& quads, bool useSelectionHeight) const
+void Range::textQuads(Vector<FloatQuad>& quads, bool useSelectionHeight, RangeInFixedPosition* inFixed) const
 {
     Node* startContainer = m_start.container();
     Node* endContainer = m_end.container();
 
-    if (!startContainer || !endContainer)
+    if (!startContainer || !endContainer) {
+        if (inFixed)
+            *inFixed = NotFixedPosition;
         return;
+    }
 
+    bool allFixed = true;
+    bool someFixed = false;
+
     Node* stopNode = pastLastNode();
     for (Node* node = firstNode(); node != stopNode; node = node->traverseNextNode()) {
         RenderObject* r = node->renderer();
@@ -1669,8 +1687,14 @@
         RenderText* renderText = toRenderText(r);
         int startOffset = node == startContainer ? m_start.offset() : 0;
         int endOffset = node == endContainer ? m_end.offset() : numeric_limits<int>::max();
-        renderText->absoluteQuadsForRange(quads, startOffset, endOffset, useSelectionHeight);
+        bool isFixed = false;
+        renderText->absoluteQuadsForRange(quads, startOffset, endOffset, useSelectionHeight, &isFixed);
+        allFixed &= isFixed;
+        someFixed |= isFixed;
     }
+
+    if (inFixed)
+        *inFixed = allFixed ? EntirelyFixedPosition : (someFixed ? PartiallyFixedPosition : NotFixedPosition);
 }
 
 #ifndef NDEBUG

Modified: trunk/Source/WebCore/dom/Range.h (92437 => 92438)


--- trunk/Source/WebCore/dom/Range.h	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/dom/Range.h	2011-08-05 01:07:04 UTC (rev 92438)
@@ -112,10 +112,17 @@
     Node* shadowTreeRootNode() const;
 
     IntRect boundingBox();
+    
+    enum RangeInFixedPosition {
+        NotFixedPosition,
+        PartiallyFixedPosition,
+        EntirelyFixedPosition
+    };
+    
     // Not transform-friendly
-    void textRects(Vector<IntRect>&, bool useSelectionHeight = false);
+    void textRects(Vector<IntRect>&, bool useSelectionHeight = false, RangeInFixedPosition* = 0);
     // Transform-friendly
-    void textQuads(Vector<FloatQuad>&, bool useSelectionHeight = false) const;
+    void textQuads(Vector<FloatQuad>&, bool useSelectionHeight = false, RangeInFixedPosition* = 0) const;
     void getBorderAndTextQuads(Vector<FloatQuad>&) const;
     FloatRect boundingRect() const;
 

Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (92437 => 92438)


--- trunk/Source/WebCore/rendering/RenderBlock.cpp	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp	2011-08-05 01:07:04 UTC (rev 92438)
@@ -5812,7 +5812,7 @@
         rects.append(LayoutRect(accumulatedOffset, size()));
 }
 
-void RenderBlock::absoluteQuads(Vector<FloatQuad>& quads)
+void RenderBlock::absoluteQuads(Vector<FloatQuad>& quads, bool* wasFixed)
 {
     // For blocks inside inlines, we go ahead and include margins so that we run right up to the
     // inline boxes above and below us (thus getting merged with them to form a single irregular
@@ -5822,10 +5822,10 @@
         // https://bugs.webkit.org/show_bug.cgi?id=46781
         FloatRect localRect(0, -collapsedMarginBefore(),
                             width(), height() + collapsedMarginBefore() + collapsedMarginAfter());
-        quads.append(localToAbsoluteQuad(localRect));
-        continuation()->absoluteQuads(quads);
+        quads.append(localToAbsoluteQuad(localRect, false, wasFixed));
+        continuation()->absoluteQuads(quads, wasFixed);
     } else
-        quads.append(RenderBox::localToAbsoluteQuad(FloatRect(0, 0, width(), height())));
+        quads.append(RenderBox::localToAbsoluteQuad(FloatRect(0, 0, width(), height()), false, wasFixed));
 }
 
 IntRect RenderBlock::rectWithOutlineForRepaint(RenderBoxModelObject* repaintContainer, int outlineWidth) const

Modified: trunk/Source/WebCore/rendering/RenderBlock.h (92437 => 92438)


--- trunk/Source/WebCore/rendering/RenderBlock.h	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/RenderBlock.h	2011-08-05 01:07:04 UTC (rev 92438)
@@ -650,7 +650,7 @@
     LayoutUnit logicalRightSelectionOffset(RenderBlock* rootBlock, LayoutUnit position);
     
     virtual void absoluteRects(Vector<LayoutRect>&, const LayoutPoint& accumulatedOffset);
-    virtual void absoluteQuads(Vector<FloatQuad>&);
+    virtual void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed);
 
     LayoutUnit desiredColumnWidth() const;
     unsigned desiredColumnCount() const;

Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (92437 => 92438)


--- trunk/Source/WebCore/rendering/RenderBox.cpp	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp	2011-08-05 01:07:04 UTC (rev 92438)
@@ -463,9 +463,9 @@
     rects.append(LayoutRect(accumulatedOffset, size()));
 }
 
-void RenderBox::absoluteQuads(Vector<FloatQuad>& quads)
+void RenderBox::absoluteQuads(Vector<FloatQuad>& quads, bool* wasFixed)
 {
-    quads.append(localToAbsoluteQuad(FloatRect(0, 0, width(), height())));
+    quads.append(localToAbsoluteQuad(FloatRect(0, 0, width(), height()), false, wasFixed));
 }
 
 void RenderBox::updateLayerTransform()

Modified: trunk/Source/WebCore/rendering/RenderBox.h (92437 => 92438)


--- trunk/Source/WebCore/rendering/RenderBox.h	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/RenderBox.h	2011-08-05 01:07:04 UTC (rev 92438)
@@ -228,7 +228,7 @@
     virtual LayoutUnit collapsedMarginAfter() const { return marginAfter(); }
 
     virtual void absoluteRects(Vector<IntRect>&, const LayoutPoint& accumulatedOffset);
-    virtual void absoluteQuads(Vector<FloatQuad>&);
+    virtual void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed);
     
     IntRect reflectionBox() const;
     int reflectionOffset() const;

Modified: trunk/Source/WebCore/rendering/RenderInline.cpp (92437 => 92438)


--- trunk/Source/WebCore/rendering/RenderInline.cpp	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/RenderInline.cpp	2011-08-05 01:07:04 UTC (rev 92438)
@@ -552,20 +552,20 @@
     }
 }
 
-void RenderInline::absoluteQuads(Vector<FloatQuad>& quads)
+void RenderInline::absoluteQuads(Vector<FloatQuad>& quads, bool* wasFixed)
 {
     if (!alwaysCreateLineBoxes())
         culledInlineAbsoluteQuads(this, quads);
     else if (InlineFlowBox* curr = firstLineBox()) {
         for (; curr; curr = curr->nextLineBox()) {
             FloatRect localRect(curr->x(), curr->y(), curr->width(), curr->height());
-            quads.append(localToAbsoluteQuad(localRect));
+            quads.append(localToAbsoluteQuad(localRect, false, wasFixed));
         }
     } else
-        quads.append(localToAbsoluteQuad(FloatRect()));
+        quads.append(localToAbsoluteQuad(FloatRect(), false, wasFixed));
 
     if (continuation())
-        continuation()->absoluteQuads(quads);
+        continuation()->absoluteQuads(quads, wasFixed);
 }
 
 void RenderInline::culledInlineAbsoluteQuads(const RenderInline* container, Vector<FloatQuad>& quads)

Modified: trunk/Source/WebCore/rendering/RenderInline.h (92437 => 92438)


--- trunk/Source/WebCore/rendering/RenderInline.h	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/RenderInline.h	2011-08-05 01:07:04 UTC (rev 92438)
@@ -47,7 +47,7 @@
     virtual LayoutUnit marginEnd() const;
 
     virtual void absoluteRects(Vector<LayoutRect>&, const LayoutPoint& accumulatedOffset);
-    virtual void absoluteQuads(Vector<FloatQuad>&);
+    virtual void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed);
 
     virtual LayoutSize offsetFromContainer(RenderObject*, const LayoutPoint&) const;
 

Modified: trunk/Source/WebCore/rendering/RenderObject.h (92437 => 92438)


--- trunk/Source/WebCore/rendering/RenderObject.h	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/RenderObject.h	2011-08-05 01:07:04 UTC (rev 92438)
@@ -606,7 +606,7 @@
     IntRect absoluteBoundingBoxRect(bool useTransforms = false);
 
     // Build an array of quads in absolute coords for line boxes
-    virtual void absoluteQuads(Vector<FloatQuad>&) { }
+    virtual void absoluteQuads(Vector<FloatQuad>&, bool* /*wasFixed*/ = 0) { }
 
     void absoluteFocusRingQuads(Vector<FloatQuad>&);
 

Modified: trunk/Source/WebCore/rendering/RenderText.cpp (92437 => 92438)


--- trunk/Source/WebCore/rendering/RenderText.cpp	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/RenderText.cpp	2011-08-05 01:07:04 UTC (rev 92438)
@@ -293,7 +293,7 @@
     return FloatRect();
 }
 
-void RenderText::absoluteRectsForRange(Vector<IntRect>& rects, unsigned start, unsigned end, bool useSelectionHeight)
+void RenderText::absoluteRectsForRange(Vector<IntRect>& rects, unsigned start, unsigned end, bool useSelectionHeight, bool* wasFixed)
 {
     // Work around signed/unsigned issues. This function takes unsigneds, and is often passed UINT_MAX
     // to mean "all the way to the end". InlineTextBox coordinates are unsigneds, so changing this 
@@ -319,11 +319,12 @@
                     r.setX(selectionRect.x());
                 }
             }
-            rects.append(localToAbsoluteQuad(FloatQuad(r)).enclosingBoundingBox());
+            rects.append(localToAbsoluteQuad(FloatQuad(r), false, wasFixed).enclosingBoundingBox());
         } else {
+            // FIXME: This code is wrong. It's converting local to absolute twice. http://webkit.org/b/65722
             FloatRect rect = absoluteQuadForTextBox(box, start, end, useSelectionHeight);
             if (!rect.isZero())
-                rects.append(localToAbsoluteQuad(rect).enclosingBoundingBox());
+                rects.append(localToAbsoluteQuad(rect, false, wasFixed).enclosingBoundingBox());
         }
     }
 }
@@ -352,7 +353,7 @@
     return IntRect();
 }
     
-void RenderText::absoluteQuads(Vector<FloatQuad>& quads, ClippingOption option)
+void RenderText::absoluteQuads(Vector<FloatQuad>& quads, bool* wasFixed, ClippingOption option)
 {
     for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) {
         IntRect boundaries = box->calculateBoundaries();
@@ -365,16 +366,16 @@
             else
                 boundaries.setHeight(ellipsisRect.maxY() - boundaries.y());
         }
-        quads.append(localToAbsoluteQuad(FloatRect(boundaries)));
+        quads.append(localToAbsoluteQuad(FloatRect(boundaries), false, wasFixed));
     }
 }
     
-void RenderText::absoluteQuads(Vector<FloatQuad>& quads)
+void RenderText::absoluteQuads(Vector<FloatQuad>& quads, bool* wasFixed)
 {
-    absoluteQuads(quads, NoClipping);
+    absoluteQuads(quads, wasFixed, NoClipping);
 }
 
-void RenderText::absoluteQuadsForRange(Vector<FloatQuad>& quads, unsigned start, unsigned end, bool useSelectionHeight)
+void RenderText::absoluteQuadsForRange(Vector<FloatQuad>& quads, unsigned start, unsigned end, bool useSelectionHeight, bool* wasFixed)
 {
     // Work around signed/unsigned issues. This function takes unsigneds, and is often passed UINT_MAX
     // to mean "all the way to the end". InlineTextBox coordinates are unsigneds, so changing this 
@@ -400,11 +401,11 @@
                     r.setX(selectionRect.x());
                 }
             }
-            quads.append(localToAbsoluteQuad(FloatRect(r)));
+            quads.append(localToAbsoluteQuad(FloatRect(r), false, wasFixed));
         } else {
             FloatRect rect = absoluteQuadForTextBox(box, start, end, useSelectionHeight);
             if (!rect.isZero())
-                quads.append(localToAbsoluteQuad(rect));
+                quads.append(localToAbsoluteQuad(rect, false, wasFixed));
         }
     }
 }

Modified: trunk/Source/WebCore/rendering/RenderText.h (92437 => 92438)


--- trunk/Source/WebCore/rendering/RenderText.h	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/RenderText.h	2011-08-05 01:07:04 UTC (rev 92438)
@@ -55,13 +55,13 @@
     void dirtyLineBoxes(bool fullLayout);
 
     virtual void absoluteRects(Vector<LayoutRect>&, const LayoutPoint& accumulatedOffset);
-    void absoluteRectsForRange(Vector<IntRect>&, unsigned startOffset = 0, unsigned endOffset = UINT_MAX, bool useSelectionHeight = false);
+    void absoluteRectsForRange(Vector<IntRect>&, unsigned startOffset = 0, unsigned endOffset = UINT_MAX, bool useSelectionHeight = false, bool* wasFixed = 0);
 
-    virtual void absoluteQuads(Vector<FloatQuad>&);
-    void absoluteQuadsForRange(Vector<FloatQuad>&, unsigned startOffset = 0, unsigned endOffset = UINT_MAX, bool useSelectionHeight = false);
+    virtual void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed);
+    void absoluteQuadsForRange(Vector<FloatQuad>&, unsigned startOffset = 0, unsigned endOffset = UINT_MAX, bool useSelectionHeight = false, bool* wasFixed = 0);
 
     enum ClippingOption { NoClipping, ClipToEllipsis };
-    void absoluteQuads(Vector<FloatQuad>&, ClippingOption option = NoClipping);
+    void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed = 0, ClippingOption = NoClipping);
 
     virtual VisiblePosition positionForPoint(const LayoutPoint&);
 

Modified: trunk/Source/WebCore/rendering/RenderView.cpp (92437 => 92438)


--- trunk/Source/WebCore/rendering/RenderView.cpp	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/RenderView.cpp	2011-08-05 01:07:04 UTC (rev 92438)
@@ -333,8 +333,10 @@
     rects.append(LayoutRect(accumulatedOffset, m_layer->size()));
 }
 
-void RenderView::absoluteQuads(Vector<FloatQuad>& quads)
+void RenderView::absoluteQuads(Vector<FloatQuad>& quads, bool* wasFixed)
 {
+    if (wasFixed)
+        *wasFixed = false;
     quads.append(FloatRect(FloatPoint(), m_layer->size()));
 }
 

Modified: trunk/Source/WebCore/rendering/RenderView.h (92437 => 92438)


--- trunk/Source/WebCore/rendering/RenderView.h	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/RenderView.h	2011-08-05 01:07:04 UTC (rev 92438)
@@ -87,7 +87,7 @@
     bool printing() const;
 
     virtual void absoluteRects(Vector<LayoutRect>&, const LayoutPoint& accumulatedOffset);
-    virtual void absoluteQuads(Vector<FloatQuad>&);
+    virtual void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed);
 
 #if USE(ACCELERATED_COMPOSITING)
     void setMaximalOutlineSize(int o);

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGHiddenContainer.cpp (92437 => 92438)


--- trunk/Source/WebCore/rendering/svg/RenderSVGHiddenContainer.cpp	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGHiddenContainer.cpp	2011-08-05 01:07:04 UTC (rev 92438)
@@ -44,7 +44,7 @@
     // This subtree does not paint.
 }
 
-void RenderSVGHiddenContainer::absoluteQuads(Vector<FloatQuad>&)
+void RenderSVGHiddenContainer::absoluteQuads(Vector<FloatQuad>&, bool*)
 {
     // This subtree does not take up space or paint
 }

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGHiddenContainer.h (92437 => 92438)


--- trunk/Source/WebCore/rendering/svg/RenderSVGHiddenContainer.h	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGHiddenContainer.h	2011-08-05 01:07:04 UTC (rev 92438)
@@ -44,7 +44,7 @@
     virtual void paint(PaintInfo&, const LayoutPoint&);
     
     virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject*) const { return IntRect(); }
-    virtual void absoluteQuads(Vector<FloatQuad>&);
+    virtual void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed);
 
     virtual bool nodeAtFloatPoint(const HitTestRequest&, HitTestResult&, const FloatPoint& pointInParent, HitTestAction);
 };

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp (92437 => 92438)


--- trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp	2011-08-05 01:07:04 UTC (rev 92438)
@@ -82,7 +82,7 @@
     SVGRenderSupport::mapLocalToContainer(this, repaintContainer, useTransforms, fixed, transformState, wasFixed);
 }
 
-void RenderSVGInline::absoluteQuads(Vector<FloatQuad>& quads)
+void RenderSVGInline::absoluteQuads(Vector<FloatQuad>& quads, bool* wasFixed)
 {
     RenderObject* object = RenderSVGText::locateRenderSVGTextAncestor(this);
     if (!object)
@@ -90,7 +90,7 @@
 
     FloatRect textBoundingBox = object->strokeBoundingBox();
     for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox())
-        quads.append(localToAbsoluteQuad(FloatRect(textBoundingBox.x() + box->x(), textBoundingBox.y() + box->y(), box->logicalWidth(), box->logicalHeight())));
+        quads.append(localToAbsoluteQuad(FloatRect(textBoundingBox.x() + box->x(), textBoundingBox.y() + box->y(), box->logicalWidth(), box->logicalHeight()), false, wasFixed));
 }
 
 void RenderSVGInline::willBeDestroyed()

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInline.h (92437 => 92438)


--- trunk/Source/WebCore/rendering/svg/RenderSVGInline.h	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInline.h	2011-08-05 01:07:04 UTC (rev 92438)
@@ -48,7 +48,7 @@
     virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer) const;
     virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect&, bool fixed = false) const;
     virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&,  bool* wasFixed = 0) const;
-    virtual void absoluteQuads(Vector<FloatQuad>&);
+    virtual void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed);
 
 private:
     virtual InlineFlowBox* createInlineFlowBox();

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp (92437 => 92438)


--- trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp	2011-08-05 01:07:04 UTC (rev 92438)
@@ -76,9 +76,9 @@
     ASSERT_NOT_REACHED();
 }
 
-void RenderSVGModelObject::absoluteQuads(Vector<FloatQuad>& quads)
+void RenderSVGModelObject::absoluteQuads(Vector<FloatQuad>& quads, bool* wasFixed)
 {
-    quads.append(localToAbsoluteQuad(strokeBoundingBox()));
+    quads.append(localToAbsoluteQuad(strokeBoundingBox(), false, wasFixed));
 }
 
 void RenderSVGModelObject::willBeDestroyed()

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.h (92437 => 92438)


--- trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.h	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.h	2011-08-05 01:07:04 UTC (rev 92438)
@@ -56,7 +56,7 @@
     virtual IntRect outlineBoundsForRepaint(RenderBoxModelObject* repaintContainer, IntPoint*) const;
 
     virtual void absoluteRects(Vector<LayoutRect>&, const LayoutPoint& accumulatedOffset);
-    virtual void absoluteQuads(Vector<FloatQuad>&);
+    virtual void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed);
 
     virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&, bool* wasFixed = 0) const;
     virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle);

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp (92437 => 92438)


--- trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp	2011-08-05 01:07:04 UTC (rev 92438)
@@ -224,9 +224,9 @@
     return closestBox->renderer()->positionForPoint(LayoutPoint(pointInContents.x(), closestBox->y()));
 }
 
-void RenderSVGText::absoluteQuads(Vector<FloatQuad>& quads)
+void RenderSVGText::absoluteQuads(Vector<FloatQuad>& quads, bool* wasFixed)
 {
-    quads.append(localToAbsoluteQuad(strokeBoundingBox()));
+    quads.append(localToAbsoluteQuad(strokeBoundingBox(), false, wasFixed));
 }
 
 void RenderSVGText::paint(PaintInfo& paintInfo, const IntPoint&)

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.h (92437 => 92438)


--- trunk/Source/WebCore/rendering/svg/RenderSVGText.h	2011-08-05 00:51:19 UTC (rev 92437)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.h	2011-08-05 01:07:04 UTC (rev 92438)
@@ -60,7 +60,7 @@
     virtual bool requiresLayer() const { return false; }
     virtual void layout();
 
-    virtual void absoluteQuads(Vector<FloatQuad>&);
+    virtual void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed);
 
     virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer) const;
     virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect&, bool fixed = false) const;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to