8import org.mauikit.controls as Maui
13 TopLeft, Top, TopRight,
15 BottomLeft, Bottom, BottomRight,
18 required property Item target
19 property int position: SelectionHandle.TopLeft
21 readonly property bool leftSide: position === SelectionHandle.TopLeft
22 || position === SelectionHandle.Left
23 || position === SelectionHandle.BottomLeft
24 readonly property bool rightSide: position === SelectionHandle.TopRight
25 || position === SelectionHandle.Right
26 || position === SelectionHandle.BottomRight
27 readonly property bool topSide: position === SelectionHandle.TopLeft
28 || position === SelectionHandle.Top
29 || position === SelectionHandle.TopRight
30 readonly property bool bottomSide: position === SelectionHandle.BottomLeft
31 || position === SelectionHandle.Bottom
32 || position === SelectionHandle.BottomRight
33 readonly property bool horizontalOnly: position === SelectionHandle.Left || position === SelectionHandle.Right
34 readonly property bool verticalOnly: position === SelectionHandle.Top || position === SelectionHandle.Bottom
36 readonly property bool forwardDiagonal: position === SelectionHandle.TopRight || position === SelectionHandle.BottomLeft
38 readonly property bool backwardDiagonal: position === SelectionHandle.TopLeft || position === SelectionHandle.BottomRight
40 property bool lockX: false
41 property bool lockY: false
43 LayoutMirroring.enabled: false
44 LayoutMirroring.childrenInherit: true
45 anchors.horizontalCenter: if (!pressed && !lockX) {
48 } else if (verticalOnly) {
49 target.horizontalCenter
54 anchors.verticalCenter: if (!pressed && !lockY) {
57 } else if (horizontalOnly) {
63 implicitWidth: graphics.implicitWidth + Maui.Style.space.large* 2
64 implicitHeight: graphics.implicitHeight + Maui.Style.space.large* 2
65 width: verticalOnly ? target.width - implicitWidth : implicitWidth
66 height: horizontalOnly ? target.height - implicitHeight : implicitHeight
67 cursorShape: if (horizontalOnly) {
69 } else if (verticalOnly) {
71 } else if (forwardDiagonal) {
79 axis: if (horizontalOnly) {
81 } else if (verticalOnly) {
86 target: pressed ? root : null
88 maximumX: parent.width - width / 2
90 maximumY: parent.height - height / 2
96 implicitWidth: Maui.Style.units.gridUnit + Maui.Style.units.gridUnit % 2
97 implicitHeight: Maui.Style.units.gridUnit + Maui.Style.units.gridUnit % 2
98 anchors.centerIn: parent
99 color: Maui.Theme.highlightColor
106 anchors.fill: graphics
108 x: root.leftSide ? parent.width - width : 0
109 y: root.topSide ? parent.height - height : 0
110 width: root.forwardDiagonal || root.backwardDiagonal || root.horizontalOnly ? parent.width / 2 : parent.width
111 height: root.forwardDiagonal || root.backwardDiagonal || root.verticalOnly ? parent.height / 2 : parent.height
115 anchors.fill: graphics
119 maskSource: ShaderEffectSource {
120 sourceItem: maskSource