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

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..6e466961a429605ebfdf31c64d4a2f63f0366261 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,42 @@ 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 isFixedPos = !isRenderInline() && style()->position() == FixedPosition;
esprehn 2013/06/17 23:56:45 isRenderInline is virtual, and now you call it twi
eae 2013/06/18 00:06:59 Both isRenderInline() and style() are marked as co
+ bool hasTransform = !isRenderInline() && 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