加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
AutoScroller.qml 5.20 KB
一键复制 编辑 原始数据 按行查看 历史
世玉轩 提交于 2020-06-19 09:31 . init push myir hmi v2.0 gui
/****************************************************************************
**
** 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 2.0
import QtQuick.VirtualKeyboard 2.1
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
onAnimatingChanged: if (inputItem && !Qt.inputMethod.animating) delayedLoading.restart()
onKeyboardRectangleChanged: if (inputItem) delayedLoading.restart()
onCursorRectangleChanged: if (inputItem && inputItem.activeFocus) delayedLoading.restart()
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化