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/qrcode_modifier.h"
16
17 #include "core/components/qrcode/qrcode_theme.h"
18 #include "core/components_ng/pattern/qrcode/qrcode_model_ng.h"
19
20 namespace OHOS::Ace::NG {
21 constexpr uint32_t DEFAULT_BG_COLOR = 0xffffffff;
22 constexpr double DEFAULT_OPACITY = 1.0;
23
SetQRColor(ArkUINodeHandle node,uint32_t color)24 void SetQRColor(ArkUINodeHandle node, uint32_t color)
25 {
26 auto* frameNode = reinterpret_cast<FrameNode*>(node);
27 CHECK_NULL_VOID(frameNode);
28 QRCodeModelNG::SetQRCodeColor(frameNode, Color(color));
29 }
30
SetQRColorPtr(ArkUINodeHandle node,uint32_t color,void * colorRawPtr)31 void SetQRColorPtr(ArkUINodeHandle node, uint32_t color, void* colorRawPtr)
32 {
33 auto* frameNode = reinterpret_cast<FrameNode*>(node);
34 CHECK_NULL_VOID(frameNode);
35 QRCodeModelNG::SetQRCodeColor(frameNode, Color(color));
36
37 if (SystemProperties::ConfigChangePerform()) {
38 auto* color = reinterpret_cast<ResourceObject*>(colorRawPtr);
39 auto colorResObj = AceType::Claim(color);
40 QRCodeModelNG::CreateWithResourceObj(frameNode, QRCodeResourceType::COLOR, colorResObj);
41 }
42 }
43
ResetQRColor(ArkUINodeHandle node)44 void ResetQRColor(ArkUINodeHandle node)
45 {
46 auto* frameNode = reinterpret_cast<FrameNode*>(node);
47 CHECK_NULL_VOID(frameNode);
48 RefPtr<QrcodeTheme> qrcodeTheme = GetTheme<QrcodeTheme>();
49 CHECK_NULL_VOID(qrcodeTheme);
50 Color qrcodeColor = qrcodeTheme->GetQrcodeColor();
51 QRCodeModelNG::SetQRCodeColor(frameNode, qrcodeColor);
52 if (SystemProperties::ConfigChangePerform()) {
53 QRCodeModelNG::CreateWithResourceObj(frameNode, QRCodeResourceType::COLOR, nullptr);
54 }
55 }
56
SetQRBackgroundColor(ArkUINodeHandle node,uint32_t color)57 void SetQRBackgroundColor(ArkUINodeHandle node, uint32_t color)
58 {
59 auto* frameNode = reinterpret_cast<FrameNode*>(node);
60 CHECK_NULL_VOID(frameNode);
61 QRCodeModelNG::SetQRBackgroundColor(frameNode, Color(color));
62 }
63
SetQRBackgroundColorPtr(ArkUINodeHandle node,uint32_t color,void * colorRawPtr)64 void SetQRBackgroundColorPtr(ArkUINodeHandle node, uint32_t color, void* colorRawPtr)
65 {
66 auto* frameNode = reinterpret_cast<FrameNode*>(node);
67 CHECK_NULL_VOID(frameNode);
68 QRCodeModelNG::SetQRBackgroundColor(frameNode, Color(color));
69
70 if (SystemProperties::ConfigChangePerform()) {
71 auto* color = reinterpret_cast<ResourceObject*>(colorRawPtr);
72 auto colorResObj = AceType::Claim(color);
73 QRCodeModelNG::CreateWithResourceObj(frameNode, QRCodeResourceType::BACKGROUND_COLOR, colorResObj);
74 }
75 }
76
ResetQRBackgroundColor(ArkUINodeHandle node)77 void ResetQRBackgroundColor(ArkUINodeHandle node)
78 {
79 auto* frameNode = reinterpret_cast<FrameNode*>(node);
80 CHECK_NULL_VOID(frameNode);
81 QRCodeModelNG::SetQRBackgroundColor(frameNode, Color(DEFAULT_BG_COLOR));
82 if (SystemProperties::ConfigChangePerform()) {
83 QRCodeModelNG::CreateWithResourceObj(frameNode, QRCodeResourceType::BACKGROUND_COLOR, nullptr);
84 }
85 }
86
SetContentOpacity(ArkUINodeHandle node,ArkUI_Float32 opacity)87 void SetContentOpacity(ArkUINodeHandle node, ArkUI_Float32 opacity)
88 {
89 auto* frameNode = reinterpret_cast<FrameNode*>(node);
90 CHECK_NULL_VOID(frameNode);
91 // The minimum value of opacity is 0 and the maximum value is 1.
92 if (LessNotEqual(opacity, 0.0) || GreatNotEqual(opacity, 1.0)) {
93 QRCodeModelNG::SetContentOpacity(frameNode, DEFAULT_OPACITY);
94 } else {
95 QRCodeModelNG::SetContentOpacity(frameNode, opacity);
96 }
97 }
98
SetContentOpacityPtr(ArkUINodeHandle node,ArkUI_Float32 opacity,void * opacityRawPtr)99 void SetContentOpacityPtr(ArkUINodeHandle node, ArkUI_Float32 opacity, void* opacityRawPtr)
100 {
101 auto* frameNode = reinterpret_cast<FrameNode*>(node);
102 CHECK_NULL_VOID(frameNode);
103 // The minimum value of opacity is 0 and the maximum value is 1.
104 if (LessNotEqual(opacity, 0.0) || GreatNotEqual(opacity, 1.0)) {
105 QRCodeModelNG::SetContentOpacity(frameNode, DEFAULT_OPACITY);
106 } else {
107 QRCodeModelNG::SetContentOpacity(frameNode, opacity);
108 }
109
110 if (SystemProperties::ConfigChangePerform()) {
111 auto* opacity = reinterpret_cast<ResourceObject*>(opacityRawPtr);
112 auto opacityResObj = AceType::Claim(opacity);
113 QRCodeModelNG::CreateWithResourceObj(frameNode, QRCodeResourceType::CONTENT_OPACITY, opacityResObj);
114 }
115 }
116
ResetContentOpacity(ArkUINodeHandle node)117 void ResetContentOpacity(ArkUINodeHandle node)
118 {
119 auto* frameNode = reinterpret_cast<FrameNode*>(node);
120 CHECK_NULL_VOID(frameNode);
121 QRCodeModelNG::SetContentOpacity(frameNode, DEFAULT_OPACITY);
122 if (SystemProperties::ConfigChangePerform()) {
123 QRCodeModelNG::CreateWithResourceObj(frameNode, QRCodeResourceType::CONTENT_OPACITY, nullptr);
124 }
125 }
126
SetQRValue(ArkUINodeHandle node,ArkUI_CharPtr value)127 void SetQRValue(ArkUINodeHandle node, ArkUI_CharPtr value)
128 {
129 auto* frameNode = reinterpret_cast<FrameNode*>(node);
130 CHECK_NULL_VOID(frameNode);
131 CHECK_NULL_VOID(value);
132 QRCodeModelNG::SetQRCodeValue(frameNode, std::string(value));
133 }
134
135 namespace NodeModifier {
GetQRCodeModifier()136 const ArkUIQRCodeModifier* GetQRCodeModifier()
137 {
138 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
139 static const ArkUIQRCodeModifier modifier = {
140 .setQRColor = SetQRColor,
141 .setQRColorPtr = SetQRColorPtr,
142 .resetQRColor = ResetQRColor,
143 .setQRBackgroundColor = SetQRBackgroundColor,
144 .setQRBackgroundColorPtr = SetQRBackgroundColorPtr,
145 .resetQRBackgroundColor = ResetQRBackgroundColor,
146 .setContentOpacity = SetContentOpacity,
147 .setContentOpacityPtr = SetContentOpacityPtr,
148 .resetContentOpacity = ResetContentOpacity,
149 .setQRValue = SetQRValue,
150 };
151 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
152
153 return &modifier;
154 }
155
GetCJUIQRCodeModifier()156 const CJUIQRCodeModifier* GetCJUIQRCodeModifier()
157 {
158 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
159 static const CJUIQRCodeModifier modifier = {
160 .setQRColor = SetQRColor,
161 .setQRColorPtr = SetQRColorPtr,
162 .resetQRColor = ResetQRColor,
163 .setQRBackgroundColor = SetQRBackgroundColor,
164 .setQRBackgroundColorPtr = SetQRBackgroundColorPtr,
165 .resetQRBackgroundColor = ResetQRBackgroundColor,
166 .setContentOpacity = SetContentOpacity,
167 .setContentOpacityPtr = SetContentOpacityPtr,
168 .resetContentOpacity = ResetContentOpacity,
169 };
170 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
171
172 return &modifier;
173 }
174 }
175 }
176