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_slider_ffi.h"
17
18 #include "cj_lambda.h"
19 #include "bridge/cj_frontend/interfaces/cj_ffi/utils.h"
20 #include "bridge/common/utils/utils.h"
21 #include "core/components_ng/pattern/slider/slider_model.h"
22
23 using namespace OHOS::Ace;
24 using namespace OHOS::Ace::Framework;
25
26 namespace {
27 const std::vector<Axis> AXIS = { Axis::VERTICAL, Axis::HORIZONTAL };
28 /*
29 * SliderMode is defined in core/component.
30 * SliderModel::SliderMode is defined in core/component_ng.
31 * The two enum have the same content, but are defined in different namespaces.
32 */
33 const std::vector<SliderModel::SliderMode> SLIDER_MODES_NG = { SliderModel::SliderMode::OUTSET,
34 SliderModel::SliderMode::INSET };
35
36 } // namespace
37
38 extern "C" {
FfiOHOSAceFrameworkSliderCreate(CJSliderCreate value)39 void FfiOHOSAceFrameworkSliderCreate(CJSliderCreate value)
40 {
41 if (!Utils::CheckParamsValid(value.style, SLIDER_MODES_NG.size())) {
42 LOGE("invalid value for slider style");
43 return;
44 }
45 if (!Utils::CheckParamsValid(value.direction, AXIS.size())) {
46 LOGE("invalid value for slider direction");
47 return;
48 }
49
50 SliderModel::GetInstance()->Create(value.value, value.step, value.min, value.max);
51 SliderModel::GetInstance()->SetSliderMode(SLIDER_MODES_NG[value.style]);
52 SliderModel::GetInstance()->SetDirection(AXIS[value.direction]);
53 SliderModel::GetInstance()->SetReverse(value.reverse);
54 }
55
FfiOHOSAceFrameworkSliderBlockColor(uint32_t color)56 void FfiOHOSAceFrameworkSliderBlockColor(uint32_t color)
57 {
58 SliderModel::GetInstance()->SetBlockColor(Color(color));
59 }
60
FfiOHOSAceFrameworkSliderTrackColor(uint32_t color)61 void FfiOHOSAceFrameworkSliderTrackColor(uint32_t color)
62 {
63 SliderModel::GetInstance()->SetTrackBackgroundColor(Color(color));
64 }
65
FfiOHOSAceFrameworkSliderSelectedColor(uint32_t color)66 void FfiOHOSAceFrameworkSliderSelectedColor(uint32_t color)
67 {
68 SliderModel::GetInstance()->SetSelectColor(Color(color));
69 }
70
FfiOHOSAceFrameworkSliderShowSteps(bool isShow)71 void FfiOHOSAceFrameworkSliderShowSteps(bool isShow)
72 {
73 SliderModel::GetInstance()->SetShowSteps(isShow);
74 }
75
FfiOHOSAceFrameworkSliderShowTips(bool isShow)76 void FfiOHOSAceFrameworkSliderShowTips(bool isShow)
77 {
78 std::optional<std::string> none;
79 SliderModel::GetInstance()->SetShowTips(isShow, none);
80 }
81
FfiOHOSAceFrameworkSliderTrackThickness(double value,int32_t unit)82 void FfiOHOSAceFrameworkSliderTrackThickness(double value, int32_t unit)
83 {
84 Dimension width(value, static_cast<DimensionUnit>(unit));
85 if (LessNotEqual(value, 0.0)) {
86 return;
87 }
88 SliderModel::GetInstance()->SetThickness(width);
89 }
90
FfiOHOSAceFrameworkSliderMaxLabel(double value)91 void FfiOHOSAceFrameworkSliderMaxLabel(double value)
92 {
93 SliderModel::GetInstance()->SetMaxLabel(value);
94 }
95
FfiOHOSAceFrameworkSliderMinLabel(double value)96 void FfiOHOSAceFrameworkSliderMinLabel(double value)
97 {
98 SliderModel::GetInstance()->SetMinLabel(value);
99 }
100
FfiOHOSAceFrameworkSliderOnChange(void (* callback)(double value,int32_t mode))101 void FfiOHOSAceFrameworkSliderOnChange(void (*callback)(double value, int32_t mode))
102 {
103 SliderModel::GetInstance()->SetOnChange(CJLambda::Create(callback));
104 }
105 }
106