You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.8 KiB
146 lines
4.8 KiB
/*
|
|
* Copyright (C) 2017 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef _LIBINPUT_DISPLAY_VIEWPORT_H
|
|
#define _LIBINPUT_DISPLAY_VIEWPORT_H
|
|
|
|
#include <android-base/stringprintf.h>
|
|
#include <input/Input.h>
|
|
#include <input/NamedEnum.h>
|
|
|
|
#include <cinttypes>
|
|
#include <optional>
|
|
|
|
using android::base::StringPrintf;
|
|
|
|
namespace android {
|
|
|
|
enum {
|
|
DISPLAY_ORIENTATION_0 = 0,
|
|
DISPLAY_ORIENTATION_90 = 1,
|
|
DISPLAY_ORIENTATION_180 = 2,
|
|
DISPLAY_ORIENTATION_270 = 3
|
|
};
|
|
|
|
/**
|
|
* Describes the different type of viewports supported by input flinger.
|
|
* Keep in sync with values in InputManagerService.java.
|
|
*/
|
|
enum class ViewportType : int32_t {
|
|
INTERNAL = 1,
|
|
EXTERNAL = 2,
|
|
VIRTUAL = 3,
|
|
};
|
|
|
|
/*
|
|
* Describes how coordinates are mapped on a physical display.
|
|
* See com.android.server.display.DisplayViewport.
|
|
*/
|
|
struct DisplayViewport {
|
|
int32_t displayId; // -1 if invalid
|
|
int32_t orientation;
|
|
int32_t logicalLeft;
|
|
int32_t logicalTop;
|
|
int32_t logicalRight;
|
|
int32_t logicalBottom;
|
|
int32_t physicalLeft;
|
|
int32_t physicalTop;
|
|
int32_t physicalRight;
|
|
int32_t physicalBottom;
|
|
int32_t deviceWidth;
|
|
int32_t deviceHeight;
|
|
bool isActive;
|
|
std::string uniqueId;
|
|
// The actual (hardware) port that the associated display is connected to.
|
|
// Not all viewports will have this specified.
|
|
std::optional<uint8_t> physicalPort;
|
|
ViewportType type;
|
|
|
|
DisplayViewport()
|
|
: displayId(ADISPLAY_ID_NONE),
|
|
orientation(DISPLAY_ORIENTATION_0),
|
|
logicalLeft(0),
|
|
logicalTop(0),
|
|
logicalRight(0),
|
|
logicalBottom(0),
|
|
physicalLeft(0),
|
|
physicalTop(0),
|
|
physicalRight(0),
|
|
physicalBottom(0),
|
|
deviceWidth(0),
|
|
deviceHeight(0),
|
|
isActive(false),
|
|
uniqueId(),
|
|
physicalPort(std::nullopt),
|
|
type(ViewportType::INTERNAL) {}
|
|
|
|
bool operator==(const DisplayViewport& other) const {
|
|
return displayId == other.displayId && orientation == other.orientation &&
|
|
logicalLeft == other.logicalLeft && logicalTop == other.logicalTop &&
|
|
logicalRight == other.logicalRight && logicalBottom == other.logicalBottom &&
|
|
physicalLeft == other.physicalLeft && physicalTop == other.physicalTop &&
|
|
physicalRight == other.physicalRight && physicalBottom == other.physicalBottom &&
|
|
deviceWidth == other.deviceWidth && deviceHeight == other.deviceHeight &&
|
|
isActive == other.isActive && uniqueId == other.uniqueId &&
|
|
physicalPort == other.physicalPort && type == other.type;
|
|
}
|
|
|
|
bool operator!=(const DisplayViewport& other) const {
|
|
return !(*this == other);
|
|
}
|
|
|
|
inline bool isValid() const {
|
|
return displayId >= 0;
|
|
}
|
|
|
|
void setNonDisplayViewport(int32_t width, int32_t height) {
|
|
displayId = ADISPLAY_ID_NONE;
|
|
orientation = DISPLAY_ORIENTATION_0;
|
|
logicalLeft = 0;
|
|
logicalTop = 0;
|
|
logicalRight = width;
|
|
logicalBottom = height;
|
|
physicalLeft = 0;
|
|
physicalTop = 0;
|
|
physicalRight = width;
|
|
physicalBottom = height;
|
|
deviceWidth = width;
|
|
deviceHeight = height;
|
|
isActive = true;
|
|
uniqueId.clear();
|
|
physicalPort = std::nullopt;
|
|
type = ViewportType::INTERNAL;
|
|
}
|
|
|
|
std::string toString() const {
|
|
return StringPrintf("Viewport %s: displayId=%d, uniqueId=%s, port=%s, orientation=%d, "
|
|
"logicalFrame=[%d, %d, %d, %d], "
|
|
"physicalFrame=[%d, %d, %d, %d], "
|
|
"deviceSize=[%d, %d], "
|
|
"isActive=[%d]",
|
|
NamedEnum::string(type).c_str(), displayId, uniqueId.c_str(),
|
|
physicalPort ? StringPrintf("%" PRIu8, *physicalPort).c_str()
|
|
: "<none>",
|
|
orientation, logicalLeft, logicalTop, logicalRight, logicalBottom,
|
|
physicalLeft, physicalTop, physicalRight, physicalBottom, deviceWidth,
|
|
deviceHeight, isActive);
|
|
}
|
|
};
|
|
|
|
} // namespace android
|
|
|
|
#endif // _LIBINPUT_DISPLAY_VIEWPORT_H
|