Warning, /graphics/krita/libs/libqml/qml/panels/toolconfigpages/transform.qml is written in an unsupported language. File is not indexed.
0001 /* This file is part of the KDE project 0002 * SPDX-FileCopyrightText: 2012 Dan Leinir Turthra Jensen <admin@leinir.dk> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 import QtQuick 2.3 0008 import org.krita.sketch 1.0 as Krita 0009 import org.krita.sketch.components 1.0 0010 0011 Column { 0012 id: base; 0013 0014 property bool fullView: true; 0015 0016 function apply() { 0017 toolManager.currentTool.applyTransform(); 0018 } 0019 0020 height: buttonRow.height + freeModeOptions.height + Krita.Constants.DefaultMargin * 5 0021 anchors.margins: Krita.Constants.DefaultMargin; 0022 spacing: Krita.Constants.DefaultMargin; 0023 0024 Item { 0025 height: Krita.Constants.DefaultMargin; 0026 width: parent.width; 0027 } 0028 Row { 0029 id: buttonRow; 0030 anchors.horizontalCenter: parent.horizontalCenter; 0031 spacing: Krita.Constants.DefaultMargin; 0032 0033 Button { 0034 id: freeModeButton; 0035 0036 width: base.width * 0.4; 0037 height: textSize + Krita.Constants.DefaultMargin * 2 0038 0039 textColor: "black"; 0040 color: "#63ffffff"; 0041 0042 border.width: 1; 0043 border.color: "silver"; 0044 0045 radius: Krita.Constants.DefaultMargin; 0046 0047 checkable: true; 0048 checked: true; 0049 onCheckedChanged: { 0050 if (checked) { 0051 warpModeButton.checked = false; 0052 toolManager.currentTool.transformMode = 0; 0053 } else if ( !warpModeButton.checked ) { 0054 checked = true; 0055 } 0056 } 0057 0058 highlight: true; 0059 highlightColor: "#aaffffff"; 0060 0061 text: "Free" 0062 } 0063 0064 Button { 0065 id: warpModeButton; 0066 0067 width: base.width * 0.4; 0068 height: textSize + Krita.Constants.DefaultMargin * 2 0069 0070 textColor: "black"; 0071 color: "#63ffffff"; 0072 0073 border.width: 1; 0074 border.color: "silver"; 0075 0076 radius: Krita.Constants.DefaultMargin; 0077 0078 checkable: true; 0079 onCheckedChanged: { 0080 if (checked) { 0081 freeModeButton.checked = false; 0082 toolManager.currentTool.transformMode = 1; 0083 } else if ( !freeModeButton.checked ) { 0084 checked = true; 0085 } 0086 } 0087 0088 highlight: true; 0089 highlightColor: "#aaffffff"; 0090 0091 text: "Warp" 0092 } 0093 } 0094 0095 Item { 0096 width: parent.width; 0097 height: freeModeOptions.height; 0098 0099 Column { 0100 id: freeModeOptions; 0101 0102 width: parent.width; 0103 0104 opacity: freeModeButton.checked ? 1.0 : 0.0; 0105 Behavior on opacity { NumberAnimation { } } 0106 0107 Label { height: font.pixelSize + Krita.Constants.DefaultMargin; text: "Translation" } 0108 0109 PanelTextField { id: translateX; onTextChanged: { parent.preventUpdateText = true; parent.updateTransform(); parent.preventUpdateText = false; } placeholder: "X" } 0110 PanelTextField { id: translateY; onTextChanged: { parent.preventUpdateText = true; parent.updateTransform(); parent.preventUpdateText = false; } placeholder: "Y" } 0111 0112 Label { height: font.pixelSize + Krita.Constants.DefaultMargin; text: "Rotation" } 0113 0114 // ExpandingListView { 0115 // width: parent.width; 0116 // 0117 // model: ListModel { 0118 // ListElement { text: "Top Left"; } 0119 // ListElement { text: "Top Center"; } 0120 // ListElement { text: "Top Right"; } 0121 // ListElement { text: "Middle Left"; } 0122 // ListElement { text: "Center"; } 0123 // ListElement { text: "Middle Right"; } 0124 // ListElement { text: "Bottom Left"; } 0125 // ListElement { text: "Bottom Center"; } 0126 // ListElement { text: "Bottom Right"; } 0127 // } 0128 // } 0129 0130 PanelTextField { id: rotateX; onTextChanged: { parent.preventUpdateText = true; parent.updateTransform(); parent.preventUpdateText = false; } placeholder: "X" } 0131 PanelTextField { id: rotateY; onTextChanged: { parent.preventUpdateText = true; parent.updateTransform(); parent.preventUpdateText = false; } placeholder: "Y" } 0132 PanelTextField { id: rotateZ; onTextChanged: { parent.preventUpdateText = true; parent.updateTransform(); parent.preventUpdateText = false; } placeholder: "Z" } 0133 0134 Label { height: font.pixelSize + Krita.Constants.DefaultMargin; text: "Scaling" } 0135 0136 PanelTextField { id: scaleX; onTextChanged: { parent.preventUpdateText = true; parent.updateTransform(); parent.preventUpdateText = false; } placeholder: "X" } 0137 PanelTextField { id: scaleY; onTextChanged: { parent.preventUpdateText = true; parent.updateTransform(); parent.preventUpdateText = false; } placeholder: "Y" } 0138 0139 Label { height: font.pixelSize + Krita.Constants.DefaultMargin; text: "Shear" } 0140 0141 PanelTextField { id: shearX; onTextChanged: { parent.preventUpdateText = true; parent.updateTransform(); parent.preventUpdateText = false; } placeholder: "X" } 0142 PanelTextField { id: shearY; onTextChanged: { parent.preventUpdateText = true; parent.updateTransform(); parent.preventUpdateText = false; } placeholder: "Y" } 0143 0144 //Button { text: "Update"; onClicked: parent.updateTransform(); } 0145 0146 // ExpandingListView { 0147 // model: ListModel { 0148 // ListElement { text: "Box"; } 0149 // ListElement { text: "Bilinear"; } 0150 // ListElement { text: "Bicubic"; } 0151 // } 0152 // } 0153 0154 Connections { 0155 target: toolManager.currentTool; 0156 ignoreUnknownSignals: true; 0157 0158 onTransformModeChanged: { } 0159 onFreeTransformChanged: { 0160 freeModeOptions.preventUpdate = true; 0161 freeModeOptions.updateFreeTransformText(); 0162 freeModeOptions.preventUpdate = false; 0163 } 0164 } 0165 0166 property bool preventUpdate: false; 0167 property bool preventUpdateText: false; 0168 0169 function updateTransform() { 0170 if ( preventUpdate ) 0171 return; 0172 0173 toolManager.currentTool.translateX = parseFloat(translateX.text); 0174 toolManager.currentTool.translateY = parseFloat(translateY.text); 0175 0176 toolManager.currentTool.rotateX = parseFloat(rotateX.text); 0177 toolManager.currentTool.rotateY = parseFloat(rotateY.text); 0178 toolManager.currentTool.rotateZ = parseFloat(rotateZ.text); 0179 0180 toolManager.currentTool.scaleX = parseFloat(scaleX.text) * 100; 0181 toolManager.currentTool.scaleY = parseFloat(scaleY.text) * 100; 0182 0183 toolManager.currentTool.shearX = parseFloat(shearX.text); 0184 toolManager.currentTool.shearY = parseFloat(shearY.text); 0185 } 0186 0187 function updateFreeTransformText() { 0188 if (preventUpdateText) 0189 return; 0190 0191 translateX.text = toolManager.currentTool.translateX; 0192 translateY.text = toolManager.currentTool.translateY; 0193 0194 rotateX.text = toolManager.currentTool.rotateX; 0195 rotateY.text = toolManager.currentTool.rotateY; 0196 rotateZ.text = toolManager.currentTool.rotateZ; 0197 0198 scaleX.text = toolManager.currentTool.scaleX; 0199 scaleY.text = toolManager.currentTool.scaleY; 0200 0201 shearX.text = toolManager.currentTool.shearX; 0202 shearY.text = toolManager.currentTool.shearY; 0203 } 0204 0205 Component.onCompleted: { 0206 preventUpdate = true; 0207 updateFreeTransformText(); 0208 preventUpdate = false; 0209 } 0210 } 0211 0212 Column { 0213 id: warpModeOptions; 0214 0215 width: parent.width; 0216 spacing: Krita.Constants.DefaultMargin; 0217 0218 opacity: warpModeButton.checked ? 1.0 : 0.0; 0219 Behavior on opacity { NumberAnimation { } } 0220 0221 ExpandingListView { 0222 id: warpTypeCombo; 0223 0224 width: parent.width; 0225 expandedHeight: Krita.Constants.GridHeight * 2 0226 0227 onCurrentIndexChanged: { parent.preventUpdateText = true; parent.updateTransform(); parent.preventUpdateText = false; } 0228 0229 model: ListModel { 0230 ListElement { text: "Rigid"; } 0231 ListElement { text: "Affine"; } 0232 ListElement { text: "Similitude"; } 0233 } 0234 } 0235 0236 PanelTextField { id: warpFlexibilityField; onTextChanged: { parent.preventUpdateText = true; parent.updateTransform(); parent.preventUpdateText = false; } placeholder: "Flexibility"; } 0237 PanelTextField { id: warpDensityField; onTextChanged: { parent.preventUpdateText = true; parent.updateTransform(); parent.preventUpdateText = false; } placeholder: "Density"; } 0238 0239 property bool preventUpdate: false; 0240 property bool preventUpdateText: false; 0241 0242 function updateTransform() { 0243 if (preventUpdate) 0244 return; 0245 0246 toolManager.currentTool.warpType = warpTypeCombo.currentIndex; 0247 toolManager.currentTool.warpFlexibility = parseFloat(warpFlexibilityField.text); 0248 toolManager.currentTool.warpPointDensity = parseInt(warpDensityField.text); 0249 } 0250 0251 function updateTransformText() { 0252 if (preventUpdateText) 0253 return; 0254 0255 warpTypeCombo.currentIndex = toolManager.currentTool.warpType; 0256 warpFlexibilityField.text = toolManager.currentTool.warpFlexibility; 0257 warpDensityField.text = toolManager.currentTool.warpPointDensity; 0258 } 0259 0260 Component.onCompleted: { 0261 preventUpdate = true; 0262 updateTransformText(); 0263 preventUpdate = false; 0264 } 0265 } 0266 } 0267 }