SkOverdrawColorFilter.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*
  2. * Copyright 2016 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/SkColorFilter.h"
  8. #include "include/core/SkFlattenable.h"
  9. #ifndef SkOverdrawColorFilter_DEFINED
  10. #define SkOverdrawColorFilter_DEFINED
  11. /**
  12. * Uses the value in the src alpha channel to set the dst pixel.
  13. * 0 -> fColors[0]
  14. * 1 -> fColors[1]
  15. * ...
  16. * 5 (or larger) -> fColors[5]
  17. *
  18. */
  19. class SK_API SkOverdrawColorFilter : public SkColorFilter {
  20. public:
  21. static constexpr int kNumColors = 6;
  22. static sk_sp<SkOverdrawColorFilter> Make(const SkPMColor colors[kNumColors]) {
  23. return sk_sp<SkOverdrawColorFilter>(new SkOverdrawColorFilter(colors));
  24. }
  25. #if SK_SUPPORT_GPU
  26. std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(
  27. GrRecordingContext*, const GrColorSpaceInfo&) const override;
  28. #endif
  29. static void RegisterFlattenables();
  30. protected:
  31. void flatten(SkWriteBuffer& buffer) const override;
  32. private:
  33. SK_FLATTENABLE_HOOKS(SkOverdrawColorFilter)
  34. SkOverdrawColorFilter(const SkPMColor colors[kNumColors]) {
  35. memcpy(fColors, colors, kNumColors * sizeof(SkPMColor));
  36. }
  37. bool onAppendStages(const SkStageRec&, bool) const override;
  38. SkPMColor fColors[kNumColors];
  39. typedef SkColorFilter INHERITED;
  40. };
  41. #endif // SkOverdrawColorFilter_DEFINED