diff options
Diffstat (limited to 'Source/WebCore/rendering/RenderBox.cpp')
-rw-r--r-- | Source/WebCore/rendering/RenderBox.cpp | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/Source/WebCore/rendering/RenderBox.cpp b/Source/WebCore/rendering/RenderBox.cpp index c437851c0..e4809d288 100644 --- a/Source/WebCore/rendering/RenderBox.cpp +++ b/Source/WebCore/rendering/RenderBox.cpp @@ -120,18 +120,12 @@ static bool skipBodyBackground(const RenderBox* bodyElementRenderer) RenderBox::RenderBox(Element& element, Ref<RenderStyle>&& style, BaseTypeFlags baseTypeFlags) : RenderBoxModelObject(element, WTFMove(style), baseTypeFlags) - , m_minPreferredLogicalWidth(-1) - , m_maxPreferredLogicalWidth(-1) - , m_inlineBoxWrapper(nullptr) { setIsBox(); } RenderBox::RenderBox(Document& document, Ref<RenderStyle>&& style, BaseTypeFlags baseTypeFlags) : RenderBoxModelObject(document, WTFMove(style), baseTypeFlags) - , m_minPreferredLogicalWidth(-1) - , m_maxPreferredLogicalWidth(-1) - , m_inlineBoxWrapper(nullptr) { setIsBox(); } @@ -516,17 +510,19 @@ void RenderBox::updateFromStyle() boxHasOverflowClip = false; } } - // Check for overflow clip. // It's sufficient to just check one direction, since it's illegal to have visible on only one overflow value. if (boxHasOverflowClip) { - if (!s_hadOverflowClip) - // Erase the overflow - repaint(); + if (!s_hadOverflowClip && hasRenderOverflow()) { + // Erase the overflow. + // Overflow changes have to result in immediate repaints of the entire layout overflow area because + // repaints issued by removal of descendants get clipped using the updated style when they shouldn't. + repaintRectangle(visualOverflowRect()); + repaintRectangle(layoutOverflowRect()); + } setHasOverflowClip(); } } - setHasTransformRelatedProperty(styleToUse.hasTransformRelatedProperty()); setHasReflection(styleToUse.boxReflect()); } @@ -2121,13 +2117,14 @@ std::unique_ptr<InlineElementBox> RenderBox::createInlineBox() void RenderBox::dirtyLineBoxes(bool fullLayout) { - if (m_inlineBoxWrapper) { - if (fullLayout) { - delete m_inlineBoxWrapper; - m_inlineBoxWrapper = nullptr; - } else - m_inlineBoxWrapper->dirtyLineBoxes(); - } + if (!m_inlineBoxWrapper) + return; + + if (fullLayout) { + delete m_inlineBoxWrapper; + m_inlineBoxWrapper = nullptr; + } else + m_inlineBoxWrapper->dirtyLineBoxes(); } void RenderBox::positionLineBox(InlineElementBox& box) @@ -2163,12 +2160,13 @@ void RenderBox::positionLineBox(InlineElementBox& box) void RenderBox::deleteLineBoxWrapper() { - if (m_inlineBoxWrapper) { - if (!documentBeingDestroyed()) - m_inlineBoxWrapper->removeFromParent(); - delete m_inlineBoxWrapper; - m_inlineBoxWrapper = nullptr; - } + if (!m_inlineBoxWrapper) + return; + + if (!documentBeingDestroyed()) + m_inlineBoxWrapper->removeFromParent(); + delete m_inlineBoxWrapper; + m_inlineBoxWrapper = nullptr; } LayoutRect RenderBox::clippedOverflowRectForRepaint(const RenderLayerModelObject* repaintContainer) const |