diff options
Diffstat (limited to 'src/quicknativestyle/util/WindowsFocusFrame.qml')
-rw-r--r-- | src/quicknativestyle/util/WindowsFocusFrame.qml | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/quicknativestyle/util/WindowsFocusFrame.qml b/src/quicknativestyle/util/WindowsFocusFrame.qml new file mode 100644 index 0000000000..0d23dacf1f --- /dev/null +++ b/src/quicknativestyle/util/WindowsFocusFrame.qml @@ -0,0 +1,58 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +import QtQuick + +Item { + id: root + + // It's important that this item has a zero size. Otherwise, if the parent of the + // targetItem is e.g a layout, we will change the layout if we parent this item inside it. + width: 0 + height: 0 + // Stack on top of all siblings of the targetItem + z: 100 + + function moveToItem(item, margins, radius) { + if (!item) { + targetItem = null; + parent = null; + visible = false; + return; + } + visible = true + parent = item.parent + targetItem = item + leftOffset = margins.left + rightOffset = margins.right + topOffset = margins.top + bottomOffset = margins.bottom + frameRadius = radius + } + + property Item targetItem + property real leftOffset: 0 + property real rightOffset: 0 + property real topOffset: 0 + property real bottomOffset: 0 + property real frameOpacity: 0 + property real frameSize: 0 + property real frameRadius: 0 + + Canvas { + x: targetItem ? targetItem.x + leftOffset - frameSize - root.x : 0 + y: targetItem ? targetItem.y + topOffset - frameSize - root.y : 0 + width: targetItem ? targetItem.width - leftOffset - rightOffset + (frameSize * 2) : 0 + height: targetItem ? targetItem.height - topOffset - bottomOffset + (frameSize * 2) : 0 + visible: targetItem && targetItem.visible + + onPaint: { + let context = getContext("2d") + context.strokeStyle = Qt.rgba(0, 0, 0, 1) + context.setLineDash([1, 1]) + context.beginPath() + context.roundedRect(0.5, 0.5, width - 1, height - 1, root.frameRadius, root.frameRadius) + context.stroke() + } + } +} |