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

Unified Diff: Source/core/rendering/RenderObject.cpp

Issue 210043008: Kill outlineBox (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebaselined patch, hoping it would solve the bot failure I can't reproduce locally Created 6 years, 9 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
« no previous file with comments | « Source/core/rendering/RenderObject.h ('k') | Source/core/rendering/RenderView.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderObject.cpp
diff --git a/Source/core/rendering/RenderObject.cpp b/Source/core/rendering/RenderObject.cpp
index a0ed545b23eb8691abe6e8e2a851e71398213816..31a847fe366c0a530aead2289ed17e7cf67fc4d6 100644
--- a/Source/core/rendering/RenderObject.cpp
+++ b/Source/core/rendering/RenderObject.cpp
@@ -1486,8 +1486,7 @@ IntRect RenderObject::pixelSnappedAbsoluteClippedOverflowRect() const
}
bool RenderObject::repaintAfterLayoutIfNeeded(const RenderLayerModelObject* repaintContainer, bool wasSelfLayout,
- const LayoutRect& oldBounds, const LayoutRect& oldOutlineBox,
- const LayoutRect* newBoundsPtr, const LayoutRect* newOutlineBoxRectPtr)
+ const LayoutRect& oldBounds, const LayoutRect* newBoundsPtr)
{
RenderView* v = view();
if (v->document().printing())
@@ -1496,7 +1495,6 @@ bool RenderObject::repaintAfterLayoutIfNeeded(const RenderLayerModelObject* repa
// This ASSERT fails due to animations. See https://bugs.webkit.org/show_bug.cgi?id=37048
// ASSERT(!newBoundsPtr || *newBoundsPtr == clippedOverflowRectForRepaint(repaintContainer));
LayoutRect newBounds = newBoundsPtr ? *newBoundsPtr : clippedOverflowRectForRepaint(repaintContainer);
- LayoutRect newOutlineBox;
bool fullRepaint = wasSelfLayout;
// Presumably a background or a border exists if border-fit:lines was specified.
@@ -1509,15 +1507,9 @@ bool RenderObject::repaintAfterLayoutIfNeeded(const RenderLayerModelObject* repa
RoundedRect newRoundedRect = style()->getRoundedBorderFor(newBounds);
fullRepaint = oldRoundedRect.radii() != newRoundedRect.radii();
}
- if (!fullRepaint) {
- // This ASSERT fails due to animations. See https://bugs.webkit.org/show_bug.cgi?id=37048
- // ASSERT(!newOutlineBoxRectPtr || *newOutlineBoxRectPtr == outlineBoundsForRepaint(repaintContainer));
- newOutlineBox = newOutlineBoxRectPtr ? *newOutlineBoxRectPtr : outlineBoundsForRepaint(repaintContainer);
- if ((hasOutline() && newOutlineBox.location() != oldOutlineBox.location())
- || (mustRepaintBackgroundOrBorder() && (newBounds != oldBounds || (hasOutline() && newOutlineBox != oldOutlineBox))))
- fullRepaint = true;
- }
+ if (!fullRepaint && (mustRepaintBackgroundOrBorder() && (newBounds != oldBounds)))
+ fullRepaint = true;
// If we shifted, we don't know the exact reason so we are conservative and trigger a full invalidation. Shifting could
// be caused by some layout property (left / top) or some in-flow renderer inserted / removed before us in the tree.
@@ -1534,7 +1526,7 @@ bool RenderObject::repaintAfterLayoutIfNeeded(const RenderLayerModelObject* repa
return true;
}
- if (newBounds == oldBounds && newOutlineBox == oldOutlineBox)
+ if (oldBounds == newBounds)
return false;
LayoutUnit deltaLeft = newBounds.x() - oldBounds.x();
@@ -1561,7 +1553,8 @@ bool RenderObject::repaintAfterLayoutIfNeeded(const RenderLayerModelObject* repa
else if (deltaBottom < 0)
repaintUsingContainer(repaintContainer, pixelSnappedIntRect(oldBounds.x(), newBounds.maxY(), oldBounds.width(), -deltaBottom));
- if (newOutlineBox == oldOutlineBox)
+ // FIXME: This is a limitation of our visual overflow being a single rectangle.
+ if (!style()->boxShadow() && !style()->hasBorderImageOutsets() && !style()->hasOutline())
return false;
// We didn't move, but we did change size. Invalidate the delta, which will consist of possibly
@@ -1569,7 +1562,7 @@ bool RenderObject::repaintAfterLayoutIfNeeded(const RenderLayerModelObject* repa
RenderStyle* outlineStyle = outlineStyleForRepaint();
LayoutUnit outlineWidth = outlineStyle->outlineSize();
LayoutBoxExtent insetShadowExtent = style()->getBoxShadowInsetExtent();
- LayoutUnit width = absoluteValue(newOutlineBox.width() - oldOutlineBox.width());
+ LayoutUnit width = absoluteValue(newBounds.width() - oldBounds.width());
if (width) {
LayoutUnit shadowLeft;
LayoutUnit shadowRight;
@@ -1580,17 +1573,17 @@ bool RenderObject::repaintAfterLayoutIfNeeded(const RenderLayerModelObject* repa
LayoutUnit borderWidth = max<LayoutUnit>(borderRight, max<LayoutUnit>(valueForLength(style()->borderTopRightRadius().width(), boxWidth), valueForLength(style()->borderBottomRightRadius().width(), boxWidth)));
LayoutUnit decorationsLeftWidth = max<LayoutUnit>(-outlineStyle->outlineOffset(), borderWidth + minInsetRightShadowExtent) + max<LayoutUnit>(outlineWidth, -shadowLeft);
LayoutUnit decorationsRightWidth = max<LayoutUnit>(-outlineStyle->outlineOffset(), borderWidth + minInsetRightShadowExtent) + max<LayoutUnit>(outlineWidth, shadowRight);
- LayoutRect rightRect(newOutlineBox.x() + min(newOutlineBox.width(), oldOutlineBox.width()) - decorationsLeftWidth,
- newOutlineBox.y(),
+ LayoutRect rightRect(newBounds.x() + min(newBounds.width(), oldBounds.width()) - decorationsLeftWidth,
+ newBounds.y(),
width + decorationsLeftWidth + decorationsRightWidth,
- max(newOutlineBox.height(), oldOutlineBox.height()));
+ max(newBounds.height(), oldBounds.height()));
LayoutUnit right = min<LayoutUnit>(newBounds.maxX(), oldBounds.maxX());
if (rightRect.x() < right) {
rightRect.setWidth(min(rightRect.width(), right - rightRect.x()));
repaintUsingContainer(repaintContainer, pixelSnappedIntRect(rightRect));
}
}
- LayoutUnit height = absoluteValue(newOutlineBox.height() - oldOutlineBox.height());
+ LayoutUnit height = absoluteValue(newBounds.height() - oldBounds.height());
if (height) {
LayoutUnit shadowTop;
LayoutUnit shadowBottom;
@@ -1601,9 +1594,9 @@ bool RenderObject::repaintAfterLayoutIfNeeded(const RenderLayerModelObject* repa
LayoutUnit borderHeight = max<LayoutUnit>(borderBottom, max<LayoutUnit>(valueForLength(style()->borderBottomLeftRadius().height(), boxHeight), valueForLength(style()->borderBottomRightRadius().height(), boxHeight)));
LayoutUnit decorationsTopHeight = max<LayoutUnit>(-outlineStyle->outlineOffset(), borderHeight + minInsetBottomShadowExtent) + max<LayoutUnit>(outlineWidth, -shadowTop);
LayoutUnit decorationsBottomHeight = max<LayoutUnit>(-outlineStyle->outlineOffset(), borderHeight + minInsetBottomShadowExtent) + max<LayoutUnit>(outlineWidth, shadowBottom);
- LayoutRect bottomRect(newOutlineBox.x(),
- min(newOutlineBox.maxY(), oldOutlineBox.maxY()) - decorationsTopHeight,
- max(newOutlineBox.width(), oldOutlineBox.width()),
+ LayoutRect bottomRect(newBounds.x(),
+ min(newBounds.maxY(), oldBounds.maxY()) - decorationsTopHeight,
+ max(newBounds.width(), oldBounds.width()),
height + decorationsTopHeight + decorationsBottomHeight);
LayoutUnit bottom = min(newBounds.maxY(), oldBounds.maxY());
if (bottomRect.y() < bottom) {
@@ -3134,11 +3127,6 @@ int RenderObject::nextOffset(int current) const
return current + 1;
}
-void RenderObject::adjustRectForOutline(LayoutRect& rect) const
-{
- rect.inflate(outlineStyleForRepaint()->outlineSize());
-}
-
bool RenderObject::isInert() const
{
const RenderObject* renderer = this;
@@ -3326,62 +3314,12 @@ bool RenderObject::isRelayoutBoundaryForInspector() const
return objectIsRelayoutBoundary(this);
}
-LayoutRect RenderObject::newOutlineRect()
-{
- ASSERT(hasOutline());
-
- OutlineRects& outlineRects = view()->outlineRects();
- OutlineRects::iterator it = outlineRects.find(this);
- if (it == outlineRects.end())
- return outlineBoundsForRepaint(containerForRepaint());
- return it->value->newOutlineRect;
-}
-
-void RenderObject::setNewOutlineRect(const LayoutRect& rect)
-{
- ASSERT(hasOutline());
-
- OutlineRects& outlineRects = view()->outlineRects();
- OutlineRects::iterator it = outlineRects.find(this);
- if (it == outlineRects.end())
- outlineRects.set(this, adoptPtr(new OutlineRectInfo()));
-
- outlineRects.get(this)->newOutlineRect = rect;
-}
-
-LayoutRect RenderObject::oldOutlineRect()
-{
- ASSERT(hasOutline());
-
- OutlineRects& outlineRects = view()->outlineRects();
- OutlineRects::iterator it = outlineRects.find(this);
- if (it == outlineRects.end())
- return LayoutRect();
- return it->value->oldOutlineRect;
-}
-
-void RenderObject::setOldOutlineRect(const LayoutRect& rect)
-{
- ASSERT(hasOutline());
-
- OutlineRects& outlineRects = view()->outlineRects();
- OutlineRects::iterator it = outlineRects.find(this);
- if (it == outlineRects.end())
- outlineRects.set(this, adoptPtr(new OutlineRectInfo()));
- outlineRects.get(this)->oldOutlineRect = rect;
-}
-
void RenderObject::clearRepaintState()
{
setShouldDoFullRepaintAfterLayout(false);
setShouldDoFullRepaintIfSelfPaintingLayer(false);
setShouldRepaintOverflow(false);
setLayoutDidGetCalled(false);
-
- OutlineRects& outlineRects = view()->outlineRects();
- OutlineRects::iterator it = outlineRects.find(this);
- if (it != outlineRects.end())
- outlineRects.remove(it);
}
} // namespace WebCore
« no previous file with comments | « Source/core/rendering/RenderObject.h ('k') | Source/core/rendering/RenderView.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698