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 16 #ifndef FOUNDATION_DM_SCREEN_H 17 #define FOUNDATION_DM_SCREEN_H 18 19 #include <cstdint> 20 #include <screen_manager/screen_types.h> 21 #include <string> 22 #include <surface.h> 23 #include <vector> 24 25 #include "dm_common.h" 26 #include "noncopyable.h" 27 28 namespace OHOS::Rosen { 29 class ScreenInfo; 30 31 struct VirtualScreenOption { 32 std::string name_; 33 uint32_t width_; 34 uint32_t height_; 35 float density_; 36 sptr<Surface> surface_; 37 int32_t flags_; 38 bool isForShot_ {true}; 39 std::vector<uint64_t> missionIds_ {}; 40 }; 41 42 enum class VirtualScreenFlag : uint32_t { 43 DEFAULT = 0, 44 CAST = 1, 45 MAX = 2, 46 }; 47 48 class Screen : public RefBase { 49 friend class ScreenManager; 50 public: 51 ~Screen(); 52 Screen(const Screen&) = delete; 53 Screen(Screen&&) = delete; 54 Screen& operator=(const Screen&) = delete; 55 Screen& operator=(Screen&&) = delete; 56 bool IsGroup() const; 57 std::string GetName() const; 58 59 /** 60 * @brief Get screen id. 61 * 62 * @return Screen id. 63 */ 64 ScreenId GetId() const; 65 66 /** 67 * @brief Get width of the screen. 68 * 69 * @return Width of the screen. 70 */ 71 uint32_t GetWidth() const; 72 73 /** 74 * @brief Get height of the screen. 75 * 76 * @return Height of the screen. 77 */ 78 uint32_t GetHeight() const; 79 80 /** 81 * @brief Get virtual width of the screen. 82 * 83 * @return Virtual width of the screen. 84 */ 85 uint32_t GetVirtualWidth() const; 86 87 /** 88 * @brief Get virtual height of the screen. 89 * 90 * @return Virtual height of the screen. 91 */ 92 uint32_t GetVirtualHeight() const; 93 94 /** 95 * @brief Get virtual pixel ratio of the screen. 96 * 97 * @return Virtual pixel ratio of the screen. 98 */ 99 float GetVirtualPixelRatio() const; 100 101 /** 102 * @brief Get the Rotation of the screen. 103 * 104 * @return The Rotation of the screen. 105 */ 106 Rotation GetRotation() const; 107 108 /** 109 * @brief Get the orientation of the screen. 110 * 111 * @return Orientation of the screen. 112 */ 113 Orientation GetOrientation() const; 114 115 /** 116 * @brief Is a real screen. 117 * 118 * @return True means screen is real, false means the opposite. 119 */ 120 bool IsReal() const; 121 122 /** 123 * @brief Get screen parent id. 124 * 125 * @return Screen parent id. 126 */ 127 ScreenId GetParentId() const; 128 129 /** 130 * @brief Get screen mode id. 131 * 132 * @return Screen mode id. 133 */ 134 uint32_t GetModeId() const; 135 136 /** 137 * @brief Get supported modes of the screen. 138 * 139 * @return Supported modes of the screen. 140 */ 141 std::vector<sptr<SupportedScreenModes>> GetSupportedModes() const; 142 143 /** 144 * @brief Set screen active mode. 145 * 146 * @param modeId Mode id. 147 * @return DM_OK means set success, others means set failed. 148 */ 149 DMError SetScreenActiveMode(uint32_t modeId); 150 151 /** 152 * @brief Set orientation for the screen. 153 * 154 * @param orientation Orientation for the screen. 155 * @return DM_OK means set success, others means set failed. 156 */ 157 DMError SetOrientation(Orientation orientation) const; 158 159 /** 160 * @brief Set the density dpi of the screen. 161 * 162 * @param dpi Density dpi of the screen. 163 * @return DM_OK means set success, others means set failed. 164 */ 165 DMError SetDensityDpi(uint32_t dpi) const; 166 167 /** 168 * @brief Set the density dpi of the screen system window. 169 * 170 * @param dpi Density dpi of the screen. 171 * @return DM_OK means set success, others means set failed. 172 */ 173 DMError SetDensityDpiSystem(uint32_t dpi) const; 174 175 /** 176 * @brief Get the screen info. 177 * 178 * @return Screen info. 179 */ 180 sptr<ScreenInfo> GetScreenInfo() const; 181 182 // colorspace, gamut 183 /** 184 * @brief Get the supported color gamuts of the screen. 185 * 186 * @param colorGamuts Supported color gamuts of the screen. 187 * @return DM_OK means get success, others means get failed. 188 */ 189 DMError GetScreenSupportedColorGamuts(std::vector<ScreenColorGamut>& colorGamuts) const; 190 191 /** 192 * @brief Get the color gamut of the screen. 193 * 194 * @param colorGamut Color gamut of the screen. 195 * @return DM_OK means get success, others means get failed. 196 */ 197 DMError GetScreenColorGamut(ScreenColorGamut& colorGamut) const; 198 199 /** 200 * @brief Set the color gamut of the screen. 201 * 202 * @param colorGamutIdx Color gamut of the screen. 203 * @return DM_OK means set success, others means set failed. 204 */ 205 DMError SetScreenColorGamut(int32_t colorGamutIdx); 206 207 /** 208 * @brief Get the gamut map of the screen. 209 * 210 * @param gamutMap Gamut map of the screen. 211 * @return DM_OK means get success, others means get failed. 212 */ 213 DMError GetScreenGamutMap(ScreenGamutMap& gamutMap) const; 214 215 /** 216 * @brief Set the gamut map of the screen. 217 * 218 * @param gamutMap Gamut map of the screen. 219 * @return DM_OK means set success, others means set failed. 220 */ 221 DMError SetScreenGamutMap(ScreenGamutMap gamutMap); 222 223 /** 224 * @brief Set color transform for the screen. 225 * 226 * @return DM_OK means set success, others means set failed. 227 */ 228 DMError SetScreenColorTransform(); 229 230 /** 231 * @brief Set the resolution for the screen. 232 * 233 * @param width width of the screen 234 * @param height height of the screen 235 * @param dpi dpi of the screen 236 * @return DM_OK means set success, others means set failed. 237 */ 238 DMError SetResolution(uint32_t width, uint32_t height, uint32_t dpi) const; 239 240 /** 241 * @brief get Density in current resolution 242 * @param virtualPixelRatio virtualPixelRatio of the screen 243 * @return DM_OK means set success, others means set failed. 244 */ 245 DMError GetDensityInCurResolution(float& virtualPixelRatio) const; 246 247 /** 248 * @brief Get the pixel format of the screen. 249 * 250 * @return DM_OK means set success, others means set failed. 251 */ 252 DMError GetPixelFormat(GraphicPixelFormat& pixelFormat) const; 253 254 /** 255 * @brief Set the pixel format of the screen. 256 * 257 * @return DM_OK means set success, others means set failed. 258 */ 259 DMError SetPixelFormat(GraphicPixelFormat pixelFormat); 260 261 /** 262 * @brief Get the supported HDR format of the screen. 263 * 264 * @param colorSpaces Supported HDR format of the screen. 265 * @return DM_OK means get success, others means get failed. 266 */ 267 DMError GetSupportedHDRFormats(std::vector<ScreenHDRFormat>& hdrFormats) const; 268 269 /** 270 * @brief Get the HDR format of the screen. 271 * 272 * @return DM_OK means set success, others means set failed. 273 */ 274 DMError GetScreenHDRFormat(ScreenHDRFormat& hdrFormat) const; 275 276 /** 277 * @brief Set the HDR format of the screen. 278 * 279 * @return DM_OK means set success, others means set failed. 280 */ 281 DMError SetScreenHDRFormat(int32_t modeIdx); 282 283 /** 284 * @brief Get the supported color space of the screen. 285 * 286 * @param colorSpaces Supported color space of the screen. 287 * @return DM_OK means get success, others means get failed. 288 */ 289 DMError GetSupportedColorSpaces(std::vector<GraphicCM_ColorSpaceType>& colorSpaces) const; 290 291 /** 292 * @brief Get the color space of the screen. 293 * 294 * @param colorSpace Color space of the screen. 295 * @return DM_OK means get success, others means get failed. 296 */ 297 DMError GetScreenColorSpace(GraphicCM_ColorSpaceType& colorSpace) const; 298 299 /** 300 * @brief Set the color space of the screen. 301 * 302 * @param colorSpace Color space of the screen. 303 * @return DM_OK means set success, others means set failed. 304 */ 305 DMError SetScreenColorSpace(GraphicCM_ColorSpaceType colorSpace); 306 307 protected: 308 // No more methods or variables can be defined here. 309 explicit Screen(sptr<ScreenInfo> info); 310 void UpdateScreenInfo() const; 311 void UpdateScreenInfo(sptr<ScreenInfo> info) const; 312 private: 313 // No more methods or variables can be defined here. 314 class Impl; 315 sptr<Impl> pImpl_; 316 }; 317 } // namespace OHOS::Rosen 318 319 #endif // FOUNDATION_DM_SCREEN_H