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