1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick
// Deliberately imported after QtQuick to avoid missing restoreMode property in Binding. Fix in Qt 6.
import QtQml
import QtQuick.Window
import QtQuick.VirtualKeyboard
import QtQuick.VirtualKeyboard.Components
/*!
\qmltype HandwritingInputPanel
\inqmlmodule QtQuick.VirtualKeyboard
\since QtQuick.VirtualKeyboard 2.0
\brief Provides a handwriting panel add-on for the virtual keyboard UI.
\ingroup qmlclass
\ingroup qtvirtualkeyboard-qml
The HandwritingInputPanel is an add-on component for the InputPanel, which
enables full-screen handwriting input for the application.
HandwritingInputPanel is designed to be anchored full screen alongside
the InputPanel. The operating principle is that when the handwriting panel
is "available", the InputPanel is invisible. This functionality is built-in,
and requires no more than a reference to the InputPanel instance.
The panel is set into operation by setting the \l {HandwritingInputPanel::}{available}
property to \c true. When the panel is in operation, the keyboard remains hidden
when the input focus is set. When \c available is \c true, handwriting input is
activated by setting the \l {HandwritingInputPanel::}{active} property to \c true.
The user interface, which provides controls for handwriting mode and the
visibility of the keyboard, is application-specific. One suggested implementation
is to use a floating button on the handwriting panel, where single click toggles
the handwriting mode (changes the \l {HandwritingInputPanel::}{active} property), and double-click toggles
the visibility of the keyboard (changes the \l {HandwritingInputPanel::}{available} property).
HandwritingInputPanel also provides a word candidate popup which allows the user
to select an alternative word candidate from the list of suggestions generated
by the handwriting input method.
*/
Item {
id: handwritingInputPanel
/*! A reference to the input panel instance.
This property must be set to the existing input panel instance.
*/
property var inputPanel
/*! This property controls the availability status of the handwriting input method.
Setting the property to \c true prepares the handwriting input method and inhibits
the display of keyboard.
*/
property bool available
/*! This property controls the active status of the handwriting input method.
Setting the property to \c true activates the handwriting input method. When the
handwriting input method is active, all touch input is captured by the
handwriting input panel and redirected to input engine for processing.
*/
property bool active
state: enabled && available ? (active ? "active" : "available") : "unavailable"
enabled: inputPanel.keyboard.isHandwritingAvailable()
visible: enabled && available && active && Qt.inputMethod.visible
LayoutMirroring.enabled: false
LayoutMirroring.childrenInherit: true
Item {
id: keyboard
property var style: inputPanel && inputPanel.hasOwnProperty ? inputPanel.keyboard.style : null
property var soundEffect: inputPanel && inputPanel.hasOwnProperty ? inputPanel.keyboard.soundEffect : null
}
onEnabledChanged: inputPanel.keyboard.fullScreenHandwritingMode = enabled && available
onAvailableChanged: inputPanel.keyboard.fullScreenHandwritingMode = enabled && available
TraceInputArea {
id: hwrInputArea
enabled: handwritingInputPanel.enabled && handwritingInputPanel.available && handwritingInputPanel.active
objectName: "hwrInputArea"
anchors.fill: parent
patternRecognitionMode: InputEngine.PatternRecognitionMode.Handwriting
canvasType: "fullscreen"
}
Binding {
target: InputContext.priv
property: "keyboardRectangle"
value: Qt.rect(hwrInputArea.x, hwrInputArea.y, hwrInputArea.width, hwrInputArea.height)
when: handwritingInputPanel.enabled && handwritingInputPanel.available && handwritingInputPanel.active
restoreMode: Binding.RestoreBinding
}
Binding {
target: inputPanel ? inputPanel.keyboard : null
property: "active"
value: false
when: handwritingInputPanel.enabled && handwritingInputPanel.available
restoreMode: Binding.RestoreBinding
}
WordCandidatePopupList {
id: wordCandidatePopupList
z: 1
objectName: "wordCandidatePopupList"
enabled: handwritingInputPanel.enabled && handwritingInputPanel.available && handwritingInputPanel.active
}
Loader {
sourceComponent: keyboard.style.popupListBackground
anchors.fill: wordCandidatePopupList
z: -1
visible: wordCandidatePopupList.visible
}
}
|