SampleAARects.cpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  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. #include "include/core/SkBitmap.h"
  8. #include "include/core/SkCanvas.h"
  9. #include "include/core/SkPaint.h"
  10. #include "include/core/SkShader.h"
  11. #include "samplecode/Sample.h"
  12. static SkBitmap createBitmap(int n) {
  13. SkBitmap bitmap;
  14. bitmap.allocN32Pixels(n, n);
  15. bitmap.eraseColor(SK_ColorGREEN);
  16. SkCanvas canvas(bitmap);
  17. SkRect r;
  18. r.set(0, 0, SkIntToScalar(n), SkIntToScalar(n));
  19. SkPaint paint;
  20. paint.setAntiAlias(true);
  21. paint.setColor(SK_ColorRED);
  22. canvas.drawOval(r, paint);
  23. paint.setColor(SK_ColorBLUE);
  24. paint.setStrokeWidth(SkIntToScalar(n)/15);
  25. paint.setStyle(SkPaint::kStroke_Style);
  26. canvas.drawLine(0, 0, r.fRight, r.fBottom, paint);
  27. canvas.drawLine(0, r.fBottom, r.fRight, 0, paint);
  28. return bitmap;
  29. }
  30. static constexpr int N = 64;
  31. class AARectView : public Sample {
  32. SkBitmap fBitmap;
  33. void onOnceBeforeDraw() override {
  34. fBitmap = createBitmap(N);
  35. }
  36. SkString name() override { return SkString("AA Rects"); }
  37. void onDrawContent(SkCanvas* canvas) override {
  38. canvas->translate(SkIntToScalar(10), SkIntToScalar(10));
  39. SkPaint bluePaint;
  40. bluePaint.setARGB(0xff, 0x0, 0x0, 0xff);
  41. SkPaint bmpPaint;
  42. bmpPaint.setShader(fBitmap.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat));
  43. bluePaint.setStrokeWidth(3);
  44. bmpPaint.setStrokeWidth(3);
  45. SkPaint paints[] = { bluePaint, bmpPaint };
  46. SkRect rect;
  47. SkScalar dx = SkIntToScalar(80);
  48. SkScalar dy = SkIntToScalar(100);
  49. SkMatrix matrix;
  50. for (size_t p = 0; p < SK_ARRAY_COUNT(paints); ++p) {
  51. for (int stroke = 0; stroke < 2; ++stroke) {
  52. paints[p].setStyle(stroke ? SkPaint::kStroke_Style : SkPaint::kFill_Style);
  53. for (int a = 0; a < 3; ++ a) {
  54. paints[p].setAntiAlias(a > 0);
  55. paints[p].setAlpha(a > 1 ? 0x80 : 0xff);
  56. canvas->save();
  57. rect = SkRect::MakeLTRB(0.f,
  58. 0.f,
  59. 40.f,
  60. 40.f);
  61. canvas->drawRect(rect, paints[p]);
  62. canvas->translate(dx, 0);
  63. rect = SkRect::MakeLTRB(0.5f,
  64. 0.5f,
  65. 40.5f,
  66. 40.5f);
  67. canvas->drawRect(rect, paints[p]);
  68. canvas->translate(dx, 0);
  69. rect = SkRect::MakeLTRB(0.5f,
  70. 0.5f,
  71. 40.f,
  72. 40.f);
  73. canvas->drawRect(rect, paints[p]);
  74. canvas->translate(dx, 0);
  75. rect = SkRect::MakeLTRB(0.75f,
  76. 0.75f,
  77. 40.75f,
  78. 40.75f);
  79. canvas->drawRect(rect, paints[p]);
  80. canvas->translate(dx, 0);
  81. canvas->save();
  82. canvas->translate(.33f, .67f);
  83. rect = SkRect::MakeLTRB(0.0f,
  84. 0.0f,
  85. 40.0f,
  86. 40.0f);
  87. canvas->drawRect(rect, paints[p]);
  88. canvas->restore();
  89. canvas->translate(dx, 0);
  90. canvas->save();
  91. matrix.setRotate(45.f);
  92. canvas->concat(matrix);
  93. canvas->translate(20.0f / sqrtf(2.f),
  94. 20.0f / sqrtf(2.f));
  95. rect = SkRect::MakeLTRB(-20.0f,
  96. -20.0f,
  97. 20.0f,
  98. 20.0f);
  99. canvas->drawRect(rect, paints[p]);
  100. canvas->restore();
  101. canvas->translate(dx, 0);
  102. canvas->save();
  103. canvas->rotate(90.f);
  104. rect = SkRect::MakeLTRB(0.0f,
  105. 0.0f,
  106. 40.0f,
  107. -40.0f);
  108. canvas->drawRect(rect, paints[p]);
  109. canvas->restore();
  110. canvas->translate(dx, 0);
  111. canvas->save();
  112. canvas->rotate(90.f);
  113. rect = SkRect::MakeLTRB(0.5f,
  114. 0.5f,
  115. 40.5f,
  116. -40.5f);
  117. canvas->drawRect(rect, paints[p]);
  118. canvas->restore();
  119. canvas->translate(dx, 0);
  120. canvas->save();
  121. matrix.setScale(-1.f, -1.f);
  122. canvas->concat(matrix);
  123. rect = SkRect::MakeLTRB(0.5f,
  124. 0.5f,
  125. -40.5f,
  126. -40.5f);
  127. canvas->drawRect(rect, paints[p]);
  128. canvas->restore();
  129. canvas->translate(dx, 0);
  130. canvas->save();
  131. matrix.setScale(2.1f, 4.1f);
  132. canvas->concat(matrix);
  133. rect = SkRect::MakeLTRB(0.1f,
  134. 0.1f,
  135. 19.1f,
  136. 9.1f);
  137. canvas->drawRect(rect, paints[p]);
  138. canvas->restore();
  139. canvas->translate(dx, 0);
  140. canvas->restore();
  141. canvas->translate(0, dy);
  142. }
  143. }
  144. }
  145. }
  146. private:
  147. typedef Sample INHERITED;
  148. };
  149. //////////////////////////////////////////////////////////////////////////////
  150. DEF_SAMPLE( return new AARectView(); )