drrect.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. #include "gm/gm.h"
  8. #include "include/core/SkCanvas.h"
  9. #include "include/core/SkPaint.h"
  10. #include "include/core/SkPoint.h"
  11. #include "include/core/SkRRect.h"
  12. #include "include/core/SkRect.h"
  13. #include "include/core/SkScalar.h"
  14. #include "include/core/SkSize.h"
  15. #include "include/core/SkString.h"
  16. #include "include/core/SkTypes.h"
  17. class DRRectGM : public skiagm::GM {
  18. public:
  19. DRRectGM() {}
  20. protected:
  21. SkString onShortName() override {
  22. return SkString("drrect");
  23. }
  24. SkISize onISize() override {
  25. return SkISize::Make(640, 480);
  26. }
  27. void onDraw(SkCanvas* canvas) override {
  28. SkPaint paint;
  29. paint.setAntiAlias(true);
  30. SkRRect outers[4];
  31. // like squares/circles, to exercise fast-cases in GPU
  32. SkRect r = { 0, 0, 100, 100 };
  33. SkVector radii[4] = {
  34. { 0, 0 }, { 30, 1 }, { 10, 40 }, { 40, 40 }
  35. };
  36. const SkScalar dx = r.width() + 16;
  37. const SkScalar dy = r.height() + 16;
  38. outers[0].setRect(r);
  39. outers[1].setOval(r);
  40. outers[2].setRectXY(r, 20, 20);
  41. outers[3].setRectRadii(r, radii);
  42. SkRRect inners[5];
  43. r.inset(25, 25);
  44. inners[0].setEmpty();
  45. inners[1].setRect(r);
  46. inners[2].setOval(r);
  47. inners[3].setRectXY(r, 20, 20);
  48. inners[4].setRectRadii(r, radii);
  49. canvas->translate(16, 16);
  50. for (size_t j = 0; j < SK_ARRAY_COUNT(inners); ++j) {
  51. for (size_t i = 0; i < SK_ARRAY_COUNT(outers); ++i) {
  52. canvas->save();
  53. canvas->translate(dx * j, dy * i);
  54. canvas->drawDRRect(outers[i], inners[j], paint);
  55. canvas->restore();
  56. }
  57. }
  58. }
  59. private:
  60. typedef GM INHERITED;
  61. };
  62. DEF_GM( return new DRRectGM; )