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 8 #include "include/core/SkColorFilter.h" 9 #include "include/core/SkFlattenable.h" 10 11 #ifndef SkOverdrawColorFilter_DEFINED 12 #define SkOverdrawColorFilter_DEFINED 13 14 /** 15 * Uses the value in the src alpha channel to set the dst pixel. 16 * 0 -> fColors[0] 17 * 1 -> fColors[1] 18 * ... 19 * 5 (or larger) -> fColors[5] 20 * 21 */ 22 class SK_API SkOverdrawColorFilter : public SkColorFilter { 23 public: 24 static constexpr int kNumColors = 6; 25 MakeWithSkColors(const SkColor colors[kNumColors])26 static sk_sp<SkColorFilter> MakeWithSkColors(const SkColor colors[kNumColors]) { 27 return sk_sp<SkColorFilter>(new SkOverdrawColorFilter(colors)); 28 } 29 30 #if SK_SUPPORT_GPU 31 std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrRecordingContext*, 32 const GrColorInfo&) const override; 33 #endif 34 35 static void RegisterFlattenables(); 36 37 protected: 38 void flatten(SkWriteBuffer& buffer) const override; 39 40 private: SK_FLATTENABLE_HOOKS(SkOverdrawColorFilter)41 SK_FLATTENABLE_HOOKS(SkOverdrawColorFilter) 42 43 SkOverdrawColorFilter(const SkColor colors[kNumColors]) { 44 memcpy(fColors, colors, kNumColors * sizeof(SkColor)); 45 } 46 47 bool onAppendStages(const SkStageRec&, bool) const override; 48 skvm::Color onProgram(skvm::Builder*, skvm::Color, SkColorSpace*, skvm::Uniforms*, 49 SkArenaAlloc*) const override; 50 51 SkColor fColors[kNumColors]; 52 53 typedef SkColorFilter INHERITED; 54 }; 55 56 #endif // SkOverdrawColorFilter_DEFINED 57