From fa4f123fba2e5254470d4315df548761b07ad5dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Fl=C3=B6ser?= Date: Sun, 28 Oct 2018 18:10:43 +0100 Subject: [PATCH] Add button to dynamically resize virtual keyboard Summary: One of the things I dislike most about our virtual keyboard integration is it's size. It's at least on my system covering too much vertical space. Unfortuantely the keyboard API does not offer a way to control the vertical space - one can only control the width. Thus it's also not possible to just provide the keyboard in the optimal size. This change tries to address the problem by adding a resize button. When pressed one can dynamically decrease and increase the width of the keyboard and thus also the height. The button is added to the top/right corner. Ideally it would be added to the symbol button row, but either I couldn't find the appropriate API hooks or it's not possible. Test Plan: Started KWin with the change and tested with touch input Reviewers: #kwin Subscribers: kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D16485 --- qml/virtualkeyboard/main.qml | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/qml/virtualkeyboard/main.qml b/qml/virtualkeyboard/main.qml index e8af4b8f63..2b8e5cc686 100644 --- a/qml/virtualkeyboard/main.qml +++ b/qml/virtualkeyboard/main.qml @@ -18,15 +18,45 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . *********************************************************************/ import QtQuick 2.0 +import QtQuick.Controls 2.3 import QtQuick.VirtualKeyboard 2.1 Item { id: window + property real adjustment: 0 + property real adjustmentFactor: 0.0 InputPanel { id: inputPanel objectName: "inputPanel" - anchors.left: parent.left - anchors.right: parent.right + width: parent.width - parent.width * parent.adjustmentFactor + anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom } + ToolButton { + id: resizeButton + flat: true + display: AbstractButton.IconOnly + icon.name: "transform-scale" + icon.color: "white" + down: mouseArea.pressed + + anchors { + right: inputPanel.right + top: inputPanel.top + } + + MouseArea { + id: mouseArea + property real startPoint: 0 + anchors.fill: parent + onPressed: { + startPoint = mouse.x; + } + onPositionChanged: { + window.adjustment -= (mouse.x - startPoint); + window.adjustmentFactor = Math.min(Math.max(window.adjustment / window.width, 0.0), 0.66); + startPoint = mouse.x; + } + } + } }