• 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/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