diff options
-rw-r--r-- | examples/virtualkeyboard/basic/Basic.qml | 4 | ||||
-rw-r--r-- | examples/virtualkeyboard/basic/basic-b2qt.qml | 3 | ||||
-rw-r--r-- | examples/virtualkeyboard/basic/content/AutoScroller.qml | 87 | ||||
-rw-r--r-- | src/virtualkeyboard/content/InputPanel.qml | 14 | ||||
-rw-r--r-- | src/virtualkeyboard/content/components/Keyboard.qml | 11 | ||||
-rw-r--r-- | src/virtualkeyboard/virtualkeyboard.pro | 1 |
6 files changed, 56 insertions, 64 deletions
diff --git a/examples/virtualkeyboard/basic/Basic.qml b/examples/virtualkeyboard/basic/Basic.qml index 158a7826..f3cd59c3 100644 --- a/examples/virtualkeyboard/basic/Basic.qml +++ b/examples/virtualkeyboard/basic/Basic.qml @@ -41,7 +41,7 @@ Rectangle { property bool handwritingInputPanelActive: false Flickable { - id: flickable + id: contentFlickable anchors.fill: parent contentWidth: content.width contentHeight: content.height @@ -54,7 +54,7 @@ Rectangle { MouseArea { id: content - width: flickable.width + width: contentFlickable.width height: textEditors.height + 24 onClicked: focus = true diff --git a/examples/virtualkeyboard/basic/basic-b2qt.qml b/examples/virtualkeyboard/basic/basic-b2qt.qml index 59c64b86..1ab93b27 100644 --- a/examples/virtualkeyboard/basic/basic-b2qt.qml +++ b/examples/virtualkeyboard/basic/basic-b2qt.qml @@ -43,8 +43,9 @@ Item { height: Screen.width < Screen.height ? parent.width : parent.height anchors.centerIn: parent rotation: Screen.width < Screen.height ? 90 : 0 + Basic { - id: virtualKeyboard + id: contentContainer anchors.left: parent.left anchors.top: parent.top anchors.right: parent.right diff --git a/examples/virtualkeyboard/basic/content/AutoScroller.qml b/examples/virtualkeyboard/basic/content/AutoScroller.qml index d8d84a50..4893f133 100644 --- a/examples/virtualkeyboard/basic/content/AutoScroller.qml +++ b/examples/virtualkeyboard/basic/content/AutoScroller.qml @@ -31,77 +31,60 @@ import QtQuick 2.0 import QtQuick.VirtualKeyboard 2.1 Item { + property var flickable + readonly property var inputItem: InputContext.inputItem - property var innerFlickable - property var outerFlickable - property var inputItem: InputContext.inputItem - - onInputItemChanged: { - innerFlickable = null - outerFlickable = null - if (inputItem !== null) { - var parent_ = inputItem.parent - while (parent_) { - if (parent_.maximumFlickVelocity) { - if (innerFlickable) { - outerFlickable = parent_ - break - } else { - innerFlickable = parent_ - } - } - parent_ = parent_.parent - } - delayedLoading.triggered() - } - } + onInputItemChanged: delayedLoading.start() function ensureVisible(flickable) { - if (Qt.inputMethod.visible && inputItem && flickable && flickable.visible && flickable.interactive) { + if (!Qt.inputMethod.visible || !inputItem || !flickable || !flickable.visible/* || !flickable.interactive*/) + return; - var verticallyFlickable = (flickable.flickableDirection === Flickable.HorizontalAndVerticalFlick || flickable.flickableDirection === Flickable.VerticalFlick - || (flickable.flickableDirection === Flickable.AutoFlickDirection && flickable.contentHeight > flickable.height)) - var horizontallyFlickable = (flickable.flickableDirection === Flickable.HorizontalAndVerticalFlick || flickable.flickableDirection === Flickable.HorizontalFlick - || (flickable.flickableDirection === Flickable.AutoFlickDirection && flickable.contentWidth > flickable.width)) + var verticallyFlickable = (flickable.flickableDirection === Flickable.HorizontalAndVerticalFlick || flickable.flickableDirection === Flickable.VerticalFlick + || (flickable.flickableDirection === Flickable.AutoFlickDirection && flickable.contentHeight > flickable.height)) + var horizontallyFlickable = (flickable.flickableDirection === Flickable.HorizontalAndVerticalFlick || flickable.flickableDirection === Flickable.HorizontalFlick + || (flickable.flickableDirection === Flickable.AutoFlickDirection && flickable.contentWidth > flickable.width)) - if ((!verticallyFlickable && !horizontallyFlickable) || !inputItem.hasOwnProperty("cursorRectangle")) - return + if ((!verticallyFlickable && !horizontallyFlickable) || !inputItem.hasOwnProperty("cursorRectangle")) + return - var cursorRectangle = flickable.contentItem.mapFromItem(inputItem, inputItem.cursorRectangle.x, inputItem.cursorRectangle.y) + var cursorRectangle = flickable.contentItem.mapFromItem(inputItem, inputItem.cursorRectangle.x, inputItem.cursorRectangle.y) - var oldContentY = flickable.contentY - if (verticallyFlickable) { - var scrollMarginVertical = (flickable && flickable.scrollMarginVertical) ? flickable.scrollMarginVertical : 10 - if (flickable.contentY >= cursorRectangle.y - scrollMarginVertical) - flickable.contentY = Math.max(0, cursorRectangle.y - scrollMarginVertical) - else if (flickable.contentY + flickable.height <= cursorRectangle.y + inputItem.cursorRectangle.height + scrollMarginVertical) - flickable.contentY = Math.min(flickable.contentHeight - flickable.height, cursorRectangle.y + inputItem.cursorRectangle.height - flickable.height + scrollMarginVertical) + if (verticallyFlickable) { + var scrollMarginVertical = flickable.scrollMarginVertical ? flickable.scrollMarginVertical : 10 + if (flickable.contentY >= cursorRectangle.y - scrollMarginVertical) { + // The flickable is foo far down; move it up. + flickable.contentY = Math.max(0, cursorRectangle.y - scrollMarginVertical) + } else if (flickable.contentY + flickable.height <= cursorRectangle.y + inputItem.cursorRectangle.height + scrollMarginVertical) { + // The flickable is foo far up; move it down. + flickable.contentY = Math.min(flickable.contentHeight - flickable.height, cursorRectangle.y + inputItem.cursorRectangle.height - flickable.height + scrollMarginVertical) } - if (horizontallyFlickable) { - var scrollMarginHorizontal = (flickable && flickable.scrollMarginHorizontal) ? flickable.scrollMarginHorizontal : 10 - if (flickable.contentX >= cursorRectangle.x - scrollMarginHorizontal) - flickable.contentX = Math.max(0, cursorRectangle.x - scrollMarginHorizontal) - else if (flickable.contentX + flickable.width <= cursorRectangle.x + inputItem.cursorRectangle.width + scrollMarginHorizontal) - flickable.contentX = Math.min(flickable.contentWidth - flickable.width, cursorRectangle.x + inputItem.cursorRectangle.width - flickable.width + scrollMarginHorizontal) + } + if (horizontallyFlickable) { + var scrollMarginHorizontal = flickable.scrollMarginHorizontal ? flickable.scrollMarginHorizontal : 10 + if (flickable.contentX >= cursorRectangle.x - scrollMarginHorizontal) { + // The flickable is foo far down; move it up. + flickable.contentX = Math.max(0, cursorRectangle.x - scrollMarginHorizontal) + } else if (flickable.contentX + flickable.width <= cursorRectangle.x + inputItem.cursorRectangle.width + scrollMarginHorizontal) { + // The flickable is foo far up; move it down. + flickable.contentX = Math.min(flickable.contentWidth - flickable.width, cursorRectangle.x + inputItem.cursorRectangle.width - flickable.width + scrollMarginHorizontal) } } } Timer { id: delayedLoading interval: 10 - onTriggered: { - ensureVisible(innerFlickable) - ensureVisible(outerFlickable) - } + onTriggered: ensureVisible(flickable) } Connections { ignoreUnknownSignals: true - target: inputItem && !Qt.inputMethod.animating ? Qt.inputMethod : null - onKeyboardRectangleChanged: delayedLoading.triggered() + target: Qt.inputMethod + onKeyboardRectangleChanged: delayedLoading.start() } Connections { ignoreUnknownSignals: true - target: inputItem && inputItem.activeFocus ? inputItem : null - onCursorRectangleChanged: delayedLoading.triggered() + target: inputItem + enabled: inputItem && inputItem.activeFocus + onCursorRectangleChanged: delayedLoading.start() } } diff --git a/src/virtualkeyboard/content/InputPanel.qml b/src/virtualkeyboard/content/InputPanel.qml index ec771c4e..e41756a7 100644 --- a/src/virtualkeyboard/content/InputPanel.qml +++ b/src/virtualkeyboard/content/InputPanel.qml @@ -111,6 +111,9 @@ Item { /*! \internal */ property alias keyboard: keyboard + /*! \internal */ + readonly property bool __isRootItem: inputPanel.parent != null && inputPanel.parent.parent == null + SelectionControl { objectName: "selectionControl" x: -parent.x @@ -130,4 +133,15 @@ Item { anchors.fill: keyboard enabled: active } + + Binding { + target: InputContext + property: "keyboardRectangle" + value: mapToItem(null, + __isRootItem ? keyboard.x : x, + (__isRootItem ? keyboard.y : y) + keyboard.wordCandidateView.currentYOffset - (keyboard.shadowInputControl.visible ? keyboard.shadowInputControl.height : 0), + keyboard.width, + keyboard.height - keyboard.wordCandidateView.currentYOffset + (keyboard.shadowInputControl.visible ? keyboard.shadowInputControl.height : 0)) + when: !InputContext.animating + } } diff --git a/src/virtualkeyboard/content/components/Keyboard.qml b/src/virtualkeyboard/content/components/Keyboard.qml index 5a2e76eb..ce02d406 100644 --- a/src/virtualkeyboard/content/components/Keyboard.qml +++ b/src/virtualkeyboard/content/components/Keyboard.qml @@ -40,6 +40,8 @@ Item { objectName: "keyboard" property alias style: styleLoader.item + property alias wordCandidateView: wordCandidateView + property alias shadowInputControl: shadowInputControl property var activeKey: null property TouchPoint activeTouchPoint property int localeIndex: -1 @@ -470,15 +472,6 @@ Item { } Binding { target: InputContext - property: "keyboardRectangle" - value: Qt.rect(keyboard.x, - keyboard.y + wordCandidateView.currentYOffset - (shadowInputControl.visible ? shadowInputControl.height : 0), - keyboard.width, - keyboard.height - wordCandidateView.currentYOffset + (shadowInputControl.visible ? shadowInputControl.height : 0)) - when: keyboard.active && !InputContext.animating - } - Binding { - target: InputContext property: "previewRectangle" value: characterPreview.previewRect when: characterPreview.visible diff --git a/src/virtualkeyboard/virtualkeyboard.pro b/src/virtualkeyboard/virtualkeyboard.pro index 3b4a2b96..73b2055a 100644 --- a/src/virtualkeyboard/virtualkeyboard.pro +++ b/src/virtualkeyboard/virtualkeyboard.pro @@ -5,6 +5,7 @@ QMAKE_DOCS = $$PWD/doc/qtvirtualkeyboard.qdocconf include(doc/doc.pri) QT += qml quick gui gui-private core-private +CONFIG += qtquickcompiler win32 { CONFIG += no-pkg-config |