commit 553df1231272 Author: Matt Woodrow Date: Tue Sep 26 15:57:56 2017 +1300 Bug 1397671 - Don't treat SVG transformed frames as being transformed for the purposes of computing Combines3DTransformWithAncestors. r=dbaron, a=sledru --HG-- extra : source : 70b150570407df427bed31965fe29cf8736beab6 --- layout/generic/nsFrame.cpp | 11 +++++++++-- layout/generic/nsIFrame.h | 6 ++++++ layout/reftests/transform-3d/preserve3d-8-ref.html | 11 +++++++++++ layout/reftests/transform-3d/preserve3d-8.html | 17 +++++++++++++++++ 4 files changed, 43 insertions(+), 2 deletions(-) diff --git layout/generic/nsFrame.cpp layout/generic/nsFrame.cpp index 6e6f2bfa5379..02d1dafec21e 100644 --- layout/generic/nsFrame.cpp +++ layout/generic/nsFrame.cpp @@ -1326,11 +1326,18 @@ nsIFrame::GetMarginRectRelativeToSelf() const bool nsIFrame::IsTransformed(const nsStyleDisplay* aStyleDisplay, EffectSet* aEffectSet) const +{ + return IsCSSTransformed(aStyleDisplay, aEffectSet) || + IsSVGTransformed(); +} + +bool +nsIFrame::IsCSSTransformed(const nsStyleDisplay* aStyleDisplay, + EffectSet* aEffectSet) const { MOZ_ASSERT(aStyleDisplay == StyleDisplay()); return ((mState & NS_FRAME_MAY_BE_TRANSFORMED) && (aStyleDisplay->HasTransform(this) || - IsSVGTransformed() || HasAnimationOfTransform(aEffectSet))); } @@ -1402,7 +1409,7 @@ nsIFrame::Combines3DTransformWithAncestors(const nsStyleDisplay* aStyleDisplay, if (!parent || !parent->Extend3DContext()) { return false; } - return IsTransformed(aStyleDisplay,aEffectSet) || + return IsCSSTransformed(aStyleDisplay, aEffectSet) || BackfaceIsHidden(aStyleDisplay); } diff --git layout/generic/nsIFrame.h layout/generic/nsIFrame.h index e8fb4c71a16f..b3ca08370d34 100644 --- layout/generic/nsIFrame.h +++ layout/generic/nsIFrame.h @@ -1724,6 +1724,12 @@ public: return IsTransformed(StyleDisplay(), aEffectSet); } + /** + * Same as IsTransformed, except that it doesn't take SVG transforms + * into account. + */ + bool IsCSSTransformed(const nsStyleDisplay* aStyleDisplay, mozilla::EffectSet* aEffectSet = nullptr) const; + /** * True if this frame has any animation of transform in effect. * diff --git layout/reftests/transform-3d/preserve3d-8-ref.html layout/reftests/transform-3d/preserve3d-8-ref.html new file mode 100644 index 000000000000..afddf05d4d81 --- /dev/null +++ layout/reftests/transform-3d/preserve3d-8-ref.html @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git layout/reftests/transform-3d/preserve3d-8.html layout/reftests/transform-3d/preserve3d-8.html new file mode 100644 index 000000000000..76e9c10c33bc --- /dev/null +++ layout/reftests/transform-3d/preserve3d-8.html @@ -0,0 +1,17 @@ + + + + +
+
+
+ + + + + +
+
+
+ +