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

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

Issue 17327003: Move pushMappingToContainer to RenderBoxModelObject (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 6 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/RenderBoxModelObject.h ('k') | Source/core/rendering/RenderInline.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderBoxModelObject.cpp
diff --git a/Source/core/rendering/RenderBoxModelObject.cpp b/Source/core/rendering/RenderBoxModelObject.cpp
index a8ec0f988585e482f412c54dae619a0e3637073d..7bc385f24adda9e9a3622c5a908cb569a665ee54 100644
--- a/Source/core/rendering/RenderBoxModelObject.cpp
+++ b/Source/core/rendering/RenderBoxModelObject.cpp
@@ -36,6 +36,7 @@
#include "core/platform/graphics/transforms/TransformState.h"
#include "core/rendering/ImageQualityController.h"
#include "core/rendering/RenderBlock.h"
+#include "core/rendering/RenderGeometryMap.h"
#include "core/rendering/RenderInline.h"
#include "core/rendering/RenderLayer.h"
#include "core/rendering/RenderLayerBacking.h"
@@ -2664,6 +2665,43 @@ void RenderBoxModelObject::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, Tra
transformState.move(containerOffset.width(), containerOffset.height(), preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);
}
+const RenderObject* RenderBoxModelObject::pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap& geometryMap) const
+{
+ ASSERT(ancestorToStopAt != this);
+
+ bool ancestorSkipped;
+ RenderObject* container = this->container(ancestorToStopAt, &ancestorSkipped);
+ if (!container)
+ return 0;
+
+ bool isInline = isRenderInline();
+ bool isFixedPos = !isInline && style()->position() == FixedPosition;
+ bool hasTransform = !isInline && hasLayer() && layer()->transform();
+
+ LayoutSize adjustmentForSkippedAncestor;
+ if (ancestorSkipped) {
+ // There can't be a transform between repaintContainer and o, because transforms create containers, so it should be safe
+ // to just subtract the delta between the ancestor and o.
+ adjustmentForSkippedAncestor = -ancestorToStopAt->offsetFromAncestorContainer(container);
+ }
+
+ bool offsetDependsOnPoint = false;
+ LayoutSize containerOffset = offsetFromContainer(container, LayoutPoint(), &offsetDependsOnPoint);
+
+ bool preserve3D = container->style()->preserves3D() || style()->preserves3D();
+ if (shouldUseTransformFromContainer(container)) {
+ TransformationMatrix t;
+ getTransformFromContainer(container, containerOffset, t);
+ t.translateRight(adjustmentForSkippedAncestor.width(), adjustmentForSkippedAncestor.height());
+ geometryMap.push(this, t, preserve3D, offsetDependsOnPoint, isFixedPos, hasTransform);
+ } else {
+ containerOffset += adjustmentForSkippedAncestor;
+ geometryMap.push(this, containerOffset, preserve3D, offsetDependsOnPoint, isFixedPos, hasTransform);
+ }
+
+ return ancestorSkipped ? ancestorToStopAt : container;
+}
+
void RenderBoxModelObject::moveChildTo(RenderBoxModelObject* toBoxModelObject, RenderObject* child, RenderObject* beforeChild, bool fullRemoveInsert)
{
// We assume that callers have cleared their positioned objects list for child moves (!fullRemoveInsert) so the
« no previous file with comments | « Source/core/rendering/RenderBoxModelObject.h ('k') | Source/core/rendering/RenderInline.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698