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