diff options
Diffstat (limited to 'gm')
-rw-r--r-- | gm/xfermodes.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/gm/xfermodes.cpp b/gm/xfermodes.cpp index 02cdd61927..6e1de3eb67 100644 --- a/gm/xfermodes.cpp +++ b/gm/xfermodes.cpp @@ -12,7 +12,8 @@ namespace skiagm { -static void make_bitmaps(int w, int h, SkBitmap* src, SkBitmap* dst) { +static void make_bitmaps(int w, int h, SkBitmap* src, SkBitmap* dst, + SkBitmap* transparent) { src->setConfig(SkBitmap::kARGB_8888_Config, w, h); src->allocPixels(); src->eraseColor(SK_ColorTRANSPARENT); @@ -41,6 +42,10 @@ static void make_bitmaps(int w, int h, SkBitmap* src, SkBitmap* dst) { r.set(ww/3, hh/3, ww*19/20, hh*19/20); c.drawRect(r, p); } + + transparent->setConfig(SkBitmap::kARGB_8888_Config, w, h); + transparent->allocPixels(); + transparent->eraseColor(SK_ColorTRANSPARENT); } static uint16_t gData[] = { 0xFFFF, 0xCCCF, 0xCCCF, 0xFFFF }; @@ -59,13 +64,15 @@ class XfermodesGM : public GM { kQuarterClear_SrcType = 0x10, //! kQuarterClear_SrcType in a layer. kQuarterClearInLayer_SrcType = 0x20, + //! A W/2xH/2 transparent image. + kSmallTransparentImage_SrcType = 0x40, - kAll_SrcType = 0x3F, //!< All the source types. + kAll_SrcType = 0x7F, //!< All the source types. kBasic_SrcType = 0x03, //!< Just basic source types. }; SkBitmap fBG; - SkBitmap fSrcB, fDstB; + SkBitmap fSrcB, fDstB, fTransparent; /* The srcType argument indicates what to draw for the source part. Skia * uses the implied shape of the drawing command and these modes @@ -81,6 +88,10 @@ class XfermodesGM : public GM { canvas->drawBitmapMatrix(fSrcB, m, &p); p.setXfermode(mode); switch (srcType) { + case kSmallTransparentImage_SrcType: + m.postScale(SK_ScalarHalf, SK_ScalarHalf, x, y); + canvas->drawBitmapMatrix(fTransparent, m, &p); + break; case kQuarterClearInLayer_SrcType: { SkRect bounds = SkRect::MakeXYWH(x, y, SkIntToScalar(W), SkIntToScalar(H)); @@ -132,7 +143,7 @@ class XfermodesGM : public GM { fBG.setConfig(SkBitmap::kARGB_4444_Config, 2, 2, 4, kOpaque_SkAlphaType); fBG.setPixels(gData); - make_bitmaps(W, H, &fSrcB, &fDstB); + make_bitmaps(W, H, &fSrcB, &fDstB, &fTransparent); } public: @@ -146,7 +157,7 @@ protected: } virtual SkISize onISize() { - return make_isize(1590, 640); + return make_isize(1990, 640); } virtual void onDraw(SkCanvas* canvas) { |