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 "base/geometry/dimension.h"
16 #include "core/interfaces/native/node/node_api.h"
17 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
18 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_column_split_bridge.h"
19 
20 namespace OHOS::Ace::NG {
21 constexpr int NUM_0 = 0;
22 constexpr int NUM_1 = 1;
23 constexpr int NUM_2 = 2;
24 
SetResizable(ArkUIRuntimeCallInfo * runtimeCallInfo)25 ArkUINativeModuleValue ColumnSplitBridge::SetResizable(ArkUIRuntimeCallInfo *runtimeCallInfo)
26 {
27     EcmaVM *vm = runtimeCallInfo->GetVM();
28     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
29     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
30     Local<JSValueRef> resizableArg = runtimeCallInfo->GetCallArgRef(1);
31     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
32     bool resizable = false;
33     if (resizableArg->IsBoolean()) {
34         resizable = resizableArg->ToBoolean(vm)->BooleaValue(vm);
35     }
36     GetArkUINodeModifiers()->getColumnSplitModifier()->setColumnSplitResizable(nativeNode, resizable);
37     return panda::JSValueRef::Undefined(vm);
38 }
39 
ResetResizable(ArkUIRuntimeCallInfo * runtimeCallInfo)40 ArkUINativeModuleValue ColumnSplitBridge::ResetResizable(ArkUIRuntimeCallInfo *runtimeCallInfo)
41 {
42     EcmaVM *vm = runtimeCallInfo->GetVM();
43     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
44     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
45     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
46     GetArkUINodeModifiers()->getColumnSplitModifier()->resetColumnSplitResizable(nativeNode);
47     return panda::JSValueRef::Undefined(vm);
48 }
49 
SetDivider(ArkUIRuntimeCallInfo * runtimeCallInfo)50 ArkUINativeModuleValue ColumnSplitBridge::SetDivider(ArkUIRuntimeCallInfo* runtimeCallInfo)
51 {
52     EcmaVM* vm = runtimeCallInfo->GetVM();
53     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
54     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
55     Local<JSValueRef> startMarginArg = runtimeCallInfo->GetCallArgRef(NUM_1);
56     Local<JSValueRef> endMarginArg = runtimeCallInfo->GetCallArgRef(NUM_2);
57     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
58     CalcDimension startMargin(0.0, DimensionUnit::VP);
59     CalcDimension endMargin(0.0, DimensionUnit::VP);
60     ArkTSUtils::ParseJsDimensionVp(vm, startMarginArg, startMargin);
61     ArkTSUtils::ParseJsDimensionVp(vm, endMarginArg, endMargin);
62     GetArkUINodeModifiers()->getColumnSplitModifier()->setColumnSplitDivider(nativeNode, startMargin.Value(),
63         static_cast<int32_t>(startMargin.Unit()), endMargin.Value(), static_cast<int32_t>(endMargin.Unit()));
64     return panda::JSValueRef::Undefined(vm);
65 }
66 
ResetDivider(ArkUIRuntimeCallInfo * runtimeCallInfo)67 ArkUINativeModuleValue ColumnSplitBridge::ResetDivider(ArkUIRuntimeCallInfo *runtimeCallInfo)
68 {
69     EcmaVM *vm = runtimeCallInfo->GetVM();
70     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
71     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
72     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
73     GetArkUINodeModifiers()->getColumnSplitModifier()->resetColumnSplitDivider(nativeNode);
74     return panda::JSValueRef::Undefined(vm);
75 }
76 } // namespace OHOS::Ace::NG
77