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 "swiper_helper.h"
17
18 #include "base/log/dump_log.h"
19 #include "core/components_ng/pattern/swiper_indicator/indicator_common/swiper_indicator_layout_property.h"
20
21 namespace OHOS::Ace::NG {
InitSwiperController(const RefPtr<SwiperController> & controller,const WeakPtr<SwiperPattern> & weak)22 void SwiperHelper::InitSwiperController(const RefPtr<SwiperController>& controller, const WeakPtr<SwiperPattern>& weak)
23 {
24 controller->SetSwipeToImpl([weak](int32_t index, bool reverse) {
25 auto swiper = weak.Upgrade();
26 CHECK_NULL_VOID(swiper);
27 swiper->SwipeTo(index);
28 });
29
30 controller->SetSwipeToWithoutAnimationImpl([weak](int32_t index) {
31 auto swiper = weak.Upgrade();
32 CHECK_NULL_VOID(swiper);
33 swiper->SwipeToWithoutAnimation(index);
34 });
35
36 controller->SetShowNextImpl([weak]() {
37 auto swiper = weak.Upgrade();
38 CHECK_NULL_VOID(swiper);
39 auto swiperNode = swiper->GetHost();
40 CHECK_NULL_VOID(swiperNode);
41 TAG_LOGI(AceLogTag::ACE_SWIPER, "Swiper ShowNext, id:%{public}d", swiperNode->GetId());
42 swiper->ShowNext();
43 });
44
45 controller->SetShowPrevImpl([weak]() {
46 auto swiper = weak.Upgrade();
47 CHECK_NULL_VOID(swiper);
48 auto swiperNode = swiper->GetHost();
49 CHECK_NULL_VOID(swiperNode);
50 TAG_LOGI(AceLogTag::ACE_SWIPER, "Swiper ShowPrevious, id:%{public}d", swiperNode->GetId());
51 swiper->ShowPrevious();
52 });
53
54 controller->SetChangeIndexImpl([weak](int32_t index, bool useAnimation) {
55 auto swiper = weak.Upgrade();
56 CHECK_NULL_VOID(swiper);
57 TAG_LOGI(AceLogTag::ACE_SWIPER, "Swiper ChangeIndex %{public}d, useAnimation:%{public}d", index, useAnimation);
58 swiper->ChangeIndex(index, useAnimation);
59 });
60
61 SetChangeIndexWithModeImpl(controller, weak);
62
63 controller->SetFinishImpl([weak]() {
64 auto swiper = weak.Upgrade();
65 CHECK_NULL_VOID(swiper);
66 swiper->FinishAnimation();
67 });
68
69 controller->SetPreloadItemsImpl([weak](const std::set<int32_t>& indexSet) {
70 auto swiper = weak.Upgrade();
71 CHECK_NULL_VOID(swiper);
72 swiper->PreloadItems(indexSet);
73 });
74 }
75
SetChangeIndexWithModeImpl(const RefPtr<SwiperController> & controller,const WeakPtr<SwiperPattern> & weak)76 void SwiperHelper::SetChangeIndexWithModeImpl(const RefPtr<SwiperController>& controller,
77 const WeakPtr<SwiperPattern>& weak)
78 {
79 CHECK_NULL_VOID(controller);
80 controller->SetChangeIndexWithModeImpl([weak](int32_t index, SwiperAnimationMode animationMode) {
81 auto swiper = weak.Upgrade();
82 CHECK_NULL_VOID(swiper);
83 TAG_LOGI(AceLogTag::ACE_SWIPER, "Swiper ChangeIndex %{public}d, animationMode:%{public}d",
84 index, animationMode);
85 swiper->ChangeIndex(index, animationMode);
86 });
87 }
88
SaveDigitIndicatorProperty(const RefPtr<FrameNode> & indicatorNode,SwiperPattern & swiper)89 void SwiperHelper::SaveDigitIndicatorProperty(const RefPtr<FrameNode>& indicatorNode, SwiperPattern& swiper)
90 {
91 CHECK_NULL_VOID(indicatorNode);
92 auto indicatorProps = indicatorNode->GetLayoutProperty<SwiperIndicatorLayoutProperty>();
93 CHECK_NULL_VOID(indicatorProps);
94 auto pipeline = PipelineBase::GetCurrentContext();
95 CHECK_NULL_VOID(pipeline);
96 const auto theme = pipeline->GetTheme<SwiperIndicatorTheme>();
97 const auto digitalParams = swiper.GetSwiperDigitalParameters();
98 CHECK_NULL_VOID(digitalParams);
99 indicatorProps->ResetIndicatorLayoutStyle();
100 if (digitalParams->dimLeft.has_value()) {
101 indicatorProps->UpdateLeft(digitalParams->dimLeft.value());
102 }
103 if (digitalParams->dimTop.has_value()) {
104 indicatorProps->UpdateTop(digitalParams->dimTop.value());
105 }
106 if (digitalParams->dimRight.has_value()) {
107 indicatorProps->UpdateRight(digitalParams->dimRight.value());
108 }
109 if (digitalParams->dimBottom.has_value()) {
110 indicatorProps->UpdateBottom(digitalParams->dimBottom.value());
111 }
112 indicatorProps->UpdateFontColor(
113 digitalParams->fontColor.value_or(theme->GetDigitalIndicatorTextStyle().GetTextColor()));
114 indicatorProps->UpdateSelectedFontColor(
115 digitalParams->selectedFontColor.value_or(theme->GetDigitalIndicatorTextStyle().GetTextColor()));
116 indicatorProps->UpdateFontSize(
117 digitalParams->fontSize.value_or(theme->GetDigitalIndicatorTextStyle().GetFontSize()));
118 indicatorProps->UpdateSelectedFontSize(
119 digitalParams->selectedFontSize.value_or(theme->GetDigitalIndicatorTextStyle().GetFontSize()));
120 indicatorProps->UpdateFontWeight(
121 digitalParams->fontWeight.value_or(theme->GetDigitalIndicatorTextStyle().GetFontWeight()));
122 indicatorProps->UpdateSelectedFontWeight(
123 digitalParams->selectedFontWeight.value_or(theme->GetDigitalIndicatorTextStyle().GetFontWeight()));
124 auto props = swiper.GetLayoutProperty<SwiperLayoutProperty>();
125 CHECK_NULL_VOID(props);
126 props->UpdateLeft(digitalParams->dimLeft.value_or(0.0_vp));
127 props->UpdateTop(digitalParams->dimTop.value_or(0.0_vp));
128 props->UpdateRight(digitalParams->dimRight.value_or(0.0_vp));
129 props->UpdateBottom(digitalParams->dimBottom.value_or(0.0_vp));
130 swiper.SetDigitStartAndEndProperty(indicatorNode);
131 }
132
SaveDotIndicatorProperty(const RefPtr<FrameNode> & indicatorNode,SwiperPattern & swiper)133 void SwiperHelper::SaveDotIndicatorProperty(const RefPtr<FrameNode>& indicatorNode, SwiperPattern& swiper)
134 {
135 CHECK_NULL_VOID(indicatorNode);
136 auto indicatorProps = indicatorNode->GetLayoutProperty<SwiperIndicatorLayoutProperty>();
137 CHECK_NULL_VOID(indicatorProps);
138 const auto params = swiper.GetSwiperParameters();
139 CHECK_NULL_VOID(params);
140 indicatorProps->ResetIndicatorLayoutStyle();
141 if (params->dimLeft.has_value()) {
142 indicatorProps->UpdateLeft(params->dimLeft.value());
143 }
144 if (params->dimTop.has_value()) {
145 indicatorProps->UpdateTop(params->dimTop.value());
146 }
147 if (params->dimRight.has_value()) {
148 indicatorProps->UpdateRight(params->dimRight.value());
149 }
150 if (params->dimBottom.has_value()) {
151 indicatorProps->UpdateBottom(params->dimBottom.value());
152 }
153 const bool isRtl = swiper.GetNonAutoLayoutDirection() == TextDirection::RTL;
154 if (params->dimStart.has_value()) {
155 auto dimValue = params->dimStart.value();
156 isRtl ? indicatorProps->UpdateRight(dimValue) : indicatorProps->UpdateLeft(dimValue);
157 } else if (params->dimEnd.has_value()) {
158 auto dimValue = params->dimEnd.value();
159 isRtl ? indicatorProps->UpdateLeft(dimValue) : indicatorProps->UpdateRight(dimValue);
160 }
161
162 swiper.UpdatePaintProperty(indicatorNode);
163 }
164
165 namespace {
DumpPanDirection(const PanDirection & pan)166 void DumpPanDirection(const PanDirection& pan)
167 {
168 switch (pan.type) {
169 case PanDirection::NONE: {
170 DumpLog::GetInstance().AddDesc("PanDirection:NONE");
171 break;
172 }
173 case PanDirection::LEFT: {
174 DumpLog::GetInstance().AddDesc("PanDirection:LEFT");
175 break;
176 }
177 case PanDirection::RIGHT: {
178 DumpLog::GetInstance().AddDesc("PanDirection:RIGHT");
179 break;
180 }
181 case PanDirection::HORIZONTAL: {
182 DumpLog::GetInstance().AddDesc("PanDirection:HORIZONTAL");
183 break;
184 }
185 case PanDirection::UP: {
186 DumpLog::GetInstance().AddDesc("PanDirection:UP");
187 break;
188 }
189 case PanDirection::DOWN: {
190 DumpLog::GetInstance().AddDesc("PanDirection:DOWN");
191 break;
192 }
193 case PanDirection::VERTICAL: {
194 DumpLog::GetInstance().AddDesc("PanDirection:VERTICAL");
195 break;
196 }
197 case PanDirection::ALL: {
198 DumpLog::GetInstance().AddDesc("PanDirection:ALL");
199 break;
200 }
201 default: {
202 break;
203 }
204 }
205 }
206
DumpDirection(Axis direction)207 void DumpDirection(Axis direction)
208 {
209 switch (direction) {
210 case Axis::NONE: {
211 DumpLog::GetInstance().AddDesc("Axis:NONE");
212 break;
213 }
214 case Axis::HORIZONTAL: {
215 DumpLog::GetInstance().AddDesc("Axis:HORIZONTAL");
216 break;
217 }
218 case Axis::FREE: {
219 DumpLog::GetInstance().AddDesc("Axis:FREE");
220 break;
221 }
222 case Axis::VERTICAL: {
223 DumpLog::GetInstance().AddDesc("Axis:VERTICAL");
224 break;
225 }
226 default: {
227 break;
228 }
229 }
230 }
231
DumpIndicatorType(const std::optional<SwiperIndicatorType> & type)232 void DumpIndicatorType(const std::optional<SwiperIndicatorType>& type)
233 {
234 if (type.has_value()) {
235 switch (type.value()) {
236 case SwiperIndicatorType::DOT: {
237 DumpLog::GetInstance().AddDesc("SwiperIndicatorType:DOT");
238 break;
239 }
240 case SwiperIndicatorType::DIGIT: {
241 DumpLog::GetInstance().AddDesc("SwiperIndicatorType:DIGIT");
242 break;
243 }
244 default: {
245 break;
246 }
247 }
248 } else {
249 DumpLog::GetInstance().AddDesc("lastSwiperIndicatorType:null");
250 }
251 }
252
DumpItemPosition(const SwiperLayoutAlgorithm::PositionMap & positions)253 void DumpItemPosition(const SwiperLayoutAlgorithm::PositionMap& positions)
254 {
255 for (const auto& item : positions) {
256 DumpLog::GetInstance().AddDesc(std::string("id:")
257 .append(std::to_string(item.first))
258 .append(",startPos:")
259 .append(std::to_string(item.second.startPos))
260 .append(",endPos:" + std::to_string(item.second.endPos)));
261 }
262 }
263 } // namespace
264
DumpAdvanceInfo(SwiperPattern & swiper)265 void SwiperHelper::DumpAdvanceInfo(SwiperPattern& swiper)
266 {
267 DumpInfoAddPositionDesc(swiper);
268 DumpInfoAddGestureDesc(swiper);
269 DumpIndicatorType(swiper.lastSwiperIndicatorType_);
270 DumpInfoAddAnimationDesc(swiper);
271 if (!swiper.itemPosition_.empty()) {
272 DumpLog::GetInstance().AddDesc("-----------start print itemPosition------------");
273 DumpItemPosition(swiper.itemPosition_);
274 DumpLog::GetInstance().AddDesc("-----------end print itemPosition------------");
275 }
276 if (!swiper.itemPositionInAnimation_.empty()) {
277 DumpLog::GetInstance().AddDesc("-----------start print itemPositionInAnimation------------");
278 DumpItemPosition(swiper.itemPositionInAnimation_);
279 DumpLog::GetInstance().AddDesc("-----------end print itemPositionInAnimation------------");
280 }
281 DumpPanDirection(swiper.panDirection_);
282 DumpDirection(swiper.direction_);
283 }
284
DumpInfoAddPositionDesc(SwiperPattern & swiper)285 void SwiperHelper::DumpInfoAddPositionDesc(SwiperPattern& swiper)
286 {
287 swiper.crossMatchChild_ ? DumpLog::GetInstance().AddDesc("crossMatchChild:true")
288 : DumpLog::GetInstance().AddDesc("crossMatchChild:false");
289 swiper.uiCastJumpIndex_.has_value()
290 ? DumpLog::GetInstance().AddDesc("uiCastJumpIndex:" + std::to_string(swiper.uiCastJumpIndex_.value()))
291 : DumpLog::GetInstance().AddDesc("uiCastJumpIndex:null");
292 swiper.jumpIndex_.has_value()
293 ? DumpLog::GetInstance().AddDesc("jumpIndex:" + std::to_string(swiper.jumpIndex_.value()))
294 : DumpLog::GetInstance().AddDesc("jumpIndex:null");
295 swiper.targetIndex_.has_value()
296 ? DumpLog::GetInstance().AddDesc("targetIndex:" + std::to_string(swiper.targetIndex_.value()))
297 : DumpLog::GetInstance().AddDesc("targetIndex:null");
298 swiper.preTargetIndex_.has_value()
299 ? DumpLog::GetInstance().AddDesc("preTargetIndex:" + std::to_string(swiper.preTargetIndex_.value()))
300 : DumpLog::GetInstance().AddDesc("preTargetIndex:null");
301 swiper.pauseTargetIndex_.has_value()
302 ? DumpLog::GetInstance().AddDesc("pauseTargetIndex:" + std::to_string(swiper.pauseTargetIndex_.value()))
303 : DumpLog::GetInstance().AddDesc("pauseTargetIndex:null");
304 DumpLog::GetInstance().AddDesc("currentIndex:" + std::to_string(swiper.currentIndex_));
305 DumpLog::GetInstance().AddDesc("oldIndex:" + std::to_string(swiper.oldIndex_));
306 DumpLog::GetInstance().AddDesc("currentOffset:" + std::to_string(swiper.currentOffset_));
307 DumpLog::GetInstance().AddDesc("fadeOffset:" + std::to_string(swiper.fadeOffset_));
308 DumpLog::GetInstance().AddDesc("touchBottomRate:" + std::to_string(swiper.touchBottomRate_));
309 DumpLog::GetInstance().AddDesc("currentIndexOffset:" + std::to_string(swiper.currentIndexOffset_));
310 DumpLog::GetInstance().AddDesc("gestureSwipeIndex:" + std::to_string(swiper.gestureSwipeIndex_));
311 DumpLog::GetInstance().AddDesc("currentFirstIndex:" + std::to_string(swiper.currentFirstIndex_));
312 DumpLog::GetInstance().AddDesc("startMainPos:" + std::to_string(swiper.startMainPos_));
313 DumpLog::GetInstance().AddDesc("endMainPos:" + std::to_string(swiper.endMainPos_));
314 DumpLog::GetInstance().AddDesc("contentMainSize:" + std::to_string(swiper.contentMainSize_));
315 DumpLog::GetInstance().AddDesc("contentCrossSize:" + std::to_string(swiper.contentCrossSize_));
316 }
317
DumpInfoAddGestureDesc(SwiperPattern & swiper)318 void SwiperHelper::DumpInfoAddGestureDesc(SwiperPattern& swiper)
319 {
320 swiper.isLastIndicatorFocused_ ? DumpLog::GetInstance().AddDesc("isLastIndicatorFocused:true")
321 : DumpLog::GetInstance().AddDesc("isLastIndicatorFocused:false");
322 swiper.moveDirection_ ? DumpLog::GetInstance().AddDesc("moveDirection:true")
323 : DumpLog::GetInstance().AddDesc("moveDirection:false");
324 swiper.indicatorDoingAnimation_ ? DumpLog::GetInstance().AddDesc("indicatorDoingAnimation:true")
325 : DumpLog::GetInstance().AddDesc("indicatorDoingAnimation:false");
326 swiper.hasVisibleChangeRegistered_ ? DumpLog::GetInstance().AddDesc("hasVisibleChangeRegistered:true")
327 : DumpLog::GetInstance().AddDesc("hasVisibleChangeRegistered:false");
328 swiper.isVisible_ ? DumpLog::GetInstance().AddDesc("isVisible:true")
329 : DumpLog::GetInstance().AddDesc("isVisible:false");
330 swiper.isVisibleArea_ ? DumpLog::GetInstance().AddDesc("isVisibleArea:true")
331 : DumpLog::GetInstance().AddDesc("isVisibleArea:false");
332 swiper.isWindowShow_ ? DumpLog::GetInstance().AddDesc("isWindowShow:true")
333 : DumpLog::GetInstance().AddDesc("isWindowShow:false");
334 swiper.isCustomSize_ ? DumpLog::GetInstance().AddDesc("IsCustomSize:true")
335 : DumpLog::GetInstance().AddDesc("IsCustomSize:false");
336 swiper.indicatorIsBoolean_ ? DumpLog::GetInstance().AddDesc("indicatorIsBoolean:true")
337 : DumpLog::GetInstance().AddDesc("indicatorIsBoolean:false");
338 swiper.isAtHotRegion_ ? DumpLog::GetInstance().AddDesc("isAtHotRegion:true")
339 : DumpLog::GetInstance().AddDesc("isAtHotRegion:false");
340 swiper.isDragging_ ? DumpLog::GetInstance().AddDesc("isDragging:true")
341 : DumpLog::GetInstance().AddDesc("isDragging:false");
342 swiper.isTouchDown_ ? DumpLog::GetInstance().AddDesc("isTouchDown:true")
343 : DumpLog::GetInstance().AddDesc("isTouchDown:false");
344 swiper.isIndicatorLongPress_ ? DumpLog::GetInstance().AddDesc("isIndicatorLongPress:true")
345 : DumpLog::GetInstance().AddDesc("isIndicatorLongPress:false");
346 swiper.preLoop_.has_value() ? DumpLog::GetInstance().AddDesc("preLoop:" + std::to_string(swiper.preLoop_.value()))
347 : DumpLog::GetInstance().AddDesc("preLoop:null");
348 swiper.indicatorId_.has_value()
349 ? DumpLog::GetInstance().AddDesc("indicatorId:" + std::to_string(swiper.indicatorId_.value()))
350 : DumpLog::GetInstance().AddDesc("indicatorId:null");
351 swiper.leftButtonId_.has_value()
352 ? DumpLog::GetInstance().AddDesc("leftButtonId:" + std::to_string(swiper.leftButtonId_.value()))
353 : DumpLog::GetInstance().AddDesc("leftButtonId:null");
354 swiper.rightButtonId_.has_value()
355 ? DumpLog::GetInstance().AddDesc("rightButtonId:" + std::to_string(swiper.rightButtonId_.value()))
356 : DumpLog::GetInstance().AddDesc("rightButtonId:null");
357 }
358
DumpInfoAddAnimationDesc(SwiperPattern & swiper)359 void SwiperHelper::DumpInfoAddAnimationDesc(SwiperPattern& swiper)
360 {
361 swiper.isFinishAnimation_ ? DumpLog::GetInstance().AddDesc("isFinishAnimation:true")
362 : DumpLog::GetInstance().AddDesc("isFinishAnimation:false");
363 swiper.mainSizeIsMeasured_ ? DumpLog::GetInstance().AddDesc("mainSizeIsMeasured:true")
364 : DumpLog::GetInstance().AddDesc("mainSizeIsMeasured:false");
365 swiper.usePropertyAnimation_ ? DumpLog::GetInstance().AddDesc("usePropertyAnimation:true")
366 : DumpLog::GetInstance().AddDesc("usePropertyAnimation:false");
367 swiper.isUserFinish_ ? DumpLog::GetInstance().AddDesc("isUserFinish:true")
368 : DumpLog::GetInstance().AddDesc("isUserFinish:false");
369 swiper.isVoluntarilyClear_ ? DumpLog::GetInstance().AddDesc("isVoluntarilyClear:true")
370 : DumpLog::GetInstance().AddDesc("isVoluntarilyClear:false");
371 swiper.stopIndicatorAnimation_ ? DumpLog::GetInstance().AddDesc("stopIndicatorAnimation:true")
372 : DumpLog::GetInstance().AddDesc("stopIndicatorAnimation:false");
373 swiper.isTouchPad_ ? DumpLog::GetInstance().AddDesc("isTouchPad:true")
374 : DumpLog::GetInstance().AddDesc("isTouchPad:false");
375 swiper.surfaceChangedCallbackId_.has_value()
376 ? DumpLog::GetInstance().AddDesc("surfaceChangedCallbackId:"
377 + std::to_string(swiper.surfaceChangedCallbackId_.value()))
378 : DumpLog::GetInstance().AddDesc("surfaceChangedCallbackId:null");
379 swiper.velocity_.has_value()
380 ? DumpLog::GetInstance().AddDesc("velocity:" + std::to_string(swiper.velocity_.value()))
381 : DumpLog::GetInstance().AddDesc("velocity:null");
382 swiper.GetCurveIncludeMotion()
383 ? DumpLog::GetInstance().AddDesc("curve:" + swiper.GetCurveIncludeMotion()->ToString())
384 : DumpLog::GetInstance().AddDesc("curve:null");
385 DumpLog::GetInstance().AddDesc("currentDelta:" + std::to_string(swiper.currentDelta_));
386 DumpLog::GetInstance().AddDesc("propertyAnimationIndex:" + std::to_string(swiper.propertyAnimationIndex_));
387 DumpLog::GetInstance().AddDesc("mainDeltaSum:" + std::to_string(swiper.mainDeltaSum_));
388 }
389
GetDotIndicatorStyle(const std::shared_ptr<SwiperParameters> & params)390 std::string SwiperHelper::GetDotIndicatorStyle(const std::shared_ptr<SwiperParameters>& params)
391 {
392 CHECK_NULL_RETURN(params, "");
393 auto jsonValue = JsonUtil::Create(true);
394 jsonValue->Put("left", params->dimLeft.value_or(0.0_vp).ToString().c_str());
395 jsonValue->Put("top", params->dimTop.value_or(0.0_vp).ToString().c_str());
396 jsonValue->Put("right", params->dimRight.value_or(0.0_vp).ToString().c_str());
397 jsonValue->Put("bottom", params->dimBottom.value_or(0.0_vp).ToString().c_str());
398 jsonValue->Put("itemWidth", params->itemWidth.value_or(6.0_vp).ToString().c_str());
399 jsonValue->Put("itemHeight", params->itemHeight.value_or(6.0_vp).ToString().c_str());
400 jsonValue->Put("selectedItemWidth", params->selectedItemWidth.value_or(6.0_vp).ToString().c_str());
401 jsonValue->Put("selectedItemHeight", params->selectedItemHeight.value_or(6.0_vp).ToString().c_str());
402 jsonValue->Put(
403 "selectedColor", params->selectedColorVal.value_or(Color::FromString("#ff007dff")).ColorToString().c_str());
404 jsonValue->Put("color", params->colorVal.value_or(Color::FromString("#19182431")).ColorToString().c_str());
405 jsonValue->Put("mask", params->maskValue.value_or(false) ? "true" : "false");
406 jsonValue->Put(
407 "maxDisplayCount", (params->maxDisplayCountVal.has_value()) ? params->maxDisplayCountVal.value() : 0);
408 return jsonValue->ToString();
409 }
410
GetDigitIndicatorStyle(const std::shared_ptr<SwiperDigitalParameters> & params)411 std::string SwiperHelper::GetDigitIndicatorStyle(const std::shared_ptr<SwiperDigitalParameters>& params)
412 {
413 CHECK_NULL_RETURN(params, "");
414 auto jsonValue = JsonUtil::Create(true);
415 auto pipeline = PipelineBase::GetCurrentContext();
416 CHECK_NULL_RETURN(pipeline, "");
417 auto theme = pipeline->GetTheme<SwiperIndicatorTheme>();
418 CHECK_NULL_RETURN(theme, "");
419 jsonValue->Put("left", params->dimLeft.value_or(0.0_vp).ToString().c_str());
420 jsonValue->Put("top", params->dimTop.value_or(0.0_vp).ToString().c_str());
421 jsonValue->Put("right", params->dimRight.value_or(0.0_vp).ToString().c_str());
422 jsonValue->Put("bottom", params->dimBottom.value_or(0.0_vp).ToString().c_str());
423 jsonValue->Put(
424 "fontSize", params->fontSize.value_or(theme->GetDigitalIndicatorTextStyle().GetFontSize()).ToString().c_str());
425 jsonValue->Put("fontColor",
426 params->fontColor.value_or(theme->GetDigitalIndicatorTextStyle().GetTextColor()).ColorToString().c_str());
427 jsonValue->Put(
428 "fontWeight", V2::ConvertWrapFontWeightToStirng(params->fontWeight.value_or(FontWeight::NORMAL)).c_str());
429 jsonValue->Put("selectedFontSize",
430 params->selectedFontSize.value_or(theme->GetDigitalIndicatorTextStyle().GetFontSize()).ToString().c_str());
431 jsonValue->Put(
432 "selectedFontColor", params->selectedFontColor.value_or(theme->GetDigitalIndicatorTextStyle().GetTextColor())
433 .ColorToString()
434 .c_str());
435 jsonValue->Put("selectedFontWeight",
436 V2::ConvertWrapFontWeightToStirng(params->selectedFontWeight.value_or(FontWeight::NORMAL)).c_str());
437 return jsonValue->ToString();
438 }
439 } // namespace OHOS::Ace::NG
440