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 "SkColorFilter.h" 9 #include "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 26 static sk_sp<SkOverdrawColorFilter> Make(const SkPMColor colors[kNumColors]) { 27 return sk_sp<SkOverdrawColorFilter>(new SkOverdrawColorFilter(colors)); 28 } 29 30 #if SK_SUPPORT_GPU 31 std::unique_ptr<GrFragmentProcessor> asFragmentProcessor( 32 GrContext*, const GrColorSpaceInfo&) const override; 33 #endif 34 35 void toString(SkString* str) const override; 36 37 static sk_sp<SkFlattenable> CreateProc(SkReadBuffer& buffer); 38 Factory getFactory() const override { return CreateProc; } 39 SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() 40 41 protected: 42 void flatten(SkWriteBuffer& buffer) const override; 43 44 private: 45 SkOverdrawColorFilter(const SkPMColor colors[kNumColors]) { 46 memcpy(fColors, colors, kNumColors * sizeof(SkPMColor)); 47 } 48 49 void onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*, bool) const override; 50 51 SkPMColor fColors[kNumColors]; 52 53 typedef SkColorFilter INHERITED; 54 }; 55 56 #endif // SkOverdrawColorFilter_DEFINED 57