122 lines
4.8 KiB
QML
122 lines
4.8 KiB
QML
// 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
|
|
}
|
|
|
|
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
|
|
}
|
|
}
|