imagefiltersstroked.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*
  2. * Copyright 2015 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. #include "gm/gm.h"
  8. #include "include/core/SkCanvas.h"
  9. #include "include/core/SkColor.h"
  10. #include "include/core/SkFilterQuality.h"
  11. #include "include/core/SkImageFilter.h"
  12. #include "include/core/SkMatrix.h"
  13. #include "include/core/SkPaint.h"
  14. #include "include/core/SkRect.h"
  15. #include "include/core/SkRefCnt.h"
  16. #include "include/core/SkScalar.h"
  17. #include "include/core/SkSize.h"
  18. #include "include/core/SkString.h"
  19. #include "include/core/SkTypes.h"
  20. #include "include/effects/SkBlurImageFilter.h"
  21. #include "include/effects/SkDropShadowImageFilter.h"
  22. #include "include/effects/SkOffsetImageFilter.h"
  23. #define RESIZE_FACTOR_X SkIntToScalar(2)
  24. #define RESIZE_FACTOR_Y SkIntToScalar(5)
  25. namespace skiagm {
  26. class ImageFiltersStrokedGM : public GM {
  27. public:
  28. ImageFiltersStrokedGM() {
  29. this->setBGColor(0x00000000);
  30. }
  31. protected:
  32. SkString onShortName() override {
  33. return SkString("imagefiltersstroked");
  34. }
  35. SkISize onISize() override {
  36. return SkISize::Make(860, 500);
  37. }
  38. static void draw_circle(SkCanvas* canvas, const SkRect& r, const SkPaint& paint) {
  39. canvas->drawCircle(r.centerX(), r.centerY(),
  40. r.width() * 2 / 5, paint);
  41. }
  42. static void draw_line(SkCanvas* canvas, const SkRect& r, const SkPaint& paint) {
  43. canvas->drawLine(r.fLeft, r.fBottom, r.fRight, r.fTop, paint);
  44. }
  45. static void draw_rect(SkCanvas* canvas, const SkRect& r, const SkPaint& paint) {
  46. canvas->drawRect(r, paint);
  47. }
  48. void onDraw(SkCanvas* canvas) override {
  49. void (*drawProc[])(SkCanvas*, const SkRect&, const SkPaint&) = {
  50. draw_line, draw_rect, draw_circle,
  51. };
  52. canvas->clear(SK_ColorBLACK);
  53. SkMatrix resizeMatrix;
  54. resizeMatrix.setScale(RESIZE_FACTOR_X, RESIZE_FACTOR_Y);
  55. sk_sp<SkImageFilter> filters[] = {
  56. SkBlurImageFilter::Make(5, 5, nullptr),
  57. SkDropShadowImageFilter::Make(10, 10, 3, 3, SK_ColorGREEN,
  58. SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode,
  59. nullptr),
  60. SkOffsetImageFilter::Make(-16, 32, nullptr),
  61. SkImageFilter::MakeMatrixFilter(resizeMatrix, kNone_SkFilterQuality, nullptr),
  62. };
  63. SkRect r = SkRect::MakeWH(64, 64);
  64. SkScalar margin = 32;
  65. SkPaint paint;
  66. paint.setColor(SK_ColorWHITE);
  67. paint.setAntiAlias(true);
  68. paint.setStrokeWidth(10);
  69. paint.setStyle(SkPaint::kStroke_Style);
  70. for (size_t i = 0; i < SK_ARRAY_COUNT(drawProc); ++i) {
  71. canvas->translate(0, margin);
  72. canvas->save();
  73. for (size_t j = 0; j < SK_ARRAY_COUNT(filters); ++j) {
  74. canvas->translate(margin, 0);
  75. canvas->save();
  76. if (2 == j) {
  77. canvas->translate(16, -32);
  78. } else if (3 == j) {
  79. canvas->scale(SkScalarInvert(RESIZE_FACTOR_X),
  80. SkScalarInvert(RESIZE_FACTOR_Y));
  81. }
  82. paint.setImageFilter(filters[j]);
  83. drawProc[i](canvas, r, paint);
  84. canvas->restore();
  85. canvas->translate(r.width() + margin, 0);
  86. }
  87. canvas->restore();
  88. canvas->translate(0, r.height());
  89. }
  90. }
  91. private:
  92. typedef GM INHERITED;
  93. };
  94. //////////////////////////////////////////////////////////////////////////////
  95. DEF_GM(return new ImageFiltersStrokedGM;)
  96. }