• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 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 #include "display.h"
16 
17 #include <cstdint>
18 #include <new>
19 #include <refbase.h>
20 
21 #include "class_var_definition.h"
22 #include "display_info.h"
23 #include "display_manager_adapter.h"
24 #include "dm_common.h"
25 #include "singleton_container.h"
26 #include "window_manager_hilog.h"
27 
28 namespace OHOS::Rosen {
29 namespace {
30     constexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_DISPLAY, "Display"};
31 }
32 class Display::Impl : public RefBase {
33 public:
Impl(const std::string & name,sptr<DisplayInfo> info)34     Impl(const std::string& name, sptr<DisplayInfo> info)
35     {
36         name_= name;
37         displayInfo_ = info;
38     }
39     ~Impl() = default;
40     DEFINE_VAR_FUNC_GET_SET(std::string, Name, name);
41     DEFINE_VAR_FUNC_GET_SET_WITH_LOCK(sptr<DisplayInfo>, DisplayInfo, displayInfo);
42 };
43 
Display(const std::string & name,sptr<DisplayInfo> info)44 Display::Display(const std::string& name, sptr<DisplayInfo> info)
45     : pImpl_(new Impl(name, info))
46 {
47 }
48 
~Display()49 Display::~Display()
50 {
51 }
52 
GetId() const53 DisplayId Display::GetId() const
54 {
55     if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
56         WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
57         return DisplayId(0);
58     }
59     return pImpl_->GetDisplayInfo()->GetDisplayId();
60 }
61 
GetName() const62 std::string Display::GetName() const
63 {
64     if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
65         WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
66         return std::string();
67     }
68     return pImpl_->GetDisplayInfo()->GetName();
69 }
70 
GetWidth() const71 int32_t Display::GetWidth() const
72 {
73     UpdateDisplayInfo();
74     if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
75         WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
76         return 0;
77     }
78     return pImpl_->GetDisplayInfo()->GetWidth();
79 }
80 
GetHeight() const81 int32_t Display::GetHeight() const
82 {
83     UpdateDisplayInfo();
84     if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
85         WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
86         return 0;
87     }
88     return pImpl_->GetDisplayInfo()->GetHeight();
89 }
90 
GetPhysicalWidth() const91 int32_t Display::GetPhysicalWidth() const
92 {
93     UpdateDisplayInfo();
94     if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
95         WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
96         return 0;
97     }
98     return pImpl_->GetDisplayInfo()->GetPhysicalWidth();
99 }
100 
GetPhysicalHeight() const101 int32_t Display::GetPhysicalHeight() const
102 {
103     UpdateDisplayInfo();
104     if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
105         WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
106         return 0;
107     }
108     return pImpl_->GetDisplayInfo()->GetPhysicalHeight();
109 }
110 
GetRefreshRate() const111 uint32_t Display::GetRefreshRate() const
112 {
113     UpdateDisplayInfo();
114     if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
115         WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
116         return 0;
117     }
118     return pImpl_->GetDisplayInfo()->GetRefreshRate();
119 }
120 
GetScreenId() const121 ScreenId Display::GetScreenId() const
122 {
123     UpdateDisplayInfo();
124     if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
125         WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
126         return SCREEN_ID_INVALID;
127     }
128     return pImpl_->GetDisplayInfo()->GetScreenId();
129 }
130 
GetRotation() const131 Rotation Display::GetRotation() const
132 {
133     UpdateDisplayInfo();
134     if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
135         WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
136         return Rotation::ROTATION_0;
137     }
138     return pImpl_->GetDisplayInfo()->GetRotation();
139 }
140 
GetOrientation() const141 Orientation Display::GetOrientation() const
142 {
143     UpdateDisplayInfo();
144     if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
145         WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
146         return Orientation::UNSPECIFIED;
147     }
148     return pImpl_->GetDisplayInfo()->GetOrientation();
149 }
150 
UpdateDisplayInfo(sptr<DisplayInfo> displayInfo) const151 void Display::UpdateDisplayInfo(sptr<DisplayInfo> displayInfo) const
152 {
153     if (displayInfo == nullptr) {
154         WLOGFE("displayInfo is invalid");
155         return;
156     }
157     if (pImpl_ == nullptr) {
158         WLOGFE("pImpl_ is nullptr");
159         return;
160     }
161     pImpl_->SetDisplayInfo(displayInfo);
162 }
163 
UpdateDisplayInfo() const164 void Display::UpdateDisplayInfo() const
165 {
166     auto displayInfo = SingletonContainer::Get<DisplayManagerAdapter>().GetDisplayInfo(GetId());
167     UpdateDisplayInfo(displayInfo);
168 }
169 
GetVirtualPixelRatio() const170 float Display::GetVirtualPixelRatio() const
171 {
172     UpdateDisplayInfo();
173     if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
174         WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
175         return 0;
176     }
177     return pImpl_->GetDisplayInfo()->GetVirtualPixelRatio();
178 }
179 
GetDpi() const180 int Display::GetDpi() const
181 {
182     return static_cast<int>(GetVirtualPixelRatio() * DOT_PER_INCH);
183 }
184 
GetDisplayInfo() const185 sptr<DisplayInfo> Display::GetDisplayInfo() const
186 {
187     UpdateDisplayInfo();
188     if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {
189         WLOGFE("pImpl_ or pImpl_->GetDisplayInfo is nullptr");
190         return nullptr;
191     }
192     return pImpl_->GetDisplayInfo();
193 }
194 
GetCutoutInfo() const195 sptr<CutoutInfo> Display::GetCutoutInfo() const
196 {
197     return SingletonContainer::Get<DisplayManagerAdapter>().GetCutoutInfo(GetId());
198 }
199 
HasImmersiveWindow(bool & immersive)200 DMError Display::HasImmersiveWindow(bool& immersive)
201 {
202     return SingletonContainer::Get<DisplayManagerAdapter>().HasImmersiveWindow(immersive);
203 }
204 
GetSupportedHDRFormats(std::vector<uint32_t> & hdrFormats) const205 DMError Display::GetSupportedHDRFormats(std::vector<uint32_t>& hdrFormats) const
206 {
207     return SingletonContainer::Get<ScreenManagerAdapter>().GetSupportedHDRFormats(GetScreenId(), hdrFormats);
208 }
209 
GetSupportedColorSpaces(std::vector<uint32_t> & colorSpaces) const210 DMError Display::GetSupportedColorSpaces(std::vector<uint32_t>& colorSpaces) const
211 {
212     return SingletonContainer::Get<ScreenManagerAdapter>().GetSupportedColorSpaces(GetScreenId(), colorSpaces);
213 }
214 
GetAvailableArea(DMRect & area) const215 DMError Display::GetAvailableArea(DMRect& area) const
216 {
217     return SingletonContainer::Get<DisplayManagerAdapter>().GetAvailableArea(GetId(), area);
218 }
219 
220 } // namespace OHOS::Rosen
221