1e0dac50fSopenharmony_ci/* 2e0dac50fSopenharmony_ci * Copyright (c) 2024 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_SCREEN_SCENE_H 17e0dac50fSopenharmony_ci#define OHOS_ROSEN_SCREEN_SCENE_H 18e0dac50fSopenharmony_ci 19e0dac50fSopenharmony_ci#include <mutex> 20e0dac50fSopenharmony_ci 21e0dac50fSopenharmony_ci#include "vsync_station.h" 22e0dac50fSopenharmony_ci#include "window.h" 23e0dac50fSopenharmony_citypedef struct napi_env__* napi_env; 24e0dac50fSopenharmony_citypedef struct napi_value__* napi_value; 25e0dac50fSopenharmony_cinamespace OHOS::AppExecFwk { 26e0dac50fSopenharmony_ciclass EventHandler; 27e0dac50fSopenharmony_ci} // namespace OHOS::AppExecFwk 28e0dac50fSopenharmony_ci 29e0dac50fSopenharmony_cinamespace OHOS::Ace { 30e0dac50fSopenharmony_ciclass UIContent; 31e0dac50fSopenharmony_ci} // namespace OHOS::Ace 32e0dac50fSopenharmony_ci 33e0dac50fSopenharmony_cinamespace OHOS { 34e0dac50fSopenharmony_cinamespace Rosen { 35e0dac50fSopenharmony_ciclass ScreenScene : public Window { 36e0dac50fSopenharmony_cipublic: 37e0dac50fSopenharmony_ci ScreenScene(std::string name); 38e0dac50fSopenharmony_ci virtual ~ScreenScene(); 39e0dac50fSopenharmony_ci 40e0dac50fSopenharmony_ci void LoadContent(const std::string& contentUrl, napi_env env, napi_value storage, 41e0dac50fSopenharmony_ci AbilityRuntime::Context* context); 42e0dac50fSopenharmony_ci void UpdateViewportConfig(const Rect& rect, WindowSizeChangeReason reason); 43e0dac50fSopenharmony_ci void UpdateConfiguration(const std::shared_ptr<AppExecFwk::Configuration>& configuration) override; 44e0dac50fSopenharmony_ci 45e0dac50fSopenharmony_ci void RequestVsync(const std::shared_ptr<VsyncCallback>& vsyncCallback) override; 46e0dac50fSopenharmony_ci int64_t GetVSyncPeriod() override; 47e0dac50fSopenharmony_ci void FlushFrameRate(uint32_t rate, int32_t animatorExpectedFrameRate, uint32_t rateType = 0) override; 48e0dac50fSopenharmony_ci 49e0dac50fSopenharmony_ci void OnBundleUpdated(const std::string& bundleName); 50e0dac50fSopenharmony_ci void SetFrameLayoutFinishCallback(std::function<void()> && callback); 51e0dac50fSopenharmony_ci 52e0dac50fSopenharmony_ci void SetDisplayDensity(float density); 53e0dac50fSopenharmony_ci 54e0dac50fSopenharmony_ci void SetDisplayOrientation(int32_t orientation); 55e0dac50fSopenharmony_ci 56e0dac50fSopenharmony_ci WindowState GetWindowState() const override 57e0dac50fSopenharmony_ci { 58e0dac50fSopenharmony_ci return WindowState::STATE_SHOWN; 59e0dac50fSopenharmony_ci } 60e0dac50fSopenharmony_ci 61e0dac50fSopenharmony_ci WindowType GetType() const override 62e0dac50fSopenharmony_ci { 63e0dac50fSopenharmony_ci return type_; 64e0dac50fSopenharmony_ci } 65e0dac50fSopenharmony_ci 66e0dac50fSopenharmony_ci const std::string& GetWindowName() const override 67e0dac50fSopenharmony_ci { 68e0dac50fSopenharmony_ci return name_; 69e0dac50fSopenharmony_ci } 70e0dac50fSopenharmony_ci 71e0dac50fSopenharmony_ci uint32_t GetWindowId() const override 72e0dac50fSopenharmony_ci { 73e0dac50fSopenharmony_ci return 1; // 1 for root and screen 74e0dac50fSopenharmony_ci } 75e0dac50fSopenharmony_ci 76e0dac50fSopenharmony_ci Ace::UIContent* GetUIContent() const override 77e0dac50fSopenharmony_ci { 78e0dac50fSopenharmony_ci return uiContent_.get(); 79e0dac50fSopenharmony_ci } 80e0dac50fSopenharmony_ci 81e0dac50fSopenharmony_ci WMError Destroy() override; 82e0dac50fSopenharmony_ci 83e0dac50fSopenharmony_ciprivate: 84e0dac50fSopenharmony_ci std::mutex mutex_; 85e0dac50fSopenharmony_ci std::unique_ptr<Ace::UIContent> uiContent_; 86e0dac50fSopenharmony_ci float density_ = 1.0f; 87e0dac50fSopenharmony_ci int32_t orientation_; 88e0dac50fSopenharmony_ci WindowType type_ = WindowType::WINDOW_TYPE_SCENE_BOARD; 89e0dac50fSopenharmony_ci std::string name_; 90e0dac50fSopenharmony_ci std::function<void()> frameLayoutFinishCb_ = nullptr; 91e0dac50fSopenharmony_ci std::shared_ptr<VsyncStation> vsyncStation_ = nullptr; 92e0dac50fSopenharmony_ci std::shared_ptr<AppExecFwk::EventHandler> handler_ = nullptr; 93e0dac50fSopenharmony_ci}; 94e0dac50fSopenharmony_ci} // namespace Rosen 95e0dac50fSopenharmony_ci} // namespace OHOS 96e0dac50fSopenharmony_ci 97e0dac50fSopenharmony_ci#endif // OHOS_ROSEN_SCREEN_SCENE_H 98