1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include <vector>
16 #include "ge_visual_effect.h"
17
18 #include "ge_log.h"
19 #include "ge_visual_effect_impl.h"
20 #include "ge_pixel_map_shader_mask.h"
21 #include "ge_radial_gradient_shader_mask.h"
22 #include "ge_ripple_shader_mask.h"
23 #include "ge_double_ripple_shader_mask.h"
24 #include "ge_wave_gradient_shader_mask.h"
25
26 namespace OHOS {
27 namespace Rosen {
28 namespace Drawing {
29
GEVisualEffect(const std::string & name,DrawingPaintType type,const std::optional<Drawing::CanvasInfo> & canvasInfo)30 GEVisualEffect::GEVisualEffect(
31 const std::string& name, DrawingPaintType type, const std::optional<Drawing::CanvasInfo>& canvasInfo)
32 : visualEffectName_(name), type_(type), visualEffectImpl_(std::make_unique<GEVisualEffectImpl>(name))
33 {
34 canvasInfo_ = canvasInfo.value_or(Drawing::CanvasInfo());
35 }
36
~GEVisualEffect()37 GEVisualEffect::~GEVisualEffect() {}
38
SetParam(const std::string & tag,int32_t param)39 void GEVisualEffect::SetParam(const std::string& tag, int32_t param)
40 {
41 (void)type_;
42 visualEffectImpl_->SetParam(tag, param);
43 }
44
SetParam(const std::string & tag,int64_t param)45 void GEVisualEffect::SetParam(const std::string& tag, int64_t param)
46 {
47 visualEffectImpl_->SetParam(tag, param);
48 }
49
SetParam(const std::string & tag,float param)50 void GEVisualEffect::SetParam(const std::string& tag, float param)
51 {
52 visualEffectImpl_->SetParam(tag, param);
53 }
54
SetParam(const std::string & tag,double param)55 void GEVisualEffect::SetParam(const std::string& tag, double param)
56 {
57 visualEffectImpl_->SetParam(tag, param);
58 }
59
SetParam(const std::string & tag,const char * const param)60 void GEVisualEffect::SetParam(const std::string& tag, const char* const param)
61 {
62 visualEffectImpl_->SetParam(tag, param);
63 }
64
SetParam(const std::string & tag,const std::shared_ptr<Drawing::Image> param)65 void GEVisualEffect::SetParam(const std::string& tag, const std::shared_ptr<Drawing::Image> param)
66 {
67 visualEffectImpl_->SetParam(tag, param);
68 }
69
SetParam(const std::string & tag,const std::pair<float,float> & param)70 void GEVisualEffect::SetParam(const std::string& tag, const std::pair<float, float>& param)
71 {
72 visualEffectImpl_->SetParam(tag, param);
73 }
74
SetParam(const std::string & tag,const Drawing::Matrix param)75 void GEVisualEffect::SetParam(const std::string& tag, const Drawing::Matrix param)
76 {
77 visualEffectImpl_->SetParam(tag, param);
78 }
79
SetParam(const std::string & tag,const std::vector<std::pair<float,float>> & param)80 void GEVisualEffect::SetParam(const std::string& tag, const std::vector<std::pair<float, float>>& param)
81 {
82 visualEffectImpl_->SetParam(tag, param);
83 }
84
SetParam(const std::string & tag,const std::vector<Vector2f> & param)85 void GEVisualEffect::SetParam(const std::string& tag, const std::vector<Vector2f>& param)
86 {
87 visualEffectImpl_->SetParam(tag, param);
88 }
89
SetParam(const std::string & tag,const std::array<Drawing::Point,POINT_NUM> & param)90 void GEVisualEffect::SetParam(const std::string& tag, const std::array<Drawing::Point, POINT_NUM>& param)
91 {
92 visualEffectImpl_->SetParam(tag, param);
93 }
94
SetParam(const std::string & tag,bool param)95 void GEVisualEffect::SetParam(const std::string& tag, bool param)
96 {
97 visualEffectImpl_->SetParam(tag, param);
98 }
99
SetParam(const std::string & tag,uint32_t param)100 void GEVisualEffect::SetParam(const std::string& tag, uint32_t param)
101 {
102 visualEffectImpl_->SetParam(tag, param);
103 }
104
SetParam(const std::string & tag,const std::vector<float> & param)105 void GEVisualEffect::SetParam(const std::string& tag, const std::vector<float>& param)
106 {
107 visualEffectImpl_->SetParam(tag, param);
108 }
109
SetParam(const std::string & tag,const std::shared_ptr<Drawing::GEShaderMask> param)110 void GEVisualEffect::SetParam(const std::string& tag, const std::shared_ptr<Drawing::GEShaderMask> param)
111 {
112 visualEffectImpl_->SetParam(tag, param);
113 }
114
SetParam(const std::string & tag,const Drawing::Color4f & param)115 void GEVisualEffect::SetParam(const std::string& tag, const Drawing::Color4f& param)
116 {
117 visualEffectImpl_->SetParam(tag, param);
118 }
119
SetParam(const std::string & tag,const Vector3f & param)120 void GEVisualEffect::SetParam(const std::string& tag, const Vector3f& param)
121 {
122 visualEffectImpl_->SetParam(tag, param);
123 }
124
SetParam(const std::string & tag,const Vector4f & param)125 void GEVisualEffect::SetParam(const std::string& tag, const Vector4f& param)
126 {
127 visualEffectImpl_->SetParam(tag, param);
128 }
129
GenerateShaderMask() const130 const std::shared_ptr<Drawing::GEShaderMask> GEVisualEffect::GenerateShaderMask() const
131 {
132 auto impl = visualEffectImpl_;
133 if (impl == nullptr) {
134 return nullptr;
135 }
136
137 switch (impl->GetFilterType()) {
138 case GEVisualEffectImpl::FilterType::RADIAL_GRADIENT_MASK: {
139 auto radialParams = impl->GetRadialGradientMaskParams();
140 if (radialParams == nullptr) {
141 return nullptr;
142 }
143 return std::make_shared<GERadialGradientShaderMask>(*radialParams);
144 }
145 case GEVisualEffectImpl::FilterType::DOUBLE_RIPPLE_MASK: {
146 auto doubleRippleParams = impl->GetDoubleRippleMaskParams();
147 if (doubleRippleParams == nullptr) {
148 return nullptr;
149 }
150 return std::make_shared<GEDoubleRippleShaderMask>(*doubleRippleParams);
151 }
152 case GEVisualEffectImpl::FilterType::RIPPLE_MASK: {
153 auto rippleParams = impl->GetRippleMaskParams();
154 if (rippleParams == nullptr) {
155 return nullptr;
156 }
157 return std::make_shared<GERippleShaderMask>(*rippleParams);
158 }
159 case GEVisualEffectImpl::FilterType::PIXEL_MAP_MASK: {
160 auto pixelMapParams = impl->GetPixelMapMaskParams();
161 if (pixelMapParams == nullptr) {
162 return nullptr;
163 }
164 return std::make_shared<GEPixelMapShaderMask>(*pixelMapParams);
165 }
166 case GEVisualEffectImpl::FilterType::WAVE_GRADIENT_MASK: {
167 auto waveParams = impl->GetWaveGradientMaskParams();
168 if (waveParams == nullptr) {
169 return nullptr;
170 }
171 return std::make_shared<GEWaveGradientShaderMask>(*waveParams);
172 }
173 default:
174 return nullptr;
175 }
176 }
177
178 } // namespace Drawing
179 } // namespace Rosen
180 } // namespace OHOS
181