106936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon/*
206936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon * Copyright (C) 2017 The Android Open Source Project
306936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon *
406936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon * Licensed under the Apache License, Version 2.0 (the "License");
506936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon * you may not use this file except in compliance with the License.
606936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon * You may obtain a copy of the License at
706936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon *
806936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon *      http://www.apache.org/licenses/LICENSE-2.0
906936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon *
1006936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon * Unless required by applicable law or agreed to in writing, software
1106936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon * distributed under the License is distributed on an "AS IS" BASIS,
1206936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1306936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon * See the License for the specific language governing permissions and
1406936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon * limitations under the License.
1506936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon */
1606936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon
1706936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon#ifndef _LIBINPUT_DISPLAY_VIEWPORT_H
1806936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon#define _LIBINPUT_DISPLAY_VIEWPORT_H
1906936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon
2006936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon#include <ui/DisplayInfo.h>
2106936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon#include <input/Input.h>
2206936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon
2306936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordonnamespace android {
2406936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon
2506936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon/*
2606936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon * Describes how coordinates are mapped on a physical display.
2706936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon * See com.android.server.display.DisplayViewport.
2806936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon */
2906936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordonstruct DisplayViewport {
3006936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    int32_t displayId; // -1 if invalid
3106936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    int32_t orientation;
3206936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    int32_t logicalLeft;
3306936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    int32_t logicalTop;
3406936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    int32_t logicalRight;
3506936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    int32_t logicalBottom;
3606936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    int32_t physicalLeft;
3706936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    int32_t physicalTop;
3806936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    int32_t physicalRight;
3906936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    int32_t physicalBottom;
4006936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    int32_t deviceWidth;
4106936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    int32_t deviceHeight;
4206936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    String8 uniqueId;
4306936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon
4406936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    DisplayViewport() :
4506936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon            displayId(ADISPLAY_ID_NONE), orientation(DISPLAY_ORIENTATION_0),
4606936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon            logicalLeft(0), logicalTop(0), logicalRight(0), logicalBottom(0),
4706936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon            physicalLeft(0), physicalTop(0), physicalRight(0), physicalBottom(0),
4806936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon            deviceWidth(0), deviceHeight(0) {
4906936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    }
5006936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon
5106936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    bool operator==(const DisplayViewport& other) const {
5206936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        return displayId == other.displayId
5306936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon                && orientation == other.orientation
5406936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon                && logicalLeft == other.logicalLeft
5506936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon                && logicalTop == other.logicalTop
5606936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon                && logicalRight == other.logicalRight
5706936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon                && logicalBottom == other.logicalBottom
5806936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon                && physicalLeft == other.physicalLeft
5906936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon                && physicalTop == other.physicalTop
6006936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon                && physicalRight == other.physicalRight
6106936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon                && physicalBottom == other.physicalBottom
6206936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon                && deviceWidth == other.deviceWidth
6306936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon                && deviceHeight == other.deviceHeight
6406936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon                && uniqueId == other.uniqueId;
6506936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    }
6606936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon
6706936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    bool operator!=(const DisplayViewport& other) const {
6806936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        return !(*this == other);
6906936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    }
7006936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon
7106936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    inline bool isValid() const {
7206936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        return displayId >= 0;
7306936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    }
7406936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon
7506936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    void setNonDisplayViewport(int32_t width, int32_t height) {
7606936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        displayId = ADISPLAY_ID_NONE;
7706936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        orientation = DISPLAY_ORIENTATION_0;
7806936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        logicalLeft = 0;
7906936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        logicalTop = 0;
8006936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        logicalRight = width;
8106936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        logicalBottom = height;
8206936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        physicalLeft = 0;
8306936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        physicalTop = 0;
8406936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        physicalRight = width;
8506936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        physicalBottom = height;
8606936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        deviceWidth = width;
8706936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        deviceHeight = height;
8806936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon        uniqueId.clear();
8906936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    }
9006936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon};
9106936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon
9206936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon/**
9306936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon * Describes the different type of viewports supported by input flinger.
9406936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon * Keep in sync with values in InputManagerService.java.
9506936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon */
9606936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordonenum class ViewportType : int32_t {
9706936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    VIEWPORT_INTERNAL = 1,
9806936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    VIEWPORT_EXTERNAL = 2,
9906936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon    VIEWPORT_VIRTUAL = 3,
10006936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon};
10106936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon
10206936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon} // namespace android
10306936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon
10406936feb07bf6fbef262e4adebeb8e53910d8cf4Santos Cordon#endif // _LIBINPUT_DISPLAY_VIEWPORT_H
105