Line data Source code
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 "SkPM4f.h"
10 :
11 : #ifndef SkModeColorFilter_DEFINED
12 : #define SkModeColorFilter_DEFINED
13 :
14 0 : class SkModeColorFilter : public SkColorFilter {
15 : public:
16 0 : static sk_sp<SkColorFilter> Make(SkColor color, SkBlendMode mode) {
17 0 : return sk_sp<SkColorFilter>(new SkModeColorFilter(color, mode));
18 : }
19 :
20 : SkColor getColor() const { return fColor; }
21 : SkBlendMode getMode() const { return fMode; }
22 0 : SkPMColor getPMColor() const { return fPMColor; }
23 :
24 : bool asColorMode(SkColor*, SkBlendMode*) 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 : sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override;
35 : #endif
36 0 : SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter)
37 :
38 : protected:
39 0 : SkModeColorFilter(SkColor color, SkBlendMode mode) {
40 0 : fColor = color;
41 0 : fMode = mode;
42 0 : this->updateCache();
43 0 : }
44 :
45 : void flatten(SkWriteBuffer&) const override;
46 :
47 : bool onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*,
48 : bool shaderIsOpaque) const override;
49 :
50 : private:
51 : SkColor fColor;
52 : SkBlendMode fMode;
53 : // cache
54 : SkPMColor fPMColor;
55 : SkXfermodeProc fProc;
56 :
57 : void updateCache();
58 :
59 : friend class SkColorFilter;
60 :
61 : typedef SkColorFilter INHERITED;
62 : };
63 :
64 : #endif
|