• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2023 Google LLC
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 #ifndef SkWorkingFormatColorFilter_DEFINED
8 #define SkWorkingFormatColorFilter_DEFINED
9 
10 #include "include/core/SkColorFilter.h"
11 #include "include/core/SkFlattenable.h"
12 #include "include/core/SkRefCnt.h"
13 #include "include/private/SkColorData.h"
14 #include "modules/skcms/skcms.h"
15 #include "src/effects/colorfilters/SkColorFilterBase.h"
16 
17 class SkColorSpace;
18 class SkReadBuffer;
19 class SkWriteBuffer;
20 enum SkAlphaType : int;
21 struct SkStageRec;
22 
23 class SkWorkingFormatColorFilter final : public SkColorFilterBase {
24 public:
25     SkWorkingFormatColorFilter(sk_sp<SkColorFilter> child,
26                                const skcms_TransferFunction* tf,
27                                const skcms_Matrix3x3* gamut,
28                                const SkAlphaType* at);
29 
30     sk_sp<SkColorSpace> workingFormat(const sk_sp<SkColorSpace>& dstCS, SkAlphaType* at) const;
31 
type()32     SkColorFilterBase::Type type() const override {
33         return SkColorFilterBase::Type::kWorkingFormat;
34     }
35 
36     bool appendStages(const SkStageRec& rec, bool shaderIsOpaque) const override;
37 
38     SkPMColor4f onFilterColor4f(const SkPMColor4f& origColor,
39                                 SkColorSpace* rawDstCS) const override;
40 
41     bool onIsAlphaUnchanged() const override;
42 
child()43     sk_sp<SkColorFilter> child() const { return fChild; }
44 
45 private:
46     friend void ::SkRegisterWorkingFormatColorFilterFlattenable();
47     SK_FLATTENABLE_HOOKS(SkWorkingFormatColorFilter)
48 
49     void flatten(SkWriteBuffer& buffer) const override;
50 
51     sk_sp<SkColorFilter> fChild;
52     skcms_TransferFunction fTF;
53     bool fUseDstTF = true;
54     skcms_Matrix3x3 fGamut;
55     bool fUseDstGamut = true;
56     SkAlphaType fAT;
57     bool fUseDstAT = true;
58 };
59 
60 #endif
61