Warning, /frameworks/kirigami/autotests/tst_sceneposition.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2023 ivan tkachenko <me@ratijas.tk> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Controls as QQC2 0009 import org.kde.kirigami as Kirigami 0010 import QtTest 0011 0012 TestCase { 0013 id: root 0014 0015 name: "ScenePositionTest" 0016 visible: true 0017 when: windowShown 0018 0019 width: 300 0020 height: 300 0021 0022 Item { 0023 id: anchorsFillItem 0024 anchors.fill: parent 0025 0026 Item { 0027 id: itemA 0028 x: 50 0029 y: 100 0030 } 0031 0032 Item { 0033 id: itemB 0034 x: 150 0035 y: 200 0036 0037 Item { 0038 id: itemB1 0039 x: 25 0040 y: 50 0041 } 0042 } 0043 0044 Item { 0045 id: itemF 0046 x: 3.5 0047 y: 6.25 0048 0049 Item { 0050 id: itemF1 0051 x: -0.25 0052 y: 1.125 0053 } 0054 } 0055 0056 Item { 0057 id: itemPlaceholder 0058 x: 56 0059 y: 78 0060 0061 property Item __reparentedItem: Item { 0062 id: reparentedItem 0063 parent: null 0064 x: 12 0065 y: 34 0066 } 0067 } 0068 0069 Rectangle { 0070 id: itemTransform 0071 0072 x: 100 0073 y: 200 0074 width: 10 0075 height: 10 0076 color: "red" 0077 0078 scale: 2.0 0079 rotation: 30 0080 transform: [ 0081 Rotation { 0082 angle: 30 0083 }, 0084 Scale { 0085 xScale: 2.0 0086 yScale: 3.0 0087 }, 0088 Translate { 0089 x: 12 0090 y: 34 0091 }, 0092 Matrix4x4 { 0093 property real a: Math.PI / 4 0094 matrix: Qt.matrix4x4(Math.cos(a), -Math.sin(a), 0, 0, 0095 Math.sin(a), Math.cos(a), 0, 0, 0096 0, 0, 1, 0, 0097 0, 0, 0, 1) 0098 } 0099 ] 0100 } 0101 } 0102 0103 function test_root() { 0104 compare(root.Kirigami.ScenePosition.x, 0); 0105 compare(root.Kirigami.ScenePosition.y, 0); 0106 0107 compare(anchorsFillItem.Kirigami.ScenePosition.x, 0); 0108 compare(anchorsFillItem.Kirigami.ScenePosition.y, 0); 0109 } 0110 0111 function test_not_nested() { 0112 compare(itemA.Kirigami.ScenePosition.x, itemA.x); 0113 compare(itemA.Kirigami.ScenePosition.y, itemA.y); 0114 0115 compare(itemB.Kirigami.ScenePosition.x, itemB.x); 0116 compare(itemB.Kirigami.ScenePosition.y, itemB.y); 0117 } 0118 0119 function test_nested() { 0120 compare(itemB1.Kirigami.ScenePosition.x, itemB.x + itemB1.x); 0121 compare(itemB1.Kirigami.ScenePosition.y, itemB.y + itemB1.y); 0122 } 0123 0124 function test_floating() { 0125 compare(itemF1.Kirigami.ScenePosition.x, 3.25); 0126 compare(itemF1.Kirigami.ScenePosition.y, 7.375); 0127 } 0128 0129 function test_reparented() { 0130 reparentedItem.parent = null; 0131 compare(reparentedItem.Kirigami.ScenePosition.x, reparentedItem.x); 0132 compare(reparentedItem.Kirigami.ScenePosition.y, reparentedItem.y); 0133 0134 itemPlaceholder.x = 56; 0135 itemPlaceholder.y = 78; 0136 reparentedItem.parent = itemPlaceholder; 0137 compare(reparentedItem.Kirigami.ScenePosition.x, itemPlaceholder.x + reparentedItem.x); 0138 compare(reparentedItem.Kirigami.ScenePosition.y, itemPlaceholder.y + reparentedItem.y); 0139 0140 itemPlaceholder.x += 10; 0141 itemPlaceholder.y += 20; 0142 compare(reparentedItem.Kirigami.ScenePosition.x, itemPlaceholder.x + reparentedItem.x); 0143 compare(reparentedItem.Kirigami.ScenePosition.y, itemPlaceholder.y + reparentedItem.y); 0144 } 0145 0146 function test_transform() { 0147 // transformations are not supported by ScenePosition 0148 compare(itemTransform.Kirigami.ScenePosition.x, itemTransform.x); 0149 compare(itemTransform.Kirigami.ScenePosition.y, itemTransform.y); 0150 } 0151 0152 Item { 0153 id: oldParent 0154 Item { 0155 id: reparentedChildItem 0156 } 0157 } 0158 Item { 0159 id: newParent 0160 } 0161 0162 SignalSpy { 0163 id: reparentingXSpy 0164 target: reparentedChildItem.Kirigami.ScenePosition 0165 signalName: "xChanged" 0166 } 0167 SignalSpy { 0168 id: reparentingYSpy 0169 target: reparentedChildItem.Kirigami.ScenePosition 0170 signalName: "yChanged" 0171 } 0172 0173 function test_disconnectOldAncestors() { 0174 verify(reparentingXSpy.valid); 0175 verify(reparentingYSpy.valid); 0176 reparentingXSpy.clear(); 0177 reparentingYSpy.clear(); 0178 0179 // change position of the item itself 0180 reparentedChildItem.x = 12; 0181 compare(reparentingXSpy.count, 1); 0182 compare(reparentingYSpy.count, 0); 0183 reparentedChildItem.y = 34; 0184 compare(reparentingXSpy.count, 1); 0185 compare(reparentingYSpy.count, 1); 0186 0187 // change position of the current parent 0188 oldParent.x = 56; 0189 compare(reparentedChildItem.Kirigami.ScenePosition.x, 12 + 56); 0190 compare(reparentingXSpy.count, 2); 0191 compare(reparentingYSpy.count, 1); 0192 oldParent.y = 78; 0193 compare(reparentedChildItem.Kirigami.ScenePosition.y, 34 + 78); 0194 compare(reparentingXSpy.count, 2); 0195 compare(reparentingYSpy.count, 2); 0196 0197 // reparent 0198 reparentedChildItem.parent = newParent; 0199 compare(reparentingXSpy.count, 3); 0200 compare(reparentingYSpy.count, 3); 0201 compare(reparentedChildItem.Kirigami.ScenePosition.x, 12); 0202 compare(reparentedChildItem.Kirigami.ScenePosition.y, 34); 0203 0204 // change position of the new parent 0205 newParent.x = 11; 0206 compare(reparentedChildItem.Kirigami.ScenePosition.x, 12 + 11); 0207 compare(reparentingXSpy.count, 4); 0208 compare(reparentingYSpy.count, 3); 0209 newParent.y = 22; 0210 compare(reparentedChildItem.Kirigami.ScenePosition.y, 34 + 22); 0211 compare(reparentingXSpy.count, 4); 0212 compare(reparentingYSpy.count, 4); 0213 0214 // change position of the item itself (again, but with new parent) 0215 reparentedChildItem.x = 33; 0216 compare(reparentedChildItem.Kirigami.ScenePosition.x, 33 + 11); 0217 compare(reparentingXSpy.count, 5); 0218 compare(reparentingYSpy.count, 4); 0219 reparentedChildItem.y = 44; 0220 compare(reparentedChildItem.Kirigami.ScenePosition.y, 44 + 22); 0221 compare(reparentingXSpy.count, 5); 0222 compare(reparentingYSpy.count, 5); 0223 0224 // change position of the old parent, should not trigger signals of the item anymore 0225 oldParent.x = 55; 0226 compare(reparentedChildItem.Kirigami.ScenePosition.x, 33 + 11); 0227 compare(reparentingXSpy.count, 5); 0228 compare(reparentingYSpy.count, 5); 0229 oldParent.y = 66; 0230 compare(reparentedChildItem.Kirigami.ScenePosition.y, 44 + 22); 0231 compare(reparentingXSpy.count, 5); 0232 compare(reparentingYSpy.count, 5); 0233 } 0234 }