diff options
author | fmalita@google.com <fmalita@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-09-17 13:09:16 +0000 |
---|---|---|
committer | fmalita@google.com <fmalita@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-09-17 13:09:16 +0000 |
commit | ef45a646a730b779f419e8ea11df374adeec8206 (patch) | |
tree | 8c4b5a28b553d128d9157f3455701d0f97be5f46 /gm/lumamode.cpp | |
parent | 07f81a57ba5720fd65563077114bd9e5ba840151 (diff) |
[External patch] Source-over support for SkLumaXfermode.
This is a patch by Andrei Parvu <parvu@adobe.com> (Adobe CLA signer).
Original CL/review: https://codereview.chromium.org/24078006/
GM:lumamode will need rebaselining after landing this.
---
In order to use CSS luminance masking, we need to be able to create an
instance of SkLumaXfermode which can receive a kSrcOver mode, and applies
that mode after converting the source using the luminance-to-alpha
coefficients.
BUG=289420
R=reed@google.com
Review URL: https://codereview.chromium.org/23710053
git-svn-id: http://skia.googlecode.com/svn/trunk@11312 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gm/lumamode.cpp')
-rw-r--r-- | gm/lumamode.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gm/lumamode.cpp b/gm/lumamode.cpp index e6aed18bb4..dbf45411fb 100644 --- a/gm/lumamode.cpp +++ b/gm/lumamode.cpp @@ -76,6 +76,7 @@ public: LumaXfermodeGM() { fSrcInXfer.reset(SkLumaMaskXfermode::Create(SkXfermode::kSrcIn_Mode)); fDstInXfer.reset(SkLumaMaskXfermode::Create(SkXfermode::kDstIn_Mode)); + fSrcOverXfer.reset(SkLumaMaskXfermode::Create(SkXfermode::kSrcOver_Mode)); SkColor g1Colors[] = { kColor1, SkColorSetA(kColor1, 0x20) }; SkColor g2Colors[] = { kColor2, SkColorSetA(kColor2, 0x20) }; @@ -101,11 +102,11 @@ protected: } virtual SkISize onISize() SK_OVERRIDE { - return SkISize::Make(600, 420); + return SkISize::Make(800, 420); } virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { - SkXfermode* modes[] = { NULL, fSrcInXfer, fDstInXfer }; + SkXfermode* modes[] = { NULL, fSrcInXfer, fDstInXfer, fSrcOverXfer }; struct { SkShader* fShader1; SkShader* fShader2; @@ -120,6 +121,7 @@ protected: draw_label(canvas, "SrcOver", SkPoint::Make(gridStep, 20)); draw_label(canvas, "SrcInLuma", SkPoint::Make(gridStep * 3, 20)); draw_label(canvas, "DstInLuma", SkPoint::Make(gridStep * 5, 20)); + draw_label(canvas, "SrcOverLuma", SkPoint::Make(gridStep * 7, 20)); for (size_t i = 0; i < SK_ARRAY_COUNT(shaders); ++i) { canvas->save(); canvas->translate(kInset, gridStep * i + 30); @@ -137,7 +139,7 @@ protected: private: SkAutoTUnref<SkShader> fGr1, fGr2; - SkAutoTUnref<SkXfermode> fSrcInXfer, fDstInXfer; + SkAutoTUnref<SkXfermode> fSrcInXfer, fDstInXfer, fSrcOverXfer; typedef skiagm::GM INHERITED; }; |