Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1065)

Unified Diff: Source/core/layout/LayoutInline.cpp

Issue 1278543002: Include the whole outline into visual overflow (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Avoid the global map Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/layout/LayoutInline.cpp
diff --git a/Source/core/layout/LayoutInline.cpp b/Source/core/layout/LayoutInline.cpp
index e3044721f6f9e24785264a853c24c927b1262ad4..a68e59cffc75a66ec8095a840df63f4f3a12bd38 100644
--- a/Source/core/layout/LayoutInline.cpp
+++ b/Source/core/layout/LayoutInline.cpp
@@ -1050,32 +1050,22 @@ LayoutRect LayoutInline::clippedOverflowRect(const LayoutBoxModelObject* paintIn
return LayoutRect();
LayoutRect overflowRect(linesVisualOverflowBoundingBox());
- mapRectToPaintInvalidationBacking(paintInvalidationContainer, overflowRect, paintInvalidationState);
LayoutUnit outlineOutset = style()->outlineOutsetExtent();
if (outlineOutset) {
- for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()) {
- if (!curr->isText())
- overflowRect.unite(curr->rectWithOutlineForPaintInvalidation(paintInvalidationContainer, outlineOutset));
+ Vector<LayoutRect> rects;
+ addOutlineRectsForChildrenAndContinuations(rects, LayoutPoint());
+ LayoutRect outlineRect = unionRect(rects);
+ if (!outlineRect.isEmpty()) {
+ outlineRect.inflate(outlineOutset);
+ overflowRect.unite(outlineRect);
}
-
- if (continuation && !continuation->isInline() && continuation->parent())
- overflowRect.unite(continuation->rectWithOutlineForPaintInvalidation(paintInvalidationContainer, outlineOutset));
}
+ mapRectToPaintInvalidationBacking(paintInvalidationContainer, overflowRect, paintInvalidationState);
return overflowRect;
}
-LayoutRect LayoutInline::rectWithOutlineForPaintInvalidation(const LayoutBoxModelObject* paintInvalidationContainer, LayoutUnit outlineWidth, const PaintInvalidationState* paintInvalidationState) const
-{
- LayoutRect r(LayoutBoxModelObject::rectWithOutlineForPaintInvalidation(paintInvalidationContainer, outlineWidth, paintInvalidationState));
- for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()) {
- if (!curr->isText())
- r.unite(curr->rectWithOutlineForPaintInvalidation(paintInvalidationContainer, outlineWidth, paintInvalidationState));
- }
- return r;
-}
-
void LayoutInline::mapRectToPaintInvalidationBacking(const LayoutBoxModelObject* paintInvalidationContainer, LayoutRect& rect, const PaintInvalidationState* paintInvalidationState) const
{
if (paintInvalidationState && paintInvalidationState->canMapToContainer(paintInvalidationContainer)) {
@@ -1382,6 +1372,7 @@ void LayoutInline::addOutlineRects(Vector<LayoutRect>& rects, const LayoutPoint&
generateLineBoxRects(context);
addOutlineRectsForChildrenAndContinuations(rects, additionalOffset);
}
+
chrishtr 2015/08/27 18:20:59 spurious
Xianzhu 2015/08/27 19:23:13 Done.
void LayoutInline::addOutlineRectsForChildrenAndContinuations(Vector<LayoutRect>& rects, const LayoutPoint& additionalOffset) const
{
addOutlineRectsForNormalChildren(rects, additionalOffset);

Powered by Google App Engine
This is Rietveld 408576698