1e0dac50fSopenharmony_ci/* 2e0dac50fSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3e0dac50fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4e0dac50fSopenharmony_ci * you may not use this file except in compliance with the License. 5e0dac50fSopenharmony_ci * You may obtain a copy of the License at 6e0dac50fSopenharmony_ci * 7e0dac50fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8e0dac50fSopenharmony_ci * 9e0dac50fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10e0dac50fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11e0dac50fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12e0dac50fSopenharmony_ci * See the License for the specific language governing permissions and 13e0dac50fSopenharmony_ci * limitations under the License. 14e0dac50fSopenharmony_ci */ 15e0dac50fSopenharmony_ci 16e0dac50fSopenharmony_ci#ifndef OHOS_ROSEN_ROOT_SCENE_H 17e0dac50fSopenharmony_ci#define OHOS_ROSEN_ROOT_SCENE_H 18e0dac50fSopenharmony_ci 19e0dac50fSopenharmony_ci#include <mutex> 20e0dac50fSopenharmony_ci 21e0dac50fSopenharmony_ci#include "vsync_station.h" 22e0dac50fSopenharmony_ci#include "window.h" 23e0dac50fSopenharmony_ci#include "ws_common.h" 24e0dac50fSopenharmony_ci 25e0dac50fSopenharmony_citypedef struct napi_env__* napi_env; 26e0dac50fSopenharmony_citypedef struct napi_value__* napi_value; 27e0dac50fSopenharmony_cinamespace OHOS::AppExecFwk { 28e0dac50fSopenharmony_ciclass EventHandler; 29e0dac50fSopenharmony_ciclass LauncherService; 30e0dac50fSopenharmony_ci} // namespace OHOS::AppExecFwk 31e0dac50fSopenharmony_ci 32e0dac50fSopenharmony_cinamespace OHOS::Ace { 33e0dac50fSopenharmony_ciclass UIContent; 34e0dac50fSopenharmony_ci} // namespace OHOS::Ace 35e0dac50fSopenharmony_ci 36e0dac50fSopenharmony_cinamespace OHOS { 37e0dac50fSopenharmony_cinamespace Rosen { 38e0dac50fSopenharmony_ciusing GetSessionRectCallback = std::function<WSRect(AvoidAreaType)>; 39e0dac50fSopenharmony_ci 40e0dac50fSopenharmony_ciclass RootScene : public Window { 41e0dac50fSopenharmony_cipublic: 42e0dac50fSopenharmony_ci RootScene(); 43e0dac50fSopenharmony_ci virtual ~RootScene(); 44e0dac50fSopenharmony_ci 45e0dac50fSopenharmony_ci void LoadContent(const std::string& contentUrl, napi_env env, napi_value storage, 46e0dac50fSopenharmony_ci AbilityRuntime::Context* context); 47e0dac50fSopenharmony_ci void UpdateViewportConfig(const Rect& rect, WindowSizeChangeReason reason); 48e0dac50fSopenharmony_ci static void UpdateConfigurationForAll(const std::shared_ptr<AppExecFwk::Configuration>& configuration); 49e0dac50fSopenharmony_ci void UpdateConfiguration(const std::shared_ptr<AppExecFwk::Configuration>& configuration) override; 50e0dac50fSopenharmony_ci 51e0dac50fSopenharmony_ci void RequestVsync(const std::shared_ptr<VsyncCallback>& vsyncCallback) override; 52e0dac50fSopenharmony_ci int64_t GetVSyncPeriod() override; 53e0dac50fSopenharmony_ci void FlushFrameRate(uint32_t rate, int32_t animatorExpectedFrameRate, uint32_t rateType = 0) override; 54e0dac50fSopenharmony_ci 55e0dac50fSopenharmony_ci void OnBundleUpdated(const std::string& bundleName); 56e0dac50fSopenharmony_ci static void SetOnConfigurationUpdatedCallback( 57e0dac50fSopenharmony_ci const std::function<void(const std::shared_ptr<AppExecFwk::Configuration>&)>& callback); 58e0dac50fSopenharmony_ci void SetFrameLayoutFinishCallback(std::function<void()>&& callback); 59e0dac50fSopenharmony_ci 60e0dac50fSopenharmony_ci void SetGetSessionRectCallback(GetSessionRectCallback&& callback) 61e0dac50fSopenharmony_ci { 62e0dac50fSopenharmony_ci getSessionRectCallback_ = std::move(callback); 63e0dac50fSopenharmony_ci } 64e0dac50fSopenharmony_ci 65e0dac50fSopenharmony_ci void SetDisplayDensity(float density) 66e0dac50fSopenharmony_ci { 67e0dac50fSopenharmony_ci density_ = density; 68e0dac50fSopenharmony_ci } 69e0dac50fSopenharmony_ci 70e0dac50fSopenharmony_ci void SetDisplayOrientation(int32_t orientation); 71e0dac50fSopenharmony_ci 72e0dac50fSopenharmony_ci float GetDisplayDensity() 73e0dac50fSopenharmony_ci { 74e0dac50fSopenharmony_ci return density_; 75e0dac50fSopenharmony_ci } 76e0dac50fSopenharmony_ci 77e0dac50fSopenharmony_ci WindowState GetWindowState() const override 78e0dac50fSopenharmony_ci { 79e0dac50fSopenharmony_ci return WindowState::STATE_SHOWN; 80e0dac50fSopenharmony_ci } 81e0dac50fSopenharmony_ci 82e0dac50fSopenharmony_ci WindowType GetType() const override 83e0dac50fSopenharmony_ci { 84e0dac50fSopenharmony_ci return type_; 85e0dac50fSopenharmony_ci } 86e0dac50fSopenharmony_ci 87e0dac50fSopenharmony_ci const std::string& GetWindowName() const override 88e0dac50fSopenharmony_ci { 89e0dac50fSopenharmony_ci return name_; 90e0dac50fSopenharmony_ci } 91e0dac50fSopenharmony_ci 92e0dac50fSopenharmony_ci uint32_t GetWindowId() const override 93e0dac50fSopenharmony_ci { 94e0dac50fSopenharmony_ci return 1; // 1 for root 95e0dac50fSopenharmony_ci } 96e0dac50fSopenharmony_ci 97e0dac50fSopenharmony_ci Ace::UIContent* GetUIContent() const override 98e0dac50fSopenharmony_ci { 99e0dac50fSopenharmony_ci return uiContent_.get(); 100e0dac50fSopenharmony_ci } 101e0dac50fSopenharmony_ci 102e0dac50fSopenharmony_ci void SetUiDvsyncSwitch(bool dvsyncSwitch) override; 103e0dac50fSopenharmony_ci 104e0dac50fSopenharmony_ci WMError GetSessionRectByType(AvoidAreaType type, WSRect& rect); 105e0dac50fSopenharmony_ci 106e0dac50fSopenharmony_ci static sptr<RootScene> staticRootScene_; 107e0dac50fSopenharmony_ci 108e0dac50fSopenharmony_ciprivate: 109e0dac50fSopenharmony_ci void RegisterInputEventListener(); 110e0dac50fSopenharmony_ci 111e0dac50fSopenharmony_ci std::unique_ptr<Ace::UIContent> uiContent_; 112e0dac50fSopenharmony_ci std::shared_ptr<AppExecFwk::EventHandler> eventHandler_; 113e0dac50fSopenharmony_ci sptr<AppExecFwk::LauncherService> launcherService_; 114e0dac50fSopenharmony_ci float density_ = 1.0f; 115e0dac50fSopenharmony_ci int32_t orientation_ = 0; 116e0dac50fSopenharmony_ci WindowType type_ = WindowType::WINDOW_TYPE_SCENE_BOARD; 117e0dac50fSopenharmony_ci std::string name_ = "EntryView"; 118e0dac50fSopenharmony_ci 119e0dac50fSopenharmony_ci static std::function<void(const std::shared_ptr<AppExecFwk::Configuration>&)> configurationUpdatedCallback_; 120e0dac50fSopenharmony_ci std::function<void()> frameLayoutFinishCb_ = nullptr; 121e0dac50fSopenharmony_ci std::shared_ptr<VsyncStation> vsyncStation_ = nullptr; 122e0dac50fSopenharmony_ci 123e0dac50fSopenharmony_ci GetSessionRectCallback getSessionRectCallback_ = nullptr; 124e0dac50fSopenharmony_ci}; 125e0dac50fSopenharmony_ci} // namespace Rosen 126e0dac50fSopenharmony_ci} // namespace OHOS 127e0dac50fSopenharmony_ci 128e0dac50fSopenharmony_ci#endif // OHOS_ROSEN_ROOT_SCENE_H 129