1 /*
2 * Copyright (c) 2023 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 "core/interfaces/native/node/marquee_modifier.h"
16
17 #include "bridge/common/utils/utils.h"
18 #include "core/components/common/layout/constants.h"
19 #include "core/components/common/properties/text_style.h"
20 #include "core/components_ng/base/frame_node.h"
21 #include "core/components_ng/base/view_abstract.h"
22 #include "core/components_ng/pattern/marquee/marquee_model_ng.h"
23 #include "core/pipeline/base/element_register.h"
24
25 namespace OHOS::Ace::NG {
26 constexpr bool DEFAULT_ALLOW_SCALE = true;
27 constexpr Ace::FontWeight DEFAULT_FONT_WEIGHT = Ace::FontWeight::NORMAL;
28 const std::string DEFAULT_FONT_FAMILY = "cursive";
29
SetMarqueeFontSize(ArkUINodeHandle node,ArkUI_Float32 fontSize,int unit)30 void SetMarqueeFontSize(ArkUINodeHandle node, ArkUI_Float32 fontSize, int unit)
31 {
32 auto* frameNode = reinterpret_cast<FrameNode*>(node);
33 CHECK_NULL_VOID(frameNode);
34 auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(unit);
35
36 if (fontSize < 0 || unitEnum < OHOS::Ace::DimensionUnit::PX || unitEnum > OHOS::Ace::DimensionUnit::CALC ||
37 unitEnum == OHOS::Ace::DimensionUnit::PERCENT) {
38 auto pipelineContext = PipelineBase::GetCurrentContext();
39 CHECK_NULL_VOID(pipelineContext);
40 auto theme = pipelineContext->GetTheme<TextTheme>();
41 CHECK_NULL_VOID(theme);
42 CalcDimension fontSize = theme->GetTextStyle().GetFontSize();
43 MarqueeModelNG::SetFontSize(frameNode, fontSize);
44 } else {
45 MarqueeModelNG::SetFontSize(frameNode, Dimension(fontSize, static_cast<OHOS::Ace::DimensionUnit>(unit)));
46 }
47 }
48
ResetMarqueeFontSize(ArkUINodeHandle node)49 void ResetMarqueeFontSize(ArkUINodeHandle node)
50 {
51 auto* frameNode = reinterpret_cast<FrameNode*>(node);
52 CHECK_NULL_VOID(frameNode);
53 auto pipelineContext = PipelineBase::GetCurrentContext();
54 CHECK_NULL_VOID(pipelineContext);
55 auto theme = pipelineContext->GetTheme<TextTheme>();
56 CHECK_NULL_VOID(theme);
57 CalcDimension fontSize = theme->GetTextStyle().GetFontSize();
58 MarqueeModelNG::SetFontSize(frameNode, fontSize);
59 }
60
SetMarqueeFontColor(ArkUINodeHandle node,uint32_t color)61 void SetMarqueeFontColor(ArkUINodeHandle node, uint32_t color)
62 {
63 auto* frameNode = reinterpret_cast<FrameNode*>(node);
64 CHECK_NULL_VOID(frameNode);
65 MarqueeModelNG::SetTextColor(frameNode, Color(color));
66 }
ResetMarqueeFontColor(ArkUINodeHandle node)67 void ResetMarqueeFontColor(ArkUINodeHandle node)
68 {
69 auto* frameNode = reinterpret_cast<FrameNode*>(node);
70 CHECK_NULL_VOID(frameNode);
71 std::optional<Color> colorOpt;
72 MarqueeModelNG::SetTextColor(frameNode, colorOpt);
73 }
SetMarqueeAllowScale(ArkUINodeHandle node,ArkUI_Bool allowScale)74 void SetMarqueeAllowScale(ArkUINodeHandle node, ArkUI_Bool allowScale)
75 {
76 auto* frameNode = reinterpret_cast<FrameNode*>(node);
77 CHECK_NULL_VOID(frameNode);
78 MarqueeModelNG::SetAllowScale(frameNode, allowScale);
79 }
80
ResetMarqueeAllowScale(ArkUINodeHandle node)81 void ResetMarqueeAllowScale(ArkUINodeHandle node)
82 {
83 auto* frameNode = reinterpret_cast<FrameNode*>(node);
84 CHECK_NULL_VOID(frameNode);
85 MarqueeModelNG::SetAllowScale(frameNode, DEFAULT_ALLOW_SCALE);
86 }
87
SetMarqueeFontWeight(ArkUINodeHandle node,const char * fontWeight)88 void SetMarqueeFontWeight(ArkUINodeHandle node, const char* fontWeight)
89 {
90 auto* frameNode = reinterpret_cast<FrameNode*>(node);
91 CHECK_NULL_VOID(frameNode);
92 MarqueeModelNG::SetFontWeight(frameNode, Framework::ConvertStrToFontWeight(fontWeight));
93 }
94
ResetMarqueeFontWeight(ArkUINodeHandle node)95 void ResetMarqueeFontWeight(ArkUINodeHandle node)
96 {
97 auto* frameNode = reinterpret_cast<FrameNode*>(node);
98 CHECK_NULL_VOID(frameNode);
99 MarqueeModelNG::SetFontWeight(frameNode, DEFAULT_FONT_WEIGHT);
100 }
101
SetMarqueeFontFamily(ArkUINodeHandle node,const char * fontFamily)102 void SetMarqueeFontFamily(ArkUINodeHandle node, const char* fontFamily)
103 {
104 auto* frameNode = reinterpret_cast<FrameNode*>(node);
105 CHECK_NULL_VOID(frameNode);
106 std::string familiesStr = fontFamily;
107 std::vector<std::string> fontFamilyResult = Framework::ConvertStrToFontFamilies(familiesStr);
108 MarqueeModelNG::SetFontFamily(frameNode, fontFamilyResult);
109 }
110
ResetMarqueeFontFamily(ArkUINodeHandle node)111 void ResetMarqueeFontFamily(ArkUINodeHandle node)
112 {
113 auto* frameNode = reinterpret_cast<FrameNode*>(node);
114 CHECK_NULL_VOID(frameNode);
115 std::string familiesStr = DEFAULT_FONT_FAMILY;
116 std::vector<std::string> fontFamilyResult = Framework::ConvertStrToFontFamilies(familiesStr);
117 MarqueeModelNG::SetFontFamily(frameNode, fontFamilyResult);
118 }
119
SetMarqueeUpdateStrategy(ArkUINodeHandle node,ArkUI_Uint32 value)120 void SetMarqueeUpdateStrategy(ArkUINodeHandle node, ArkUI_Uint32 value)
121 {
122 auto* frameNode = reinterpret_cast<FrameNode*>(node);
123 CHECK_NULL_VOID(frameNode);
124 MarqueeModelNG::SetMarqueeUpdateStrategy(frameNode, static_cast<OHOS::Ace::MarqueeUpdateStrategy>(value));
125 }
126
ResetMarqueeUpdateStrategy(ArkUINodeHandle node)127 void ResetMarqueeUpdateStrategy(ArkUINodeHandle node)
128 {
129 auto* frameNode = reinterpret_cast<FrameNode*>(node);
130 CHECK_NULL_VOID(frameNode);
131 MarqueeModelNG::SetMarqueeUpdateStrategy(frameNode, OHOS::Ace::MarqueeUpdateStrategy::DEFAULT);
132 }
133
SetMarqueeOnStart(ArkUINodeHandle node,void * callback)134 void SetMarqueeOnStart(ArkUINodeHandle node, void* callback)
135 {
136 auto* frameNode = reinterpret_cast<FrameNode*>(node);
137 CHECK_NULL_VOID(frameNode);
138 if (callback) {
139 auto onStart = reinterpret_cast<std::function<void()>*>(callback);
140 MarqueeModelNG::SetOnStart(frameNode, std::move(*onStart));
141 } else {
142 MarqueeModelNG::SetOnStart(frameNode, nullptr);
143 }
144 }
145
ResetMarqueeOnStart(ArkUINodeHandle node)146 void ResetMarqueeOnStart(ArkUINodeHandle node)
147 {
148 auto* frameNode = reinterpret_cast<FrameNode*>(node);
149 CHECK_NULL_VOID(frameNode);
150 MarqueeModelNG::SetOnStart(frameNode, nullptr);
151 }
152
SetMarqueeOnBounce(ArkUINodeHandle node,void * callback)153 void SetMarqueeOnBounce(ArkUINodeHandle node, void* callback)
154 {
155 auto* frameNode = reinterpret_cast<FrameNode*>(node);
156 CHECK_NULL_VOID(frameNode);
157 if (callback) {
158 auto onBounce = reinterpret_cast<std::function<void()>*>(callback);
159 MarqueeModelNG::SetOnBounce(frameNode, std::move(*onBounce));
160 } else {
161 MarqueeModelNG::SetOnBounce(frameNode, nullptr);
162 }
163 }
164
ResetMarqueeOnBounce(ArkUINodeHandle node)165 void ResetMarqueeOnBounce(ArkUINodeHandle node)
166 {
167 auto* frameNode = reinterpret_cast<FrameNode*>(node);
168 CHECK_NULL_VOID(frameNode);
169 MarqueeModelNG::SetOnBounce(frameNode, nullptr);
170 }
171
SetMarqueeOnFinish(ArkUINodeHandle node,void * callback)172 void SetMarqueeOnFinish(ArkUINodeHandle node, void* callback)
173 {
174 auto* frameNode = reinterpret_cast<FrameNode*>(node);
175 CHECK_NULL_VOID(frameNode);
176 if (callback) {
177 auto onFinish = reinterpret_cast<std::function<void()>*>(callback);
178 MarqueeModelNG::SetOnFinish(frameNode, std::move(*onFinish));
179 } else {
180 MarqueeModelNG::SetOnFinish(frameNode, nullptr);
181 }
182 }
183
ResetMarqueeOnFinish(ArkUINodeHandle node)184 void ResetMarqueeOnFinish(ArkUINodeHandle node)
185 {
186 auto* frameNode = reinterpret_cast<FrameNode*>(node);
187 CHECK_NULL_VOID(frameNode);
188 MarqueeModelNG::SetOnFinish(frameNode, nullptr);
189 }
190
191 namespace NodeModifier {
GetMarqueeModifier()192 const ArkUIMarqueeModifier* GetMarqueeModifier()
193 {
194 static const ArkUIMarqueeModifier modifier = {
195 SetMarqueeFontSize, ResetMarqueeFontSize, SetMarqueeFontColor,
196 ResetMarqueeFontColor, SetMarqueeAllowScale, ResetMarqueeAllowScale, SetMarqueeFontWeight,
197 ResetMarqueeFontWeight, SetMarqueeFontFamily, ResetMarqueeFontFamily, SetMarqueeUpdateStrategy,
198 ResetMarqueeUpdateStrategy, SetMarqueeOnStart, ResetMarqueeOnStart,
199 SetMarqueeOnBounce, ResetMarqueeOnBounce, SetMarqueeOnFinish, ResetMarqueeOnFinish };
200 return &modifier;
201 }
202
GetCJUIMarqueeModifier()203 const CJUIMarqueeModifier* GetCJUIMarqueeModifier()
204 {
205 static const CJUIMarqueeModifier modifier = {
206 SetMarqueeFontSize, ResetMarqueeFontSize, SetMarqueeFontColor,
207 ResetMarqueeFontColor, SetMarqueeAllowScale, ResetMarqueeAllowScale, SetMarqueeFontWeight,
208 ResetMarqueeFontWeight, SetMarqueeFontFamily, ResetMarqueeFontFamily, SetMarqueeUpdateStrategy,
209 ResetMarqueeUpdateStrategy, SetMarqueeOnStart, ResetMarqueeOnStart,
210 SetMarqueeOnBounce, ResetMarqueeOnBounce, SetMarqueeOnFinish, ResetMarqueeOnFinish };
211 return &modifier;
212 }
213 }
214 } // namespace OHOS::Ace::NG
215