mirror of
https://github.com/QuasarApp/CQtDeployer.git
synced 2025-05-02 20:49:35 +00:00
105 lines
5.1 KiB
QML
105 lines
5.1 KiB
QML
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2016 The Qt Company Ltd.
|
|
** Contact: https://www.qt.io/licensing/
|
|
**
|
|
** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit.
|
|
**
|
|
** $QT_BEGIN_LICENSE:GPL$
|
|
** Commercial License Usage
|
|
** Licensees holding valid commercial Qt licenses may use this file in
|
|
** accordance with the commercial license agreement provided with the
|
|
** Software or, alternatively, in accordance with the terms contained in
|
|
** a written agreement between you and The Qt Company. For licensing terms
|
|
** and conditions see https://www.qt.io/terms-conditions. For further
|
|
** information use the contact form at https://www.qt.io/contact-us.
|
|
**
|
|
** GNU General Public License Usage
|
|
** Alternatively, this file may be used under the terms of the GNU
|
|
** General Public License version 3 or (at your option) any later version
|
|
** approved by the KDE Free Qt Foundation. The licenses are as published by
|
|
** the Free Software Foundation and appearing in the file LICENSE.GPL3
|
|
** included in the packaging of this file. Please review the following
|
|
** information to ensure the GNU General Public License requirements will
|
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
|
**
|
|
** $QT_END_LICENSE$
|
|
**
|
|
****************************************************************************/
|
|
|
|
import QtQuick
|
|
import QtQuick.VirtualKeyboard
|
|
|
|
Item {
|
|
|
|
property var innerFlickable
|
|
property var outerFlickable
|
|
property var inputItem: InputContext.priv.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.restart()
|
|
}
|
|
}
|
|
|
|
function ensureVisible(flickable) {
|
|
if (Qt.inputMethod.visible && inputItem && flickable && flickable.visible && flickable.interactive) {
|
|
|
|
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
|
|
|
|
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 (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)
|
|
}
|
|
}
|
|
}
|
|
Timer {
|
|
id: delayedLoading
|
|
interval: 10
|
|
onTriggered: {
|
|
ensureVisible(innerFlickable)
|
|
ensureVisible(outerFlickable)
|
|
}
|
|
}
|
|
Connections {
|
|
ignoreUnknownSignals: true
|
|
target: Qt.inputMethod
|
|
function onAnimatingChanged() { if (inputItem && !Qt.inputMethod.animating) delayedLoading.restart() }
|
|
function onKeyboardRectangleChanged() { if (inputItem) delayedLoading.restart() }
|
|
function onCursorRectangleChanged() { if (inputItem && inputItem.activeFocus) delayedLoading.restart() }
|
|
}
|
|
}
|