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

Unified Diff: third_party/WebKit/Source/core/layout/LayoutObject.cpp

Issue 1826853007: LayoutBox::mapContentsRectToVisibleRectInBorderBoxSpace() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@pi
Patch Set: Enable comparison, DO NOT CQ Created 4 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
Index: third_party/WebKit/Source/core/layout/LayoutObject.cpp
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
index c9bf7393540467dee08ab8c15b8e043ae016d421..fcadb1717ff1d5c9fc061e7d3fa5de1fe353cad8 100644
--- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
@@ -881,7 +881,7 @@ inline void LayoutObject::invalidateContainerPreferredLogicalWidths()
}
}
-LayoutObject* LayoutObject::containerForAbsolutePosition(const LayoutBoxModelObject* paintInvalidationContainer, bool* paintInvalidationContainerSkipped) const
+LayoutObject* LayoutObject::containerForAbsolutePosition(const LayoutBoxModelObject* ancestor, bool* ancestorSkipped) const
{
// We technically just want our containing block, but
// we may not have one if we're part of an uninstalled
@@ -890,25 +890,25 @@ LayoutObject* LayoutObject::containerForAbsolutePosition(const LayoutBoxModelObj
if (object->canContainAbsolutePositionObjects())
return object;
- if (paintInvalidationContainerSkipped && object == paintInvalidationContainer)
- *paintInvalidationContainerSkipped = true;
+ if (ancestorSkipped && object == ancestor)
+ *ancestorSkipped = true;
}
return nullptr;
}
-LayoutBlock* LayoutObject::containerForFixedPosition(const LayoutBoxModelObject* paintInvalidationContainer, bool* paintInvalidationContainerSkipped) const
+LayoutBlock* LayoutObject::containerForFixedPosition(const LayoutBoxModelObject* ancestor, bool* ancestorSkipped) const
{
- ASSERT(!paintInvalidationContainerSkipped || !*paintInvalidationContainerSkipped);
+ ASSERT(!ancestorSkipped || !*ancestorSkipped);
ASSERT(!isText());
- LayoutObject* ancestor = parent();
- for (; ancestor && !ancestor->canContainFixedPositionObjects(); ancestor = ancestor->parent()) {
- if (paintInvalidationContainerSkipped && ancestor == paintInvalidationContainer)
- *paintInvalidationContainerSkipped = true;
+ LayoutObject* object = parent();
+ for (; object && !object->canContainFixedPositionObjects(); object = object->parent()) {
+ if (ancestorSkipped && object == ancestor)
+ *ancestorSkipped = true;
}
- ASSERT(!ancestor || !ancestor->isAnonymousBlock());
- return toLayoutBlock(ancestor);
+ ASSERT(!object || !object->isAnonymousBlock());
+ return toLayoutBlock(object);
}
LayoutBlock* LayoutObject::containingBlockForAbsolutePosition() const
@@ -1641,17 +1641,19 @@ LayoutRect LayoutObject::localOverflowRectForPaintInvalidation() const
bool LayoutObject::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject* ancestor, LayoutRect& rect, VisibleRectFlags visibleRectFlags) const
{
// For any layout object that doesn't override this method (the main example is LayoutText),
- // the rect is assumed to be in the coordinate space of the object's parent.
+ // the rect is assumed to be in the contents coordinate space of the object's parent.
if (ancestor == this)
return true;
if (LayoutObject* parent = this->parent()) {
- if (parent->hasOverflowClip()) {
+ if (parent->isBox()) {
LayoutBox* parentBox = toLayoutBox(parent);
- parentBox->mapScrollingContentsRectToBoxSpace(rect);
- if (parent != ancestor && !parentBox->applyOverflowClip(rect, visibleRectFlags))
+ if (!parentBox->mapContentsRectToVisibleRectInBorderBoxSpace(rect, visibleRectFlags))
return false;
+
+ if (parentBox == ancestor || parentBox->isWritingModeRoot())
+ parentBox->flipForWritingMode(rect);
}
return parent->mapToVisibleRectInAncestorSpace(ancestor, rect, visibleRectFlags);
@@ -2588,10 +2590,10 @@ RespectImageOrientationEnum LayoutObject::shouldRespectImageOrientation(const La
return DoNotRespectImageOrientation;
}
-LayoutObject* LayoutObject::container(const LayoutBoxModelObject* paintInvalidationContainer, bool* paintInvalidationContainerSkipped) const
+LayoutObject* LayoutObject::container(const LayoutBoxModelObject* ancestor, bool* ancestorSkipped) const
{
- if (paintInvalidationContainerSkipped)
- *paintInvalidationContainerSkipped = false;
+ if (ancestorSkipped)
+ *ancestorSkipped = false;
LayoutObject* o = parent();
@@ -2600,19 +2602,19 @@ LayoutObject* LayoutObject::container(const LayoutBoxModelObject* paintInvalidat
EPosition pos = m_style->position();
if (pos == FixedPosition)
- return containerForFixedPosition(paintInvalidationContainer, paintInvalidationContainerSkipped);
+ return containerForFixedPosition(ancestor, ancestorSkipped);
if (pos == AbsolutePosition)
- return containerForAbsolutePosition(paintInvalidationContainer, paintInvalidationContainerSkipped);
+ return containerForAbsolutePosition(ancestor, ancestorSkipped);
if (isColumnSpanAll()) {
LayoutObject* multicolContainer = spannerPlaceholder()->container();
- if (paintInvalidationContainerSkipped && paintInvalidationContainer) {
+ if (ancestorSkipped && ancestor) {
// We jumped directly from the spanner to the multicol container. Need to check if
// we skipped |paintInvalidationContainer| on the way.
for (LayoutObject* walker = parent(); walker && walker != multicolContainer; walker = walker->parent()) {
- if (walker == paintInvalidationContainer) {
- *paintInvalidationContainerSkipped = true;
+ if (walker == ancestor) {
+ *ancestorSkipped = true;
break;
}
}

Powered by Google App Engine
This is Rietveld 408576698