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