Warning, /maui/mauikit-imagetools/src/controls.6/ImageEditor.qml is written in an unsupported language. File is not indexed.

0001 import QtQuick 
0002 import QtQuick.Controls
0003 import QtQuick.Layouts
0004 
0005 import org.mauikit.controls 1.2 as Maui
0006 
0007 import org.kde.kquickimageeditor 1.0 as KQuickImageEditor
0008 import Qt5Compat.GraphicalEffects
0009 
0010 import "private" as Private
0011 
0012 
0013 /**
0014  * @inherit org::mauikit::controls::Page
0015  * @brief A control with different tools for editingan image
0016  * 
0017  */
0018 Maui.Page
0019 {
0020     id: control
0021    
0022    property url url
0023 
0024     readonly property bool ready : String(control.url).length
0025     
0026     readonly property alias editor : imageDoc
0027 
0028     headBar.visible: control.ready
0029 
0030     headBar.leftContent: ToolButton
0031     {
0032         icon.name: "edit-undo"
0033         enabled: imageDoc.edited
0034         onClicked: imageDoc.undo()
0035     }
0036 
0037     headBar.middleContent: Maui.ToolActions
0038     {
0039         id: _editTools
0040         Layout.alignment: Qt.AlignHCenter
0041         autoExclusive: true
0042         property int currentIndex : 1
0043         expanded: control.width > Maui.Style.units.gridUnit * 30
0044         display: ToolButton.TextBesideIcon
0045 
0046         Action
0047         {
0048             text: i18nd("mauikitimagetools","Color")
0049             checked: _editTools.currentIndex === 0
0050             onTriggered: _editTools.currentIndex = 0
0051         }
0052 
0053         Action
0054         {
0055             text: i18nd("mauikitimagetools","Transform")
0056             checked: _editTools.currentIndex === 1
0057             onTriggered: _editTools.currentIndex = 1
0058         }
0059 
0060         Action
0061         {
0062             text: i18nd("mauikitimagetools","Layer")
0063             checked: _editTools.currentIndex === 2
0064             onTriggered: _editTools.currentIndex = 2
0065         }
0066     }
0067 
0068     KQuickImageEditor.ImageItem
0069     {
0070         id: editImage
0071         readonly property real ratioX: editImage.paintedWidth / editImage.nativeWidth;
0072         readonly property real ratioY: editImage.paintedHeight / editImage.nativeHeight;
0073 
0074         fillMode: KQuickImageEditor.ImageItem.PreserveAspectFit
0075         image: imageDoc.image
0076         anchors.fill: parent
0077         anchors.margins: Maui.Style.space.medium
0078 
0079         rotation: _transBar.rotationSlider.value
0080 
0081         KQuickImageEditor.ImageDocument
0082         {
0083             id: imageDoc
0084             path: control.url
0085         }
0086 
0087         KQuickImageEditor.SelectionTool
0088         {
0089             id: selectionTool
0090             visible: _transBar.cropButton.checked
0091             width: editImage.paintedWidth
0092             height: editImage.paintedHeight
0093             x: editImage.horizontalPadding
0094             y: editImage.verticalPadding
0095 
0096             KQuickImageEditor.CropBackground
0097             {
0098                 anchors.fill: parent
0099                 z: -1
0100                 insideX: selectionTool.selectionX
0101                 insideY: selectionTool.selectionY
0102                 insideWidth: selectionTool.selectionWidth
0103                 insideHeight: selectionTool.selectionHeight
0104             }
0105             Connections {
0106                 target: selectionTool.selectionArea
0107                 function onDoubleClicked() {
0108                     control.crop()
0109                 }
0110             }
0111         }
0112 
0113         onImageChanged:
0114         {
0115             selectionTool.selectionX = 0
0116             selectionTool.selectionY = 0
0117             selectionTool.selectionWidth = Qt.binding(() => selectionTool.width)
0118             selectionTool.selectionHeight = Qt.binding(() => selectionTool.height)
0119         }
0120 
0121 
0122         Canvas
0123         {
0124             visible: _transBar.rotationButton.checked
0125             opacity: 0.15
0126             anchors.fill : parent
0127             property int wgrid: control.width / 20
0128             onPaint: {
0129                 var ctx = getContext("2d")
0130                 ctx.lineWidth = 0.5
0131                 ctx.strokeStyle = Maui.Theme.textColor
0132                 ctx.beginPath()
0133                 var nrows = height/wgrid;
0134                 for(var i=0; i < nrows+1; i++){
0135                     ctx.moveTo(0, wgrid*i);
0136                     ctx.lineTo(width, wgrid*i);
0137                 }
0138 
0139                 var ncols = width/wgrid
0140                 for(var j=0; j < ncols+1; j++){
0141                     ctx.moveTo(wgrid*j, 0);
0142                     ctx.lineTo(wgrid*j, height);
0143                 }
0144                 ctx.closePath()
0145                 ctx.stroke()
0146             }
0147         }
0148     }
0149 
0150     footBar.visible: false
0151     footerColumn: [
0152 
0153         Private.TransformationBar
0154         {
0155             id: _transBar
0156             visible: _editTools.currentIndex === 1 && control.ready
0157             width: parent.width
0158         },
0159 
0160         Private.ColourBar
0161         {
0162             id: _colourBar
0163             visible: _editTools.currentIndex === 0 && control.ready
0164             width: parent.width
0165         }
0166     ]
0167 
0168 
0169     function crop() {
0170         console.log("CROP")
0171         imageDoc.crop(selectionTool.selectionX / editImage.ratioX,
0172                       selectionTool.selectionY / editImage.ratioY,
0173                       selectionTool.selectionWidth / editImage.ratioX,
0174                       selectionTool.selectionHeight / editImage.ratioY);
0175     }
0176 }