• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2014 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 "sk_tool_utils.h"
10 #include "SkBlurImageFilter.h"
11 #include "SkRandom.h"
12 
13 #define WIDTH 640
14 #define HEIGHT 480
15 
16 namespace skiagm {
17 
18 class ImageBlurTiledGM : public GM {
19 public:
ImageBlurTiledGM(SkScalar sigmaX,SkScalar sigmaY)20     ImageBlurTiledGM(SkScalar sigmaX, SkScalar sigmaY)
21         : fSigmaX(sigmaX), fSigmaY(sigmaY) {
22     }
23 
24 protected:
onShortName()25     SkString onShortName() override {
26         return SkString("imageblurtiled");
27     }
28 
onISize()29     SkISize onISize() override {
30         return SkISize::Make(WIDTH, HEIGHT);
31     }
32 
onDraw(SkCanvas * canvas)33     void onDraw(SkCanvas* canvas) override {
34         SkPaint paint;
35         paint.setImageFilter(SkBlurImageFilter::Make(fSigmaX, fSigmaY, nullptr));
36         const SkScalar tileSize = SkIntToScalar(128);
37         SkRect bounds = canvas->getLocalClipBounds();
38         for (SkScalar y = bounds.top(); y < bounds.bottom(); y += tileSize) {
39             for (SkScalar x = bounds.left(); x < bounds.right(); x += tileSize) {
40                 canvas->save();
41                 canvas->clipRect(SkRect::MakeXYWH(x, y, tileSize, tileSize));
42                 canvas->saveLayer(nullptr, &paint);
43                 const char* str[] = {
44                     "The quick",
45                     "brown fox",
46                     "jumped over",
47                     "the lazy dog.",
48                 };
49                 SkFont font(sk_tool_utils::create_portable_typeface(), 100);
50                 int posY = 0;
51                 for (unsigned i = 0; i < SK_ARRAY_COUNT(str); i++) {
52                     posY += 100;
53                     canvas->drawString(str[i], 0, SkIntToScalar(posY), font, SkPaint());
54                 }
55                 canvas->restore();
56                 canvas->restore();
57             }
58         }
59     }
60 
61 private:
62     SkScalar fSigmaX;
63     SkScalar fSigmaY;
64 
65     typedef GM INHERITED;
66 };
67 
68 //////////////////////////////////////////////////////////////////////////////
69 
70 DEF_GM(return new  ImageBlurTiledGM(3.0f, 3.0f);)
71 
72 }
73