1/*
2 * Copyright (c) 2024 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 OH_NATIVE_DISPLAY_MANAGER_H
17#define OH_NATIVE_DISPLAY_MANAGER_H
18
19/**
20 * @addtogroup OH_DisplayManager
21 * @{
22 *
23 * @brief Defines the data structures for the C APIs of the display module.
24 *
25 * @syscap SystemCapability.WindowManager.WindowManager.Core
26 * @since 12
27 * @version 1.0
28 */
29
30/**
31 * @file oh_display_manager.h
32 *
33 * @brief Defines the data structures for the C APIs of the display module.
34 *
35 * @kit ArkUI
36 * @library libnative_display_manager.so.
37 * @syscap SystemCapability.WindowManager.WindowManager.Core
38 * @since 12
39 * @version 1.0
40 */
41
42#include "oh_display_info.h"
43
44#ifdef __cplusplus
45extern "C" {
46#endif
47
48/**
49 * @brief Obtain the default display Id.
50 *
51 * @param { *displayId } Indicates the pointer to an <b>uint64_t</b> object.
52 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
53 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
54 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
55 * @syscap SystemCapability.WindowManager.WindowManager.Core
56 * @since 12
57 */
58NativeDisplayManager_ErrorCode OH_NativeDisplayManager_GetDefaultDisplayId(uint64_t *displayId);
59
60/**
61 * @brief Obtain the default display width.
62 *
63 * @param { *displayWidth } Indicates the pointer to an <b>int32_t</b> object.
64 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
65 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
66 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
67 * @syscap SystemCapability.WindowManager.WindowManager.Core
68 * @since 12
69 */
70NativeDisplayManager_ErrorCode OH_NativeDisplayManager_GetDefaultDisplayWidth(int32_t *displayWidth);
71
72/**
73 * @brief Obtain the default display height.
74 *
75 * @param { *displayHeight } Indicates the pointer to an <b>int32_t</b> object.
76 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
77 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
78 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
79 * @syscap SystemCapability.WindowManager.WindowManager.Core
80 * @since 12
81 */
82NativeDisplayManager_ErrorCode OH_NativeDisplayManager_GetDefaultDisplayHeight(int32_t *displayHeight);
83
84/**
85 * @brief Obtain the default display rotation.
86 *
87 * @param { *displayRotation } Indicates the pointer to an <b>NativeDisplayManager_Rotation</b> object.
88 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
89 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
90 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
91 * @syscap SystemCapability.WindowManager.WindowManager.Core
92 * @since 12
93 */
94NativeDisplayManager_ErrorCode OH_NativeDisplayManager_GetDefaultDisplayRotation(
95    NativeDisplayManager_Rotation *displayRotation);
96
97/**
98 * @brief Obtain the default display orientation.
99 *
100 * @param { *displayOrientation } Indicates the pointer to an <b>NativeDisplayManager_Orientation</b> object.
101 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
102 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
103 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
104 * @syscap SystemCapability.WindowManager.WindowManager.Core
105 * @since 12
106 */
107NativeDisplayManager_ErrorCode OH_NativeDisplayManager_GetDefaultDisplayOrientation(
108    NativeDisplayManager_Orientation *displayOrientation);
109
110/**
111 * @brief Obtain the default display virtualPixels.
112 *
113 * @param { *virtualPixels } Indicates the pointer to an <b>float</b> object.
114 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
115 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
116 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
117 * @syscap SystemCapability.WindowManager.WindowManager.Core
118 * @since 12
119 */
120NativeDisplayManager_ErrorCode OH_NativeDisplayManager_GetDefaultDisplayVirtualPixelRatio(float *virtualPixels);
121
122/**
123 * @brief Obtain the default display refreshRate.
124 *
125 * @param { *refreshRate } Indicates the pointer to an <b>uint32_t</b> object.
126 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
127 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
128 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
129 * @syscap SystemCapability.WindowManager.WindowManager.Core
130 * @since 12
131 */
132NativeDisplayManager_ErrorCode OH_NativeDisplayManager_GetDefaultDisplayRefreshRate(uint32_t *refreshRate);
133
134/**
135 * @brief Obtain the default display densityDpi.
136 *
137 * @param { *densityDpi } Indicates the pointer to an <b>int32_t</b> object.
138 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
139 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
140 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
141 * @syscap SystemCapability.WindowManager.WindowManager.Core
142 * @since 12
143 */
144NativeDisplayManager_ErrorCode OH_NativeDisplayManager_GetDefaultDisplayDensityDpi(int32_t *densityDpi);
145
146/**
147 * @brief Obtain the default display densityPixels.
148 *
149 * @param { *densityPixels } Indicates the pointer to an <b>float</b> object.
150 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
151 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
152 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
153 * @syscap SystemCapability.WindowManager.WindowManager.Core
154 * @since 12
155 */
156NativeDisplayManager_ErrorCode OH_NativeDisplayManager_GetDefaultDisplayDensityPixels(float *densityPixels);
157
158/**
159 * @brief Obtain the default display scaledDensity.
160 *
161 * @param { *scaledDensity } Indicates the pointer to an <b>float</b> object.
162 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
163 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
164 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
165 * @syscap SystemCapability.WindowManager.WindowManager.Core
166 * @since 12
167 */
168NativeDisplayManager_ErrorCode OH_NativeDisplayManager_GetDefaultDisplayScaledDensity(float *scaledDensity);
169
170/**
171 * @brief Obtain the default display xDpi.
172 *
173 * @param { *xDpi } Indicates the pointer to an <b>float</b> object.
174 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
175 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
176 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
177 * @syscap SystemCapability.WindowManager.WindowManager.Core
178 * @since 12
179 */
180NativeDisplayManager_ErrorCode OH_NativeDisplayManager_GetDefaultDisplayDensityXdpi(float *xDpi);
181
182/**
183 * @brief Obtain the default display yDpi.
184 *
185 * @param { *yDpi } Indicates the pointer to an <b>float</b> object.
186 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
187 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
188 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
189 * @syscap SystemCapability.WindowManager.WindowManager.Core
190 * @since 12
191 */
192NativeDisplayManager_ErrorCode OH_NativeDisplayManager_GetDefaultDisplayDensityYdpi(float *yDpi);
193
194/**
195 * @brief Create the cutout info of the device.
196 *
197 * @param { **cutoutInfo } Indicates the pointer to an <b>NativeDisplayManager_CutoutInfo</b> object.
198 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
199 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
200 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
201 * @syscap SystemCapability.WindowManager.WindowManager.Core
202 * @since 12
203 */
204NativeDisplayManager_ErrorCode OH_NativeDisplayManager_CreateDefaultDisplayCutoutInfo(
205    NativeDisplayManager_CutoutInfo **cutoutInfo);
206
207/**
208 * @brief Destroy an <b>NativeDisplayManager_CutoutInfo</b> object and reclaims the memory occupied by the object.
209 *
210 * @param { **cutoutInfo } Indicates the pointer to an <b>NativeDisplayManager_CutoutInfo</b> object.
211 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
212 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
213 * @syscap SystemCapability.WindowManager.WindowManager.Core
214 * @since 12
215 */
216NativeDisplayManager_ErrorCode OH_NativeDisplayManager_DestroyDefaultDisplayCutoutInfo(
217    NativeDisplayManager_CutoutInfo *cutoutInfo);
218
219/**
220 * @brief Check whether the device is foldable.
221 *
222 * @return { bool } true means the device is foldable.
223 * @syscap SystemCapability.WindowManager.WindowManager.Core
224 * @since 12
225 */
226bool OH_NativeDisplayManager_IsFoldable();
227
228/**
229 * @brief Get the display mode of the foldable device.
230 *
231 * @param { *displayMode } Indicates the pointer to an <b>NativeDisplayManager_FoldDisplayMode</b> object.
232 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
233 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
234 *         { @link DISPLAY_MANAGER_ERROR_DEVICE_NOT_SUPPORTED } device not support.
235 * @syscap SystemCapability.Window.SessionManager
236 * @since 12
237 */
238NativeDisplayManager_ErrorCode OH_NativeDisplayManager_GetFoldDisplayMode(
239    NativeDisplayManager_FoldDisplayMode *displayMode);
240
241/**
242 * @brief the callback function type when display change.
243 *
244 * @param { *displayId } change display id.
245 * @syscap SystemCapability.Window.SessionManager
246 * @since 12
247 */
248typedef void (*OH_NativeDisplayManager_DisplayChangeCallback)(uint64_t displayId);
249
250/**
251 * @brief Register the callback for display change listener.
252 *
253 * @param { displayChangeCallback } display change callback.
254 * @param { *listenerIndex } Indicates the pointer to an <b>uint32_t</b> object. used in unregister call.
255 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
256 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
257 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
258 * @syscap SystemCapability.WindowManager.WindowManager.Core
259 * @since 12
260 */
261NativeDisplayManager_ErrorCode OH_NativeDisplayManager_RegisterDisplayChangeListener(
262    OH_NativeDisplayManager_DisplayChangeCallback displayChangeCallback, uint32_t *listenerIndex);
263
264/**
265 * @brief Unregister the callback for display changes listener.
266 *
267 * @param { listenerIndex } display changed listener index.
268 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
269 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
270 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
271 * @syscap SystemCapability.WindowManager.WindowManager.Core
272 * @since 12
273 */
274NativeDisplayManager_ErrorCode OH_NativeDisplayManager_UnregisterDisplayChangeListener(uint32_t listenerIndex);
275
276/**
277 * @brief the callback function type when display fold change.
278 *
279 * @param { displayMode } current fold display mode.
280 * @syscap SystemCapability.Window.SessionManager
281 * @since 12
282 */
283typedef void (*OH_NativeDisplayManager_FoldDisplayModeChangeCallback)(
284    NativeDisplayManager_FoldDisplayMode displayMode);
285
286/**
287 * @brief Register the callback for display mode change listener.
288 *
289 * @param { displayModeChangeCallback } display mode change callback.
290 * @param { *listenerIndex } Indicates the pointer to an <b>uint32_t</b> object. used in unregister call.
291 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
292 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
293 *         { @link DISPLAY_MANAGER_ERROR_DEVICE_NOT_SUPPORTED } device not support.
294 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
295 * @syscap SystemCapability.Window.SessionManager
296 * @since 12
297 */
298NativeDisplayManager_ErrorCode OH_NativeDisplayManager_RegisterFoldDisplayModeChangeListener(
299    OH_NativeDisplayManager_FoldDisplayModeChangeCallback displayModeChangeCallback, uint32_t *listenerIndex);
300
301/**
302 * @brief Unregister the callback for display mode change listener.
303 *
304 * @param { listenerIndex } display mode change listener index.
305 * @return { @link DISPLAY_MANAGER_OK } If the operation is successful
306 *         { @link DISPLAY_MANAGER_ERROR_INVALID_PARAM } If Parameter error.
307 *         { @link DISPLAY_MANAGER_ERROR_DEVICE_NOT_SUPPORTED } device not support.
308 *         { @link DISPLAY_MANAGER_ERROR_SYSTEM_ABNORMAL } If display manager service works abnormally.
309 * @syscap SystemCapability.Window.SessionManager
310 * @since 12
311 */
312NativeDisplayManager_ErrorCode OH_NativeDisplayManager_UnregisterFoldDisplayModeChangeListener(uint32_t listenerIndex);
313
314#ifdef __cplusplus
315}
316#endif
317/** @} */
318#endif // OH_NATIVE_DISPLAY_MANAGER_H
319