• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef _LIBINPUT_DISPLAY_VIEWPORT_H
18 #define _LIBINPUT_DISPLAY_VIEWPORT_H
19 
20 #include <ui/DisplayInfo.h>
21 #include <input/Input.h>
22 
23 namespace android {
24 
25 /*
26  * Describes how coordinates are mapped on a physical display.
27  * See com.android.server.display.DisplayViewport.
28  */
29 struct DisplayViewport {
30     int32_t displayId; // -1 if invalid
31     int32_t orientation;
32     int32_t logicalLeft;
33     int32_t logicalTop;
34     int32_t logicalRight;
35     int32_t logicalBottom;
36     int32_t physicalLeft;
37     int32_t physicalTop;
38     int32_t physicalRight;
39     int32_t physicalBottom;
40     int32_t deviceWidth;
41     int32_t deviceHeight;
42     String8 uniqueId;
43 
DisplayViewportDisplayViewport44     DisplayViewport() :
45             displayId(ADISPLAY_ID_NONE), orientation(DISPLAY_ORIENTATION_0),
46             logicalLeft(0), logicalTop(0), logicalRight(0), logicalBottom(0),
47             physicalLeft(0), physicalTop(0), physicalRight(0), physicalBottom(0),
48             deviceWidth(0), deviceHeight(0) {
49     }
50 
51     bool operator==(const DisplayViewport& other) const {
52         return displayId == other.displayId
53                 && orientation == other.orientation
54                 && logicalLeft == other.logicalLeft
55                 && logicalTop == other.logicalTop
56                 && logicalRight == other.logicalRight
57                 && logicalBottom == other.logicalBottom
58                 && physicalLeft == other.physicalLeft
59                 && physicalTop == other.physicalTop
60                 && physicalRight == other.physicalRight
61                 && physicalBottom == other.physicalBottom
62                 && deviceWidth == other.deviceWidth
63                 && deviceHeight == other.deviceHeight
64                 && uniqueId == other.uniqueId;
65     }
66 
67     bool operator!=(const DisplayViewport& other) const {
68         return !(*this == other);
69     }
70 
isValidDisplayViewport71     inline bool isValid() const {
72         return displayId >= 0;
73     }
74 
setNonDisplayViewportDisplayViewport75     void setNonDisplayViewport(int32_t width, int32_t height) {
76         displayId = ADISPLAY_ID_NONE;
77         orientation = DISPLAY_ORIENTATION_0;
78         logicalLeft = 0;
79         logicalTop = 0;
80         logicalRight = width;
81         logicalBottom = height;
82         physicalLeft = 0;
83         physicalTop = 0;
84         physicalRight = width;
85         physicalBottom = height;
86         deviceWidth = width;
87         deviceHeight = height;
88         uniqueId.clear();
89     }
90 };
91 
92 /**
93  * Describes the different type of viewports supported by input flinger.
94  * Keep in sync with values in InputManagerService.java.
95  */
96 enum class ViewportType : int32_t {
97     VIEWPORT_INTERNAL = 1,
98     VIEWPORT_EXTERNAL = 2,
99     VIEWPORT_VIRTUAL = 3,
100 };
101 
102 } // namespace android
103 
104 #endif // _LIBINPUT_DISPLAY_VIEWPORT_H
105