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 "core/interfaces/native/node/panel_modifier.h"
16 #include "core/pipeline/base/element_register.h"
17 #include "core/components_ng/base/frame_node.h"
18 #include "core/components_ng/pattern/panel/sliding_panel_model_ng.h"
19 #include "core/components/common/layout/constants.h"
20 
21 namespace OHOS::Ace::NG {
22 constexpr int32_t DEFAULT_PANEL_MODE = 1;
23 constexpr double DEFAULT_HEIGHT = 48;
24 constexpr uint32_t DEFAULT_PANEL_BACKGROUND_COLOR = 0x08182431;
25 constexpr int32_t DEFAULT_PANEL_TYPE = 1;
26 constexpr double DEFAULT_CUSTOM_HEIGHT = 0;
27 
SetPanelMode(ArkUINodeHandle node,int32_t value)28 void SetPanelMode(ArkUINodeHandle node, int32_t value)
29 {
30     auto* frameNode = reinterpret_cast<FrameNode*>(node);
31     CHECK_NULL_VOID(frameNode);
32     auto mode = static_cast<PanelMode>(value);
33     SlidingPanelModelNG::SetPanelMode(frameNode, mode);
34 }
35 
ResetPanelMode(ArkUINodeHandle node)36 void ResetPanelMode(ArkUINodeHandle node)
37 {
38     auto* frameNode = reinterpret_cast<FrameNode*>(node);
39     CHECK_NULL_VOID(frameNode);
40     auto mode = static_cast<PanelMode>(DEFAULT_PANEL_MODE);
41     SlidingPanelModelNG::SetPanelMode(frameNode, mode);
42 }
43 
SetPanelFullHeight(ArkUINodeHandle node,ArkUI_Float32 value,int unit)44 void SetPanelFullHeight(ArkUINodeHandle node, ArkUI_Float32 value, int unit)
45 {
46     auto* frameNode = reinterpret_cast<FrameNode*>(node);
47     CHECK_NULL_VOID(frameNode);
48     SlidingPanelModelNG::SetPanelFullHeight(frameNode, Dimension(value, static_cast<OHOS::Ace::DimensionUnit>(unit)));
49 }
ResetPanelFullHeight(ArkUINodeHandle node)50 void ResetPanelFullHeight(ArkUINodeHandle node)
51 {
52     auto* frameNode = reinterpret_cast<FrameNode*>(node);
53     CHECK_NULL_VOID(frameNode);
54     SlidingPanelModelNG::ResetPanelFullHeight(frameNode);
55 }
56 
SetPanelHalfHeight(ArkUINodeHandle node,ArkUI_Float32 value,int unit)57 void SetPanelHalfHeight(ArkUINodeHandle node, ArkUI_Float32 value, int unit)
58 {
59     auto* frameNode = reinterpret_cast<FrameNode*>(node);
60     CHECK_NULL_VOID(frameNode);
61     SlidingPanelModelNG::SetPanelHalfHeight(frameNode, Dimension(value, static_cast<OHOS::Ace::DimensionUnit>(unit)));
62 }
ResetPanelHalfHeight(ArkUINodeHandle node)63 void ResetPanelHalfHeight(ArkUINodeHandle node)
64 {
65     auto* frameNode = reinterpret_cast<FrameNode*>(node);
66     CHECK_NULL_VOID(frameNode);
67     SlidingPanelModelNG::ResetPanelHalfHeight(frameNode);
68 }
69 
SetPanelMiniHeight(ArkUINodeHandle node,ArkUI_Float32 value,int unit)70 void SetPanelMiniHeight(ArkUINodeHandle node, ArkUI_Float32 value, int unit)
71 {
72     auto* frameNode = reinterpret_cast<FrameNode*>(node);
73     CHECK_NULL_VOID(frameNode);
74     SlidingPanelModelNG::SetPanelMiniHeight(frameNode, Dimension(value, static_cast<OHOS::Ace::DimensionUnit>(unit)));
75 }
76 
ResetPanelMiniHeight(ArkUINodeHandle node)77 void ResetPanelMiniHeight(ArkUINodeHandle node)
78 {
79     auto* frameNode = reinterpret_cast<FrameNode*>(node);
80     CHECK_NULL_VOID(frameNode);
81     SlidingPanelModelNG::SetPanelMiniHeight(frameNode, Dimension(DEFAULT_HEIGHT, DimensionUnit::VP));
82 }
83 
SetPanelBackgroundMask(ArkUINodeHandle node,uint32_t color)84 void SetPanelBackgroundMask(ArkUINodeHandle node, uint32_t color)
85 {
86     auto* frameNode = reinterpret_cast<FrameNode*>(node);
87     CHECK_NULL_VOID(frameNode);
88     SlidingPanelModelNG::SetPanelBackgroundMask(frameNode, Color(color));
89 }
90 
ResetPanelBackgroundMask(ArkUINodeHandle node)91 void ResetPanelBackgroundMask(ArkUINodeHandle node)
92 {
93     auto* frameNode = reinterpret_cast<FrameNode*>(node);
94     CHECK_NULL_VOID(frameNode);
95     SlidingPanelModelNG::SetPanelBackgroundMask(frameNode, Color(DEFAULT_PANEL_BACKGROUND_COLOR));
96 }
97 
SetPanelType(ArkUINodeHandle node,int32_t value)98 void SetPanelType(ArkUINodeHandle node, int32_t value)
99 {
100     auto* frameNode = reinterpret_cast<FrameNode*>(node);
101     CHECK_NULL_VOID(frameNode);
102     auto type = static_cast<PanelType>(value);
103     SlidingPanelModelNG::SetPanelType(frameNode, type);
104 }
105 
ResetPanelType(ArkUINodeHandle node)106 void ResetPanelType(ArkUINodeHandle node)
107 {
108     auto* frameNode = reinterpret_cast<FrameNode*>(node);
109     CHECK_NULL_VOID(frameNode);
110     auto type = static_cast<PanelType>(DEFAULT_PANEL_TYPE);
111     SlidingPanelModelNG::SetPanelType(frameNode, type);
112 }
113 
SetPanelCustomHeight(ArkUINodeHandle node,ArkUI_Float32 value,int unit)114 void SetPanelCustomHeight(ArkUINodeHandle node, ArkUI_Float32 value, int unit)
115 {
116     auto* frameNode = reinterpret_cast<FrameNode*>(node);
117     CHECK_NULL_VOID(frameNode);
118     SlidingPanelModelNG::SetPanelCustomHeight(
119         frameNode, CalcDimension(value, static_cast<OHOS::Ace::DimensionUnit>(unit)));
120 }
121 
SetPanelCustomHeightByString(ArkUINodeHandle node,const char * value)122 void SetPanelCustomHeightByString(ArkUINodeHandle node, const char* value)
123 {
124     auto* frameNode = reinterpret_cast<FrameNode*>(node);
125     CHECK_NULL_VOID(frameNode);
126     SlidingPanelModelNG::SetPanelCustomHeight(frameNode, CalcDimension(value));
127 }
128 
ResetPanelCustomHeight(ArkUINodeHandle node)129 void ResetPanelCustomHeight(ArkUINodeHandle node)
130 {
131     auto* frameNode = reinterpret_cast<FrameNode*>(node);
132     CHECK_NULL_VOID(frameNode);
133     SlidingPanelModelNG::SetPanelCustomHeight(frameNode, CalcDimension(DEFAULT_CUSTOM_HEIGHT));
134 }
135 
SetShowCloseIcon(ArkUINodeHandle node,ArkUI_Bool value)136 void SetShowCloseIcon(ArkUINodeHandle node, ArkUI_Bool value)
137 {
138     auto* frameNode = reinterpret_cast<FrameNode*>(node);
139     CHECK_NULL_VOID(frameNode);
140     SlidingPanelModelNG::SetShowCloseIcon(frameNode, value);
141 }
142 
ResetShowCloseIcon(ArkUINodeHandle node)143 void ResetShowCloseIcon(ArkUINodeHandle node)
144 {
145     auto* frameNode = reinterpret_cast<FrameNode*>(node);
146     CHECK_NULL_VOID(frameNode);
147     SlidingPanelModelNG::SetShowCloseIcon(frameNode, false);
148 }
149 
SetDragBar(ArkUINodeHandle node,ArkUI_Bool value)150 void SetDragBar(ArkUINodeHandle node, ArkUI_Bool value)
151 {
152     auto* frameNode = reinterpret_cast<FrameNode*>(node);
153     CHECK_NULL_VOID(frameNode);
154     SlidingPanelModelNG::SetHasDragBar(frameNode, value);
155 }
156 
ResetDragBar(ArkUINodeHandle node)157 void ResetDragBar(ArkUINodeHandle node)
158 {
159     auto* frameNode = reinterpret_cast<FrameNode*>(node);
160     CHECK_NULL_VOID(frameNode);
161     SlidingPanelModelNG::SetHasDragBar(frameNode, true);
162 }
163 
SetShow(ArkUINodeHandle node,ArkUI_Bool value)164 void SetShow(ArkUINodeHandle node, ArkUI_Bool value)
165 {
166     auto* frameNode = reinterpret_cast<FrameNode*>(node);
167     CHECK_NULL_VOID(frameNode);
168     SlidingPanelModelNG::SetIsShow(frameNode, value);
169 }
170 
ResetShow(ArkUINodeHandle node)171 void ResetShow(ArkUINodeHandle node)
172 {
173     auto* frameNode = reinterpret_cast<FrameNode*>(node);
174     CHECK_NULL_VOID(frameNode);
175     SlidingPanelModelNG::SetIsShow(frameNode, true);
176 }
177 
178 namespace NodeModifier {
GetPanelModifier()179 const ArkUIPanelModifier* GetPanelModifier()
180 {
181     static const ArkUIPanelModifier modifier = { SetPanelMode, ResetPanelMode, SetPanelFullHeight,
182         ResetPanelFullHeight, SetPanelHalfHeight, ResetPanelHalfHeight, SetPanelMiniHeight, ResetPanelMiniHeight,
183         SetPanelBackgroundMask, ResetPanelBackgroundMask, SetPanelType, ResetPanelType, SetPanelCustomHeight,
184         SetPanelCustomHeightByString, ResetPanelCustomHeight, SetShowCloseIcon, ResetShowCloseIcon, SetDragBar,
185         ResetDragBar, SetShow, ResetShow };
186 
187     return &modifier;
188 }
189 
GetCJUIPanelModifier()190 const CJUIPanelModifier* GetCJUIPanelModifier()
191 {
192     static const CJUIPanelModifier modifier = { SetPanelMode, ResetPanelMode, SetPanelFullHeight,
193         ResetPanelFullHeight, SetPanelHalfHeight, ResetPanelHalfHeight, SetPanelMiniHeight, ResetPanelMiniHeight,
194         SetPanelBackgroundMask, ResetPanelBackgroundMask, SetPanelType, ResetPanelType, SetPanelCustomHeight,
195         SetPanelCustomHeightByString, ResetPanelCustomHeight, SetShowCloseIcon, ResetShowCloseIcon, SetDragBar,
196         ResetDragBar, SetShow, ResetShow };
197 
198     return &modifier;
199 }
200 }
201 } // namespace OHOS::Ace::NG