1 /*
2 * Copyright (c) 2024-2025 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 "node_loading_progress_modifier.h"
16
17 #include "base/error/error_code.h"
18 #include "core/components/progress/progress_theme.h"
19 #include "core/components_ng/pattern/loading_progress/loading_progress_model_ng.h"
20 #include "core/pipeline_ng/pipeline_context.h"
21
22 namespace OHOS::Ace::NG {
23 namespace {
GetLoadingProgressColor(ArkUINodeHandle node)24 ArkUI_Uint32 GetLoadingProgressColor(ArkUINodeHandle node)
25 {
26 auto* frameNode = reinterpret_cast<FrameNode*>(node);
27 CHECK_NULL_RETURN(frameNode, 0x0);
28 return LoadingProgressModelNG::GetColor(frameNode);
29 }
30
SetLoadingProgressColor(ArkUINodeHandle node,uint32_t colorValue)31 void SetLoadingProgressColor(ArkUINodeHandle node, uint32_t colorValue)
32 {
33 auto* frameNode = reinterpret_cast<FrameNode*>(node);
34 CHECK_NULL_VOID(frameNode);
35 LoadingProgressModelNG::SetColorParseFailed(frameNode, false);
36 LoadingProgressModelNG::SetColor(frameNode, Color(colorValue));
37 }
38
SetLoadingProgressColorPtr(ArkUINodeHandle node,uint32_t colorValue,void * colorRawPtr)39 void SetLoadingProgressColorPtr(ArkUINodeHandle node, uint32_t colorValue, void* colorRawPtr)
40 {
41 auto* frameNode = reinterpret_cast<FrameNode*>(node);
42 CHECK_NULL_VOID(frameNode);
43 LoadingProgressModelNG::SetColorParseFailed(frameNode, false);
44 LoadingProgressModelNG::SetColor(frameNode, Color(colorValue));
45
46 if (SystemProperties::ConfigChangePerform()) {
47 auto* color = reinterpret_cast<ResourceObject*>(colorRawPtr);
48 auto colorResObj = AceType::Claim(color);
49 LoadingProgressModelNG::CreateWithResourceObj(frameNode, LoadingProgressResourceType::COLOR, colorResObj);
50 }
51 }
52
ResetLoadingProgressColor(ArkUINodeHandle node)53 void ResetLoadingProgressColor(ArkUINodeHandle node)
54 {
55 auto* frameNode = reinterpret_cast<FrameNode*>(node);
56 CHECK_NULL_VOID(frameNode);
57 if (Container::GreatOrEqualAPIVersion(PlatformVersion::VERSION_TEN)) {
58 auto pipelineContext = frameNode->GetContext();
59 CHECK_NULL_VOID(pipelineContext);
60 auto theme = pipelineContext->GetTheme<ProgressTheme>();
61 CHECK_NULL_VOID(theme);
62 LoadingProgressModelNG::SetColorParseFailed(frameNode, true);
63 LoadingProgressModelNG::SetColor(frameNode, theme->GetLoadingParseFailedColor());
64 }
65 if (SystemProperties::ConfigChangePerform()) {
66 LoadingProgressModelNG::SetColorByUser(frameNode, false);
67 LoadingProgressModelNG::CreateWithResourceObj(frameNode, LoadingProgressResourceType::COLOR, nullptr);
68 }
69 }
70
GetEnableLoading(ArkUINodeHandle node)71 ArkUI_Bool GetEnableLoading(ArkUINodeHandle node)
72 {
73 auto* frameNode = reinterpret_cast<FrameNode*>(node);
74 CHECK_NULL_RETURN(frameNode, ERROR_CODE_PARAM_INVALID);
75 return LoadingProgressModelNG::GetEnableLoading(frameNode);
76 }
77
SetEnableLoading(ArkUINodeHandle node,ArkUI_Bool enableLoadingValue)78 void SetEnableLoading(ArkUINodeHandle node, ArkUI_Bool enableLoadingValue)
79 {
80 auto* frameNode = reinterpret_cast<FrameNode*>(node);
81 CHECK_NULL_VOID(frameNode);
82 LoadingProgressModelNG::SetEnableLoading(frameNode, enableLoadingValue);
83 }
84
ResetEnableLoading(ArkUINodeHandle node)85 void ResetEnableLoading(ArkUINodeHandle node)
86 {
87 auto* frameNode = reinterpret_cast<FrameNode*>(node);
88 CHECK_NULL_VOID(frameNode);
89 LoadingProgressModelNG::SetEnableLoading(frameNode, true);
90 }
91
SetLoadingProgressForegroundColor(ArkUINodeHandle node,ArkUI_Uint32 colorValue)92 void SetLoadingProgressForegroundColor(ArkUINodeHandle node, ArkUI_Uint32 colorValue)
93 {
94 auto* frameNode = reinterpret_cast<FrameNode*>(node);
95 CHECK_NULL_VOID(frameNode);
96 LoadingProgressModelNG::SetForegroundColorParseFailed(frameNode, false);
97 LoadingProgressModelNG::SetForegroundColor(frameNode, Color(colorValue));
98 }
99
SetLoadingProgressForegroundColorPtr(ArkUINodeHandle node,ArkUI_Uint32 colorValue,void * foregroundColorRawPtr)100 void SetLoadingProgressForegroundColorPtr(ArkUINodeHandle node, ArkUI_Uint32 colorValue, void* foregroundColorRawPtr)
101 {
102 auto* frameNode = reinterpret_cast<FrameNode*>(node);
103 CHECK_NULL_VOID(frameNode);
104 LoadingProgressModelNG::SetForegroundColorParseFailed(frameNode, false);
105 LoadingProgressModelNG::SetForegroundColor(frameNode, Color(colorValue));
106
107 if (SystemProperties::ConfigChangePerform()) {
108 auto* color = reinterpret_cast<ResourceObject*>(foregroundColorRawPtr);
109 auto colorResObj = AceType::Claim(color);
110 LoadingProgressModelNG::CreateWithResourceObj(
111 frameNode, LoadingProgressResourceType::FOREGROUNDCOLOR, colorResObj);
112 }
113 }
114
ResetLoadingProgressForegroundColor(ArkUINodeHandle node)115 void ResetLoadingProgressForegroundColor(ArkUINodeHandle node)
116 {
117 auto* frameNode = reinterpret_cast<FrameNode*>(node);
118 CHECK_NULL_VOID(frameNode);
119 LoadingProgressModelNG::SetForegroundColorParseFailed(frameNode, true);
120 LoadingProgressModelNG::ResetForegroundColor(frameNode);
121 if (SystemProperties::ConfigChangePerform()) {
122 LoadingProgressModelNG::CreateWithResourceObj(
123 frameNode, LoadingProgressResourceType::FOREGROUNDCOLOR, nullptr);
124 }
125 }
126 } // namespace
127
128 namespace NodeModifier {
GetLoadingProgressModifier()129 const ArkUILoadingProgressModifier* GetLoadingProgressModifier()
130 {
131 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
132 static const ArkUILoadingProgressModifier modifier = {
133 .getColor = GetLoadingProgressColor,
134 .setColor = SetLoadingProgressColor,
135 .setColorPtr = SetLoadingProgressColorPtr,
136 .resetColor = ResetLoadingProgressColor,
137 .getEnableLoading = GetEnableLoading,
138 .setEnableLoading = SetEnableLoading,
139 .resetEnableLoading = ResetEnableLoading,
140 .setForegroundColor = SetLoadingProgressForegroundColor,
141 .setForegroundColorPtr = SetLoadingProgressForegroundColorPtr,
142 .resetForegroundColor = ResetLoadingProgressForegroundColor,
143 };
144 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
145
146 return &modifier;
147 }
148
GetCJUILoadingProgressModifier()149 const CJUILoadingProgressModifier* GetCJUILoadingProgressModifier()
150 {
151 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
152 static const CJUILoadingProgressModifier modifier = {
153 .getColor = GetLoadingProgressColor,
154 .setColor = SetLoadingProgressColor,
155 .setColorPtr = SetLoadingProgressColorPtr,
156 .resetColor = ResetLoadingProgressColor,
157 .getEnableLoading = GetEnableLoading,
158 .setEnableLoading = SetEnableLoading,
159 .resetEnableLoading = ResetEnableLoading,
160 .setForegroundColor = SetLoadingProgressForegroundColor,
161 .setForegroundColorPtr = SetLoadingProgressForegroundColorPtr,
162 .resetForegroundColor = ResetLoadingProgressForegroundColor,
163 };
164 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
165
166 return &modifier;
167 }
168 } // namespace NodeModifier
169 } // namespace OHOS::Ace::NG
170