Home | History | Annotate | Download | only in core
      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