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