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