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
16 #include "frameworks/bridge/declarative_frontend/engine/functions/js_swiper_function.h"
17
18
19 namespace OHOS::Ace::Framework {
JSBind(BindingTarget globalObj)20 void JsSwiperContentTransitionProxy::JSBind(BindingTarget globalObj)
21 {
22 JSClass<JsSwiperContentTransitionProxy>::Declare("SwiperContentTransitionProxy");
23 JSClass<JsSwiperContentTransitionProxy>::CustomProperty(
24 "selectedIndex", &JsSwiperContentTransitionProxy::GetSelectedIndex,
25 &JsSwiperContentTransitionProxy::SetSelectedIndex);
26 JSClass<JsSwiperContentTransitionProxy>::CustomProperty(
27 "index", &JsSwiperContentTransitionProxy::GetIndex, &JsSwiperContentTransitionProxy::SetIndex);
28 JSClass<JsSwiperContentTransitionProxy>::CustomProperty(
29 "position", &JsSwiperContentTransitionProxy::GetPosition, &JsSwiperContentTransitionProxy::SetPosition);
30 JSClass<JsSwiperContentTransitionProxy>::CustomProperty(
31 "mainAxisLength", &JsSwiperContentTransitionProxy::GetMainAxisLength,
32 &JsSwiperContentTransitionProxy::SetMainAxisLength);
33 JSClass<JsSwiperContentTransitionProxy>::CustomMethod(
34 "finishTransition", &JsSwiperContentTransitionProxy::FinishTransition);
35 JSClass<JsSwiperContentTransitionProxy>::Bind(
36 globalObj, &JsSwiperContentTransitionProxy::Constructor, &JsSwiperContentTransitionProxy::Destructor);
37 }
38
SetSelectedIndex(const JSCallbackInfo & args)39 void JsSwiperContentTransitionProxy::SetSelectedIndex(const JSCallbackInfo& args)
40 {
41 TAG_LOGD(AceLogTag::ACE_SWIPER, "SwiperContentTransitionProxy can not support set selectedIndex value.");
42 }
43
GetSelectedIndex(const JSCallbackInfo & args)44 void JsSwiperContentTransitionProxy::GetSelectedIndex(const JSCallbackInfo& args)
45 {
46 auto selectedIndex = 0;
47 if (proxy_) {
48 selectedIndex = proxy_->GetSelectedIndex();
49 }
50 auto fromRef = JSRef<JSVal>::Make(JSVal(ToJSValue(selectedIndex)));
51 args.SetReturnValue(fromRef);
52 }
53
SetIndex(const JSCallbackInfo & args)54 void JsSwiperContentTransitionProxy::SetIndex(const JSCallbackInfo& args)
55 {
56 TAG_LOGD(AceLogTag::ACE_SWIPER, "SwiperContentTransitionProxy can not support set index value.");
57 }
58
GetIndex(const JSCallbackInfo & args)59 void JsSwiperContentTransitionProxy::GetIndex(const JSCallbackInfo& args)
60 {
61 auto index = 0;
62 if (proxy_) {
63 index = proxy_->GetIndex();
64 }
65 auto fromRef = JSRef<JSVal>::Make(JSVal(ToJSValue(index)));
66 args.SetReturnValue(fromRef);
67 }
68
SetPosition(const JSCallbackInfo & args)69 void JsSwiperContentTransitionProxy::SetPosition(const JSCallbackInfo& args)
70 {
71 TAG_LOGD(AceLogTag::ACE_SWIPER, "SwiperContentTransitionProxy can not support set position value.");
72 }
73
GetPosition(const JSCallbackInfo & args)74 void JsSwiperContentTransitionProxy::GetPosition(const JSCallbackInfo& args)
75 {
76 auto position = 0.0f;
77 if (proxy_) {
78 position = proxy_->GetPosition();
79 }
80 auto toRef = JSRef<JSVal>::Make(JSVal(ToJSValue(position)));
81 args.SetReturnValue(toRef);
82 }
83
SetMainAxisLength(const JSCallbackInfo & args)84 void JsSwiperContentTransitionProxy::SetMainAxisLength(const JSCallbackInfo& args)
85 {
86 TAG_LOGD(AceLogTag::ACE_SWIPER, "SwiperContentTransitionProxy can not support set mainAxisLength value.");
87 }
88
GetMainAxisLength(const JSCallbackInfo & args)89 void JsSwiperContentTransitionProxy::GetMainAxisLength(const JSCallbackInfo& args)
90 {
91 auto mainAxisLength = 0.0f;
92 if (proxy_) {
93 mainAxisLength = proxy_->GetMainAxisLength();
94 }
95 auto toRef = JSRef<JSVal>::Make(JSVal(ToJSValue(mainAxisLength)));
96 args.SetReturnValue(toRef);
97 }
98
FinishTransition(const JSCallbackInfo & args)99 void JsSwiperContentTransitionProxy::FinishTransition(const JSCallbackInfo& args)
100 {
101 if (proxy_) {
102 proxy_->FinishTransition();
103 }
104 }
105
Constructor(const JSCallbackInfo & args)106 void JsSwiperContentTransitionProxy::Constructor(const JSCallbackInfo& args)
107 {
108 auto proxy = Referenced::MakeRefPtr<JsSwiperContentTransitionProxy>();
109 proxy->IncRefCount();
110 args.SetReturnValue(Referenced::RawPtr(proxy));
111 }
112
Destructor(JsSwiperContentTransitionProxy * proxy)113 void JsSwiperContentTransitionProxy::Destructor(JsSwiperContentTransitionProxy* proxy)
114 {
115 if (proxy != nullptr) {
116 proxy->DecRefCount();
117 }
118 }
119
JSBind(BindingTarget globalObj)120 void JsSwiperFunction::JSBind(BindingTarget globalObj)
121 {
122 JsSwiperContentTransitionProxy::JSBind(globalObj);
123 }
124
Execute(int32_t index,int32_t targetIndex,const AnimationCallbackInfo & animationCallbackInfo)125 void JsSwiperFunction::Execute(int32_t index, int32_t targetIndex, const AnimationCallbackInfo& animationCallbackInfo)
126 {
127 JSRef<JSObject> obj = JSRef<JSObject>::New();
128 float currentOffset = animationCallbackInfo.currentOffset.value_or(0.0f);
129 float targetOffset = animationCallbackInfo.targetOffset.value_or(0.0f);
130 float velocity = animationCallbackInfo.velocity.value_or(0.0f);
131
132 obj->SetProperty<float>("currentOffset", currentOffset);
133 obj->SetProperty<float>("targetOffset", targetOffset);
134 obj->SetProperty<float>("velocity", velocity);
135
136 int32_t paramCount = 3;
137 JSRef<JSVal> params[paramCount];
138 params[0] = JSRef<JSVal>::Make(ToJSValue(index));
139 params[1] = JSRef<JSVal>::Make(ToJSValue(targetIndex));
140 params[2] = obj;
141 JsFunction::ExecuteJS(paramCount, params);
142 }
143
Execute(int32_t index,const AnimationCallbackInfo & animationCallbackInfo)144 void JsSwiperFunction::Execute(int32_t index, const AnimationCallbackInfo& animationCallbackInfo)
145 {
146 JSRef<JSObject> obj = JSRef<JSObject>::New();
147 float currentOffset = animationCallbackInfo.currentOffset.value_or(0.0f);
148 float targetOffset = animationCallbackInfo.targetOffset.value_or(0.0f);
149 float velocity = animationCallbackInfo.velocity.value_or(0.0f);
150
151 obj->SetProperty<float>("currentOffset", currentOffset);
152 obj->SetProperty<float>("targetOffset", targetOffset);
153 obj->SetProperty<float>("velocity", velocity);
154
155 int32_t paramCount = 2;
156 JSRef<JSVal> params[paramCount];
157 params[0] = JSRef<JSVal>::Make(ToJSValue(index));
158 params[1] = obj;
159 JsFunction::ExecuteJS(paramCount, params);
160 }
161
Execute(int32_t errorCode)162 void JsSwiperFunction::Execute(int32_t errorCode)
163 {
164 JSRef<JSObject> obj = JSRef<JSObject>::New();
165 if (errorCode == ERROR_CODE_PARAM_INVALID) {
166 obj->SetProperty<int32_t>("code", errorCode);
167 }
168
169 JSRef<JSVal> params[1];
170 params[0] = obj;
171 JsFunction::ExecuteJS(1, params);
172 }
173
Execute(const RefPtr<SwiperContentTransitionProxy> & proxy)174 void JsSwiperFunction::Execute(const RefPtr<SwiperContentTransitionProxy>& proxy)
175 {
176 JSRef<JSObject> proxyObj = JSClass<JsSwiperContentTransitionProxy>::NewInstance();
177 auto jsProxy = Referenced::Claim(proxyObj->Unwrap<JsSwiperContentTransitionProxy>());
178 jsProxy->SetProxy(proxy);
179
180 JSRef<JSVal> param = JSRef<JSObject>::Cast(proxyObj);
181 JsFunction::ExecuteJS(1, ¶m);
182 }
183
Execute(int32_t selectedIndex,int32_t index,float position,float mainAxisLength)184 void JsSwiperFunction::Execute(int32_t selectedIndex, int32_t index, float position, float mainAxisLength)
185 {
186 JSRef<JSVal> selectedIndexValue = JSRef<JSVal>::Make(ToJSValue(selectedIndex));
187 JSRef<JSVal> indexValue = JSRef<JSVal>::Make(ToJSValue(index));
188 JSRef<JSVal> positionValue = JSRef<JSVal>::Make(ToJSValue(position));
189 JSRef<JSVal> mainAxisLengthValue = JSRef<JSVal>::Make(ToJSValue(mainAxisLength));
190
191 JSRef<JSVal> params[] = { selectedIndexValue, indexValue, positionValue, mainAxisLengthValue };
192 JsFunction::ExecuteJS(4, params);
193 }
194 } // namespace OHOS::Ace::Framework
195