Changeset 177200 in webkit
- Timestamp:
- Dec 11, 2014, 5:59:37 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 10 added
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/LayoutTests/ChangeLog ¶
r177194 r177200 1 2014-12-11 Simon Fraser <simon.fraser@apple.com> 2 3 Transform-style should not kill position:fixed 4 https://bugs.webkit.org/show_bug.cgi?id=138122 5 6 Reviewed by Dean Jackson. 7 8 New tests and updated results: 9 10 * platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt: Progression, caused 11 by RenderLayerBacking::updateCompositedBounds() now allowing shouldClipCompositedBounds on 12 preserve-3d layers, since they are no longer considered to have a transform. 13 * platform/mac/compositing/visible-rect/3d-transform-style-expected.txt: Ditto. 14 * transforms/2d/perspective-not-fixed-container-expected.html: Added. 15 * transforms/2d/perspective-not-fixed-container.html: Added. Tests that 16 perspective does not act as containing block for fixed position (not a behavior change). 17 * transforms/2d/preserve3d-not-fixed-container-expected.html: Added. 18 * transforms/2d/preserve3d-not-fixed-container.html: Added. Tests that 19 preserve3d does not act as containing block for fixed position. This is a behavior change. 20 * transforms/perspective-is-containing-block-for-absolute-expected.html: Added. 21 * transforms/perspective-is-containing-block-for-absolute.html: Added. Tests that 22 perspective is a as containing block for absolute/relative position. This is not a behavior change. 23 * transforms/preserve3d-is-containing-block-for-absolute-expected.html: Added. 24 * transforms/preserve3d-is-containing-block-for-absolute.html: Added. Tests that 25 preserve3d is a as containing block for absolute/relative position. This is not a behavior change, 26 but seems like incorrect behavior for now. 27 * transforms/transform-is-containing-block-for-absolute-expected.html: Added. 28 * transforms/transform-is-containing-block-for-absolute.html: Added. Tests that 29 transform is a as containing block for absolute/relative position. This is not a behavior change. 30 1 31 2014-12-11 Roger Fong <roger_fong@apple.com> 2 32 -
TabularUnified trunk/LayoutTests/platform/ios-simulator-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt ¶
r177052 r177200 28 28 (children 1 29 29 (GraphicsLayer 30 (bounds 500.00 0.00)31 30 (preserves3D 1) 32 31 (visible rect 0.00, 0.00 0.00 x 0.00) -
TabularUnified trunk/LayoutTests/platform/ios-simulator/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt ¶
r176113 r177200 28 28 (children 1 29 29 (GraphicsLayer 30 (bounds 500.00 0.00)31 30 (preserves3D 1) 32 31 (visible rect 0.00, 0.00 0.00 x 0.00) -
TabularUnified trunk/LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt ¶
r169278 r177200 28 28 (children 1 29 29 (GraphicsLayer 30 (bounds 500.00 0.00)31 30 (preserves3D 1) 32 31 (visible rect 0.00, 0.00 0.00 x 0.00) -
TabularUnified trunk/LayoutTests/platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt ¶
r169229 r177200 25 25 (children 1 26 26 (GraphicsLayer 27 (bounds 500.00 0.00)28 27 (preserves3D 1) 29 28 (visible rect 0.00, 0.00 0.00 x 0.00) -
TabularUnified trunk/LayoutTests/platform/mac/compositing/visible-rect/3d-transform-style-expected.txt ¶
r168244 r177200 25 25 (children 1 26 26 (GraphicsLayer 27 (bounds 200.00 0.00)28 27 (preserves3D 1) 29 28 (visible rect 0.00, 0.00 0.00 x 0.00) … … 57 56 (children 1 58 57 (GraphicsLayer 59 (bounds 200.00 0.00)60 58 (preserves3D 1) 61 59 (visible rect 0.00, 0.00 0.00 x 0.00) -
TabularUnified trunk/LayoutTests/platform/win/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt ¶
r149090 r177200 20 20 (children 1 21 21 (GraphicsLayer 22 (bounds 500.00 0.00)23 22 (preserves3D 1) 24 23 (visible rect 0.00, 0.00 0.00 x 0.00) -
TabularUnified trunk/Source/WebCore/ChangeLog ¶
r177198 r177200 1 2014-12-11 Simon Fraser <simon.fraser@apple.com> 2 3 Transform-style should not kill position:fixed 4 https://bugs.webkit.org/show_bug.cgi?id=138122 5 6 Reviewed by Dean Jackson. 7 8 Various bits of rendering code checked RenderObject::hasTransform() for various 9 reasons. Confusingly, this meant "has transform, or preserve-3d, or perspective". 10 11 This patch teases those behaviors apart to produce the following behavior: 12 13 1. "transform" acts as containing block for fixed position (no behavior change). 14 2. "transform" acts as containing block for absolute/relative position (no behavior change). 15 3. "perspective" does not act as containing block for fixed position (no behavior change). 16 4. "perspective" acts as containing block for absolute/relative position (no behavior change). 17 5. "preserve-3d" does not act as containing block for fixed position (behavior change). 18 6. "preserve-3d" acts as containing block for absolute/relative position. This is not a 19 behavior change, but seems like incorrect behavior (https://www.w3.org/Bugs/Public/show_bug.cgi?id=27566). 20 However, we may be forced to keep it for compatibility. 21 22 The gist of the change is to rename RenderObject::hasTransform() to RenderObject::hasTransformRelatedProperty(), 23 and add hasTransform() with the more restrictive meaning. All call sites of hasTransform() were examined 24 and fixed to produce the desired behaviors. 25 26 Tests: transforms/2d/perspective-not-fixed-container.html 27 transforms/2d/preserve3d-not-fixed-container.html 28 transforms/perspective-is-containing-block-for-absolute.html 29 transforms/preserve3d-is-containing-block-for-absolute.html 30 transforms/transform-is-containing-block-for-absolute.html 31 32 * css/CSSComputedStyleDeclaration.cpp: 33 (WebCore::computedTransform): Now we can just test hasTransform(). 34 * rendering/LogicalSelectionOffsetCaches.h: 35 (WebCore::isContainingBlockCandidateForAbsolutelyPositionedObject): For now, this 36 can just use hasTransformRelatedProperty(), but if we change [6] above this will have 37 to change (as documented in the comment). Also FIXME comments about sharing code. 38 * rendering/RenderBox.cpp: 39 (WebCore::RenderBox::updateFromStyle): 40 (WebCore::RenderBox::mapLocalToContainer): Can just use hasTransform() now. 41 (WebCore::RenderBox::pushMappingToContainer): Ditto. 42 (WebCore::RenderBox::mapAbsoluteToLocalPoint): Ditto. 43 (WebCore::RenderBox::layoutOverflowRectForPropagation): Ditto. 44 * rendering/RenderBox.h: All transform-related properties create RenderLayers. 45 * rendering/RenderBoxModelObject.h: Ditto. 46 * rendering/RenderElement.cpp: 47 (WebCore::RenderElement::styleWillChange): 48 * rendering/RenderGeometryMap.cpp: 49 (WebCore::canMapBetweenRenderersViaLayers): Rename to clarify. We need to not map via 50 layers if we have a perspective (since we need to generate a perspective matrix). It's 51 OK with preserve-3d though. 52 (WebCore::RenderGeometryMap::pushMappingsToAncestor): 53 (WebCore::canMapBetweenRenderers): Deleted. 54 * rendering/RenderInline.cpp: 55 (WebCore::RenderInline::updateFromStyle): 56 * rendering/RenderLayer.cpp: 57 (WebCore::RenderLayer::updateTransform): Can just check hasTransform(). 58 (WebCore::RenderLayer::updateLayerPosition): Avoid calling parent() and enclosingPositionedAncestor() twice. 59 (WebCore::RenderLayer::perspectiveTransform): Do the fast bit check hasTransformRelatedProperty() first. 60 (WebCore::RenderLayer::perspectiveOrigin): Ditto. 61 (WebCore::isContainerForPositioned): This code has to now have different behavior for absolute and fixed 62 position. Changed it to call existing functions, rather than having a 3rd place that has to know about 63 containing block rules. 64 (WebCore::RenderLayer::enclosingAncestorForPosition): Call isContainerForPositioned() now. 65 (WebCore::accumulateOffsetTowardsAncestor): Call enclosingAncestorForPosition(). 66 (WebCore::RenderLayer::createLocalTransformState): 67 (WebCore::RenderLayer::calculateClipRects): 68 (WebCore::isPositionedContainer): Deleted. 69 (WebCore::isFixedPositionedContainer): Deleted. 70 (WebCore::RenderLayer::enclosingPositionedAncestor): Deleted. 71 * rendering/RenderLayer.h: 72 * rendering/RenderLayerBacking.cpp: 73 (WebCore::RenderLayerBacking::updateGeometry): 74 * rendering/RenderLayerModelObject.cpp: 75 (WebCore::RenderLayerModelObject::styleDidChange): 76 * rendering/RenderObject.cpp: 77 (WebCore::RenderObject::shouldUseTransformFromContainer): Can just check hasTransform() now. 78 (WebCore::RenderObject::container): 79 * rendering/RenderObject.h: 80 (WebCore::RenderObject::hasTransformRelatedProperty): 81 (WebCore::RenderObject::hasTransform): 82 (WebCore::RenderObject::setHasTransformRelatedProperty): 83 (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields): 84 (WebCore::RenderObject::setHasTransform): Deleted. 85 * rendering/RenderTableRow.h: 86 * rendering/RenderView.cpp: 87 (WebCore::RenderView::mapLocalToContainer): nullptr goodness. 88 (WebCore::RenderView::pushMappingToContainer): Ditto. 89 (WebCore::RenderView::mapAbsoluteToLocalPoint): Ditto. 90 1 91 2014-12-11 Rich Tibbett <rich.tibbett@gmail.com> 2 92 -
TabularUnified trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp ¶
r177169 r177200 848 848 static PassRef<CSSValue> computedTransform(RenderObject* renderer, const RenderStyle* style) 849 849 { 850 if (!renderer || !renderer->hasTransform() || !style->hasTransform())850 if (!renderer || !renderer->hasTransform()) 851 851 return cssValuePool().createIdentifierValue(CSSValueNone); 852 852 -
TabularUnified trunk/Source/WebCore/rendering/LogicalSelectionOffsetCaches.h ¶
r174480 r177200 26 26 namespace WebCore { 27 27 28 // FIXME: share code with RenderObject::container(). 28 29 static inline bool isContainingBlockCandidateForAbsolutelyPositionedObject(RenderElement& object) 29 30 { 31 // FIXME: hasTransformRelatedProperty() includes preserves3D() check, but this may need to change: https://www.w3.org/Bugs/Public/show_bug.cgi?id=27566 30 32 return object.style().position() != StaticPosition 31 || (object. hasTransform() && object.isRenderBlock())33 || (object.isRenderBlock() && object.hasTransformRelatedProperty()) 32 34 || object.isSVGForeignObject() 33 35 || object.isRenderView(); … … 39 41 } 40 42 43 // FIXME: share code with RenderObject::container(). 41 44 static inline RenderBlock* containingBlockForFixedPosition(RenderElement* parent) 42 45 { -
TabularUnified trunk/Source/WebCore/rendering/RenderBox.cpp ¶
r177169 r177200 485 485 } 486 486 487 setHasTransform (styleToUse.hasTransformRelatedProperty());487 setHasTransformRelatedProperty(styleToUse.hasTransformRelatedProperty()); 488 488 setHasReflection(styleToUse.boxReflect()); 489 489 } … … 1919 1919 1920 1920 bool isFixedPos = style().position() == FixedPosition; 1921 bool hasTransform = hasLayer() && layer()->transform();1922 1921 // If this box has a transform, it acts as a fixed position container for fixed descendants, 1923 1922 // and may itself also be fixed position. So propagate 'fixed' up only if this box is fixed position. 1924 if (hasTransform && !isFixedPos)1923 if (hasTransform() && !isFixedPos) 1925 1924 mode &= ~IsFixed; 1926 1925 else if (isFixedPos) … … 1968 1967 1969 1968 bool isFixedPos = style().position() == FixedPosition; 1970 bool hasTransform = hasLayer() && layer()->transform();1971 1972 1969 LayoutSize adjustmentForSkippedAncestor; 1973 1970 if (ancestorSkipped) { … … 1986 1983 t.translateRight(adjustmentForSkippedAncestor.width(), adjustmentForSkippedAncestor.height()); 1987 1984 1988 geometryMap.push(this, t, preserve3D, offsetDependsOnPoint, isFixedPos, hasTransform );1985 geometryMap.push(this, t, preserve3D, offsetDependsOnPoint, isFixedPos, hasTransform()); 1989 1986 } else { 1990 1987 containerOffset += adjustmentForSkippedAncestor; 1991 geometryMap.push(this, containerOffset, preserve3D, offsetDependsOnPoint, isFixedPos, hasTransform );1988 geometryMap.push(this, containerOffset, preserve3D, offsetDependsOnPoint, isFixedPos, hasTransform()); 1992 1989 } 1993 1990 … … 1998 1995 { 1999 1996 bool isFixedPos = style().position() == FixedPosition; 2000 bool hasTransform = hasLayer() && layer()->transform(); 2001 if (hasTransform && !isFixedPos) { 1997 if (hasTransform() && !isFixedPos) { 2002 1998 // If this box has a transform, it acts as a fixed position container for fixed descendants, 2003 1999 // and may itself also be fixed position. So propagate 'fixed' up only if this box is fixed position. … … 4567 4563 rect.unite(layoutOverflowRect()); 4568 4564 4569 bool hasTransform = hasLayer() && layer()->transform();4565 bool hasTransform = this->hasTransform(); 4570 4566 #if PLATFORM(IOS) 4571 4567 if (isInFlowPositioned() || (hasTransform && document().settings()->shouldTransformsAffectOverflow())) { -
TabularUnified trunk/Source/WebCore/rendering/RenderBox.h ¶
r177169 r177200 54 54 { 55 55 return isRoot() || isPositioned() || createsGroup() || hasClipPath() || hasOverflowClip() 56 || hasTransform () || hasHiddenBackface() || hasReflection() || style().specifiesColumns()56 || hasTransformRelatedProperty() || hasHiddenBackface() || hasReflection() || style().specifiesColumns() 57 57 || !style().hasAutoZIndex(); 58 58 } -
TabularUnified trunk/Source/WebCore/rendering/RenderBoxModelObject.h ¶
r176798 r177200 143 143 virtual void updateFromStyle() override; 144 144 145 virtual bool requiresLayer() const override { return isRoot() || isPositioned() || createsGroup() || hasClipPath() || hasTransform () || hasHiddenBackface() || hasReflection(); }145 virtual bool requiresLayer() const override { return isRoot() || isPositioned() || createsGroup() || hasClipPath() || hasTransformRelatedProperty() || hasHiddenBackface() || hasReflection(); } 146 146 147 147 // This will work on inlines to return the bounding box of all of the lines' border boxes. -
TabularUnified trunk/Source/WebCore/rendering/RenderElement.cpp ¶
r177193 r177200 859 859 setHasBoxDecorations(false); 860 860 setHasOverflowClip(false); 861 setHasTransform (false);861 setHasTransformRelatedProperty(false); 862 862 setHasReflection(false); 863 863 } else { -
TabularUnified trunk/Source/WebCore/rendering/RenderGeometryMap.cpp ¶
r173945 r177200 156 156 } 157 157 158 static bool canMapBetweenRenderers (const RenderLayerModelObject& renderer, const RenderLayerModelObject& ancestor)158 static bool canMapBetweenRenderersViaLayers(const RenderLayerModelObject& renderer, const RenderLayerModelObject& ancestor) 159 159 { 160 160 for (const RenderElement* current = &renderer; ; current = current->parent()) { … … 163 163 return false; 164 164 165 if (current->hasTransform() || current->isRenderFlowThread()) 165 if (current->hasTransformRelatedProperty() && (current->style().hasTransform() || current->style().hasPerspective())) 166 return false; 167 168 if (current->isRenderFlowThread()) 166 169 return false; 167 170 … … 182 185 // We have to visit all the renderers to detect flipped blocks. This might defeat the gains 183 186 // from mapping via layers. 184 bool canConvertInLayerTree = ancestorLayer ? canMapBetweenRenderers (layer->renderer(), ancestorLayer->renderer()) : false;187 bool canConvertInLayerTree = ancestorLayer ? canMapBetweenRenderersViaLayers(layer->renderer(), ancestorLayer->renderer()) : false; 185 188 186 189 if (canConvertInLayerTree) { -
TabularUnified trunk/Source/WebCore/rendering/RenderInline.cpp ¶
r176974 r177200 125 125 126 126 // FIXME: Support transforms and reflections on inline flows someday. 127 setHasTransform (false);127 setHasTransformRelatedProperty(false); 128 128 setHasReflection(false); 129 129 } -
TabularUnified trunk/Source/WebCore/rendering/RenderLayer.cpp ¶
r177169 r177200 78 78 #include "HitTestResult.h" 79 79 #include "InspectorInstrumentation.h" 80 #include "LogicalSelectionOffsetCaches.h" 80 81 #include "OverflowEvent.h" 81 82 #include "OverlapTestRequestClient.h" … … 831 832 void RenderLayer::updateTransform() 832 833 { 833 // hasTransform() on the renderer is also true when there is transform-style: preserve-3d or perspective set, 834 // so check style too. 835 bool hasTransform = renderer().hasTransform() && renderer().style().hasTransform(); 834 bool hasTransform = renderer().hasTransform(); 836 835 bool had3DTransform = has3DTransform(); 837 836 … … 1211 1210 } 1212 1211 1213 if (!renderer().isOutOfFlowPositioned() && renderer().parent()) { 1212 RenderElement* ancestor; 1213 if (!renderer().isOutOfFlowPositioned() && (ancestor = renderer().parent())) { 1214 1214 // We must adjust our position by walking up the render tree looking for the 1215 1215 // nearest enclosing object with a layer. 1216 RenderElement* ancestor = renderer().parent();1217 1216 while (ancestor && !ancestor->hasLayer()) { 1218 1217 if (is<RenderBox>(*ancestor) && !is<RenderTableRow>(*ancestor)) { … … 1230 1229 1231 1230 // Subtract our parent's scroll offset. 1232 if (renderer().isOutOfFlowPositioned() && enclosingPositionedAncestor()) { 1233 RenderLayer* positionedParent = enclosingPositionedAncestor(); 1234 1231 RenderLayer* positionedParent; 1232 if (renderer().isOutOfFlowPositioned() && (positionedParent = enclosingAncestorForPosition(renderer().style().position()))) { 1235 1233 // For positioned layers, we subtract out the enclosing positioned layer's scroll offset. 1236 1234 if (positionedParent->renderer().hasOverflowClip()) { … … 1270 1268 TransformationMatrix RenderLayer::perspectiveTransform() const 1271 1269 { 1272 if (!renderer().hasTransform ())1270 if (!renderer().hasTransformRelatedProperty()) 1273 1271 return TransformationMatrix(); 1274 1272 … … 1300 1298 FloatPoint RenderLayer::perspectiveOrigin() const 1301 1299 { 1302 if (!renderer().hasTransform ())1300 if (!renderer().hasTransformRelatedProperty()) 1303 1301 return FloatPoint(); 1304 1302 … … 1320 1318 } 1321 1319 1322 static inline bool isPositionedContainer(RenderLayer* layer) 1323 { 1324 return layer->isRootLayer() || layer->renderer().isPositioned() || layer->hasTransform(); 1325 } 1326 1327 static inline bool isFixedPositionedContainer(RenderLayer* layer) 1328 { 1329 return layer->isRootLayer() || layer->hasTransform(); 1330 } 1331 1332 RenderLayer* RenderLayer::enclosingPositionedAncestor() const 1320 static inline bool isContainerForPositioned(RenderLayer& layer, EPosition position) 1321 { 1322 switch (position) { 1323 case FixedPosition: 1324 return layer.renderer().canContainFixedPositionObjects(); 1325 1326 case AbsolutePosition: 1327 return isContainingBlockCandidateForAbsolutelyPositionedObject(layer.renderer()); 1328 1329 default: 1330 ASSERT_NOT_REACHED(); 1331 return false; 1332 } 1333 } 1334 1335 RenderLayer* RenderLayer::enclosingAncestorForPosition(EPosition position) const 1333 1336 { 1334 1337 RenderLayer* curr = parent(); 1335 while (curr && !is PositionedContainer(curr))1338 while (curr && !isContainerForPositioned(*curr, position)) 1336 1339 curr = curr->parent(); 1337 1340 … … 1912 1915 foundAncestor = true; 1913 1916 1914 if (is FixedPositionedContainer(currLayer)) {1917 if (isContainerForPositioned(*currLayer, FixedPosition)) { 1915 1918 fixedPositionContainerLayer = currLayer; 1916 1919 ASSERT_UNUSED(foundAncestor, foundAncestor); … … 1949 1952 RenderLayer* parentLayer; 1950 1953 if (position == AbsolutePosition || position == FixedPosition) { 1951 // Do what enclosing PositionedAncestor() does, but check for ancestorLayer along the way.1954 // Do what enclosingAncestorForPosition() does, but check for ancestorLayer along the way. 1952 1955 parentLayer = layer->parent(); 1953 1956 bool foundAncestorFirst = false; … … 1956 1959 // This implies that, for out-of-flow positioned elements inside a RenderFlowThread, 1957 1960 // we are bailing out before reaching root layer. 1958 if (is PositionedContainer(parentLayer))1961 if (isContainerForPositioned(*parentLayer, position)) 1959 1962 break; 1960 1963 … … 1974 1977 if (foundAncestorFirst) { 1975 1978 // Found ancestorLayer before the abs. positioned container, so compute offset of both relative 1976 // to enclosing PositionedAncestorand subtract.1977 RenderLayer* positionedAncestor = parentLayer->enclosing PositionedAncestor();1979 // to enclosingAncestorForPosition and subtract. 1980 RenderLayer* positionedAncestor = parentLayer->enclosingAncestorForPosition(position); 1978 1981 LayoutSize thisCoords = layer->offsetFromAncestor(positionedAncestor); 1979 1982 LayoutSize ancestorCoords = ancestorLayer->offsetFromAncestor(positionedAncestor); … … 4719 4722 offset += translationOffset; 4720 4723 4721 RenderObject* containerRenderer = containerLayer ? &containerLayer->renderer() : 0;4724 RenderObject* containerRenderer = containerLayer ? &containerLayer->renderer() : nullptr; 4722 4725 if (renderer().shouldUseTransformFromContainer(containerRenderer)) { 4723 4726 TransformationMatrix containerTransform; … … 6216 6219 || renderer().isInFlowRenderFlowThread()) 6217 6220 && !renderer().isPositioned() 6218 && !renderer().hasTransform ()6221 && !renderer().hasTransformRelatedProperty() 6219 6222 && !renderer().hasClipPath() 6220 6223 && !renderer().hasFilter() -
TabularUnified trunk/Source/WebCore/rendering/RenderLayer.h ¶
r177169 r177200 620 620 // Gets the nearest enclosing positioned ancestor layer (also includes 621 621 // the <html> layer and the root layer). 622 RenderLayer* enclosing PositionedAncestor() const;622 RenderLayer* enclosingAncestorForPosition(EPosition) const; 623 623 624 624 // Returns the nearest enclosing layer that is scrollable. -
TabularUnified trunk/Source/WebCore/rendering/RenderLayerBacking.cpp ¶
r175818 r177200 823 823 } 824 824 825 if (m_owningLayer. hasTransform()) {825 if (m_owningLayer.renderer().hasTransformRelatedProperty()) { 826 826 // Update properties that depend on layer dimensions. 827 827 FloatPoint3D transformOrigin = computeTransformOriginForPainting(downcast<RenderBox>(renderer()).borderBoxRect()); -
TabularUnified trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp ¶
r176459 r177200 2262 2262 break; 2263 2263 case RenderLayer::IndirectCompositingReason::GraphicalEffect: 2264 if (renderer-> layer()->transform())2264 if (renderer->hasTransform()) 2265 2265 reasons |= CompositingReasonTransformWithCompositedDescendants; 2266 2266 -
TabularUnified trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp ¶
r175716 r177200 148 148 layer()->parent()->dirtyAncestorChainHasBlendingDescendants(); 149 149 #endif 150 setHasTransform (false); // Either a transform wasn't specified or the object doesn't support transforms, so just null out the bit.150 setHasTransformRelatedProperty(false); // All transform-related propeties force layers, so we know we don't have one or the object doesn't support them. 151 151 setHasReflection(false); 152 152 layer()->removeOnlyThisLayer(); // calls destroyLayer() which clears m_layer -
TabularUnified trunk/Source/WebCore/rendering/RenderObject.cpp ¶
r176816 r177200 1649 1649 { 1650 1650 #if ENABLE(3D_RENDERING) 1651 // hasTransform() indicates whether the object has transform, transform-style or perspective. We just care about transform, 1652 // so check the layer's transform directly. 1653 return (hasLayer() && downcast<RenderLayerModelObject>(*this).layer()->transform()) || (containerObject && containerObject->style().hasPerspective()); 1651 return hasTransform() || (containerObject && containerObject->style().hasPerspective()); 1654 1652 #else 1655 1653 UNUSED_PARAM(containerObject); … … 1812 1810 // FIXME: The definition of view() has changed to not crawl up the render tree. It might 1813 1811 // be safe now to use it. 1812 // FIXME: share code with containingBlockForFixedPosition(). 1814 1813 while (o && o->parent() && !(o->hasTransform() && o->isRenderBlock())) { 1815 1814 // foreignObject is the containing block for its contents. … … 1831 1830 // we may not have one if we're part of an uninstalled subtree. We'll 1832 1831 // climb as high as we can though. 1833 while (o && o->style().position() == StaticPosition && !o->isRenderView() && !(o->hasTransform() && o->isRenderBlock())) { 1832 // FIXME: share code with isContainingBlockCandidateForAbsolutelyPositionedObject(). 1833 // FIXME: hasTransformRelatedProperty() includes preserves3D() check, but this may need to change: https://www.w3.org/Bugs/Public/show_bug.cgi?id=27566 1834 while (o && o->style().position() == StaticPosition && !o->isRenderView() && !(o->hasTransformRelatedProperty() && o->isRenderBlock())) { 1834 1835 if (o->isSVGForeignObject()) // foreignObject is the containing block for contents inside it 1835 1836 break; -
TabularUnified trunk/Source/WebCore/rendering/RenderObject.h ¶
r176816 r177200 551 551 bool hasOverflowClip() const { return m_bitfields.hasOverflowClip(); } 552 552 553 bool hasTransform() const { return m_bitfields.hasTransform(); } 553 bool hasTransformRelatedProperty() const { return m_bitfields.hasTransformRelatedProperty(); } // Transform, perspective or transform-style: preserve-3d. 554 bool hasTransform() const { return hasTransformRelatedProperty() && style().hasTransform(); } 554 555 555 556 inline bool preservesNewline() const; … … 617 618 void setHasOverflowClip(bool b = true) { m_bitfields.setHasOverflowClip(b); } 618 619 void setHasLayer(bool b = true) { m_bitfields.setHasLayer(b); } 619 void setHasTransform (bool b = true) { m_bitfields.setHasTransform(b); }620 void setHasTransformRelatedProperty(bool b = true) { m_bitfields.setHasTransformRelatedProperty(b); } 620 621 void setHasReflection(bool b = true) { m_bitfields.setHasReflection(b); } 621 622 … … 928 929 , m_hasLayer(false) 929 930 , m_hasOverflowClip(false) 930 , m_hasTransform (false)931 , m_hasTransformRelatedProperty(false) 931 932 , m_hasReflection(false) 932 933 , m_everHadLayout(false) … … 959 960 ADD_BOOLEAN_BITFIELD(hasLayer, HasLayer); 960 961 ADD_BOOLEAN_BITFIELD(hasOverflowClip, HasOverflowClip); // Set in the case of overflow:auto/scroll/hidden 961 ADD_BOOLEAN_BITFIELD(hasTransform , HasTransform);962 ADD_BOOLEAN_BITFIELD(hasTransformRelatedProperty, HasTransformRelatedProperty); 962 963 ADD_BOOLEAN_BITFIELD(hasReflection, HasReflection); 963 964 -
TabularUnified trunk/Source/WebCore/rendering/RenderRegion.cpp ¶
r174761 r177200 545 545 rect.unite(layoutOverflowRectForBox(box)); 546 546 547 bool hasTransform = box->has Layer() && box->layer()->transform();547 bool hasTransform = box->hasTransform(); 548 548 if (box->isInFlowPositioned() || hasTransform) { 549 549 if (hasTransform) -
TabularUnified trunk/Source/WebCore/rendering/RenderTableRow.h ¶
r174653 r177200 104 104 virtual LayoutRect clippedOverflowRectForRepaint(const RenderLayerModelObject* repaintContainer) const override; 105 105 106 virtual bool requiresLayer() const override { return hasOverflowClip() || hasTransform () || hasHiddenBackface() || hasClipPath() || createsGroup() || isStickyPositioned(); }106 virtual bool requiresLayer() const override { return hasOverflowClip() || hasTransformRelatedProperty() || hasHiddenBackface() || hasClipPath() || createsGroup() || isStickyPositioned(); } 107 107 108 108 virtual void paint(PaintInfo&, const LayoutPoint&) override; -
TabularUnified trunk/Source/WebCore/rendering/RenderView.cpp ¶
r176459 r177200 421 421 ASSERT_UNUSED(wasFixed, !wasFixed || *wasFixed == (mode & IsFixed)); 422 422 423 if (!repaintContainer && mode & UseTransforms && shouldUseTransformFromContainer( 0)) {423 if (!repaintContainer && mode & UseTransforms && shouldUseTransformFromContainer(nullptr)) { 424 424 TransformationMatrix t; 425 getTransformFromContainer( 0, LayoutSize(), t);425 getTransformFromContainer(nullptr, LayoutSize(), t); 426 426 transformState.applyTransform(t); 427 427 } … … 447 447 #endif 448 448 449 if (!ancestorToStopAt && shouldUseTransformFromContainer( 0)) {449 if (!ancestorToStopAt && shouldUseTransformFromContainer(nullptr)) { 450 450 TransformationMatrix t; 451 getTransformFromContainer( 0, LayoutSize(), t);451 getTransformFromContainer(nullptr, LayoutSize(), t); 452 452 geometryMap.pushView(this, scrollOffset, &t); 453 453 } else … … 466 466 #endif 467 467 468 if (mode & UseTransforms && shouldUseTransformFromContainer( 0)) {468 if (mode & UseTransforms && shouldUseTransformFromContainer(nullptr)) { 469 469 TransformationMatrix t; 470 getTransformFromContainer( 0, LayoutSize(), t);470 getTransformFromContainer(nullptr, LayoutSize(), t); 471 471 transformState.applyTransform(t); 472 472 }
Note:
See TracChangeset
for help on using the changeset viewer.