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 "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_divider_bridge.h"
16 
17 #include "base/geometry/dimension.h"
18 #include "bridge/declarative_frontend/jsview/js_view_abstract.h"
19 #include "core/components/divider/divider_theme.h"
20 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
21 
22 namespace OHOS::Ace::NG {
SetStrokeWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)23 ArkUINativeModuleValue DividerBridge::SetStrokeWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
24 {
25     EcmaVM* vm = runtimeCallInfo->GetVM();
26     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
27     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
28     Local<JSValueRef> strokeWidthArg = runtimeCallInfo->GetCallArgRef(1);
29     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
30     CalcDimension strokeWidth;
31     if (ArkTSUtils::ParseJsDimensionVpNG(vm, strokeWidthArg, strokeWidth, false) &&
32         strokeWidth.Value() >= 0) {
33         GetArkUINodeModifiers()->getDividerModifier()->setDividerStrokeWidth(
34             nativeNode, strokeWidth.Value(), static_cast<int32_t>(strokeWidth.Unit()));
35     } else {
36         GetArkUINodeModifiers()->getDividerModifier()->resetDividerStrokeWidth(nativeNode);
37     }
38     return panda::JSValueRef::Undefined(vm);
39 }
40 
ResetStrokeWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)41 ArkUINativeModuleValue DividerBridge::ResetStrokeWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
42 {
43     EcmaVM* vm = runtimeCallInfo->GetVM();
44     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
45     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
46     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
47     GetArkUINodeModifiers()->getDividerModifier()->resetDividerStrokeWidth(nativeNode);
48     return panda::JSValueRef::Undefined(vm);
49 }
50 
SetLineCap(ArkUIRuntimeCallInfo * runtimeCallInfo)51 ArkUINativeModuleValue DividerBridge::SetLineCap(ArkUIRuntimeCallInfo* runtimeCallInfo)
52 {
53     EcmaVM* vm = runtimeCallInfo->GetVM();
54     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
55     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
56     Local<JSValueRef> lineCapArg = runtimeCallInfo->GetCallArgRef(1);
57     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
58     if (lineCapArg->IsNumber()) {
59         int32_t lineCap = lineCapArg->Int32Value(vm);
60         GetArkUINodeModifiers()->getDividerModifier()->setDividerLineCap(nativeNode, lineCap);
61     } else {
62         GetArkUINodeModifiers()->getDividerModifier()->resetDividerLineCap(nativeNode);
63     }
64     return panda::JSValueRef::Undefined(vm);
65 }
66 
ResetLineCap(ArkUIRuntimeCallInfo * runtimeCallInfo)67 ArkUINativeModuleValue DividerBridge::ResetLineCap(ArkUIRuntimeCallInfo* runtimeCallInfo)
68 {
69     EcmaVM* vm = runtimeCallInfo->GetVM();
70     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
71     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
72     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
73     GetArkUINodeModifiers()->getDividerModifier()->resetDividerLineCap(nativeNode);
74     return panda::JSValueRef::Undefined(vm);
75 }
76 
SetColor(ArkUIRuntimeCallInfo * runtimeCallInfo)77 ArkUINativeModuleValue DividerBridge::SetColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
78 {
79     EcmaVM* vm = runtimeCallInfo->GetVM();
80     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
81     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
82     Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(1);
83     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
84     Color color;
85     if (ArkTSUtils::ParseJsColorAlpha(vm, colorArg, color)) {
86         GetArkUINodeModifiers()->getDividerModifier()->setDividerColor(nativeNode, color.GetValue());
87     } else {
88         GetArkUINodeModifiers()->getDividerModifier()->resetDividerColor(nativeNode);
89     }
90     return panda::JSValueRef::Undefined(vm);
91 }
92 
ResetColor(ArkUIRuntimeCallInfo * runtimeCallInfo)93 ArkUINativeModuleValue DividerBridge::ResetColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
94 {
95     EcmaVM* vm = runtimeCallInfo->GetVM();
96     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
97     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
98     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
99     GetArkUINodeModifiers()->getDividerModifier()->resetDividerColor(nativeNode);
100     return panda::JSValueRef::Undefined(vm);
101 }
102 
SetVertical(ArkUIRuntimeCallInfo * runtimeCallInfo)103 ArkUINativeModuleValue DividerBridge::SetVertical(ArkUIRuntimeCallInfo* runtimeCallInfo)
104 {
105     EcmaVM* vm = runtimeCallInfo->GetVM();
106     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
107     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
108     Local<JSValueRef> verticalArg = runtimeCallInfo->GetCallArgRef(1);
109     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
110     if (verticalArg->IsBoolean()) {
111         bool value = verticalArg->ToBoolean(vm)->Value();
112         GetArkUINodeModifiers()->getDividerModifier()->setDividerVertical(nativeNode, value);
113     } else {
114         GetArkUINodeModifiers()->getDividerModifier()->resetDividerVertical(nativeNode);
115     }
116     return panda::JSValueRef::Undefined(vm);
117 }
118 
ResetVertical(ArkUIRuntimeCallInfo * runtimeCallInfo)119 ArkUINativeModuleValue DividerBridge::ResetVertical(ArkUIRuntimeCallInfo* runtimeCallInfo)
120 {
121     EcmaVM* vm = runtimeCallInfo->GetVM();
122     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
123     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
124     auto nativeNode = nodePtr(nativeNodeArg->ToNativePointer(vm)->Value());
125     GetArkUINodeModifiers()->getDividerModifier()->resetDividerVertical(nativeNode);
126     return panda::JSValueRef::Undefined(vm);
127 }
128 } // namespace OHOS::Ace::NG
129