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 "bridge/cj_frontend/interfaces/cj_ffi/cj_button_ffi.h"
17
18 #include "bridge/cj_frontend/interfaces/cj_ffi/utils.h"
19 #include "bridge/common/utils/utils.h"
20 #include "core/components_ng/base/view_abstract_model.h"
21 #include "core/components_ng/pattern/button/button_model.h"
22 #include "core/gestures/click_recognizer.h"
23
24 using namespace OHOS::Ace;
25 using namespace OHOS::Ace::Framework;
26
27 namespace {
28 const std::vector<BorderStyle> BORDER_STYLES = { BorderStyle::SOLID, BorderStyle::DASHED, BorderStyle::DOTTED };
29 const std::vector<FontStyle> FONT_STYLES = { FontStyle::NORMAL, FontStyle::ITALIC };
30 const std::vector<ButtonType> BUTTON_TYPES = { ButtonType::NORMAL, ButtonType::CAPSULE, ButtonType::CIRCLE };
31 } // namespace
32
33 extern "C" {
FfiOHOSAceFrameworkButtonCreateWithChild()34 void FfiOHOSAceFrameworkButtonCreateWithChild()
35 {
36 CreateWithPara params;
37 params.parseSuccess = false;
38 params.optionSetFirst = false;
39 ButtonModel::GetInstance()->CreateWithChild(params);
40 ViewAbstractModel::GetInstance()->SetHoverEffect(HoverEffectType::SCALE);
41 }
42
FfiOHOSAceFrameworkButtonCreateWithLabel(const char * label)43 void FfiOHOSAceFrameworkButtonCreateWithLabel(const char* label)
44 {
45 CreateWithPara params;
46 LOGI("done create params");
47 params.label = label;
48 params.parseSuccess = true;
49 params.optionSetFirst = false;
50 LOGI("done set label");
51 auto model = ButtonModel::GetInstance();
52 if (!model) {
53 LOGE("ButtonModel::GetInstance returns null");
54 return;
55 }
56 LOGI("before create");
57 std::list<RefPtr<Component>> children;
58 model->CreateWithLabel(params, children);
59 model->Create(params, children);
60 LOGI("done create with child");
61 ViewAbstractModel::GetInstance()->SetHoverEffect(HoverEffectType::SCALE);
62 LOGI("done set hover effect");
63 }
64
FfiOHOSAceFrameworkButtonSetFontSize(double fontSize,int32_t unit)65 void FfiOHOSAceFrameworkButtonSetFontSize(double fontSize, int32_t unit)
66 {
67 Dimension value(fontSize, static_cast<DimensionUnit>(unit));
68 ButtonModel::GetInstance()->SetFontSize(value);
69 }
70
FfiOHOSAceFrameworkButtonSetFontWeight(const char * fontWeight)71 void FfiOHOSAceFrameworkButtonSetFontWeight(const char* fontWeight)
72 {
73 ButtonModel::GetInstance()->SetFontWeight(ConvertStrToFontWeight(fontWeight));
74 }
75
FfiOHOSAceFrameworkButtonSetFontColor(uint32_t color)76 void FfiOHOSAceFrameworkButtonSetFontColor(uint32_t color)
77 {
78 ButtonModel::GetInstance()->SetFontColor(Color(color));
79 }
80
FfiOHOSAceFrameworkButtonSetRadius(double radius,int32_t unit)81 void FfiOHOSAceFrameworkButtonSetRadius(double radius, int32_t unit)
82 {
83 Dimension value(radius, static_cast<DimensionUnit>(unit));
84 ButtonModel::GetInstance()->SetBorderRadius(value);
85 }
86
FfiOHOSAceFrameworkButtonSetAllBorderRadius(CJBorderRadius value)87 void FfiOHOSAceFrameworkButtonSetAllBorderRadius(CJBorderRadius value)
88 {
89 CalcDimension topLeft(value.topLeft, static_cast<DimensionUnit>(value.topLeftUnit));
90 CalcDimension topRight(value.topRight, static_cast<DimensionUnit>(value.topRightUnit));
91 CalcDimension bottomLeft(value.bottomLeft, static_cast<DimensionUnit>(value.bottomLeftUnit));
92 CalcDimension bottomRight(value.bottomRight, static_cast<DimensionUnit>(value.bottomRightUnit));
93 ButtonModel::GetInstance()->SetBorderRadius(topLeft, topRight, bottomLeft, bottomRight);
94 }
95
FfiOHOSAceFrameworkButtonSetBorder(CJBorder params)96 void FfiOHOSAceFrameworkButtonSetBorder(CJBorder params)
97 {
98 Dimension widthDime(params.width, static_cast<DimensionUnit>(params.widthUnit));
99 Dimension radiusDime(params.radius, static_cast<DimensionUnit>(params.radiusUnit));
100 if (!Utils::CheckParamsValid(params.style, BORDER_STYLES.size())) {
101 LOGE("invalid value for border style");
102 return;
103 }
104
105 ViewAbstractModel::GetInstance()->SetBorderWidth(widthDime);
106 ViewAbstractModel::GetInstance()->SetBorderColor(Color(params.color));
107 ButtonModel::GetInstance()->SetBorderRadius(radiusDime);
108 ViewAbstractModel::GetInstance()->SetBorderStyle(BORDER_STYLES[params.style]);
109 }
110
FfiOHOSAceFrameworkButtonSetBackgroundColor(uint32_t color)111 void FfiOHOSAceFrameworkButtonSetBackgroundColor(uint32_t color)
112 {
113 ViewAbstractModel::GetInstance()->SetBackgroundColor(Color(color));
114 }
115
FfiOHOSAceFrameworkButtonSetHeight(double height,int32_t unit)116 void FfiOHOSAceFrameworkButtonSetHeight(double height, int32_t unit)
117 {
118 Dimension value(height, static_cast<DimensionUnit>(unit));
119 ViewAbstractModel::GetInstance()->SetHeight(value);
120 }
121
FfiOHOSAceFrameworkButtonSetWidth(double width,int32_t unit)122 void FfiOHOSAceFrameworkButtonSetWidth(double width, int32_t unit)
123 {
124 Dimension value(width, static_cast<DimensionUnit>(unit));
125 ViewAbstractModel::GetInstance()->SetWidth(value);
126 }
127
FfiOHOSAceFrameworkButtonSetFontStyle(int32_t fontStyle)128 void FfiOHOSAceFrameworkButtonSetFontStyle(int32_t fontStyle)
129 {
130 if (!Utils::CheckParamsValid(fontStyle, FONT_STYLES.size())) {
131 LOGE("invalid value for font style");
132 return;
133 }
134 ButtonModel::GetInstance()->SetFontStyle(FONT_STYLES[fontStyle]);
135 }
136
FfiOHOSAceFrameworkButtonSetFontFamily(const char * fontFamily)137 void FfiOHOSAceFrameworkButtonSetFontFamily(const char* fontFamily)
138 {
139 std::vector<std::string> fontFamilies;
140 fontFamilies = ConvertStrToFontFamilies(fontFamily);
141 ButtonModel::GetInstance()->SetFontFamily(fontFamilies);
142 }
143
FfiOHOSAceFrameworkButtonSetType(int32_t shape)144 void FfiOHOSAceFrameworkButtonSetType(int32_t shape)
145 {
146 if (!Utils::CheckParamsValid(shape, BUTTON_TYPES.size())) {
147 LOGE("invalid value for button type");
148 return;
149 }
150 ButtonModel::GetInstance()->SetType(static_cast<int>(BUTTON_TYPES[shape]));
151 }
152
FfiOHOSAceFrameworkButtonSetPadding(double top,int32_t topUnit,double right,int32_t rightUnit,double bottom,int32_t bottomUnit,double left,int32_t leftUnit)153 void FfiOHOSAceFrameworkButtonSetPadding(double top, int32_t topUnit, double right, int32_t rightUnit, double bottom,
154 int32_t bottomUnit, double left, int32_t leftUnit)
155 {
156 Dimension topValue(top, static_cast<DimensionUnit>(topUnit));
157 Dimension rightValue(right, static_cast<DimensionUnit>(rightUnit));
158 Dimension bottomValue(bottom, static_cast<DimensionUnit>(bottomUnit));
159 Dimension leftValue(left, static_cast<DimensionUnit>(leftUnit));
160 ViewAbstractModel::GetInstance()->SetPaddings(topValue, rightValue, bottomValue, leftValue);
161 }
162
FfiOHOSAceFrameworkButtonSetSize(double width,int32_t widthUnit,double height,int32_t heightUnit)163 void FfiOHOSAceFrameworkButtonSetSize(double width, int32_t widthUnit, double height, int32_t heightUnit)
164 {
165 FfiOHOSAceFrameworkViewAbstractSetSize(width, widthUnit, height, heightUnit);
166 }
167
FfiOHOSAceFrameworkButtonSetStateEffect(bool stateEffect)168 void FfiOHOSAceFrameworkButtonSetStateEffect(bool stateEffect)
169 {
170 ButtonModel::GetInstance()->SetStateEffect(stateEffect);
171 }
172 }
173