1e0dac50fSopenharmony_ci/*
2e0dac50fSopenharmony_ci * Copyright (c) 2021-2022 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 OHOS_ROSEN_DM_COMMON_H
17e0dac50fSopenharmony_ci#define OHOS_ROSEN_DM_COMMON_H
18e0dac50fSopenharmony_ci
19e0dac50fSopenharmony_ci#include <refbase.h>
20e0dac50fSopenharmony_ci#include <string>
21e0dac50fSopenharmony_ci#include <map>
22e0dac50fSopenharmony_ci
23e0dac50fSopenharmony_cinamespace OHOS {
24e0dac50fSopenharmony_cinamespace Rosen {
25e0dac50fSopenharmony_ciusing DisplayId = uint64_t;
26e0dac50fSopenharmony_ciusing ScreenId = uint64_t;
27e0dac50fSopenharmony_ci
28e0dac50fSopenharmony_cinamespace {
29e0dac50fSopenharmony_ciconstexpr DisplayId DISPLAY_ID_INVALID = -1ULL;
30e0dac50fSopenharmony_ciconstexpr ScreenId SCREEN_ID_INVALID = -1ULL;
31e0dac50fSopenharmony_ciconstexpr ScreenId ERROR_ID_NOT_SYSTEM_APP = -202ULL;
32e0dac50fSopenharmony_ciconstexpr int DOT_PER_INCH = 160;
33e0dac50fSopenharmony_ciconst static std::string DEFAULT_SCREEN_NAME = "buildIn";
34e0dac50fSopenharmony_ciconstexpr int DOT_PER_INCH_MAXIMUM_VALUE = 1000;
35e0dac50fSopenharmony_ciconstexpr int DOT_PER_INCH_MINIMUM_VALUE = 80;
36e0dac50fSopenharmony_ciconstexpr uint32_t BASELINE_DENSITY = 160;
37e0dac50fSopenharmony_ciconstexpr float INCH_TO_MM = 25.4f;
38e0dac50fSopenharmony_ci}
39e0dac50fSopenharmony_ci
40e0dac50fSopenharmony_ci/**
41e0dac50fSopenharmony_ci * @struct HookInfo.
42e0dac50fSopenharmony_ci *
43e0dac50fSopenharmony_ci * @brief hook diaplayinfo deepending on the window size.
44e0dac50fSopenharmony_ci */
45e0dac50fSopenharmony_cistruct DMHookInfo {
46e0dac50fSopenharmony_ci    uint32_t width_;
47e0dac50fSopenharmony_ci    uint32_t height_;
48e0dac50fSopenharmony_ci    float_t density_;
49e0dac50fSopenharmony_ci    uint32_t rotation_;
50e0dac50fSopenharmony_ci    bool enableHookRotation_;
51e0dac50fSopenharmony_ci};
52e0dac50fSopenharmony_ci
53e0dac50fSopenharmony_ci/**
54e0dac50fSopenharmony_ci * @brief Power state change reason.
55e0dac50fSopenharmony_ci */
56e0dac50fSopenharmony_cienum class PowerStateChangeReason : uint32_t {
57e0dac50fSopenharmony_ci    POWER_BUTTON = 0,
58e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_INIT = 0,
59e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_TIMEOUT = 1,
60e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_RUNNING_LOCK = 2,
61e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_BATTERY = 3,
62e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_THERMAL = 4,
63e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_WORK = 5,
64e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_SYSTEM = 6,
65e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_APPLICATION = 10,
66e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_SETTINGS = 11,
67e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_HARD_KEY = 12,
68e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_TOUCH = 13,
69e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_CABLE = 14,
70e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_SENSOR = 15,
71e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_LID = 16,
72e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_CAMERA = 17,
73e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_ACCESS = 18,
74e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_RESET = 19,
75e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_POWER_KEY = 20,
76e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_KEYBOARD = 21,
77e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_MOUSE = 22,
78e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_DOUBLE_CLICK = 23,
79e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_COLLABORATION = 24,
80e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_SWITCH = 25,
81e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_PRE_BRIGHT = 26,
82e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_PRE_BRIGHT_AUTH_SUCCESS = 27,
83e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_PRE_BRIGHT_AUTH_FAIL_SCREEN_ON = 28,
84e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_PRE_BRIGHT_AUTH_FAIL_SCREEN_OFF = 29,
85e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_DISPLAY_SWITCH = 30,
86e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_PROXIMITY = 32,
87e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_AOD_SLIDING = 40,
88e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_PEN = 41,
89e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_SHUT_DOWN = 42,
90e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_REMOTE = 100,
91e0dac50fSopenharmony_ci    STATE_CHANGE_REASON_UNKNOWN = 1000,
92e0dac50fSopenharmony_ci};
93e0dac50fSopenharmony_ci
94e0dac50fSopenharmony_ci/**
95e0dac50fSopenharmony_ci * @brief Enumerates the state of the screen power.
96e0dac50fSopenharmony_ci */
97e0dac50fSopenharmony_cienum class ScreenPowerState : uint32_t {
98e0dac50fSopenharmony_ci    POWER_ON,
99e0dac50fSopenharmony_ci    POWER_STAND_BY,
100e0dac50fSopenharmony_ci    POWER_SUSPEND,
101e0dac50fSopenharmony_ci    POWER_OFF,
102e0dac50fSopenharmony_ci    POWER_BUTT,
103e0dac50fSopenharmony_ci    INVALID_STATE,
104e0dac50fSopenharmony_ci};
105e0dac50fSopenharmony_ci
106e0dac50fSopenharmony_cienum class ScreenPropertyChangeType : uint32_t {
107e0dac50fSopenharmony_ci    UNSPECIFIED = 0,
108e0dac50fSopenharmony_ci    /* Screen connection. */
109e0dac50fSopenharmony_ci    ROTATION_BEGIN,
110e0dac50fSopenharmony_ci    /* Screen disconnection. */
111e0dac50fSopenharmony_ci    ROTATION_END,
112e0dac50fSopenharmony_ci    /* Only update screen rotation property info to DMS. */
113e0dac50fSopenharmony_ci    ROTATION_UPDATE_PROPERTY_ONLY,
114e0dac50fSopenharmony_ci};
115e0dac50fSopenharmony_ci
116e0dac50fSopenharmony_ci/**
117e0dac50fSopenharmony_ci * @brief Enumerates the state of the display.
118e0dac50fSopenharmony_ci */
119e0dac50fSopenharmony_cienum class DisplayState : uint32_t {
120e0dac50fSopenharmony_ci    UNKNOWN,
121e0dac50fSopenharmony_ci    OFF,
122e0dac50fSopenharmony_ci    ON,
123e0dac50fSopenharmony_ci    DOZE,
124e0dac50fSopenharmony_ci    DOZE_SUSPEND,
125e0dac50fSopenharmony_ci    VR,
126e0dac50fSopenharmony_ci    ON_SUSPEND,
127e0dac50fSopenharmony_ci};
128e0dac50fSopenharmony_ci
129e0dac50fSopenharmony_ci/**
130e0dac50fSopenharmony_ci * @brief Enumerates display events.
131e0dac50fSopenharmony_ci */
132e0dac50fSopenharmony_cienum class DisplayEvent : uint32_t {
133e0dac50fSopenharmony_ci    UNLOCK,
134e0dac50fSopenharmony_ci    KEYGUARD_DRAWN,
135e0dac50fSopenharmony_ci    SCREEN_LOCK_SUSPEND,
136e0dac50fSopenharmony_ci    SCREEN_LOCK_OFF,
137e0dac50fSopenharmony_ci    SCREEN_LOCK_FINGERPRINT,
138e0dac50fSopenharmony_ci};
139e0dac50fSopenharmony_ci
140e0dac50fSopenharmony_ci/**
141e0dac50fSopenharmony_ci * @brief Enumerates DMError.
142e0dac50fSopenharmony_ci */
143e0dac50fSopenharmony_cienum class DMError : int32_t {
144e0dac50fSopenharmony_ci    DM_OK = 0,
145e0dac50fSopenharmony_ci    DM_ERROR_INIT_DMS_PROXY_LOCKED = 100,
146e0dac50fSopenharmony_ci    DM_ERROR_IPC_FAILED = 101,
147e0dac50fSopenharmony_ci    DM_ERROR_REMOTE_CREATE_FAILED = 110,
148e0dac50fSopenharmony_ci    DM_ERROR_NULLPTR = 120,
149e0dac50fSopenharmony_ci    DM_ERROR_INVALID_PARAM = 130,
150e0dac50fSopenharmony_ci    DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED = 140,
151e0dac50fSopenharmony_ci    DM_ERROR_DEATH_RECIPIENT = 150,
152e0dac50fSopenharmony_ci    DM_ERROR_INVALID_MODE_ID = 160,
153e0dac50fSopenharmony_ci    DM_ERROR_WRITE_DATA_FAILED = 170,
154e0dac50fSopenharmony_ci    DM_ERROR_RENDER_SERVICE_FAILED = 180,
155e0dac50fSopenharmony_ci    DM_ERROR_UNREGISTER_AGENT_FAILED = 190,
156e0dac50fSopenharmony_ci    DM_ERROR_INVALID_CALLING = 200,
157e0dac50fSopenharmony_ci    DM_ERROR_INVALID_PERMISSION = 201,
158e0dac50fSopenharmony_ci    DM_ERROR_NOT_SYSTEM_APP = 202,
159e0dac50fSopenharmony_ci    DM_ERROR_DEVICE_NOT_SUPPORT = 801,
160e0dac50fSopenharmony_ci    DM_ERROR_UNKNOWN = -1,
161e0dac50fSopenharmony_ci};
162e0dac50fSopenharmony_ci
163e0dac50fSopenharmony_ci/**
164e0dac50fSopenharmony_ci * @brief Enumerates DM error codes.
165e0dac50fSopenharmony_ci */
166e0dac50fSopenharmony_cienum class DmErrorCode : int32_t {
167e0dac50fSopenharmony_ci    DM_OK = 0,
168e0dac50fSopenharmony_ci    DM_ERROR_NO_PERMISSION = 201,
169e0dac50fSopenharmony_ci    DM_ERROR_NOT_SYSTEM_APP = 202,
170e0dac50fSopenharmony_ci    DM_ERROR_INVALID_PARAM = 401,
171e0dac50fSopenharmony_ci    DM_ERROR_DEVICE_NOT_SUPPORT = 801,
172e0dac50fSopenharmony_ci    DM_ERROR_INVALID_SCREEN = 1400001,
173e0dac50fSopenharmony_ci    DM_ERROR_INVALID_CALLING = 1400002,
174e0dac50fSopenharmony_ci    DM_ERROR_SYSTEM_INNORMAL = 1400003,
175e0dac50fSopenharmony_ci};
176e0dac50fSopenharmony_ci
177e0dac50fSopenharmony_ci/**
178e0dac50fSopenharmony_ci * @brief Constructs the mapping of the DM errors to the DM error codes.
179e0dac50fSopenharmony_ci */
180e0dac50fSopenharmony_ciconst std::map<DMError, DmErrorCode> DM_JS_TO_ERROR_CODE_MAP {
181e0dac50fSopenharmony_ci    {DMError::DM_OK,                                    DmErrorCode::DM_OK                          },
182e0dac50fSopenharmony_ci    {DMError::DM_ERROR_INVALID_PERMISSION,              DmErrorCode::DM_ERROR_NO_PERMISSION         },
183e0dac50fSopenharmony_ci    {DMError::DM_ERROR_INIT_DMS_PROXY_LOCKED,           DmErrorCode::DM_ERROR_SYSTEM_INNORMAL       },
184e0dac50fSopenharmony_ci    {DMError::DM_ERROR_IPC_FAILED,                      DmErrorCode::DM_ERROR_SYSTEM_INNORMAL       },
185e0dac50fSopenharmony_ci    {DMError::DM_ERROR_REMOTE_CREATE_FAILED,            DmErrorCode::DM_ERROR_SYSTEM_INNORMAL       },
186e0dac50fSopenharmony_ci    {DMError::DM_ERROR_NULLPTR,                         DmErrorCode::DM_ERROR_INVALID_SCREEN        },
187e0dac50fSopenharmony_ci    {DMError::DM_ERROR_INVALID_PARAM,                   DmErrorCode::DM_ERROR_INVALID_PARAM         },
188e0dac50fSopenharmony_ci    {DMError::DM_ERROR_WRITE_INTERFACE_TOKEN_FAILED,    DmErrorCode::DM_ERROR_SYSTEM_INNORMAL       },
189e0dac50fSopenharmony_ci    {DMError::DM_ERROR_DEATH_RECIPIENT,                 DmErrorCode::DM_ERROR_SYSTEM_INNORMAL       },
190e0dac50fSopenharmony_ci    {DMError::DM_ERROR_INVALID_MODE_ID,                 DmErrorCode::DM_ERROR_SYSTEM_INNORMAL       },
191e0dac50fSopenharmony_ci    {DMError::DM_ERROR_WRITE_DATA_FAILED,               DmErrorCode::DM_ERROR_SYSTEM_INNORMAL       },
192e0dac50fSopenharmony_ci    {DMError::DM_ERROR_RENDER_SERVICE_FAILED,           DmErrorCode::DM_ERROR_SYSTEM_INNORMAL       },
193e0dac50fSopenharmony_ci    {DMError::DM_ERROR_UNREGISTER_AGENT_FAILED,         DmErrorCode::DM_ERROR_SYSTEM_INNORMAL       },
194e0dac50fSopenharmony_ci    {DMError::DM_ERROR_INVALID_CALLING,                 DmErrorCode::DM_ERROR_INVALID_CALLING       },
195e0dac50fSopenharmony_ci    {DMError::DM_ERROR_NOT_SYSTEM_APP,                  DmErrorCode::DM_ERROR_NOT_SYSTEM_APP        },
196e0dac50fSopenharmony_ci    {DMError::DM_ERROR_UNKNOWN,                         DmErrorCode::DM_ERROR_SYSTEM_INNORMAL       },
197e0dac50fSopenharmony_ci    {DMError::DM_ERROR_DEVICE_NOT_SUPPORT,              DmErrorCode::DM_ERROR_DEVICE_NOT_SUPPORT    },
198e0dac50fSopenharmony_ci};
199e0dac50fSopenharmony_ci
200e0dac50fSopenharmony_ciusing DisplayStateCallback = std::function<void(DisplayState)>;
201e0dac50fSopenharmony_ci
202e0dac50fSopenharmony_ci/**
203e0dac50fSopenharmony_ci * @brief Enumerates display power events.
204e0dac50fSopenharmony_ci */
205e0dac50fSopenharmony_cienum class DisplayPowerEvent : uint32_t {
206e0dac50fSopenharmony_ci    WAKE_UP,
207e0dac50fSopenharmony_ci    SLEEP,
208e0dac50fSopenharmony_ci    DISPLAY_ON,
209e0dac50fSopenharmony_ci    DISPLAY_OFF,
210e0dac50fSopenharmony_ci    DESKTOP_READY,
211e0dac50fSopenharmony_ci    DOZE,
212e0dac50fSopenharmony_ci    DOZE_SUSPEND,
213e0dac50fSopenharmony_ci    DISPLAY_OFF_CANCELED,
214e0dac50fSopenharmony_ci};
215e0dac50fSopenharmony_ci
216e0dac50fSopenharmony_ci/**
217e0dac50fSopenharmony_ci * @brief Enumerates event status.
218e0dac50fSopenharmony_ci */
219e0dac50fSopenharmony_cienum class EventStatus : uint32_t {
220e0dac50fSopenharmony_ci    BEGIN,
221e0dac50fSopenharmony_ci    END,
222e0dac50fSopenharmony_ci};
223e0dac50fSopenharmony_ci
224e0dac50fSopenharmony_ciclass IDisplayPowerEventListener : public RefBase {
225e0dac50fSopenharmony_cipublic:
226e0dac50fSopenharmony_ci    /**
227e0dac50fSopenharmony_ci     * @brief Notify when display power event status changed.
228e0dac50fSopenharmony_ci     */
229e0dac50fSopenharmony_ci    virtual void OnDisplayPowerEvent(DisplayPowerEvent event, EventStatus status) = 0;
230e0dac50fSopenharmony_ci};
231e0dac50fSopenharmony_ci
232e0dac50fSopenharmony_ci/**
233e0dac50fSopenharmony_ci * @brief Enumerates screen change events.
234e0dac50fSopenharmony_ci */
235e0dac50fSopenharmony_cienum class ScreenChangeEvent : uint32_t {
236e0dac50fSopenharmony_ci    UPDATE_ORIENTATION,
237e0dac50fSopenharmony_ci    UPDATE_ROTATION,
238e0dac50fSopenharmony_ci    CHANGE_MODE,
239e0dac50fSopenharmony_ci    VIRTUAL_PIXEL_RATIO_CHANGED,
240e0dac50fSopenharmony_ci    SCREEN_SWITCH_CHANGE,
241e0dac50fSopenharmony_ci    UNKNOWN,
242e0dac50fSopenharmony_ci};
243e0dac50fSopenharmony_ci
244e0dac50fSopenharmony_ci/**
245e0dac50fSopenharmony_ci * @brief Enumerates screen group change events.
246e0dac50fSopenharmony_ci */
247e0dac50fSopenharmony_cienum class ScreenGroupChangeEvent : uint32_t {
248e0dac50fSopenharmony_ci    ADD_TO_GROUP,
249e0dac50fSopenharmony_ci    REMOVE_FROM_GROUP,
250e0dac50fSopenharmony_ci    CHANGE_GROUP,
251e0dac50fSopenharmony_ci};
252e0dac50fSopenharmony_ci
253e0dac50fSopenharmony_ci/**
254e0dac50fSopenharmony_ci * @brief Enumerates rotations.
255e0dac50fSopenharmony_ci */
256e0dac50fSopenharmony_cienum class Rotation : uint32_t {
257e0dac50fSopenharmony_ci    ROTATION_0,
258e0dac50fSopenharmony_ci    ROTATION_90,
259e0dac50fSopenharmony_ci    ROTATION_180,
260e0dac50fSopenharmony_ci    ROTATION_270,
261e0dac50fSopenharmony_ci};
262e0dac50fSopenharmony_ci
263e0dac50fSopenharmony_ci/**
264e0dac50fSopenharmony_ci * @brief Enumerates orientations.
265e0dac50fSopenharmony_ci */
266e0dac50fSopenharmony_cienum class Orientation : uint32_t {
267e0dac50fSopenharmony_ci    BEGIN = 0,
268e0dac50fSopenharmony_ci    UNSPECIFIED = BEGIN,
269e0dac50fSopenharmony_ci    VERTICAL = 1,
270e0dac50fSopenharmony_ci    HORIZONTAL = 2,
271e0dac50fSopenharmony_ci    REVERSE_VERTICAL = 3,
272e0dac50fSopenharmony_ci    REVERSE_HORIZONTAL = 4,
273e0dac50fSopenharmony_ci    SENSOR = 5,
274e0dac50fSopenharmony_ci    SENSOR_VERTICAL = 6,
275e0dac50fSopenharmony_ci    SENSOR_HORIZONTAL = 7,
276e0dac50fSopenharmony_ci    AUTO_ROTATION_RESTRICTED = 8,
277e0dac50fSopenharmony_ci    AUTO_ROTATION_PORTRAIT_RESTRICTED = 9,
278e0dac50fSopenharmony_ci    AUTO_ROTATION_LANDSCAPE_RESTRICTED = 10,
279e0dac50fSopenharmony_ci    LOCKED = 11,
280e0dac50fSopenharmony_ci    FOLLOW_RECENT = 12,
281e0dac50fSopenharmony_ci    AUTO_ROTATION_UNSPECIFIED = 13,
282e0dac50fSopenharmony_ci    USER_ROTATION_PORTRAIT = 14,
283e0dac50fSopenharmony_ci    USER_ROTATION_LANDSCAPE = 15,
284e0dac50fSopenharmony_ci    USER_ROTATION_PORTRAIT_INVERTED = 16,
285e0dac50fSopenharmony_ci    USER_ROTATION_LANDSCAPE_INVERTED = 17,
286e0dac50fSopenharmony_ci    FOLLOW_DESKTOP = 18,
287e0dac50fSopenharmony_ci    END = FOLLOW_DESKTOP,
288e0dac50fSopenharmony_ci};
289e0dac50fSopenharmony_ci
290e0dac50fSopenharmony_ci/**
291e0dac50fSopenharmony_ci * @brief Enumerates display orientations.
292e0dac50fSopenharmony_ci */
293e0dac50fSopenharmony_cienum class DisplayOrientation : uint32_t {
294e0dac50fSopenharmony_ci    PORTRAIT = 0,
295e0dac50fSopenharmony_ci    LANDSCAPE,
296e0dac50fSopenharmony_ci    PORTRAIT_INVERTED,
297e0dac50fSopenharmony_ci    LANDSCAPE_INVERTED,
298e0dac50fSopenharmony_ci    UNKNOWN,
299e0dac50fSopenharmony_ci};
300e0dac50fSopenharmony_ci
301e0dac50fSopenharmony_ci/**
302e0dac50fSopenharmony_ci * @brief Enumerates display change events.
303e0dac50fSopenharmony_ci */
304e0dac50fSopenharmony_cienum class DisplayChangeEvent : uint32_t {
305e0dac50fSopenharmony_ci    UPDATE_ORIENTATION,
306e0dac50fSopenharmony_ci    UPDATE_ROTATION,
307e0dac50fSopenharmony_ci    DISPLAY_SIZE_CHANGED,
308e0dac50fSopenharmony_ci    DISPLAY_FREEZED,
309e0dac50fSopenharmony_ci    DISPLAY_UNFREEZED,
310e0dac50fSopenharmony_ci    DISPLAY_VIRTUAL_PIXEL_RATIO_CHANGED,
311e0dac50fSopenharmony_ci    UPDATE_ORIENTATION_FROM_WINDOW,
312e0dac50fSopenharmony_ci    UPDATE_ROTATION_FROM_WINDOW,
313e0dac50fSopenharmony_ci    UPDATE_REFRESHRATE,
314e0dac50fSopenharmony_ci    UNKNOWN,
315e0dac50fSopenharmony_ci};
316e0dac50fSopenharmony_ci
317e0dac50fSopenharmony_ci/**
318e0dac50fSopenharmony_ci * @brief Enumerates display state change type.
319e0dac50fSopenharmony_ci */
320e0dac50fSopenharmony_cienum class DisplayStateChangeType : uint32_t {
321e0dac50fSopenharmony_ci    BEFORE_SUSPEND,
322e0dac50fSopenharmony_ci    BEFORE_UNLOCK,
323e0dac50fSopenharmony_ci    UPDATE_ROTATION,
324e0dac50fSopenharmony_ci    UPDATE_ROTATION_FROM_WINDOW,
325e0dac50fSopenharmony_ci    SIZE_CHANGE,
326e0dac50fSopenharmony_ci    CREATE,
327e0dac50fSopenharmony_ci    DESTROY,
328e0dac50fSopenharmony_ci    FREEZE,
329e0dac50fSopenharmony_ci    UNFREEZE,
330e0dac50fSopenharmony_ci    VIRTUAL_PIXEL_RATIO_CHANGE,
331e0dac50fSopenharmony_ci    DISPLAY_COMPRESS,
332e0dac50fSopenharmony_ci    UPDATE_SCALE,
333e0dac50fSopenharmony_ci    UNKNOWN,
334e0dac50fSopenharmony_ci};
335e0dac50fSopenharmony_ci
336e0dac50fSopenharmony_ci/**
337e0dac50fSopenharmony_ci * @brief Enumerates screen source mode.
338e0dac50fSopenharmony_ci */
339e0dac50fSopenharmony_cienum class ScreenSourceMode: uint32_t {
340e0dac50fSopenharmony_ci    SCREEN_MAIN = 0,
341e0dac50fSopenharmony_ci    SCREEN_MIRROR = 1,
342e0dac50fSopenharmony_ci    SCREEN_EXTEND = 2,
343e0dac50fSopenharmony_ci    SCREEN_ALONE = 3,
344e0dac50fSopenharmony_ci    SCREEN_UNIQUE = 4,
345e0dac50fSopenharmony_ci};
346e0dac50fSopenharmony_ci
347e0dac50fSopenharmony_ci/**
348e0dac50fSopenharmony_ci * @brief Enumerates the fold status.
349e0dac50fSopenharmony_ci */
350e0dac50fSopenharmony_cienum class FoldStatus: uint32_t {
351e0dac50fSopenharmony_ci    UNKNOWN = 0,
352e0dac50fSopenharmony_ci    EXPAND = 1,
353e0dac50fSopenharmony_ci    FOLDED = 2,
354e0dac50fSopenharmony_ci    HALF_FOLD = 3,
355e0dac50fSopenharmony_ci};
356e0dac50fSopenharmony_ci
357e0dac50fSopenharmony_ci/**
358e0dac50fSopenharmony_ci * @brief Enumerates the fold display mode.
359e0dac50fSopenharmony_ci */
360e0dac50fSopenharmony_cienum class FoldDisplayMode: uint32_t {
361e0dac50fSopenharmony_ci    UNKNOWN = 0,
362e0dac50fSopenharmony_ci    FULL = 1,
363e0dac50fSopenharmony_ci    MAIN = 2,
364e0dac50fSopenharmony_ci    SUB = 3,
365e0dac50fSopenharmony_ci    COORDINATION = 4,
366e0dac50fSopenharmony_ci};
367e0dac50fSopenharmony_ci
368e0dac50fSopenharmony_cienum class DisplayType : uint32_t {
369e0dac50fSopenharmony_ci    DEFAULT = 0,
370e0dac50fSopenharmony_ci};
371e0dac50fSopenharmony_ci
372e0dac50fSopenharmony_cienum class ScreenCombination : uint32_t {
373e0dac50fSopenharmony_ci    SCREEN_ALONE,
374e0dac50fSopenharmony_ci    SCREEN_EXPAND,
375e0dac50fSopenharmony_ci    SCREEN_MIRROR,
376e0dac50fSopenharmony_ci    SCREEN_UNIQUE,
377e0dac50fSopenharmony_ci    SCREEN_EXTEND,
378e0dac50fSopenharmony_ci    SCREEN_MAIN,
379e0dac50fSopenharmony_ci};
380e0dac50fSopenharmony_ci
381e0dac50fSopenharmony_cienum class MultiScreenMode : uint32_t {
382e0dac50fSopenharmony_ci    SCREEN_MIRROR = 0,
383e0dac50fSopenharmony_ci    SCREEN_EXTEND = 1,
384e0dac50fSopenharmony_ci};
385e0dac50fSopenharmony_ci
386e0dac50fSopenharmony_cistruct Point {
387e0dac50fSopenharmony_ci    int32_t posX_;
388e0dac50fSopenharmony_ci    int32_t posY_;
389e0dac50fSopenharmony_ci    Point() : posX_(0), posY_(0) {};
390e0dac50fSopenharmony_ci    Point(int32_t posX, int32_t posY) : posX_(posX), posY_(posY) {};
391e0dac50fSopenharmony_ci};
392e0dac50fSopenharmony_ci
393e0dac50fSopenharmony_cistruct SupportedScreenModes : public RefBase {
394e0dac50fSopenharmony_ci    uint32_t id_;
395e0dac50fSopenharmony_ci    uint32_t width_;
396e0dac50fSopenharmony_ci    uint32_t height_;
397e0dac50fSopenharmony_ci    uint32_t refreshRate_;
398e0dac50fSopenharmony_ci};
399e0dac50fSopenharmony_ci
400e0dac50fSopenharmony_cistruct ExpandOption {
401e0dac50fSopenharmony_ci    ScreenId screenId_;
402e0dac50fSopenharmony_ci    uint32_t startX_;
403e0dac50fSopenharmony_ci    uint32_t startY_;
404e0dac50fSopenharmony_ci};
405e0dac50fSopenharmony_ci
406e0dac50fSopenharmony_cistruct MultiScreenPositionOptions {
407e0dac50fSopenharmony_ci    ScreenId screenId_;
408e0dac50fSopenharmony_ci    uint32_t startX_;
409e0dac50fSopenharmony_ci    uint32_t startY_;
410e0dac50fSopenharmony_ci};
411e0dac50fSopenharmony_ci
412e0dac50fSopenharmony_ci/**
413e0dac50fSopenharmony_ci * @brief fold display physical resolution
414e0dac50fSopenharmony_ci */
415e0dac50fSopenharmony_cistruct DisplayPhysicalResolution {
416e0dac50fSopenharmony_ci    FoldDisplayMode foldDisplayMode_;
417e0dac50fSopenharmony_ci    uint32_t physicalWidth_;
418e0dac50fSopenharmony_ci    uint32_t physicalHeight_;
419e0dac50fSopenharmony_ci};
420e0dac50fSopenharmony_ci
421e0dac50fSopenharmony_ci/**
422e0dac50fSopenharmony_ci * @brief scrollable param
423e0dac50fSopenharmony_ci */
424e0dac50fSopenharmony_cistruct ScrollableParam {
425e0dac50fSopenharmony_ci    std::string velocityScale_;
426e0dac50fSopenharmony_ci    std::string friction_;
427e0dac50fSopenharmony_ci};
428e0dac50fSopenharmony_ci
429e0dac50fSopenharmony_ci/**
430e0dac50fSopenharmony_ci * @brief displayRect
431e0dac50fSopenharmony_ci */
432e0dac50fSopenharmony_cistruct DMRect {
433e0dac50fSopenharmony_ci    int32_t posX_;
434e0dac50fSopenharmony_ci    int32_t posY_;
435e0dac50fSopenharmony_ci    uint32_t width_;
436e0dac50fSopenharmony_ci    uint32_t height_;
437e0dac50fSopenharmony_ci
438e0dac50fSopenharmony_ci    bool operator==(const DMRect& a) const
439e0dac50fSopenharmony_ci    {
440e0dac50fSopenharmony_ci        return (posX_ == a.posX_ && posY_ == a.posY_ && width_ == a.width_ && height_ == a.height_);
441e0dac50fSopenharmony_ci    }
442e0dac50fSopenharmony_ci
443e0dac50fSopenharmony_ci    bool operator!=(const DMRect& a) const
444e0dac50fSopenharmony_ci    {
445e0dac50fSopenharmony_ci        return !this->operator==(a);
446e0dac50fSopenharmony_ci    }
447e0dac50fSopenharmony_ci
448e0dac50fSopenharmony_ci    bool IsUninitializedRect() const
449e0dac50fSopenharmony_ci    {
450e0dac50fSopenharmony_ci        return (posX_ == 0 && posY_ == 0 && width_ == 0 && height_ == 0);
451e0dac50fSopenharmony_ci    }
452e0dac50fSopenharmony_ci
453e0dac50fSopenharmony_ci    bool IsInsideOf(const DMRect& a) const
454e0dac50fSopenharmony_ci    {
455e0dac50fSopenharmony_ci        return (posX_ >= a.posX_ && posY_ >= a.posY_ &&
456e0dac50fSopenharmony_ci            posX_ + width_ <= a.posX_ + a.width_ && posY_ + height_ <= a.posY_ + a.height_);
457e0dac50fSopenharmony_ci    }
458e0dac50fSopenharmony_ci    static DMRect NONE()
459e0dac50fSopenharmony_ci    {
460e0dac50fSopenharmony_ci        return {0, 0, 0, 0};
461e0dac50fSopenharmony_ci    }
462e0dac50fSopenharmony_ci};
463e0dac50fSopenharmony_ci}
464e0dac50fSopenharmony_ci}
465e0dac50fSopenharmony_ci#endif // OHOS_ROSEN_DM_COMMON_H
466