Home | History | Annotate | Download | only in gm
      1 /*
      2  * Copyright 2011 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 // TODO deprecate imageblur
     14 
     15 #define WIDTH 500
     16 #define HEIGHT 500
     17 
     18 constexpr float kBlurSigmas[] = {
     19         0.0, 0.3f, 0.5f, 2.0f, 32.0f, 80.0f };
     20 
     21 const char* kTestStrings[] = {
     22         "The quick`~",
     23         "brown fox[]",
     24         "jumped over",
     25         "the lazy@#$",
     26         "dog.{}!%^&",
     27         "*()+=-\\'\"/",
     28 };
     29 
     30 namespace skiagm {
     31 
     32 class BlurImageFilter : public GM {
     33 public:
     34     BlurImageFilter() {
     35         this->setBGColor(0xFFFFFFFF);
     36         fName.printf("imageblur2");
     37     }
     38 
     39 protected:
     40 
     41     SkString onShortName() override {
     42         return fName;
     43     }
     44 
     45     SkISize onISize() override {
     46         return SkISize::Make(WIDTH, HEIGHT);
     47     }
     48 
     49     void onDraw(SkCanvas* canvas) override {
     50         const int sigmaCount = SK_ARRAY_COUNT(kBlurSigmas);
     51         const int testStringCount = SK_ARRAY_COUNT(kTestStrings);
     52         SkScalar dx = WIDTH / sigmaCount;
     53         SkScalar dy = HEIGHT / sigmaCount;
     54         const SkScalar textSize = 12;
     55 
     56         for (int x = 0; x < sigmaCount; x++) {
     57             SkScalar sigmaX = kBlurSigmas[x];
     58             for (int y = 0; y < sigmaCount; y++) {
     59                 SkScalar sigmaY = kBlurSigmas[y];
     60 
     61                 SkPaint paint;
     62                 paint.setImageFilter(SkBlurImageFilter::Make(sigmaX, sigmaY, nullptr));
     63                 canvas->saveLayer(nullptr, &paint);
     64 
     65                 SkRandom rand;
     66                 SkPaint textPaint;
     67                 textPaint.setAntiAlias(false);
     68                 textPaint.setColor(sk_tool_utils::color_to_565(rand.nextBits(24) | 0xFF000000));
     69                 sk_tool_utils::set_portable_typeface(&textPaint);
     70                 textPaint.setTextSize(textSize);
     71 
     72                 for (int i = 0; i < testStringCount; i++) {
     73                     canvas->drawText(kTestStrings[i],
     74                                      strlen(kTestStrings[i]),
     75                                      SkIntToScalar(x * dx),
     76                                      SkIntToScalar(y * dy + textSize * i + textSize),
     77                                      textPaint);
     78                 }
     79                 canvas->restore();
     80             }
     81         }
     82     }
     83 
     84 private:
     85     SkString fName;
     86 
     87     typedef GM INHERITED;
     88 };
     89 
     90 //////////////////////////////////////////////////////////////////////////////
     91 
     92 DEF_GM(return new BlurImageFilter;)
     93 
     94 }
     95