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#include "display_lite.h"
16e0dac50fSopenharmony_ci
17e0dac50fSopenharmony_ci#include <cstdint>
18e0dac50fSopenharmony_ci#include <new>
19e0dac50fSopenharmony_ci#include <refbase.h>
20e0dac50fSopenharmony_ci
21e0dac50fSopenharmony_ci#include "class_var_definition.h"
22e0dac50fSopenharmony_ci#include "display_info.h"
23e0dac50fSopenharmony_ci#include "display_manager_adapter_lite.h"
24e0dac50fSopenharmony_ci#include "dm_common.h"
25e0dac50fSopenharmony_ci#include "singleton_container.h"
26e0dac50fSopenharmony_ci#include "window_manager_hilog.h"
27e0dac50fSopenharmony_ci
28e0dac50fSopenharmony_cinamespace OHOS::Rosen {
29e0dac50fSopenharmony_cinamespace {
30e0dac50fSopenharmony_ciconstexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_DISPLAY, "DisplayLite"};
31e0dac50fSopenharmony_ci}
32e0dac50fSopenharmony_ciclass DisplayLite::Impl : public RefBase {
33e0dac50fSopenharmony_cipublic:
34e0dac50fSopenharmony_ci    Impl(const std::string& name, sptr<DisplayInfo> info)
35e0dac50fSopenharmony_ci    {
36e0dac50fSopenharmony_ci        displayInfo_ = info;
37e0dac50fSopenharmony_ci        name_= name;
38e0dac50fSopenharmony_ci    }
39e0dac50fSopenharmony_ci    ~Impl() = default;
40e0dac50fSopenharmony_ci    DEFINE_VAR_FUNC_GET_SET_WITH_LOCK(sptr<DisplayInfo>, DisplayInfo, displayInfo);
41e0dac50fSopenharmony_ci    DEFINE_VAR_FUNC_GET_SET(std::string, Name, name);
42e0dac50fSopenharmony_ci};
43e0dac50fSopenharmony_ci
44e0dac50fSopenharmony_ciDisplayLite::DisplayLite(const std::string& name, sptr<DisplayInfo> info)
45e0dac50fSopenharmony_ci    : pImpl_(new Impl(name, info))
46e0dac50fSopenharmony_ci{
47e0dac50fSopenharmony_ci}
48e0dac50fSopenharmony_ci
49e0dac50fSopenharmony_ciDisplayLite::~DisplayLite()
50e0dac50fSopenharmony_ci{
51e0dac50fSopenharmony_ci}
52e0dac50fSopenharmony_ci
53e0dac50fSopenharmony_ciDisplayId DisplayLite::GetId() const
54e0dac50fSopenharmony_ci{
55e0dac50fSopenharmony_ci    if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
56e0dac50fSopenharmony_ci        WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
57e0dac50fSopenharmony_ci        return DisplayId(0);
58e0dac50fSopenharmony_ci    }
59e0dac50fSopenharmony_ci    return pImpl_->GetDisplayInfo()->GetDisplayId();
60e0dac50fSopenharmony_ci}
61e0dac50fSopenharmony_ci
62e0dac50fSopenharmony_cisptr<DisplayInfo> DisplayLite::GetDisplayInfo() const
63e0dac50fSopenharmony_ci{
64e0dac50fSopenharmony_ci    UpdateDisplayInfo();
65e0dac50fSopenharmony_ci    if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
66e0dac50fSopenharmony_ci        WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
67e0dac50fSopenharmony_ci        return nullptr;
68e0dac50fSopenharmony_ci    }
69e0dac50fSopenharmony_ci    return pImpl_->GetDisplayInfo();
70e0dac50fSopenharmony_ci}
71e0dac50fSopenharmony_ci
72e0dac50fSopenharmony_ciint32_t DisplayLite::GetWidth() const
73e0dac50fSopenharmony_ci{
74e0dac50fSopenharmony_ci    UpdateDisplayInfo();
75e0dac50fSopenharmony_ci    if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
76e0dac50fSopenharmony_ci        WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
77e0dac50fSopenharmony_ci        return 0;
78e0dac50fSopenharmony_ci    }
79e0dac50fSopenharmony_ci    return pImpl_->GetDisplayInfo()->GetWidth();
80e0dac50fSopenharmony_ci}
81e0dac50fSopenharmony_ci
82e0dac50fSopenharmony_ciint32_t DisplayLite::GetHeight() const
83e0dac50fSopenharmony_ci{
84e0dac50fSopenharmony_ci    UpdateDisplayInfo();
85e0dac50fSopenharmony_ci    if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
86e0dac50fSopenharmony_ci        WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
87e0dac50fSopenharmony_ci        return 0;
88e0dac50fSopenharmony_ci    }
89e0dac50fSopenharmony_ci    return pImpl_->GetDisplayInfo()->GetHeight();
90e0dac50fSopenharmony_ci}
91e0dac50fSopenharmony_ci
92e0dac50fSopenharmony_cisptr<CutoutInfo> DisplayLite::GetCutoutInfo() const
93e0dac50fSopenharmony_ci{
94e0dac50fSopenharmony_ci    return SingletonContainer::Get<DisplayManagerAdapterLite>().GetCutoutInfo(GetId());
95e0dac50fSopenharmony_ci}
96e0dac50fSopenharmony_ci
97e0dac50fSopenharmony_civoid DisplayLite::UpdateDisplayInfo() const
98e0dac50fSopenharmony_ci{
99e0dac50fSopenharmony_ci    auto displayInfo = SingletonContainer::Get<DisplayManagerAdapterLite>().GetDisplayInfo(GetId());
100e0dac50fSopenharmony_ci    UpdateDisplayInfo(displayInfo);
101e0dac50fSopenharmony_ci}
102e0dac50fSopenharmony_ci
103e0dac50fSopenharmony_civoid DisplayLite::UpdateDisplayInfo(sptr<DisplayInfo> displayInfo) const
104e0dac50fSopenharmony_ci{
105e0dac50fSopenharmony_ci    if (displayInfo == nullptr) {
106e0dac50fSopenharmony_ci        WLOGFE("displayInfo is nullptr");
107e0dac50fSopenharmony_ci        return;
108e0dac50fSopenharmony_ci    }
109e0dac50fSopenharmony_ci    if (pImpl_ == nullptr) {
110e0dac50fSopenharmony_ci        WLOGFE("pImpl_ is nullptr");
111e0dac50fSopenharmony_ci        return;
112e0dac50fSopenharmony_ci    }
113e0dac50fSopenharmony_ci    pImpl_->SetDisplayInfo(displayInfo);
114e0dac50fSopenharmony_ci}
115e0dac50fSopenharmony_ci
116e0dac50fSopenharmony_ciRotation DisplayLite::GetRotation() const
117e0dac50fSopenharmony_ci{
118e0dac50fSopenharmony_ci    UpdateDisplayInfo();
119e0dac50fSopenharmony_ci    if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
120e0dac50fSopenharmony_ci        WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
121e0dac50fSopenharmony_ci        return Rotation::ROTATION_0;
122e0dac50fSopenharmony_ci    }
123e0dac50fSopenharmony_ci    return pImpl_->GetDisplayInfo()->GetRotation();
124e0dac50fSopenharmony_ci}
125e0dac50fSopenharmony_ci} // namespace OHOS::Rosen
126