xref: /aosp_15_r20/external/skia/src/core/SkBlendModeBlender.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2021 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 
8 #ifndef SkBlendModeBlender_DEFINED
9 #define SkBlendModeBlender_DEFINED
10 
11 #include "include/core/SkFlattenable.h"
12 #include "src/core/SkBlenderBase.h"
13 
14 #include <optional>
15 
16 class SkReadBuffer;
17 class SkWriteBuffer;
18 enum class SkBlendMode;
19 struct SkStageRec;
20 
21 class SkBlendModeBlender : public SkBlenderBase {
22 public:
SkBlendModeBlender(SkBlendMode mode)23     SkBlendModeBlender(SkBlendMode mode) : fMode(mode) {}
24 
type()25     BlenderType type() const override { return BlenderType::kBlendMode; }
mode()26     SkBlendMode mode() const { return fMode; }
27 
28     SK_FLATTENABLE_HOOKS(SkBlendModeBlender)
29 
30 private:
31     using INHERITED = SkBlenderBase;
32 
asBlendMode()33     std::optional<SkBlendMode> asBlendMode() const final { return fMode; }
34 
35     void flatten(SkWriteBuffer& buffer) const override;
36 
37     bool onAppendStages(const SkStageRec& rec) const override;
38 
39     SkBlendMode fMode;
40 };
41 
42 #endif
43