SampleLayerMask.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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/SkPath.h"
  11. #include "samplecode/Sample.h"
  12. ///////////////////////////////////////////////////////////////////////////////
  13. class LayerMaskView : public Sample {
  14. public:
  15. LayerMaskView() {
  16. this->setBGColor(0xFFDDDDDD);
  17. }
  18. protected:
  19. virtual SkString name() { return SkString("LayerMask"); }
  20. void drawMask(SkCanvas* canvas, const SkRect& r) {
  21. SkPaint paint;
  22. paint.setAntiAlias(true);
  23. if (true) {
  24. SkBitmap mask;
  25. int w = SkScalarRoundToInt(r.width());
  26. int h = SkScalarRoundToInt(r.height());
  27. mask.allocN32Pixels(w, h);
  28. mask.eraseColor(SK_ColorTRANSPARENT);
  29. SkCanvas c(mask);
  30. SkRect bounds = r;
  31. bounds.offset(-bounds.fLeft, -bounds.fTop);
  32. c.drawOval(bounds, paint);
  33. paint.setBlendMode(SkBlendMode::kDstIn);
  34. canvas->drawBitmap(mask, r.fLeft, r.fTop, &paint);
  35. } else {
  36. SkPath p;
  37. p.addOval(r);
  38. p.setFillType(SkPath::kInverseWinding_FillType);
  39. paint.setBlendMode(SkBlendMode::kDstOut);
  40. canvas->drawPath(p, paint);
  41. }
  42. }
  43. virtual void onDrawContent(SkCanvas* canvas) {
  44. SkRect r;
  45. r.set(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(120), SkIntToScalar(120));
  46. canvas->saveLayer(&r, nullptr);
  47. canvas->drawColor(SK_ColorRED);
  48. drawMask(canvas, r);
  49. canvas->restore();
  50. }
  51. private:
  52. typedef Sample INHERITED;
  53. };
  54. ///////////////////////////////////////////////////////////////////////////////
  55. DEF_SAMPLE( return new LayerMaskView(); )