Home | History | Annotate | Download | only in gm
      1 /*
      2  * Copyright 2013 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "gm.h"
      9 #include "SkCanvas.h"
     10 #include "SkBlurImageFilter.h"
     11 
     12 static void make_bm(SkBitmap* bm) {
     13     bm->allocN32Pixels(100, 100);
     14     bm->eraseColor(SK_ColorBLUE);
     15 
     16     SkCanvas canvas(*bm);
     17     SkPaint paint;
     18     paint.setAntiAlias(true);
     19     paint.setColor(SK_ColorRED);
     20     canvas.drawCircle(50, 50, 50, paint);
     21 }
     22 
     23 static void draw_2_bitmaps(SkCanvas* canvas, const SkBitmap& bm, bool doClip,
     24                            int dx, int dy, SkImageFilter* filter = NULL) {
     25     SkAutoCanvasRestore acr(canvas, true);
     26     SkPaint paint;
     27 
     28     SkRect clipR = SkRect::MakeXYWH(SkIntToScalar(dx),
     29                                     SkIntToScalar(dy),
     30                                     SkIntToScalar(bm.width()),
     31                                     SkIntToScalar(bm.height()));
     32 
     33     paint.setImageFilter(filter);
     34     clipR.inset(5, 5);
     35 
     36     if (doClip) {
     37         canvas->save();
     38         canvas->clipRect(clipR);
     39     }
     40     canvas->drawSprite(bm, dx, dy, &paint);
     41     if (doClip) {
     42         canvas->restore();
     43     }
     44 
     45     canvas->translate(SkIntToScalar(bm.width() + 20), 0);
     46 
     47     if (doClip) {
     48         canvas->save();
     49         canvas->clipRect(clipR);
     50     }
     51     canvas->drawBitmap(bm, SkIntToScalar(dx), SkIntToScalar(dy), &paint);
     52     if (doClip) {
     53         canvas->restore();
     54     }
     55 }
     56 
     57 /**
     58  *  Compare output of drawSprite and drawBitmap (esp. clipping and imagefilters)
     59  */
     60 class SpriteBitmapGM : public skiagm::GM {
     61 public:
     62     SpriteBitmapGM() {}
     63 
     64 protected:
     65     virtual uint32_t onGetFlags() const SK_OVERRIDE {
     66         return kSkipTiled_Flag;
     67     }
     68 
     69     virtual SkString onShortName() {
     70         return SkString("spritebitmap");
     71     }
     72 
     73     virtual SkISize onISize() {
     74         return SkISize::Make(640, 480);
     75     }
     76 
     77     virtual void onDraw(SkCanvas* canvas) {
     78         SkBitmap bm;
     79         make_bm(&bm);
     80 
     81         int dx = 10;
     82         int dy = 10;
     83 
     84         SkScalar sigma = 8;
     85         SkAutoTUnref<SkImageFilter> filter(SkBlurImageFilter::Create(sigma, sigma));
     86 
     87         draw_2_bitmaps(canvas, bm, false, dx, dy);
     88         dy += bm.height() + 20;
     89         draw_2_bitmaps(canvas, bm, false, dx, dy, filter);
     90         dy += bm.height() + 20;
     91         draw_2_bitmaps(canvas, bm, true, dx, dy);
     92         dy += bm.height() + 20;
     93         draw_2_bitmaps(canvas, bm, true, dx, dy, filter);
     94     }
     95 
     96 private:
     97     typedef GM INHERITED;
     98 };
     99 
    100 //////////////////////////////////////////////////////////////////////////////
    101 
    102 DEF_GM( return new SpriteBitmapGM; )
    103