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;