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
16 #include "js_window_scene_config.h"
17
18 #include "window_manager_hilog.h"
19 #include "js_scene_utils.h"
20
21 namespace OHOS::Rosen {
22 using namespace AbilityRuntime;
23 namespace {
24 constexpr HiviewDFX::HiLogLabel LABEL = { LOG_CORE, HILOG_DOMAIN_WINDOW, "JsWindowSceneConfig" };
25 } // namespace
26
CreateWindowSceneConfig(napi_env env,const AppWindowSceneConfig & config)27 napi_value JsWindowSceneConfig::CreateWindowSceneConfig(napi_env env, const AppWindowSceneConfig& config)
28 {
29 WLOGI("[NAPI]CreateWindowSceneConfig");
30 napi_value objValue = nullptr;
31 napi_create_object(env, &objValue);
32 if (objValue == nullptr) {
33 WLOGFE("[NAPI]Object is null!");
34 return NapiGetUndefined(env);
35 }
36
37 napi_set_named_property(env, objValue, "floatCornerRadius", CreateJsValue(env, config.floatCornerRadius_));
38 napi_set_named_property(env, objValue, "focusedShadow", CreateShadowValue(env, config, true));
39 napi_set_named_property(env, objValue, "unfocusedShadow", CreateShadowValue(env, config, false));
40 napi_set_named_property(env, objValue, "keyboardAnimationIn",
41 CreateKeyboardAnimationValue(env, config.keyboardAnimationIn_));
42 napi_set_named_property(env, objValue, "keyboardAnimationOut",
43 CreateKeyboardAnimationValue(env, config.keyboardAnimationOut_));
44 napi_set_named_property(env, objValue, "windowAnimation", CreateWindowAnimationValue(env, config));
45 napi_set_named_property(env, objValue, "systemUIStatusBar", CreateSystemUIStatusBarValue(env,
46 config.systemUIStatusBarConfig_));
47 napi_set_named_property(env, objValue, "uiType", CreateJsValue(env, config.uiType_));
48 napi_set_named_property(env, objValue, "backgroundScreenLock", CreateJsValue(env, config.backgroundScreenLock_));
49 napi_set_named_property(env, objValue, "rotationMode", CreateJsValue(env, config.rotationMode_));
50 napi_set_named_property(env, objValue, "desktopStatusBarConfig",
51 CreateWindowStatusBar(env, config.windowImmersive_.desktopStatusBarConfig_));
52 napi_set_named_property(env, objValue, "leftRightStatusBarConfig",
53 CreateWindowStatusBar(env, config.windowImmersive_.leftRightStatusBarConfig_));
54 napi_set_named_property(env, objValue, "upDownStatusBarConfig",
55 CreateWindowStatusBar(env, config.windowImmersive_.upDownStatusBarConfig_));
56 return objValue;
57 }
58
CreateShadowValue(napi_env env,const AppWindowSceneConfig & config,bool focused)59 napi_value JsWindowSceneConfig::CreateShadowValue(napi_env env, const AppWindowSceneConfig& config,
60 bool focused)
61 {
62 napi_value objValue = nullptr;
63 napi_create_object(env, &objValue);
64 if (objValue == nullptr) {
65 WLOGFE("[NAPI]Object is null!");
66 return NapiGetUndefined(env);
67 }
68
69 napi_set_named_property(env, objValue, "offsetX", CreateJsValue(env,
70 focused ? config.focusedShadow_.offsetX_ : config.unfocusedShadow_.offsetX_));
71 napi_set_named_property(env, objValue, "offsetY", CreateJsValue(env,
72 focused ? config.focusedShadow_.offsetY_ : config.unfocusedShadow_.offsetY_));
73 napi_set_named_property(env, objValue, "radius", CreateJsValue(env,
74 focused ? config.focusedShadow_.radius_ : config.unfocusedShadow_.radius_));
75 napi_set_named_property(env, objValue, "color", CreateJsValue(env,
76 focused ? config.focusedShadow_.color_ : config.unfocusedShadow_.color_));
77
78 return objValue;
79 }
80
CreateWindowAnimationValue(napi_env env,const AppWindowSceneConfig & config)81 napi_value JsWindowSceneConfig::CreateWindowAnimationValue(napi_env env, const AppWindowSceneConfig& config)
82 {
83 napi_value objValue = nullptr;
84 napi_create_object(env, &objValue);
85 if (objValue == nullptr) {
86 WLOGFE("[NAPI]Object is null!");
87 return NapiGetUndefined(env);
88 }
89 napi_set_named_property(env, objValue, "duration", CreateJsValue(env, config.windowAnimation_.duration_));
90 napi_set_named_property(env, objValue, "curveType", CreateJsValue(env, config.windowAnimation_.curveType_));
91 napi_set_named_property(env, objValue, "ctrlX1", CreateJsValue(env, config.windowAnimation_.ctrlX1_));
92 napi_set_named_property(env, objValue, "ctrlY1", CreateJsValue(env, config.windowAnimation_.ctrlY1_));
93 napi_set_named_property(env, objValue, "ctrlX2", CreateJsValue(env, config.windowAnimation_.ctrlX2_));
94 napi_set_named_property(env, objValue, "ctrlY2", CreateJsValue(env, config.windowAnimation_.ctrlY2_));
95 napi_set_named_property(env, objValue, "scaleX", CreateJsValue(env, config.windowAnimation_.scaleX_));
96 napi_set_named_property(env, objValue, "scaleY", CreateJsValue(env, config.windowAnimation_.scaleY_));
97 napi_set_named_property(env, objValue, "rotationX", CreateJsValue(env, config.windowAnimation_.rotationX_));
98 napi_set_named_property(env, objValue, "rotationY", CreateJsValue(env, config.windowAnimation_.rotationY_));
99 napi_set_named_property(env, objValue, "rotationZ", CreateJsValue(env, config.windowAnimation_.rotationZ_));
100 napi_set_named_property(env, objValue, "angle", CreateJsValue(env, config.windowAnimation_.angle_));
101 napi_set_named_property(env, objValue, "translateX", CreateJsValue(env, config.windowAnimation_.translateX_));
102 napi_set_named_property(env, objValue, "translateY", CreateJsValue(env, config.windowAnimation_.translateY_));
103 napi_set_named_property(env, objValue, "opacity", CreateJsValue(env, config.windowAnimation_.opacity_));
104 return objValue;
105 }
106
CreateKeyboardAnimationValue(napi_env env,const KeyboardSceneAnimationConfig & config)107 napi_value JsWindowSceneConfig::CreateKeyboardAnimationValue(napi_env env,
108 const KeyboardSceneAnimationConfig& config)
109 {
110 napi_value objValue = nullptr;
111 napi_create_object(env, &objValue);
112 if (objValue == nullptr) {
113 WLOGFE("[NAPI]Object is null!");
114 return NapiGetUndefined(env);
115 }
116
117 napi_set_named_property(env, objValue, "curveType", CreateJsValue(env, config.curveType_));
118 napi_set_named_property(env, objValue, "ctrlX1", CreateJsValue(env, config.ctrlX1_));
119 napi_set_named_property(env, objValue, "ctrlY1", CreateJsValue(env, config.ctrlY1_));
120 napi_set_named_property(env, objValue, "ctrlX2", CreateJsValue(env, config.ctrlX2_));
121 napi_set_named_property(env, objValue, "ctrlY2", CreateJsValue(env, config.ctrlY2_));
122 napi_set_named_property(env, objValue, "duration", CreateJsValue(env, config.duration_));
123
124 return objValue;
125 }
126
CreateSystemUIStatusBarValue(napi_env env,const SystemUIStatusBarConfig & config)127 napi_value JsWindowSceneConfig::CreateSystemUIStatusBarValue(napi_env env,
128 const SystemUIStatusBarConfig& config)
129 {
130 napi_value objValue = nullptr;
131 napi_create_object(env, &objValue);
132 if (objValue == nullptr) {
133 WLOGFE("[NAPI]Object is null!");
134 return NapiGetUndefined(env);
135 }
136 napi_set_named_property(env, objValue, "showInLandscapeMode", CreateJsValue(env, config.showInLandscapeMode_));
137 napi_set_named_property(env, objValue, "immersiveStatusBarBgColor",
138 CreateJsValue(env, config.immersiveStatusBarBgColor_));
139 napi_set_named_property(env, objValue, "immersiveStatusBarContentColor",
140 CreateJsValue(env, config.immersiveStatusBarContentColor_));
141 return objValue;
142 }
143
CreateWindowStatusBar(napi_env env,const StatusBarConfig & config)144 napi_value JsWindowSceneConfig::CreateWindowStatusBar(napi_env env,
145 const StatusBarConfig& config)
146 {
147 if (config.backgroundColor_.empty() || config.contentColor_.empty()) {
148 WLOGFE("[NAPI]WindowStatusBar is null!");
149 return NapiGetUndefined(env);
150 }
151 napi_value objValue = nullptr;
152 napi_create_object(env, &objValue);
153 if (objValue == nullptr) {
154 WLOGFE("[NAPI]Object is null!");
155 return NapiGetUndefined(env);
156 }
157 napi_set_named_property(env, objValue, "showHide", CreateJsValue(env, config.showHide_));
158 napi_set_named_property(env, objValue, "backgroundColor", CreateJsValue(env, config.backgroundColor_));
159 napi_set_named_property(env, objValue, "contentColor", CreateJsValue(env, config.contentColor_));
160 return objValue;
161 }
162
JsWindowSceneConfig()163 JsWindowSceneConfig::JsWindowSceneConfig()
164 {
165 WLOGFD("Construct JsWindowSceneConfig");
166 }
167
~JsWindowSceneConfig()168 JsWindowSceneConfig::~JsWindowSceneConfig()
169 {
170 WLOGFD("Destroy JsWindowSceneConfig");
171 }
172
CreateFreeMultiWindowConfig(napi_env env,const SystemSessionConfig & config)173 napi_value JsWindowSceneConfig::CreateFreeMultiWindowConfig(napi_env env, const SystemSessionConfig& config)
174 {
175 TLOGI(WmsLogTag::DEFAULT, "[NAPI]CreateFreeMultiWindowConfig");
176 napi_value objValue = nullptr;
177 napi_create_object(env, &objValue);
178 if (objValue == nullptr) {
179 TLOGI(WmsLogTag::DEFAULT, "[NAPI]Object is null!");
180 return NapiGetUndefined(env);
181 }
182
183 napi_set_named_property(env, objValue, "freeMultiWindowSupport", CreateJsValue(env,
184 config.freeMultiWindowSupport_));
185 napi_set_named_property(env, objValue, "maxMainFloatingWindowNumber", CreateJsValue(env,
186 config.freeMultiWindowConfig_.maxMainFloatingWindowNumber_));
187 napi_set_named_property(env, objValue, "defaultWindowMode", CreateJsValue(env,
188 config.freeMultiWindowConfig_.defaultWindowMode_));
189 return objValue;
190 }
191
CreateSystemConfig(napi_env env,const SystemSessionConfig & config)192 napi_value JsWindowSceneConfig::CreateSystemConfig(napi_env env, const SystemSessionConfig& config)
193 {
194 TLOGI(WmsLogTag::DEFAULT, "in");
195 napi_value objValue = nullptr;
196 napi_create_object(env, &objValue);
197 if (objValue == nullptr) {
198 TLOGE(WmsLogTag::DEFAULT, "Object is null!");
199 return NapiGetUndefined(env);
200 }
201
202 napi_set_named_property(env, objValue, "maxMidSceneNum", CreateJsValue(env,
203 config.maxMidSceneNum_));
204 return objValue;
205 }
206 } // namespace OHOS::Rosen
207