• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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