1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:GPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU 19 ** General Public License version 3 or (at your option) any later version 20 ** approved by the KDE Free Qt Foundation. The licenses are as published by 21 ** the Free Software Foundation and appearing in the file LICENSE.GPL3 22 ** included in the packaging of this file. Please review the following 23 ** information to ensure the GNU General Public License requirements will 24 ** be met: https://www.gnu.org/licenses/gpl-3.0.html. 25 ** 26 ** $QT_END_LICENSE$ 27 ** 28 ****************************************************************************/ 29 30 #ifndef DESKTOPINPUTSELECTIONCONTROL_P_H 31 #define DESKTOPINPUTSELECTIONCONTROL_P_H 32 33 // 34 // W A R N I N G 35 // ------------- 36 // 37 // This file is not part of the Qt API. It exists purely as an 38 // implementation detail. This header file may change from version to 39 // version without notice, or even be removed. 40 // 41 // We mean it. 42 // 43 44 #include <QtCore/qpointer.h> 45 #include <QtCore/qobject.h> 46 #include <QtGui/qimage.h> 47 #include <QtVirtualKeyboard/qvirtualkeyboard_global.h> 48 49 QT_BEGIN_NAMESPACE 50 51 class QMouseEvent; 52 class QVirtualKeyboardInputContext; 53 54 namespace QtVirtualKeyboard { 55 56 class InputSelectionHandle; 57 58 class QVIRTUALKEYBOARD_EXPORT DesktopInputSelectionControl : public QObject 59 { 60 Q_OBJECT 61 62 public: 63 DesktopInputSelectionControl(QObject *parent, QVirtualKeyboardInputContext *inputContext); ~DesktopInputSelectionControl()64 ~DesktopInputSelectionControl() {} 65 66 void createHandles(); 67 void destroyHandles(); 68 void setEnabled(bool enable); 69 QImage *handleImage(); 70 71 public Q_SLOTS: 72 void updateAnchorHandlePosition(); 73 void updateCursorHandlePosition(); 74 void updateVisibility(); 75 void reloadGraphics(); 76 protected: 77 bool eventFilter(QObject *object, QEvent *event) override; 78 79 private: 80 QRect anchorHandleRect() const; 81 QRect cursorHandleRect() const; 82 QRect handleRectForCursorRect(const QRectF &cursorRect) const; 83 84 private: 85 QVirtualKeyboardInputContext *m_inputContext; 86 QSharedPointer<InputSelectionHandle> m_anchorSelectionHandle; 87 QSharedPointer<InputSelectionHandle> m_cursorSelectionHandle; 88 QImage m_handleImage; 89 90 enum { 91 HandleIsReleased = 0, 92 HandleIsHeld = 1, 93 HandleIsMoving = 2 94 }; 95 enum HandleType { 96 AnchorHandle = 0, 97 CursorHandle = 1 98 }; 99 100 unsigned m_handleState : 2; 101 unsigned m_currentDragHandle : 1; 102 unsigned m_enabled : 1; 103 unsigned m_anchorHandleVisible : 1; 104 unsigned m_cursorHandleVisible : 1; 105 unsigned m_eventFilterEnabled : 1; 106 QPoint m_otherSelectionPoint; 107 QVector <QMouseEvent*> m_eventQueue; 108 QPoint m_distanceBetweenMouseAndCursor; 109 QPoint m_handleDragStartedPosition; 110 QSize m_handleWindowSize; 111 }; 112 } // namespace QtVirtualKeyboard 113 QT_END_NAMESPACE 114 115 #endif // DESKTOPINPUTSELECTIONCONTROL_P_H 116