1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 2021-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 DISPLAY_H
17e0dac50fSopenharmony_ci#define DISPLAY_H
18e0dac50fSopenharmony_ci
19e0dac50fSopenharmony_ci#include <string>
20e0dac50fSopenharmony_ci#include "dm_common.h"
21e0dac50fSopenharmony_ci#include "noncopyable.h"
22e0dac50fSopenharmony_ci
23e0dac50fSopenharmony_cinamespace OHOS::Rosen {
24e0dac50fSopenharmony_ciclass DisplayInfo;
25e0dac50fSopenharmony_ciclass CutoutInfo;
26e0dac50fSopenharmony_ci
27e0dac50fSopenharmony_ciclass Display : public RefBase {
28e0dac50fSopenharmony_cifriend class DisplayManager;
29e0dac50fSopenharmony_cipublic:
30e0dac50fSopenharmony_ci    ~Display();
31e0dac50fSopenharmony_ci    Display(const Display&) = delete;
32e0dac50fSopenharmony_ci    Display(Display&&) = delete;
33e0dac50fSopenharmony_ci    Display& operator=(const Display&) = delete;
34e0dac50fSopenharmony_ci    Display& operator=(Display&&) = delete;
35e0dac50fSopenharmony_ci
36e0dac50fSopenharmony_ci    /**
37e0dac50fSopenharmony_ci     * @brief Get id of the display.
38e0dac50fSopenharmony_ci     *
39e0dac50fSopenharmony_ci     * @return Display id.
40e0dac50fSopenharmony_ci     */
41e0dac50fSopenharmony_ci    DisplayId GetId() const;
42e0dac50fSopenharmony_ci
43e0dac50fSopenharmony_ci    /**
44e0dac50fSopenharmony_ci     * @brief Get name of the display.
45e0dac50fSopenharmony_ci     *
46e0dac50fSopenharmony_ci     * @return Display name.
47e0dac50fSopenharmony_ci     */
48e0dac50fSopenharmony_ci    std::string GetName() const;
49e0dac50fSopenharmony_ci
50e0dac50fSopenharmony_ci    /**
51e0dac50fSopenharmony_ci     * @brief Get width of the display.
52e0dac50fSopenharmony_ci     *
53e0dac50fSopenharmony_ci     * @return Width of the display.
54e0dac50fSopenharmony_ci     */
55e0dac50fSopenharmony_ci    int32_t GetWidth() const;
56e0dac50fSopenharmony_ci
57e0dac50fSopenharmony_ci    /**
58e0dac50fSopenharmony_ci     * @brief Get height of the display.
59e0dac50fSopenharmony_ci     *
60e0dac50fSopenharmony_ci     * @return Height of the display.
61e0dac50fSopenharmony_ci     */
62e0dac50fSopenharmony_ci    int32_t GetHeight() const;
63e0dac50fSopenharmony_ci
64e0dac50fSopenharmony_ci    /**
65e0dac50fSopenharmony_ci     * @brief Get physical width of the display.
66e0dac50fSopenharmony_ci     *
67e0dac50fSopenharmony_ci     * @return Physical width of the display.
68e0dac50fSopenharmony_ci     */
69e0dac50fSopenharmony_ci    int32_t GetPhysicalWidth() const;
70e0dac50fSopenharmony_ci
71e0dac50fSopenharmony_ci    /**
72e0dac50fSopenharmony_ci     * @brief Get physical height of the display.
73e0dac50fSopenharmony_ci     *
74e0dac50fSopenharmony_ci     * @return Physical height of the display.
75e0dac50fSopenharmony_ci     */
76e0dac50fSopenharmony_ci    int32_t GetPhysicalHeight() const;
77e0dac50fSopenharmony_ci
78e0dac50fSopenharmony_ci    /**
79e0dac50fSopenharmony_ci     * @brief Get the refresh rate of the display.
80e0dac50fSopenharmony_ci     *
81e0dac50fSopenharmony_ci     * @return Refresh rate of the display.
82e0dac50fSopenharmony_ci     */
83e0dac50fSopenharmony_ci    uint32_t GetRefreshRate() const;
84e0dac50fSopenharmony_ci
85e0dac50fSopenharmony_ci    /**
86e0dac50fSopenharmony_ci     * @brief Get screen id.
87e0dac50fSopenharmony_ci     *
88e0dac50fSopenharmony_ci     * @return The screen id.
89e0dac50fSopenharmony_ci     */
90e0dac50fSopenharmony_ci    ScreenId GetScreenId() const;
91e0dac50fSopenharmony_ci
92e0dac50fSopenharmony_ci    /**
93e0dac50fSopenharmony_ci     * @brief Get the virtual pixel ratio of the display.
94e0dac50fSopenharmony_ci     *
95e0dac50fSopenharmony_ci     * @return Virtual pixel ratio of the display.
96e0dac50fSopenharmony_ci     */
97e0dac50fSopenharmony_ci    float GetVirtualPixelRatio() const;
98e0dac50fSopenharmony_ci
99e0dac50fSopenharmony_ci    /**
100e0dac50fSopenharmony_ci     * @brief Get the Dpi of the display.
101e0dac50fSopenharmony_ci     *
102e0dac50fSopenharmony_ci     * @return Dpi of the display.
103e0dac50fSopenharmony_ci     */
104e0dac50fSopenharmony_ci    int GetDpi() const;
105e0dac50fSopenharmony_ci
106e0dac50fSopenharmony_ci    /**
107e0dac50fSopenharmony_ci     * @brief Get the rotation of the display.
108e0dac50fSopenharmony_ci     *
109e0dac50fSopenharmony_ci     * @return Rotation of the display..
110e0dac50fSopenharmony_ci     */
111e0dac50fSopenharmony_ci    Rotation GetRotation() const;
112e0dac50fSopenharmony_ci
113e0dac50fSopenharmony_ci    /**
114e0dac50fSopenharmony_ci     * @brief Get the Orientation of the display.
115e0dac50fSopenharmony_ci     *
116e0dac50fSopenharmony_ci     * @return Orientation indicates the direction of the display content.
117e0dac50fSopenharmony_ci     */
118e0dac50fSopenharmony_ci    Orientation GetOrientation() const;
119e0dac50fSopenharmony_ci
120e0dac50fSopenharmony_ci    /**
121e0dac50fSopenharmony_ci     * @brief Get info of the display.
122e0dac50fSopenharmony_ci     *
123e0dac50fSopenharmony_ci     * @return Info of the display.
124e0dac50fSopenharmony_ci     */
125e0dac50fSopenharmony_ci    sptr<DisplayInfo> GetDisplayInfo() const;
126e0dac50fSopenharmony_ci
127e0dac50fSopenharmony_ci    /**
128e0dac50fSopenharmony_ci     * @brief Get cutout info of the display.
129e0dac50fSopenharmony_ci     *
130e0dac50fSopenharmony_ci     * @return Cutout info of the display.
131e0dac50fSopenharmony_ci     */
132e0dac50fSopenharmony_ci    sptr<CutoutInfo> GetCutoutInfo() const;
133e0dac50fSopenharmony_ci
134e0dac50fSopenharmony_ci    /**
135e0dac50fSopenharmony_ci     * @brief Judge if current display has immersive window.
136e0dac50fSopenharmony_ci     * @param immersive The flag to represent if current display has immersive window.
137e0dac50fSopenharmony_ci     *
138e0dac50fSopenharmony_ci     * @return DM error codes.
139e0dac50fSopenharmony_ci     */
140e0dac50fSopenharmony_ci    DMError HasImmersiveWindow(bool& immersive);
141e0dac50fSopenharmony_ci
142e0dac50fSopenharmony_ci    /**
143e0dac50fSopenharmony_ci     * @brief Get the supported HDR format of the screen.
144e0dac50fSopenharmony_ci     *
145e0dac50fSopenharmony_ci     * @param colorSpaces Supported HDR format of the screen.
146e0dac50fSopenharmony_ci     * @return DM_OK means get success, others means get failed.
147e0dac50fSopenharmony_ci     */
148e0dac50fSopenharmony_ci    DMError GetSupportedHDRFormats(std::vector<uint32_t>& hdrFormats) const;
149e0dac50fSopenharmony_ci
150e0dac50fSopenharmony_ci    /**
151e0dac50fSopenharmony_ci     * @brief Get the supported color space of the screen.
152e0dac50fSopenharmony_ci     *
153e0dac50fSopenharmony_ci     * @param colorSpaces Supported color space of the screen.
154e0dac50fSopenharmony_ci     * @return DM_OK means get success, others means get failed.
155e0dac50fSopenharmony_ci     */
156e0dac50fSopenharmony_ci    DMError GetSupportedColorSpaces(std::vector<uint32_t>& colorSpaces) const;
157e0dac50fSopenharmony_ci
158e0dac50fSopenharmony_ci    /**
159e0dac50fSopenharmony_ci     * @brief get available area of the display.(the screen area without dock and statusbar)
160e0dac50fSopenharmony_ci     * @param area available area of the screen.
161e0dac50fSopenharmony_ci     * @return DMError
162e0dac50fSopenharmony_ci     */
163e0dac50fSopenharmony_ci    DMError GetAvailableArea(DMRect& area) const;
164e0dac50fSopenharmony_ci
165e0dac50fSopenharmony_ciprotected:
166e0dac50fSopenharmony_ci    // No more methods or variables can be defined here.
167e0dac50fSopenharmony_ci    Display(const std::string& name, sptr<DisplayInfo> info);
168e0dac50fSopenharmony_ciprivate:
169e0dac50fSopenharmony_ci    // No more methods or variables can be defined here.
170e0dac50fSopenharmony_ci    void UpdateDisplayInfo(sptr<DisplayInfo>) const;
171e0dac50fSopenharmony_ci    void UpdateDisplayInfo() const;
172e0dac50fSopenharmony_ci    class Impl;
173e0dac50fSopenharmony_ci    sptr<Impl> pImpl_;
174e0dac50fSopenharmony_ci};
175e0dac50fSopenharmony_ci} // namespace OHOS::Rosen
176e0dac50fSopenharmony_ci
177e0dac50fSopenharmony_ci#endif // DISPLAY_H