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 10 #ifndef SkModeColorFilter_DEFINED 11 #define SkModeColorFilter_DEFINED 12 13 class SkModeColorFilter : public SkColorFilter { 14 public: 15 static sk_sp<SkColorFilter> Make(SkColor color, SkBlendMode mode) { 16 return sk_sp<SkColorFilter>(new SkModeColorFilter(color, mode)); 17 } 18 19 SkColor getColor() const { return fColor; } 20 SkPMColor getPMColor() const { return fPMColor; } 21 22 bool asColorMode(SkColor*, SkBlendMode*) const override; 23 uint32_t getFlags() const override; 24 25 #ifndef SK_IGNORE_TO_STRING 26 void toString(SkString* str) const override; 27 #endif 28 29 #if SK_SUPPORT_GPU 30 std::unique_ptr<GrFragmentProcessor> asFragmentProcessor( 31 GrContext*, const GrColorSpaceInfo&) const override; 32 #endif 33 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter) 34 35 protected: 36 SkModeColorFilter(SkColor color, SkBlendMode mode); 37 38 void flatten(SkWriteBuffer&) const override; 39 40 void onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*, 41 bool shaderIsOpaque) const override; 42 43 sk_sp<SkColorFilter> onMakeColorSpace(SkColorSpaceXformer*) const override; 44 45 private: 46 SkColor fColor; 47 SkBlendMode fMode; 48 // cache 49 SkPMColor fPMColor; 50 51 friend class SkColorFilter; 52 53 typedef SkColorFilter INHERITED; 54 }; 55 56 #endif 57