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 #include "SkXfermode.h"
     10 
     11 #ifndef SkModeColorFilter_DEFINED
     12 #define SkModeColorFilter_DEFINED
     13 
     14 class SkModeColorFilter : public SkColorFilter {
     15 public:
     16     static SkColorFilter* Create(SkColor color, SkXfermode::Mode mode) {
     17         return new SkModeColorFilter(color, mode);
     18     }
     19 
     20     SkColor getColor() const { return fColor; }
     21     SkXfermode::Mode getMode() const { return fMode; }
     22     SkPMColor getPMColor() const { return fPMColor; }
     23 
     24     bool asColorMode(SkColor*, SkXfermode::Mode*) const override;
     25     uint32_t getFlags() const override;
     26     void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const override;
     27     void filterSpan4f(const SkPM4f shader[], int count, SkPM4f result[]) const override;
     28 
     29 #ifndef SK_IGNORE_TO_STRING
     30     void toString(SkString* str) const override;
     31 #endif
     32 
     33 #if SK_SUPPORT_GPU
     34     const GrFragmentProcessor* asFragmentProcessor(GrContext*) const override;
     35 #endif
     36     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter)
     37 
     38 protected:
     39     SkModeColorFilter(SkColor color, SkXfermode::Mode mode) {
     40         fColor = color;
     41         fMode = mode;
     42         this->updateCache();
     43     };
     44 
     45     void flatten(SkWriteBuffer&) const override;
     46 
     47 private:
     48     SkColor             fColor;
     49     SkXfermode::Mode    fMode;
     50     // cache
     51     SkPMColor           fPMColor;
     52     SkXfermodeProc      fProc;
     53 
     54     void updateCache();
     55 
     56     friend class SkColorFilter;
     57 
     58     typedef SkColorFilter INHERITED;
     59 };
     60 
     61 #endif
     62