From 43c8e50c54c2ae618b8f2c070bc97a881f96b71c Mon Sep 17 00:00:00 2001 From: Rik Cabanier Date: Mon, 28 Jul 2014 16:44:00 +0200 Subject: [PATCH] Bug 1042411 - ASSERTION: It is assumed the initial operator is OPERATOR_OVER, when it is restored later. r=roc --- layout/base/nsCSSRendering.cpp | 13 +++++++++ .../background-blending-moz-element-ref.html | 22 ++++++++++++++ .../background-blending-moz-element.html | 29 +++++++++++++++++++ layout/reftests/css-blending/reftest.list | 2 ++ 4 files changed, 66 insertions(+) create mode 100644 layout/reftests/css-blending/background-blending-moz-element-ref.html create mode 100644 layout/reftests/css-blending/background-blending-moz-element.html diff --git a/layout/base/nsCSSRendering.cpp b/layout/base/nsCSSRendering.cpp index c1795e32d47..4c2e5c10d21 100644 --- a/layout/base/nsCSSRendering.cpp +++ b/layout/base/nsCSSRendering.cpp @@ -4646,10 +4646,23 @@ nsImageRenderer::Draw(nsPresContext* aPresContext, return; } + gfxContext* ctx = aRenderingContext.ThebesContext(); + gfxContext::GraphicsOperator op = ctx->CurrentOperator(); + if (op != gfxContext::OPERATOR_OVER) { + ctx->PushGroup(gfxContentType::COLOR_ALPHA); + ctx->SetOperator(gfxContext::OPERATOR_OVER); + } + nsCOMPtr image(ImageOps::CreateFromDrawable(drawable)); nsLayoutUtils::DrawImage(&aRenderingContext, aPresContext, image, filter, aDest, aFill, aAnchor, aDirtyRect, ConvertImageRendererToDrawFlags(mFlags)); + + if (op != gfxContext::OPERATOR_OVER) { + ctx->PopGroupToSource(); + ctx->Paint(); + } + return; } case eStyleImageType_Null: diff --git a/layout/reftests/css-blending/background-blending-moz-element-ref.html b/layout/reftests/css-blending/background-blending-moz-element-ref.html new file mode 100644 index 00000000000..285d30194ef --- /dev/null +++ b/layout/reftests/css-blending/background-blending-moz-element-ref.html @@ -0,0 +1,22 @@ + + + + + + + +
+
+ + + diff --git a/layout/reftests/css-blending/background-blending-moz-element.html b/layout/reftests/css-blending/background-blending-moz-element.html new file mode 100644 index 00000000000..be0e93726e3 --- /dev/null +++ b/layout/reftests/css-blending/background-blending-moz-element.html @@ -0,0 +1,29 @@ + + + + + + + +
+
+ + + diff --git a/layout/reftests/css-blending/reftest.list b/layout/reftests/css-blending/reftest.list index f1629293589..f40835ceded 100644 --- a/layout/reftests/css-blending/reftest.list +++ b/layout/reftests/css-blending/reftest.list @@ -82,3 +82,5 @@ pref(layout.css.background-blend-mode.enabled,true) == background-blending-backg pref(layout.css.background-blend-mode.enabled,true) == background-blend-mode-body-image.html background-blend-mode-body-image-ref.html pref(layout.css.background-blend-mode.enabled,true) == background-blend-mode-body-transparent-image.html background-blend-mode-body-transparent-image-ref.html + +pref(layout.css.background-blend-mode.enabled,true) == background-blending-moz-element.html background-blending-moz-element-ref.html