Revision control
++ // Copyright (C) 2016 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
++
++ 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.Settings
++ import "content"
++
++ Item {
++ width: 1280
++ height: 720
++
++ Item {
++ id: appContainer
++ width: inLandscapeOrientation ? parent.width : parent.height
++ height: inLandscapeOrientation ? parent.height : parent.width
++ anchors.centerIn: parent
++ Basic {
++ id: virtualKeyboard
++ anchors.left: parent.left
++ anchors.top: parent.top
++ anchors.right: parent.right
++ anchors.bottom: inputPanel.top
++ handwritingInputPanelActive: handwritingInputPanel.available && handwritingInputPanel.active
++ }
++
++ /* Handwriting input panel for full screen handwriting input.
++
++ This component is an optional add-on for the InputPanel component, that
++ is, its use does not affect the operation of the InputPanel component,
++ but it also can not be used as a standalone component.
++
++ The handwriting input panel is positioned to cover the entire area of
++ application. The panel itself is transparent, but once it is active the
++ user can draw handwriting on it.
++ */
++ HandwritingInputPanel {
++ z: 79
++ id: handwritingInputPanel
++ anchors.fill: parent
++ inputPanel: inputPanel
++ Rectangle {
++ z: -1
++ anchors.fill: parent
++ color: "black"
++ opacity: 0.10
++ }
++ }
++
++ /* Container area for the handwriting mode button.
++
++ Handwriting mode button can be moved freely within the container area.
++ In this example, a single click changes the handwriting mode and a
++ double-click changes the availability of the full screen handwriting input.
++ */
++ Item {
++ z: 99
++ visible: handwritingInputPanel.enabled && Qt.inputMethod.visible
++ anchors { left: parent.left; top: parent.top; right: parent.right; bottom: inputPanel.top; }
++ HandwritingModeButton {
++ id: handwritingModeButton
++ anchors.top: parent.top
++ anchors.right: parent.right
++ anchors.margins: 10
++ floating: true
++ flipable: true
++ width: 76
++ height: width
++ state: handwritingInputPanel.state
++ onClicked: handwritingInputPanel.active = !handwritingInputPanel.active
++ onDoubleClicked: handwritingInputPanel.available = !handwritingInputPanel.available
++ }
++ }
++
++ /* Keyboard input panel.
++
++ The keyboard is anchored to the bottom of the application.
++ */
++ InputPanel {
++ id: inputPanel
++ z: 89
++ y: yPositionWhenHidden
++ x: 0
++ width: parent.width
++
++ property real yPositionWhenHidden: parent.height
++
++ states: State {
++ name: "visible"
++ /* The visibility of the InputPanel can be bound to the Qt.inputMethod.visible property,
++ but then the handwriting input panel and the keyboard input panel can be visible
++ at the same time. Here the visibility is bound to InputPanel.active property instead,
++ which allows the handwriting panel to control the visibility when necessary.
++ */
++ when: inputPanel.active
++ PropertyChanges {
++ target: inputPanel
++ y: inputPanel.yPositionWhenHidden - inputPanel.height
++ }
++ }
++ transitions: Transition {
++ id: inputPanelTransition
++ from: ""
++ to: "visible"
++ reversible: true
++ enabled: !VirtualKeyboardSettings.fullScreenMode
++ ParallelAnimation {
++ NumberAnimation {
++ properties: "y"
++ duration: 250
++ easing.type: Easing.InOutQuad
++ }
++ }
++ }
++ Binding {
++ target: InputContext
++ property: "animating"
++ value: inputPanelTransition.running
++ restoreMode: Binding.RestoreBinding
++
++ }
++ }
++
++ Binding {
++ target: VirtualKeyboardSettings
++ property: "fullScreenMode"
++ value: InputContext.cursorRectangle.bottom > inputPanel.y
++ restoreMode: Binding.RestoreBinding
++ }
++
++ }
++
++ property bool inLandscapeOrientation: Screen.primaryOrientation === Qt.LandscapeOrientation ||
++ Screen.primaryOrientation === Qt.InvertedLandscapeOrientation
++
++ Binding {
++ target: appContainer.Window.window !== null ? appContainer.Window.window.contentItem : null
++ property: "rotation"
++ value: inLandscapeOrientation ? 0 : 90
++ }
++ }