• 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 
16 #include "rosen_text/hm_symbol_txt.h"
17 
18 #define RENDER_SINGLE 0
19 #define RENDER_MULTIPLE_COLOR 1
20 #define RENDER_MULTIPLE_OPACITY 2
21 
22 namespace OHOS {
23 namespace Rosen {
24 
25 // the symbol animation type mapping table
26 static const std::map<uint32_t, Drawing::DrawingEffectStrategy> EFFECT_TYPES = {
27     {0, Drawing::DrawingEffectStrategy::NONE},
28     {1, Drawing::DrawingEffectStrategy::SCALE},
29     {2, Drawing::DrawingEffectStrategy::VARIABLE_COLOR},
30     {3, Drawing::DrawingEffectStrategy::APPEAR},
31     {4, Drawing::DrawingEffectStrategy::DISAPPEAR},
32     {5, Drawing::DrawingEffectStrategy::BOUNCE},
33     {6, Drawing::DrawingEffectStrategy::PULSE},
34     {7, Drawing::DrawingEffectStrategy::REPLACE_APPEAR},
35     {8, Drawing::DrawingEffectStrategy::DISABLE},
36     {9, Drawing::DrawingEffectStrategy::QUICK_REPLACE_APPEAR}
37 };
38 
SetRenderColor(const std::vector<Drawing::DrawingSColor> & colorList)39 void HMSymbolTxt::SetRenderColor(const std::vector<Drawing::DrawingSColor>& colorList)
40 {
41     symbolColor_.colorType = SymbolColorType::COLOR_TYPE;
42     symbolColor_.gradients.clear();
43     std::vector<std::shared_ptr<SymbolGradient>> gradients;
44     for (const auto& color : colorList) {
45         auto gradient = std::make_shared<SymbolGradient>();
46         std::vector<Drawing::ColorQuad> colors;
47         Drawing::Color color1;
48         color1.SetRgb(color.r, color.g, color.b, color.a);
49         colors.push_back(color1.CastToColorQuad());
50         gradient->SetColors(colors);
51         gradients.push_back(gradient);
52     }
53     symbolColor_.gradients = gradients;
54 }
55 
SetRenderColor(const std::vector<Drawing::Color> & colorList)56 void HMSymbolTxt::SetRenderColor(const std::vector<Drawing::Color>& colorList)
57 {
58     symbolColor_.colorType = SymbolColorType::COLOR_TYPE;
59     symbolColor_.gradients.clear();
60     std::vector<std::shared_ptr<SymbolGradient>> gradients;
61     for (auto color : colorList) {
62         auto gradient = std::make_shared<SymbolGradient>();
63         std::vector<Drawing::ColorQuad> colors;
64         Drawing::Color color1;
65         color1.SetRgb(color.GetRed(), color.GetGreen(), color.GetBlue(), color.GetAlpha());
66         colors.push_back(color1.CastToColorQuad());
67         gradient->SetColors(colors);
68         gradients.push_back(gradient);
69     }
70     symbolColor_.gradients = gradients;
71 }
72 
SetRenderColor(const Drawing::Color & color)73 void HMSymbolTxt::SetRenderColor(const Drawing::Color& color)
74 {
75     symbolColor_.colorType = SymbolColorType::COLOR_TYPE;
76     symbolColor_.gradients.clear();
77     std::vector<std::shared_ptr<SymbolGradient>> gradients;
78     auto gradient = std::make_shared<SymbolGradient>();
79     std::vector<Drawing::ColorQuad> colors;
80     Drawing::Color color1;
81     color1.SetRgb(color.GetRed(), color.GetGreen(), color.GetBlue(), color.GetAlpha());
82     colors.push_back(color1.CastToColorQuad());
83     gradient->SetColors(colors);
84     gradients.push_back(gradient);
85     symbolColor_.gradients = gradients;
86 }
87 
SetRenderColor(const Drawing::DrawingSColor & colorList)88 void HMSymbolTxt::SetRenderColor(const Drawing::DrawingSColor& colorList)
89 {
90     symbolColor_.colorType = SymbolColorType::COLOR_TYPE;
91     symbolColor_.gradients.clear();
92     std::vector<std::shared_ptr<SymbolGradient>> gradients;
93     auto gradient = std::make_shared<SymbolGradient>();
94     std::vector<Drawing::ColorQuad> colors;
95     Drawing::Color color1;
96     color1.SetRgb(colorList.r, colorList.g, colorList.b, colorList.a);
97     colors.push_back(color1.CastToColorQuad());
98     gradient->SetColors(colors);
99     gradients.push_back(gradient);
100     symbolColor_.gradients = gradients;
101 }
102 
SetRenderMode(const uint32_t & renderMode)103 void HMSymbolTxt::SetRenderMode(const uint32_t& renderMode)
104 {
105     switch (renderMode) {
106         case RENDER_SINGLE:
107             renderMode_ = Drawing::DrawingSymbolRenderingStrategy::SINGLE;
108             break;
109         case RENDER_MULTIPLE_OPACITY:
110             renderMode_ = Drawing::DrawingSymbolRenderingStrategy::MULTIPLE_OPACITY;
111             break;
112         case RENDER_MULTIPLE_COLOR:
113             renderMode_ = Drawing::DrawingSymbolRenderingStrategy::MULTIPLE_COLOR;
114             break;
115         default:
116             break;
117     }
118 }
119 
SetSymbolEffect(const uint32_t & effectStrategy)120 void HMSymbolTxt::SetSymbolEffect(const uint32_t& effectStrategy)
121 {
122     auto iter = EFFECT_TYPES.find(effectStrategy);
123     if (iter != EFFECT_TYPES.end()) {
124         effectStrategy_ = iter->second;
125     }
126 }
127 
GetRenderColor() const128 std::vector<Drawing::DrawingSColor> HMSymbolTxt::GetRenderColor() const
129 {
130     std::vector<Drawing::DrawingSColor> colorList;
131     for (const auto& gradient : symbolColor_.gradients) {
132         bool isInvalid = gradient == nullptr || gradient->GetColors().empty();
133         if (isInvalid) {
134             continue;
135         }
136         auto gradientColor = gradient->GetColors()[0];
137         Drawing::Color color(gradientColor);
138         Drawing::DrawingSColor scolor = {color.GetAlphaF(), color.GetRed(), color.GetGreen(), color.GetBlue()};
139         colorList.push_back(scolor);
140     }
141     return colorList;
142 }
143 
GetRenderMode() const144 Drawing::DrawingSymbolRenderingStrategy HMSymbolTxt::GetRenderMode() const
145 {
146     return renderMode_;
147 }
148 
GetEffectStrategy() const149 Drawing::DrawingEffectStrategy HMSymbolTxt::GetEffectStrategy() const
150 {
151     return effectStrategy_;
152 }
153 
SetAnimationMode(const uint16_t animationMode)154 void HMSymbolTxt::SetAnimationMode(const uint16_t animationMode)
155 {
156     animationMode_ = animationMode > 0 ? 1 : 0; // 1 is whole or iteratuve, 0 is hierarchical or cumulative
157 }
158 
SetRepeatCount(const int repeatCount)159 void HMSymbolTxt::SetRepeatCount(const int repeatCount)
160 {
161     repeatCount_ = repeatCount;
162 }
163 
SetAnimationStart(const bool animationStart)164 void HMSymbolTxt::SetAnimationStart(const bool animationStart)
165 {
166     animationStart_ = animationStart;
167 }
168 
GetAnimationMode() const169 uint16_t HMSymbolTxt::GetAnimationMode() const
170 {
171     return animationMode_;
172 }
173 
GetRepeatCount() const174 int HMSymbolTxt::GetRepeatCount() const
175 {
176     return repeatCount_;
177 }
178 
GetAnimationStart() const179 bool HMSymbolTxt::GetAnimationStart() const
180 {
181     return animationStart_;
182 }
183 
SetVisualMode(const VisualMode visual)184 void HMSymbolTxt::SetVisualMode(const VisualMode visual)
185 {
186     visualMap_.clear();
187     if (visual == VisualMode::VISUAL_SMALL) {
188         visualMap_["ss01"] = 1;
189     }
190 
191     if (visual == VisualMode::VISUAL_LARGER) {
192         visualMap_["ss02"] = 1;
193     }
194 }
195 
GetVisualMap() const196 std::map<std::string, int> HMSymbolTxt::GetVisualMap() const
197 {
198     return visualMap_;
199 }
200 
201 // set common subtype of symbol animation attribute
SetCommonSubType(Drawing::DrawingCommonSubType commonSubType)202 void HMSymbolTxt::SetCommonSubType(Drawing::DrawingCommonSubType commonSubType)
203 {
204     commonSubType_ = commonSubType;
205 }
206 
GetCommonSubType() const207 Drawing::DrawingCommonSubType HMSymbolTxt::GetCommonSubType() const
208 {
209     return commonSubType_;
210 }
211 
SetSymbolType(SymbolType symbolType)212 void HMSymbolTxt::SetSymbolType(SymbolType symbolType)
213 {
214     symbolType_ = symbolType;
215 }
216 
GetSymbolType() const217 SymbolType HMSymbolTxt::GetSymbolType() const
218 {
219     return symbolType_;
220 }
221 
GetSymbolUid() const222 size_t HMSymbolTxt::GetSymbolUid() const
223 {
224     return symbolUid_;
225 }
226 
SetSymbolUid(const size_t symbolUid)227 void HMSymbolTxt::SetSymbolUid(const size_t symbolUid)
228 {
229     symbolUid_ = symbolUid;
230 }
231 
GetSymbolBitmap() const232 const SymbolBitmapType& HMSymbolTxt::GetSymbolBitmap() const
233 {
234     return relayoutChangeBitmap_;
235 }
236 
SetSymbolBitmap(const SymbolBitmapType & symbolStyleBitmap)237 void HMSymbolTxt::SetSymbolBitmap(const SymbolBitmapType& symbolStyleBitmap)
238 {
239     relayoutChangeBitmap_ = symbolStyleBitmap;
240 }
241 
GetSymbolColor() const242 SymbolColor HMSymbolTxt::GetSymbolColor() const
243 {
244     return symbolColor_;
245 }
246 
SetSymbolColor(const SymbolColor & symbolColor)247 void HMSymbolTxt::SetSymbolColor(const SymbolColor& symbolColor)
248 {
249     symbolColor_ = symbolColor;
250 }
251 
SetSymbolShadow(const std::optional<SymbolShadow> & symbolShadow)252 void HMSymbolTxt::SetSymbolShadow(const std::optional<SymbolShadow>& symbolShadow)
253 {
254     symbolShadow_ = symbolShadow;
255 }
256 
GetSymbolShadow() const257 const std::optional<SymbolShadow>& HMSymbolTxt::GetSymbolShadow() const
258 {
259     return symbolShadow_;
260 }
261 } // namespace Rosen
262 } // namespace OHOS