6import org.mauikit.controls as Maui
7import org.mauikit.imagetools.editor as ITE
9import "private" as Private
23 readonly
property bool ready : String(control.url).length
25 readonly
property alias
editor : imageDoc
28 signal savedAs(
string url)
34 message:
i18n(
"Are you sure you wanna cancel all the edits?")
46 headBar.visible: control.ready
47 headBar.background: null
48 headBar.leftContent:
Button
50 icon.name:
"go-previous"
51 Maui.Controls.status : imageDoc.edited ?
Maui.Controls.Negative :
Maui.Controls.Normal
62 headBar.rightContent: [
66 icon.name:
"document-save-as"
67 enabled: imageDoc.edited
78 enabled: imageDoc.edited
79 Maui.Controls.status : imageDoc.edited ?
Maui.Controls.Positive :
Maui.Controls.Normal
92 readonly
property real ratioX: editImage.paintedWidth / editImage.nativeWidth;
93 readonly
property real ratioY: editImage.paintedHeight / editImage.nativeHeight;
95 fillMode: Image.PreserveAspectFit
99 rotation: _transBar.rotationSlider.value
110 width: editImage.paintedWidth
111 height: editImage.paintedHeight
112 x: editImage.horizontalPadding
113 y: editImage.verticalPadding
118 insideX: selectionTool.selectionX
119 insideY: selectionTool.selectionY
120 insideWidth: selectionTool.selectionWidth
121 insideHeight: selectionTool.selectionHeight
124 target: selectionTool.selectionArea
125 function onDoubleClicked() {
133 selectionTool.selectionX = 0
134 selectionTool.selectionY = 0
135 selectionTool.selectionWidth =
Qt.binding(() => selectionTool.width)
136 selectionTool.selectionHeight =
Qt.binding(() => selectionTool.height)
142 visible: _transfromAction.checked
144 anchors.fill : parent
145 property int wgrid: control.width / 20
147 var ctx = getContext(
"2d")
149 ctx.strokeStyle =
Maui.Theme.textColor
151 var nrows = height/wgrid;
152 for(var i=0; i < nrows+1; i++){
153 ctx.moveTo(0, wgrid*i);
154 ctx.lineTo(width, wgrid*i);
157 var ncols = width/wgrid
158 for(var j=0; j < ncols+1; j++){
159 ctx.moveTo(wgrid*j, 0);
160 ctx.lineTo(wgrid*j, height);
170 icon.name:
"color-mode-black-white"
171 text:
i18nd(
"mauikitimagetools",
"Color")
172 checked: _actionsBarLoader.currentIndex === 0
173 onTriggered: _actionsBarLoader.currentIndex = 0
179 icon.name:
"dialog-transform"
180 text:
i18nd(
"mauikitimagetools",
"Transform")
181 checked: _actionsBarLoader.currentIndex === 1
182 onTriggered: _actionsBarLoader.currentIndex = 1
188 icon.name:
"layer-new"
189 text:
i18nd(
"mauikitimagetools",
"Layer")
190 checked: _actionsBarLoader.currentIndex === 3
191 onTriggered: _actionsBarLoader.currentIndex = 3
197 icon.name:
"image-auto-adjust"
198 text:
i18nd(
"mauikitimagetools",
"Filters")
199 checked: _actionsBarLoader.currentIndex === 2
200 onTriggered: _actionsBarLoader.currentIndex = 2
205 id: _actionsBarLoader
206 property int currentIndex : 1
208 visible:
status == Loader.Ready
210 anchors.bottom: parent.bottom
211 anchors.horizontalCenter: parent.horizontalCenter
212 anchors.margins:
Maui.Style.space.big
214 sourceComponent: Pane
217 Maui.Theme.colorSet:
Maui.Theme.Complementary
218 Maui.Theme.inherit:
false
222 background: Rectangle
224 radius:
Maui.Style.radiusV
225 color:
Maui.Theme.backgroundColor
227 layer.enabled: GraphicsInfo.api !== GraphicsInfo.Software
228 layer.effect: MultiEffect
230 autoPaddingEnabled:
true
232 shadowColor:
"#000000"
236 ScaleAnimator on scale
240 duration:
Maui.Style.units.longDuration
242 easing.type: Easing.OutInQuad
245 OpacityAnimator on opacity
249 duration:
Maui.Style.units.longDuration
253 contentItem: RowLayout
255 spacing:
Maui.Style.defaultSpacing
259 icon.name:
"edit-undo"
260 Layout.alignment:
Qt.AlignVCenter
261 onClicked: imageDoc.undo()
263 enabled:imageDoc.edited
270 model: [_colorsAction, _transfromAction, _layerAction, _filterAction]
275 display: ToolButton.IconOnly
285 icon.name:
"dialog-apply"
286 onClicked: imageDoc.applyChanges()
287 enabled: !imageDoc.changesApplied
298 xAxis.maximum: control.width - _pane.width
301 yAxis.enabled :
false
307 console.log(centroid.position, centroid.scenePosition, centroid.velocity.x)
309 let pos = centroid.velocity.x
310 _pane.x =
Qt.binding(()=> {
return pos < 0 ?
Maui.Style.space.big : control.width - _pane.width -
Maui.Style.space.big })
311 _pane.y =
Qt.binding(()=> { return control.height - _pane.height - Maui.Style.space.big })
321 Private.TransformationBar
324 visible: _actionsBarLoader.currentIndex === 1 && control.ready
331 visible: _actionsBarLoader.currentIndex === 0 && control.ready
338 visible: _actionsBarLoader.currentIndex === 2 && control.ready
343 Layout.alignment:
Qt.AlignHCenter
366 onClicked: editor.toSketch();
372 onClicked: editor.addVignette();
380 function selectionToolRect()
382 return Qt.rect(selectionTool.selectionX / editImage.ratioX,
383 selectionTool.selectionY / editImage.ratioY,
384 selectionTool.selectionWidth / editImage.ratioX,
385 selectionTool.selectionHeight / editImage.ratioY);
391 imageDoc.crop(selectionTool.selectionX / editImage.ratioX,
392 selectionTool.selectionY / editImage.ratioY,
393 selectionTool.selectionWidth / editImage.ratioX,
394 selectionTool.selectionHeight / editImage.ratioY);
Q_SCRIPTABLE CaptureState status()
QString i18nd(const char *domain, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
QString path(const QString &relativePath)