diff options
Diffstat (limited to 'src')
m--------- | src/3rdparty | 0 | ||||
-rw-r--r-- | src/core/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/core/pointer_device_qt.cpp | 102 |
3 files changed, 103 insertions, 0 deletions
diff --git a/src/3rdparty b/src/3rdparty -Subproject d3786fd69590669248c0e6b4c8b718c75f9e1e8 +Subproject bb174833724aa009b9b0fac37b2bb72916fa8e3 diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 1be73b2ba..f5cb6e04d 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -153,6 +153,7 @@ foreach(arch ${archs}) ozone/surface_factory_qt.cpp ozone/surface_factory_qt.h permission_manager_qt.cpp permission_manager_qt.h platform_notification_service_qt.cpp platform_notification_service_qt.h + pointer_device_qt.cpp pref_service_adapter.cpp pref_service_adapter.h process_main.cpp profile_adapter.cpp profile_adapter.h diff --git a/src/core/pointer_device_qt.cpp b/src/core/pointer_device_qt.cpp new file mode 100644 index 000000000..a3d7f3d37 --- /dev/null +++ b/src/core/pointer_device_qt.cpp @@ -0,0 +1,102 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +// based on chromium/ui/base/pointer/pointer_device_linux.cc +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/base/pointer/pointer_device.h" + +#include <algorithm> +#include <QPointingDevice> + +namespace ui { + +namespace { + +bool IsTouchScreen(const QInputDevice *device) +{ + return device->type() & QPointingDevice::DeviceType::TouchScreen; +} + +bool IsMouseOrTouchpad(const QInputDevice *device) +{ + return device->type() + & (QPointingDevice::DeviceType::TouchPad | QPointingDevice::DeviceType::Mouse); +} + +bool IsTouchDevicePresent() +{ + QList<const QInputDevice *> devices = QInputDevice::devices(); + return std::any_of(devices.constBegin(), devices.constEnd(), IsTouchScreen); +} + +bool IsMouseOrTouchpadPresent() +{ + QList<const QInputDevice *> devices = QInputDevice::devices(); + return std::any_of(devices.constBegin(), devices.constEnd(), IsMouseOrTouchpad); +} + +} // namespace + +int GetAvailablePointerTypes() +{ + int available_pointer_types = POINTER_TYPE_NONE; + if (IsMouseOrTouchpadPresent()) + available_pointer_types |= POINTER_TYPE_FINE; + + if (IsTouchDevicePresent()) + available_pointer_types |= POINTER_TYPE_COARSE; + + return available_pointer_types; +} + +int GetAvailableHoverTypes() +{ + if (IsMouseOrTouchpadPresent()) + return HOVER_TYPE_HOVER; + + return HOVER_TYPE_NONE; +} + +TouchScreensAvailability GetTouchScreensAvailability() +{ + if (!IsTouchDevicePresent()) + return TouchScreensAvailability::NONE; + + return TouchScreensAvailability::ENABLED; +} + +int MaxTouchPoints() +{ + int max_touch = 0; + for (const auto *device : QInputDevice::devices()) { + if (IsTouchScreen(device)) { + int points = static_cast<const QPointingDevice *>(device)->maximumPoints(); + max_touch = points > max_touch ? points : max_touch; + } + } + + return max_touch; +} + +PointerType GetPrimaryPointerType(int available_pointer_types) +{ + if (available_pointer_types & POINTER_TYPE_FINE) + return POINTER_TYPE_FINE; + if (available_pointer_types & POINTER_TYPE_COARSE) + return POINTER_TYPE_COARSE; + Q_ASSERT(available_pointer_types == POINTER_TYPE_NONE); + return POINTER_TYPE_NONE; +} + +HoverType GetPrimaryHoverType(int available_hover_types) +{ + if (available_hover_types & HOVER_TYPE_HOVER) + return HOVER_TYPE_HOVER; + Q_ASSERT(available_hover_types == HOVER_TYPE_NONE); + return HOVER_TYPE_NONE; +} + +} // namespace ui |