// Copyright (C) 2024 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 @Deprecated { reason: "StyleImage component has been moved to private FluentWinUI3.impl module \ and is no longer part of the public QML API." } // This item will resize the child image in such a way that any drop shadow // or blur (or other effects) will be drawn outside its own bounds. // The effect is that users of this item won't have to take e.g shadows // into account when positioning it, as such effects will only be visual, and // not be a part of the geometry. Item { id: root Component.onCompleted: { print("StyleImage has been moved to private FluentWinUI3.impl module " + "and is no longer part of the public QML API.") } implicitWidth: horizontal ? imageConfig.width : imageConfig.height implicitHeight: horizontal ? imageConfig.height : imageConfig.width required property var imageConfig // Set horizontal to false if you want the image to be rotated 90 degrees // Doing so will rotate the image, but also flip it, to make sure that // the shadow ends up on the correct side. The implicit geometry of the // item will also be adjusted to match the rotated image. property bool horizontal: true // The minimum size of the image should be at least 1px tall and wide, even without any offsets property real minimumWidth: Math.max(1, imageConfig.leftOffset + imageConfig.rightOffset) property real minimumHeight: Math.max(1, imageConfig.topOffset + imageConfig.bottomOffset) BorderImage { x: -imageConfig.leftShadow y: -imageConfig.topShadow width: Math.max(root.minimumWidth, (root.horizontal ? root.width : root.height)) + imageConfig.leftShadow + imageConfig.rightShadow height: Math.max(root.minimumHeight, (root.horizontal ? root.height : root.width)) + imageConfig.topShadow + imageConfig.bottomShadow source: Qt.resolvedUrl(imageConfig.filePath) border { top: Math.min(height / 2, imageConfig.topOffset + imageConfig.topShadow) left: Math.min(width / 2, imageConfig.leftOffset + imageConfig.leftShadow) bottom: Math.min(height / 2, imageConfig.bottomOffset + imageConfig.bottomShadow) right: Math.min(width / 2, imageConfig.rightOffset + imageConfig.rightShadow) } transform: [ Rotation { angle: root.horizontal ? 0 : 90 }, Scale { xScale: root.horizontal ? 1 : -1 } ] } }