• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-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 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DECLARATION_NAVIGATION_NAVIGATION_DECLARATION_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DECLARATION_NAVIGATION_NAVIGATION_DECLARATION_H
18 
19 #include <string>
20 
21 #include "base/geometry/dimension.h"
22 #include "core/components/common/properties/color.h"
23 #include "core/components/declaration/common/declaration.h"
24 #include "core/components/navigation_bar/navigation_bar_theme.h"
25 #include "core/pipeline_ng/pipeline_context.h"
26 
27 namespace OHOS::Ace::NG {
28 
NavigationGetTheme()29 inline RefPtr<NavigationBarTheme> NavigationGetTheme()
30 {
31     auto pipeline = PipelineBase::GetCurrentContext();
32     CHECK_NULL_RETURN(pipeline, nullptr);
33     return pipeline->GetTheme<NavigationBarTheme>();
34 }
35 
36 
NavigationGetTheme(int32_t themeScopeId)37 inline RefPtr<NavigationBarTheme> NavigationGetTheme(int32_t themeScopeId)
38 {
39     auto pipeline = PipelineBase::GetCurrentContext();
40     CHECK_NULL_RETURN(pipeline, nullptr);
41     return pipeline->GetTheme<NavigationBarTheme>(themeScopeId);
42 }
43 
44 // TODO:move some items to theme
45 // title bar back button
46 constexpr const char* BACK_BUTTON = "Back";
47 constexpr InternalResource::ResourceId BACK_ICON = InternalResource::ResourceId::IC_BACK;
48 constexpr InternalResource::ResourceId MORE_ICON = InternalResource::ResourceId::IC_MORE;
49 // title bar and tool bar, bar item
50 constexpr float BAR_ITEM_WIDTH = 40.0f;
51 constexpr float BAR_ITEM_HEIGHT = 60.0f;
52 constexpr float BAR_TEXT_FONT_SIZE = 18.0f;
53 // title bar title and subtitle
54 constexpr float TITLE_WIDTH = 100.0f;
55 // single page maximum width
56 constexpr float SINGLE_PAGE_MAXIMUM_WIDTH = 720.0f;
57 
58 // title
59 constexpr Dimension MAX_TITLE_FONT_SIZE = 30.0_vp;
60 constexpr Dimension MIN_TITLE_FONT_SIZE = 20.0_vp;
61 constexpr Dimension MIN_ADAPT_TITLE_FONT_SIZE = 14.0_vp;
62 constexpr const char* TITLE_MAIN = "MainOnly";
63 constexpr const char* TITLE_MAIN_WITH_SUB = "MainWithSub";
64 
65 // subtitle
66 constexpr Dimension SUBTITLE_FONT_SIZE = 14.0_vp; // ohos_id_text_size_sub_title3
67 constexpr Dimension SUBTITLE_HEIGHT = 26.0_vp;
68 constexpr Dimension MIN_ADAPT_SUBTITLE_FONT_SIZE = 10.0_vp;
69 // back button
70 constexpr Dimension BACK_BUTTON_SIZE = 48.0_vp;
71 constexpr Dimension BACK_BUTTON_ICON_SIZE = 24.0_vp;
72 // title bar
73 constexpr Dimension TITLEBAR_HEIGHT_MINI = 56.0_vp;
74 constexpr Dimension TITLEBAR_HEIGHT_WITH_SUBTITLE = 137.0_vp;
75 constexpr Dimension TITLEBAR_HEIGHT_WITHOUT_SUBTITLE = 112.0_vp;
76 constexpr uint32_t TITLEBAR_MAX_LINES = 2;
77 // toolbar item
78 constexpr Dimension TEXT_FONT_SIZE = 10.0_vp;
79 constexpr Color TEXT_COLOR = Color(0xE6000000);
80 constexpr Color ICON_COLOR = Color(0xE6000000);
81 // toolbar
82 constexpr Dimension ICON_PADDING = 10.0_vp;
83 constexpr Dimension TEXT_TOP_PADDING = 2.0_vp;
84 
85 // divider
86 constexpr Dimension DIVIDER_WIDTH = 1.0_px;
87 constexpr Dimension DEFAULT_DIVIDER_START_MARGIN = 0.0_vp;
88 constexpr Dimension DEFAULT_DIVIDER_HOT_ZONE_HORIZONTAL_PADDING = 2.0_vp;
89 constexpr int32_t DIVIDER_HOT_ZONE_HORIZONTAL_PADDING_NUM = 2;
90 
91 // navigation content
92 constexpr Dimension SINGLE_LINE_TITLEBAR_HEIGHT = 56.0_vp;
93 constexpr Dimension DOUBLE_LINE_TITLEBAR_HEIGHT = 82.0_vp;
94 constexpr Dimension DEFAULT_MIN_CONTENT_WIDTH = 360.0_vp;
95 
96 // navBar
97 constexpr Dimension FULL_SINGLE_LINE_TITLEBAR_HEIGHT = 112.0_vp;
98 constexpr Dimension FULL_DOUBLE_LINE_TITLEBAR_HEIGHT = 138.0_vp;
99 constexpr Dimension NAV_HORIZONTAL_MARGIN_L = 16.0_vp; // ohos_id_elements_margin_horizontal_l
100 constexpr Dimension NAV_HORIZONTAL_MARGIN_M = 8.0_vp;  // ohos_id_elements_margin_horizontal_m
101 constexpr Dimension MENU_ITEM_PADDING = 24.0_vp;
102 constexpr Dimension MENU_ITEM_SIZE = 48.0_vp;
103 constexpr Dimension BUTTON_PADDING = 12.0_vp;
104 constexpr Dimension MENU_BUTTON_PADDING = 8.0_vp;
105 constexpr Dimension BACK_BUTTON_SYMBOL_PADDING = 14.0_vp;
106 constexpr Dimension BUTTON_RADIUS_SIZE = 5.0_vp;
107 constexpr Dimension MAX_OVER_DRAG_OFFSET = 180.0_vp;
108 constexpr Dimension DEFAULT_MIN_NAV_BAR_WIDTH = 240.0_vp;
109 constexpr Dimension DEFAULT_MAX_NAV_BAR_WIDTH = 432.0_vp;
110 constexpr Dimension MAX_MENU_CHANGE_SIZE = 600.0_vp;
111 constexpr int8_t MAX_MENU_NUM_SMALL = 3;
112 const int8_t MAX_MENU_NUM_LARGE = 5;
113 constexpr float MAX_NAV_BAR_WIDTH_SCALE = 0.4f;
114 
115 // more button
116 constexpr Dimension MORE_BUTTON_CORNER_RADIUS = 8.0_vp;
117 
118 // maximum number of toolbar items
119 constexpr uint32_t MAXIMUM_TOOLBAR_ITEMS_IN_BAR = 5;
120 constexpr uint32_t ONE_TOOLBAR_ITEM = 1;
121 
122 // navigation page info
123 constexpr char NAVIGATION_MODULE_NAME[] = "moduleName";
124 constexpr char NAVIGATION_PAGE_PATH[] = "pagePath";
125 constexpr char IS_USER_CREATE_STACK[] = "isUserCreateStack";
126 
127 // navigation/navdestination Field
128 constexpr const char* NAV_FIELD = "__NavigationField__";
129 constexpr const char* DES_FIELD = "__NavdestinationField__";
130 
131 // font scale
132 constexpr float STANDARD_FONT_SCALE = 1.0f;
133 
134 
135 constexpr uint32_t BAR_ITEM_MARGIN_NUM = 2;
136 
137 enum class NavToolbarItemStatus {
138     NORMAL = 0,
139     DISABLED,
140     ACTIVE,
141 };
142 
143 // appbar menu item and toolbar item configuration
144 struct BarItem {
145     std::optional<std::string> text;
146     std::optional<std::string> icon;
147     std::optional<std::function<void(WeakPtr<NG::FrameNode>)>> iconSymbol;
148     std::optional<bool> isEnabled;
149     std::function<void()> action;
150     NavToolbarItemStatus status;
151     std::optional<std::string> activeIcon;
152     std::optional<std::function<void(WeakPtr<NG::FrameNode>)>> activeIconSymbol;
ToStringBarItem153     std::string ToString() const
154     {
155         std::string result;
156         result.append("text: ");
157         result.append(text.value_or("na"));
158         result.append(", icon: ");
159         result.append(icon.value_or("na"));
160         return result;
161     }
162 };
163 
164 struct NavigationTitleInfo {
165     bool hasSubTitle;
166     bool hasMainTitle;
167     std::string subtitle;
168     std::string title;
169 };
170 
171 enum class ToolbarIconStatus {
172     INITIAL = 0,
173     ACTIVE,
174 };
175 
176 enum class TitleBarChildType {
177     TITLE = 0,
178     SUBTITLE,
179     MENU,
180 };
181 
182 enum class NavigationTitleMode {
183     FREE = 0,
184     FULL,
185     MINI,
186 };
187 
188 enum class NavigationMode {
189     STACK = 0,
190     SPLIT,
191     AUTO,
192 };
193 
194 enum class NavBarPosition {
195     START = 0,
196     END,
197 };
198 
199 enum class NavDestinationMode {
200     STANDARD = 0,
201     DIALOG,
202 };
203 
204 enum class ChildNodeOperation {
205     ADD,
206     // remove case only used for back button
207     REMOVE,
208     REPLACE,
209     NONE
210 };
211 
212 enum class BarStyle {
213     STANDARD = 0,
214     STACK,
215     SAFE_AREA_PADDING,
216 };
217 
218 enum class TitleBarParentType { NAVBAR, NAV_DESTINATION };
219 
220 enum class NavRouteMode {
221     PUSH_WITH_RECREATE = 0,
222     PUSH,
223     REPLACE,
224 };
225 
226 enum class NavigationOperation {
227     PUSH = 1,
228     POP,
229     REPLACE,
230 };
231 
232 enum NavDestinationLifecycle {
233     ON_WILL_APPEAR = 0,
234     ON_APPEAR,
235     ON_WILL_SHOW,
236     ON_SHOW,
237     ON_ACTIVE,
238     ON_WILL_HIDE,
239     ON_INACTIVE,
240     ON_HIDE,
241     ON_WILL_DISAPPEAR,
242     ON_DISAPPEAR
243 };
244 
245 enum class NavDestinationActiveReason {
246     TRANSITION = 0,
247     CONTENT_COVER,
248     SHEET,
249     DIALOG,
250     OVERLAY,
251     APP_STATE_CHANGE
252 };
253 
254 enum class NavigationSystemTransitionType {
255     NONE = 0,
256     TITLE = 1,
257     CONTENT = 1 << 1,
258     DEFAULT = 1 | (1 << 1),
259     FADE = 1 << 2,
260     EXPLODE = 1 << 3,
261     SLIDE_RIGHT = 1 << 4,
262     SLIDE_BOTTOM = 1 << 5,
263 };
264 
265 inline NavigationSystemTransitionType operator& (NavigationSystemTransitionType lv, NavigationSystemTransitionType rv)
266 {
267     return static_cast<NavigationSystemTransitionType>(static_cast<uint32_t>(lv) & static_cast<uint32_t>(rv));
268 }
269 struct NavSafeArea {
270     float top = 0.0f;
271     float bottom = 0.0f;
272 };
273 
274 struct NavDestinationTransition {
275     int32_t delay;
276     int32_t duration;
277     RefPtr<Curve> curve;
278     std::function<void()> event;
279     std::function<void()> onTransitionEnd;
280 };
281 
282 using NavDestinationTransitionDelegate = std::function<std::optional<std::vector<NavDestinationTransition>>(
283     NavigationOperation operation, bool isEnter)>;
284 using NavDestinationOnNewParamCallback = std::function<void(napi_value param)>;
285 
286 } // namespace OHOS::Ace::NG
287 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DECLARATION_NAVIGATION_NAVIGATION_DECLARATION_H
288