summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/rendering/RenderBox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/rendering/RenderBox.cpp')
-rw-r--r--Source/WebCore/rendering/RenderBox.cpp46
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