Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package kquickimageeditor for
openSUSE:Factory checked in at 2024-03-11 15:31:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kquickimageeditor (Old)
and /work/SRC/openSUSE:Factory/.kquickimageeditor.new.1770 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kquickimageeditor"
Mon Mar 11 15:31:56 2024 rev:4 rq:1153262 version:0.3.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/kquickimageeditor/kquickimageeditor.changes
2021-10-08 00:06:51.405835329 +0200
+++
/work/SRC/openSUSE:Factory/.kquickimageeditor.new.1770/kquickimageeditor.changes
2024-03-11 15:38:08.371712060 +0100
@@ -1,0 +2,17 @@
+Thu Feb 29 14:07:34 UTC 2024 - Christophe Marin <[email protected]>
+
+- Update to 0.3.0
+ * Don't preprocess QML files
+ * Show header in qtc6
+ * We need to use Qt5Compat.GraphicalEffects in qt6
+ * Add CMakePresets.json
+ * Ignore build dir
+ * Remove smooth property
+ * Don't include GNUInstallDirs
+ * Fix Qt version in CMake Config
+ * Enable building against Qt6
+ * Port to ecm_add_qml_module
+ * Update example
+- Add kquickimageeditor6, required by neochat
+
+-------------------------------------------------------------------
Old:
----
kquickimageeditor-0.2.0.tar.xz
kquickimageeditor-0.2.0.tar.xz.sig
New:
----
_multibuild
kquickimageeditor-0.3.0.tar.xz
kquickimageeditor-0.3.0.tar.xz.sig
kquickimageeditor6.spec
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kquickimageeditor.spec ++++++
--- /var/tmp/diff_new_pack.ZGK5va/_old 2024-03-11 15:38:08.891731211 +0100
+++ /var/tmp/diff_new_pack.ZGK5va/_new 2024-03-11 15:38:08.891731211 +0100
@@ -1,7 +1,7 @@
#
# spec file for package kquickimageeditor
#
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,25 +16,24 @@
#
-%define _kf5_version 5.79.0
+%define kf5_version 5.91.0
+%define qt5_version 5.15.0
+
%bcond_without lang
Name: kquickimageeditor
-Version: 0.2.0
+Version: 0.3.0
Release: 0
Summary: A set of QtQuick components for image editing
License: LGPL-2.1-or-later
-Group: System/GUI/KDE
URL: https://www.kde.org
Source0:
https://download.kde.org/stable/kquickimageeditor/%{name}-%{version}.tar.xz
%if %{with lang}
Source1:
https://download.kde.org/stable/kquickimageeditor/%{name}-%{version}.tar.xz.sig
Source2: %{name}.keyring
%endif
-BuildRequires: cmake >= 3.5
-BuildRequires: extra-cmake-modules >= %{_kf5_version}
-BuildRequires: kf5-filesystem
-BuildRequires: cmake(Qt5Core) >= 5.15.0
-BuildRequires: cmake(Qt5Quick) >= 5.15.0
+BuildRequires: extra-cmake-modules >= %{kf5_version}
+BuildRequires: cmake(Qt5Core) >= %{qt5_version}
+BuildRequires: cmake(Qt5Quick) >= %{qt5_version}
%description
KQuickImageEditor is a set of QtQuick components providing basic image editing
@@ -42,7 +41,6 @@
%package imports
Summary: A set of QtQuick components for image editing
-Group: System/GUI/KDE
%description imports
KQuickImageEditor is a set of QtQuick components providing basic image editing
@@ -50,10 +48,8 @@
%package devel
Summary: Development files for KQuickImageEditor
-Group: Development/Libraries/KDE
-Requires: %{name}-imports = %{version}
+Requires: kquickimageeditor-imports = %{version}
Requires: cmake(Qt5Core)
-Requires: cmake(Qt5Quick)
%description devel
Development files for KQuickImageEditor, a set of QtQuick components providing
@@ -64,6 +60,7 @@
%build
%cmake_kf5 -d build
+
%cmake_build
%install
@@ -77,7 +74,6 @@
%{_kf5_qmldir}/org/kde/kquickimageeditor/
%files devel
-%license LICENSES/*
%{_kf5_cmakedir}/KQuickImageEditor/
%{_kf5_mkspecsdir}/qt_KQuickImageEditor.pri
++++++ kquickimageeditor6.spec ++++++
#
# spec file for package kquickimageeditor6
#
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%define kf6_version 6.0.0
%define qt6_version 6.6.0
%define rname kquickimageeditor
%bcond_without released
Name: kquickimageeditor6
Version: 0.3.0
Release: 0
Summary: A set of QtQuick components for image editing
License: LGPL-2.1-or-later
URL: https://www.kde.org
Source0:
https://download.kde.org/stable/kquickimageeditor/%{rname}-%{version}.tar.xz
%if %{with released}
Source1:
https://download.kde.org/stable/kquickimageeditor/%{rname}-%{version}.tar.xz.sig
Source2: kquickimageeditor.keyring
%endif
BuildRequires: kf6-extra-cmake-modules >= %{kf6_version}
BuildRequires: cmake(Qt6Core) >= %{qt6_version}
BuildRequires: cmake(Qt6Quick) >= %{qt6_version}
%description
KQuickImageEditor is a set of QtQuick components providing basic image editing
capabilities.
%package imports
Summary: A set of QtQuick components for image editing
Requires: qt6-qt5compat-imports >= %{qt6_version}
%description imports
KQuickImageEditor is a set of QtQuick components providing basic image editing
capabilities.
%package devel
Summary: Development files for KQuickImageEditor
Requires: kquickimageeditor6-imports = %{version}
Requires: cmake(Qt6Core) >= %{qt6_version}
Conflicts: kquickimageeditor-devel
%description devel
Development files for KQuickImageEditor, a set of QtQuick components providing
basic image editing capabilities.
%prep
%autosetup -p1 -n %{rname}-%{version}
%build
%cmake_kf6 -DBUILD_WITH_QT6:BOOL=TRUE
%kf6_build
%install
%kf6_install
%files imports
%license LICENSES/*
%doc README.md
%{_kf6_qmldir}/org/kde/kquickimageeditor/
%files devel
%{_kf6_cmakedir}/KQuickImageEditor/
%{_kf6_mkspecsdir}/qt_KQuickImageEditor.pri
%changelog
++++++ _multibuild ++++++
<multibuild>
<package>kquickimageeditor6</package>
</multibuild>
++++++ kquickimageeditor-0.2.0.tar.xz -> kquickimageeditor-0.3.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kquickimageeditor-0.2.0/.gitignore
new/kquickimageeditor-0.3.0/.gitignore
--- old/kquickimageeditor-0.2.0/.gitignore 2021-10-01 18:15:16.000000000
+0200
+++ new/kquickimageeditor-0.3.0/.gitignore 2023-11-02 17:00:24.000000000
+0100
@@ -5,5 +5,10 @@
_build
*.kate-swp
*.swp
-build
-.clang-format
+build*/
+/.clang-format
+/compile_commands.json
+.clangd
+.cache
+.idea
+/cmake-build*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kquickimageeditor-0.2.0/.gitlab-ci.yml
new/kquickimageeditor-0.3.0/.gitlab-ci.yml
--- old/kquickimageeditor-0.2.0/.gitlab-ci.yml 2021-10-01 18:15:16.000000000
+0200
+++ new/kquickimageeditor-0.3.0/.gitlab-ci.yml 2023-11-02 17:00:24.000000000
+0100
@@ -3,3 +3,10 @@
include:
-
https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux.yml
+ -
https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux-qt6.yml
+ -
https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd.yml
+ -
https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd-qt6.yml
+ -
https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/android.yml
+ -
https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/android-qt6.yml
+ -
https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/windows.yml
+ -
https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/windows-qt6.yml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kquickimageeditor-0.2.0/.kde-ci.yml
new/kquickimageeditor-0.3.0/.kde-ci.yml
--- old/kquickimageeditor-0.2.0/.kde-ci.yml 2021-10-01 18:15:16.000000000
+0200
+++ new/kquickimageeditor-0.3.0/.kde-ci.yml 2023-11-02 17:00:24.000000000
+0100
@@ -2,6 +2,10 @@
# SPDX-License-Identifier: CC0-1.0
Dependencies:
-- 'on': ['@all']
+- 'on': ['Linux/Qt5', 'FreeBSD/Qt5', 'Windows/Qt5', 'Android/Qt5']
'require':
'frameworks/extra-cmake-modules': '@stable'
+
+- 'on': ['Linux/Qt6', 'FreeBSD/Qt6', 'Windows/Qt6', 'Android/Qt6']
+ 'require':
+ 'frameworks/extra-cmake-modules': '@latest-kf6'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kquickimageeditor-0.2.0/CMakeLists.txt
new/kquickimageeditor-0.3.0/CMakeLists.txt
--- old/kquickimageeditor-0.2.0/CMakeLists.txt 2021-10-01 18:15:16.000000000
+0200
+++ new/kquickimageeditor-0.3.0/CMakeLists.txt 2023-11-02 17:00:24.000000000
+0100
@@ -4,15 +4,15 @@
cmake_minimum_required(VERSION 3.5)
-set(KF5_VERSION "5.79.0")
+set(KF5_VERSION "5.91.0")
set(REQUIRED_QT_VERSION 5.15.0)
+set(KDE_COMPILERSETTINGS_LEVEL 5.84.0)
-project(KQuickImageEditor LANGUAGES CXX VERSION 0.2.0)
+project(KQuickImageEditor LANGUAGES CXX VERSION 0.3.0)
find_package(ECM ${KF5_VERSION} NO_MODULE)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH})
-include(GNUInstallDirs)
include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings)
@@ -23,6 +23,7 @@
include(ECMGenerateQmlTypes)
include(CMakePackageConfigHelpers)
include(KDEPackageAppTemplates)
+include(ECMQmlModule)
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KQuickImageEditor")
@@ -30,7 +31,7 @@
"${CMAKE_CURRENT_SOURCE_DIR}/KQuickImageEditorConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/KQuickImageEditorConfig.cmake"
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
- PATH_VARS KF5_INCLUDE_INSTALL_DIR CMAKE_INSTALL_PREFIX
+ PATH_VARS CMAKE_INSTALL_PREFIX
)
install(FILES
@@ -48,7 +49,7 @@
)
-find_package(Qt5 ${REQUIRED_QT_VERSION} COMPONENTS Core Quick REQUIRED)
+find_package(Qt${QT_MAJOR_VERSION} ${REQUIRED_QT_VERSION} COMPONENTS Core
Quick REQUIRED)
add_subdirectory(src)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kquickimageeditor-0.2.0/CMakePresets.json
new/kquickimageeditor-0.3.0/CMakePresets.json
--- old/kquickimageeditor-0.2.0/CMakePresets.json 1970-01-01
01:00:00.000000000 +0100
+++ new/kquickimageeditor-0.3.0/CMakePresets.json 2023-11-02
17:00:24.000000000 +0100
@@ -0,0 +1,224 @@
+{
+ "version": 3,
+ "configurePresets": [
+ {
+ "name": "base",
+ "displayName": "base preset",
+ "generator": "Ninja",
+ "binaryDir": "${sourceDir}/build-${presetName}",
+ "installDir": "$env{KF5}",
+ "hidden": true
+ },
+ {
+ "name": "base-qt6",
+ "displayName": "base preset",
+ "generator": "Ninja",
+ "binaryDir": "${sourceDir}/build-${presetName}",
+ "installDir": "$env{KF6}",
+ "hidden": true
+ },
+ {
+ "name": "dev-mold",
+ "displayName": "Build as debug + using mold linker",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
+ "CMAKE_SHARED_LINKER_FLAGS": "-fuse-ld=mold"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "dev",
+ "displayName": "Build as debug",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "dev-qt6",
+ "displayName": "Build against qt6",
+ "binaryDir": "${sourceDir}/build-qt6",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "BUILD_WITH_QT6": "ON",
+ "CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
+ },
+ "inherits": [
+ "base-qt6"
+ ]
+ },
+ {
+ "name": "asan",
+ "displayName": "Build with Asan support.",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "ECM_ENABLE_SANITIZERS" : "'address;undefined'"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "dev-clang",
+ "displayName": "dev-clang",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
+ },
+ "environment": {
+ "CXX": "clang++",
+ "CCACHE_DISABLE": "ON"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "unity",
+ "displayName": "Build with CMake unity support.",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "USE_UNITY_CMAKE_SUPPORT": "ON"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "release",
+ "displayName": "Build as release mode.",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Release"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "profile",
+ "displayName": "profile",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "RelWithDebInfo"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "coverage",
+ "displayName": "coverage",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "USE_UNITY_CMAKE_SUPPORT": "OFF",
+ "BUILD_COVERAGE": "ON"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "clazy",
+ "displayName": "clazy",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug"
+ },
+ "environment": {
+ "CXX": "clazy",
+ "CCACHE_DISABLE": "ON"
+ },
+ "inherits": [
+ "base"
+ ]
+ },
+ {
+ "name": "pch",
+ "displayName": "pch",
+ "cacheVariables": {
+ "CMAKE_BUILD_TYPE": "Debug",
+ "USE_PRECOMPILED_HEADERS": "ON",
+ "BUILD_COVERAGE": "ON"
+ },
+ "inherits": [
+ "base"
+ ]
+ }
+ ],
+ "buildPresets": [
+ {
+ "name": "dev",
+ "configurePreset": "dev"
+ },
+ {
+ "name": "dev-mold",
+ "configurePreset": "dev-mold"
+ },
+ {
+ "name": "dev-qt6",
+ "configurePreset": "dev-qt6"
+ },
+ {
+ "name": "dev-clang",
+ "configurePreset": "dev-clang"
+ },
+ {
+ "name": "pch",
+ "configurePreset": "pch"
+ },
+ {
+ "name": "release",
+ "configurePreset": "release"
+ },
+ {
+ "name": "unity",
+ "configurePreset": "unity"
+ },
+ {
+ "name": "coverage",
+ "configurePreset": "coverage"
+ },
+ {
+ "name": "asan",
+ "configurePreset": "asan"
+ },
+ {
+ "name": "clazy",
+ "configurePreset": "clazy",
+ "environment": {
+ "CLAZY_CHECKS" :
"level0,level1,detaching-member,ifndef-define-typo,isempty-vs-count,qrequiredresult-candidates,reserve-candidates,signal-with-return-value,unneeded-cast,function-args-by-ref,function-args-by-value,returning-void-expression,no-ctor-missing-parent-argument,isempty-vs-count,qhash-with-char-pointer-key,raw-environment-function,qproperty-type-mismatch,old-style-connect,qstring-allocations,container-inside-loop,heap-allocated-small-trivial-type,inefficient-qlist,qstring-varargs,level2,detaching-member,heap-allocated-small-trivial-type,isempty-vs-count,qstring-varargs,qvariant-template-instantiation,raw-environment-function,reserve-candidates,signal-with-return-value,thread-with-slots,no-ctor-missing-parent-argument,no-missing-typeinfo",
+ "CCACHE_DISABLE" : "ON"
+ }
+ }
+ ],
+ "testPresets": [
+ {
+ "name": "dev",
+ "configurePreset": "dev",
+ "output": {"outputOnFailure": true},
+ "execution": {"noTestsAction": "error", "stopOnFailure": false}
+ },
+ {
+ "name": "asan",
+ "configurePreset": "asan",
+ "output": {"outputOnFailure": true},
+ "execution": {"noTestsAction": "error", "stopOnFailure": true}
+ },
+ {
+ "name": "unity",
+ "configurePreset": "unity",
+ "output": {"outputOnFailure": true},
+ "execution": {"noTestsAction": "error", "stopOnFailure": true}
+ },
+ {
+ "name": "coverage",
+ "configurePreset": "coverage",
+ "output": {"outputOnFailure": true},
+ "execution": {"noTestsAction": "error", "stopOnFailure": true}
+ }
+ ]
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/kquickimageeditor-0.2.0/KQuickImageEditorConfig.cmake.in
new/kquickimageeditor-0.3.0/KQuickImageEditorConfig.cmake.in
--- old/kquickimageeditor-0.2.0/KQuickImageEditorConfig.cmake.in
2021-10-01 18:15:16.000000000 +0200
+++ new/kquickimageeditor-0.3.0/KQuickImageEditorConfig.cmake.in
2023-11-02 17:00:24.000000000 +0100
@@ -4,7 +4,7 @@
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)
-find_dependency(Qt5Core @REQUIRED_QT_VERSION@)
+find_dependency(Qt@QT_MAJOR_VERSION@Core @REQUIRED_QT_VERSION@)
# Any changes in this ".cmake" file will be overwritten by CMake, the source
is the ".cmake.in" file.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kquickimageeditor-0.2.0/examples/KirigamiExample.qml
new/kquickimageeditor-0.3.0/examples/KirigamiExample.qml
--- old/kquickimageeditor-0.2.0/examples/KirigamiExample.qml 2021-10-01
18:15:16.000000000 +0200
+++ new/kquickimageeditor-0.3.0/examples/KirigamiExample.qml 2023-11-02
17:00:24.000000000 +0100
@@ -27,72 +27,200 @@
Component {
id: editorComponent
+
Kirigami.Page {
id: rootEditorView
- title: i18n("Edit")
- leftPadding: 0
- rightPadding: 0
-
- Shortcut {
- sequence: StandardKey.Undo
- onActivated: undoAction.trigger();
- }
-
- Shortcut {
- sequences: [StandardKey.Save, "Enter"]
- onActivated: saveAction.trigger();
- }
-
- Shortcut {
- sequence: StandardKey.SaveAs
- onActivated: saveAsAction.trigger();
- }
property bool resizing: false;
- property string imagePath:
"/usr/share/wallpapers/Next/contents/images/5120x2880.jpg";
+ property string imagePath:
'/usr/share/wallpapers/Next/contents/images/5120x2880.jpg'
+
+ signal imageEdited();
+
+ title: "Edit"
+ leftPadding: 0
+ rightPadding: 0
+ topPadding: 0
+ bottomPadding: 0
function crop() {
- const ratioX = editImage.paintedWidth / editImage.nativeWidth;
- const ratioY = editImage.paintedHeight /
editImage.nativeHeight;
rootEditorView.resizing = false
- imageDoc.crop(resizeRectangle.insideX / ratioX,
resizeRectangle.insideY / ratioY, resizeRectangle.insideWidth / ratioX,
resizeRectangle.insideHeight / ratioY);
+ imageDoc.crop(selectionTool.selectionX / editImage.ratioX,
+ selectionTool.selectionY / editImage.ratioY,
+ selectionTool.selectionWidth / editImage.ratioX,
+ selectionTool.selectionHeight /
editImage.ratioY);
}
actions {
- right: Kirigami.Action {
+ main: Kirigami.Action {
+ id: saveAction
+ visible: imageDoc.edited
+ text: "Save"
+ iconName: "document-save"
+ onTriggered: {
+ if (!imageDoc.save()) {
+ msg.type = Kirigami.MessageType.Error
+ msg.text = "Unable to save file. Check if you have
the correct permission to edit this file."
+ msg.visible = true;
+ }
+ rootEditorView.imageEdited();
+ applicationWindow().pageStack.layers.pop();
+ }
+ }
+ left: Kirigami.Action {
id: undoAction
- text: i18nc("@action:button Undo modification", "Undo")
+ text: "Undo"
iconName: "edit-undo"
- onTriggered: imageDoc.undo();
+ onTriggered: {
+ if (imageDoc.edited) {
+ imageDoc.undo();
+ }
+ }
visible: imageDoc.edited
}
contextualActions: [
Kirigami.Action {
- id: saveAction
- text: i18nc("@action:button Save the image as a new
image", "Save As")
- iconName: "document-save-as"
- onTriggered: fileDialog.visible = true;
- },
- Kirigami.Action {
- id: saveAsAction
- text: i18nc("@action:button Save the image", "Save")
- iconName: "document-save"
- onTriggered: {
- if (!imageDoc.save()) {
- msg.type = Kirigami.MessageType.Error
- msg.text = i18n("Unable to save file. Check if
you have the correct permission to edit this file.")
- msg.visible = true;
- }
+ iconName: rootEditorView.resizing ? "dialog-ok" :
"transform-crop"
+ text: rootEditorView.resizing ? "Accept" : "Crop"
+ onTriggered: rootEditorView.resizing =
!rootEditorView.resizing;
+ },
+ Kirigami.Action {
+ iconName: "dialog-cancel"
+ visible: rootEditorView.resizing
+ text: "Cancel"
+ onTriggered: rootEditorView.resizing =
!rootEditorView.resizing
+ },
+ Kirigami.Action {
+ iconName: "object-rotate-left"
+ text: "Rotate left";
+ onTriggered: imageDoc.rotate(-90);
+ visible: !rootEditorView.resizing
+ },
+ Kirigami.Action {
+ iconName: "object-rotate-right"
+ text: "@action:button Rotate an image to the right",
"Rotate right";
+ onTriggered: imageDoc.rotate(90);
+ visible: !rootEditorView.resizing
+ },
+ Kirigami.Action {
+ iconName: "object-flip-vertical"
+ text: "Flip"
+ onTriggered: imageDoc.mirror(false, true);
+ visible: !rootEditorView.resizing
+ },
+ Kirigami.Action {
+ iconName: "object-flip-horizontal"
+ text: "Mirror"
+ onTriggered: imageDoc.mirror(true, false);
+ visible: !rootEditorView.resizing
+ },
+ Kirigami.Action {
+ visible: rootEditorView.resizing
+ displayComponent: QQC2.ToolSeparator {
+ leftPadding: Kirigami.Units.largeSpacing
+ rightPadding: leftPadding
+ }
+ },
+ Kirigami.Action {
+ visible: rootEditorView.resizing
+ displayComponent: QQC2.Label {
+ text: "Size:"
+ }
+ },
+ Kirigami.Action {
+ visible: rootEditorView.resizing
+ displayComponent: EditorSpinBox {
+ minimumContentWidth: widthTextMetrics.width
+ from: 1
+ to: editImage.nativeWidth
+ value: selectionTool.selectionWidth /
editImage.ratioX
+ onValueModified: selectionTool.selectionWidth =
value * editImage.ratioX
+ }
+ },
+ Kirigami.Action {
+ visible: rootEditorView.resizing
+ displayComponent: EditorSpinBox {
+ minimumContentWidth: heightTextMetrics.width
+ from: 1
+ to: editImage.nativeHeight
+ value: selectionTool.selectionHeight /
editImage.ratioY
+ onValueModified: selectionTool.selectionHeight =
value * editImage.ratioY
+ }
+ },
+ Kirigami.Action {
+ visible: rootEditorView.resizing
+ displayComponent: Item {
+ implicitWidth: Kirigami.Units.largeSpacing
+ }
+ },
+ Kirigami.Action {
+ visible: rootEditorView.resizing
+ displayComponent: QQC2.Label {
+ text: "Position:"
+ }
+ },
+ Kirigami.Action {
+ visible: rootEditorView.resizing
+ displayComponent: EditorSpinBox {
+ minimumContentWidth: widthTextMetrics.width
+ from: 0
+ to: editImage.nativeWidth -
(selectionTool.selectionWidth / editImage.ratioX)
+ value: selectionTool.selectionX / editImage.ratioX
+ onValueModified: selectionTool.selectionX = value
* editImage.ratioX
+ }
+ },
+ Kirigami.Action {
+ visible: rootEditorView.resizing
+ displayComponent: EditorSpinBox {
+ minimumContentWidth: heightTextMetrics.width
+ from: 0
+ to: editImage.nativeHeight -
(selectionTool.selectionHeight / editImage.ratioY)
+ value: selectionTool.selectionY / editImage.ratioY
+ onValueModified: selectionTool.selectionY = value
* editImage.ratioY
}
- visible: imageDoc.edited
}
]
}
+ TextMetrics {
+ id: widthTextMetrics
+ text:
editImage.nativeWidth.toLocaleString(rootEditorView.locale, 'f', 0)
+ }
+
+ TextMetrics {
+ id: heightTextMetrics
+ text:
editImage.nativeHeight.toLocaleString(rootEditorView.locale, 'f', 0)
+ }
+
+ component EditorSpinBox : QQC2.SpinBox {
+ id: control
+ property real minimumContentWidth: 0
+ contentItem: QQC2.TextField {
+ id: textField
+ implicitWidth: control.minimumContentWidth + leftPadding +
rightPadding + 2
+ implicitHeight: Math.ceil(contentHeight) + topPadding +
bottomPadding
+ palette: control.palette
+ leftPadding: control.spacing
+ rightPadding: control.spacing
+ topPadding: 0
+ bottomPadding: 0
+ text: control.displayText
+ font: control.font
+ color: Kirigami.Theme.textColor
+ selectionColor: Kirigami.Theme.highlightColor
+ selectedTextColor: Kirigami.Theme.highlightedTextColor
+ horizontalAlignment: Qt.AlignHCenter
+ verticalAlignment: Qt.AlignVCenter
+ readOnly: !control.editable
+ validator: control.validator
+ inputMethodHints: control.inputMethodHints
+ selectByMouse: true
+ background: null
+ }
+ }
FileDialog {
id: fileDialog
- title: i18n("Save As")
+ title: "Save As"
folder: shortcuts.home
selectMultiple: false
selectExisting: false
@@ -100,11 +228,11 @@
if (imageDoc.saveAs(fileDialog.fileUrl)) {;
imagePath = fileDialog.fileUrl;
msg.type = Kirigami.MessageType.Information
- msg.text = i18n("You are now editing a new file.")
+ msg.text = "You are now editing a new file."
msg.visible = true;
} else {
msg.type = Kirigami.MessageType.Error
- msg.text = i18n("Unable to save file. Check if you
have the correct permission to edit this file.")
+ msg.text = "Unable to save file. Check if you have the
correct permission to edit this file."
msg.visible = true;
}
fileDialog.close()
@@ -114,117 +242,75 @@
}
Component.onCompleted: visible = false
}
-
- KQuickImageEditor.ImageDocument {
- id: imageDoc
- path: rootEditorView.imagePath
- }
KQuickImageEditor.ImageItem {
id: editImage
+ readonly property real ratioX: editImage.paintedWidth /
editImage.nativeWidth;
+ readonly property real ratioY: editImage.paintedHeight /
editImage.nativeHeight;
+
+ // Assigning this to the contentItem and setting the padding
causes weird positioning issues
+ anchors.fill: parent
+ anchors.margins: Kirigami.Units.gridUnit
fillMode: KQuickImageEditor.ImageItem.PreserveAspectFit
image: imageDoc.image
- anchors.fill: parent
- }
- header: QQC2.ToolBar {
- contentItem: Kirigami.ActionToolBar {
- id: actionToolBar
- display: QQC2.Button.TextBesideIcon
- actions: [
- Kirigami.Action {
- iconName: rootEditorView.resizing ?
"dialog-cancel" : "transform-crop"
- text: rootEditorView.resizing ? i18n("Cancel") :
i18nc("@action:button Crop an image", "Crop");
- onTriggered: {
- console.log(editImage.verticalPadding);
- console.log(editImage.horizontalPadding);
- resizeRectangle.width = editImage.paintedWidth
- resizeRectangle.height =
editImage.paintedHeight
- resizeRectangle.x = 0
- resizeRectangle.y = editImage.verticalPadding
- resizeRectangle.insideX = 100
- resizeRectangle.insideY = 100
- resizeRectangle.insideWidth = 100
- resizeRectangle.insideHeight = 100
- rootEditorView.resizing =
!rootEditorView.resizing;
- }
- },
- Kirigami.Action {
- iconName: "dialog-ok"
- visible: rootEditorView.resizing
- text: i18nc("@action:button Rotate an image to the
right", "Crop");
- onTriggered: rootEditorView.crop();
- },
- Kirigami.Action {
- iconName: "object-rotate-left"
- text: i18nc("@action:button Rotate an image to the
left", "Rotate left");
- onTriggered: imageDoc.rotate(-90);
- visible: !rootEditorView.resizing
- },
- Kirigami.Action {
- iconName: "object-rotate-right"
- text: i18nc("@action:button Rotate an image to the
right", "Rotate right");
- onTriggered: imageDoc.rotate(90);
- visible: !rootEditorView.resizing
- },
- Kirigami.Action {
- iconName: "object-flip-vertical"
- text: i18nc("@action:button Mirror an image
vertically", "Flip");
- onTriggered: imageDoc.mirror(false, true);
- visible: !rootEditorView.resizing
- },
- Kirigami.Action {
- iconName: "object-flip-horizontal"
- text: i18nc("@action:button Mirror an image
horizontally", "Mirror");
- onTriggered: imageDoc.mirror(true, false);
- visible: !rootEditorView.resizing
+ Shortcut {
+ sequence: StandardKey.Undo
+ onActivated: undoAction.trigger();
+ }
+
+ Shortcut {
+ sequences: [StandardKey.Save, "Enter"]
+ onActivated: saveAction.trigger();
+ }
+
+ Shortcut {
+ sequence: StandardKey.SaveAs
+ onActivated: saveAsAction.trigger();
+ }
+
+ KQuickImageEditor.ImageDocument {
+ id: imageDoc
+ path: rootEditorView.imagePath
+ }
+
+ KQuickImageEditor.SelectionTool {
+ id: selectionTool
+ visible: rootEditorView.resizing
+ width: editImage.paintedWidth
+ height: editImage.paintedHeight
+ x: editImage.horizontalPadding
+ y: editImage.verticalPadding
+ KQuickImageEditor.CropBackground {
+ anchors.fill: parent
+ z: -1
+ insideX: selectionTool.selectionX
+ insideY: selectionTool.selectionY
+ insideWidth: selectionTool.selectionWidth
+ insideHeight: selectionTool.selectionHeight
+ }
+ Connections {
+ target: selectionTool.selectionArea
+ function onDoubleClicked() {
+ rootEditorView.crop()
}
- ]
+ }
+ }
+ onImageChanged: {
+ selectionTool.selectionX = 0
+ selectionTool.selectionY = 0
+ selectionTool.selectionWidth = Qt.binding(() =>
selectionTool.width)
+ selectionTool.selectionHeight = Qt.binding(() =>
selectionTool.height)
}
}
-
+
+
footer: Kirigami.InlineMessage {
id: msg
type: Kirigami.MessageType.Error
showCloseButton: true
visible: false
}
-
- KQuickImageEditor.ResizeRectangle {
- id: resizeRectangle
-
- visible: rootEditorView.resizing
-
- width: editImage.paintedWidth
- height: editImage.paintedHeight
- x: 0
- y: editImage.verticalPadding
-
- insideX: 100
- insideY: 100
- insideWidth: 100
- insideHeight: 100
-
- onAcceptSize: rootEditorView.crop();
-
- //resizeHandle: KQuickImageEditor.BasicResizeHandle { }
-
- /*Rectangle {
- radius: 2
- width: Kirigami.Units.gridUnit * 8
- height: Kirigami.Units.gridUnit * 3
- anchors.centerIn: parent
- Kirigami.Theme.colorSet: Kirigami.Theme.View
- color: Kirigami.Theme.backgroundColor
- QQC2.Label {
- anchors.centerIn: parent
- text: "x: " + (resizeRectangle.x -
rootEditorView.contentItem.width + editImage.paintedWidth)
- + " y: " + (resizeRectangle.y -
rootEditorView.contentItem.height + editImage.paintedHeight)
- + "\nwidth: " + resizeRectangle.width
- + " height: " + resizeRectangle.height
- }
- }*/
- }
}
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kquickimageeditor-0.2.0/src/CMakeLists.txt
new/kquickimageeditor-0.3.0/src/CMakeLists.txt
--- old/kquickimageeditor-0.2.0/src/CMakeLists.txt 2021-10-01
18:15:16.000000000 +0200
+++ new/kquickimageeditor-0.3.0/src/CMakeLists.txt 2023-11-02
17:00:24.000000000 +0100
@@ -2,57 +2,50 @@
#
# SPDX-License-Identifier: BSD-2-Clause
-set(
- sources
+ecm_add_qml_module(kquickimageeditorplugin URI "org.kde.kquickimageeditor"
VERSION 1.0)
+
+target_sources(kquickimageeditorplugin PRIVATE
code/commands/undocommand.cpp
+ code/commands/undocommand.h
code/commands/cropcommand.cpp
+ code/commands/cropcommand.h
code/commands/resizecommand.cpp
+ code/commands/resizecommand.h
code/commands/mirrorcommand.cpp
+ code/commands/mirrorcommand.h
code/commands/rotatecommand.cpp
+ code/commands/rotatecommand.h
code/kquickimageeditor_plugin.cpp
+ code/kquickimageeditor_plugin.h
code/resizehandle.cpp
+ code/resizehandle.h
code/resizerectangle.cpp
+ code/resizerectangle.h
code/imageitem.cpp
+ code/imageitem.h
code/imagedocument.cpp
- resources.qrc
- controls/qmldir
+ code/imagedocument.h
${kquickimageeditor_QM_LOADER}
)
-ecm_generate_qmltypes(org.kde.kquickimageeditor 1.0
- DESTINATION
${KDE_INSTALL_QMLDIR}/org/kde/kquickimageeditor)
-
-add_library(
- kquickimageeditorplugin
- SHARED
- ${sources}
+ecm_target_qml_sources(kquickimageeditorplugin SOURCES
+ controls/BasicResizeHandle.qml
+ controls/SelectionTool.qml
+ controls/qt${QT_MAJOR_VERSION}/SelectionHandle.qml
+ controls/SelectionBackground.qml
+ controls/CropBackground.qml
+ controls/RectangleCutout.qml
)
-target_link_libraries(
- kquickimageeditorplugin
+target_link_libraries(kquickimageeditorplugin
PRIVATE
- Qt5::Core
- Qt5::Quick
- Qt5::Qml
+ Qt${QT_MAJOR_VERSION}::Core
+ Qt${QT_MAJOR_VERSION}::Quick
+ Qt${QT_MAJOR_VERSION}::Qml
)
-if (BUILD_SHARED_LIBS)
- add_custom_target(copy_to_bin ALL
- COMMAND ${CMAKE_COMMAND} -E
- make_directory
${CMAKE_BINARY_DIR}/bin/org/kde/kquickimageeditor/
- COMMAND ${CMAKE_COMMAND} -E
- copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/controls
${CMAKE_BINARY_DIR}/bin/org/kde/kquickimageeditor/
- COMMAND ${CMAKE_COMMAND} -E
- copy $<TARGET_FILE:kquickimageeditorplugin>
${CMAKE_BINARY_DIR}/bin/org/kde/kquickimageeditor/
- )
-
- install(DIRECTORY controls/ DESTINATION
${KDE_INSTALL_QMLDIR}/org/kde/kquickimageeditor)
-
- include(ECMGeneratePriFile)
- ecm_generate_pri_file(BASE_NAME KQuickImageEditor LIB_NAME
KQuickImageEditor DEPS "core qml quick svg" FILENAME_VAR PRI_FILENAME )
- install(FILES ${PRI_FILENAME}
- DESTINATION ${ECM_MKSPECS_INSTALL_DIR})
-
-endif()
+ecm_finalize_qml_module(kquickimageeditorplugin DESTINATION
${KDE_INSTALL_QMLDIR})
-install(TARGETS kquickimageeditorplugin DESTINATION
${KDE_INSTALL_QMLDIR}/org/kde/kquickimageeditor )
+include(ECMGeneratePriFile)
+ecm_generate_pri_file(BASE_NAME KQuickImageEditor LIB_NAME KQuickImageEditor
DEPS "core qml quick svg" FILENAME_VAR PRI_FILENAME )
+install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kquickimageeditor-0.2.0/src/code/imageitem.cpp
new/kquickimageeditor-0.3.0/src/code/imageitem.cpp
--- old/kquickimageeditor-0.2.0/src/code/imageitem.cpp 2021-10-01
18:15:16.000000000 +0200
+++ new/kquickimageeditor-0.3.0/src/code/imageitem.cpp 2023-11-02
17:00:24.000000000 +0100
@@ -43,20 +43,6 @@
setImage(QImage());
}
-void ImageItem::setSmooth(const bool smooth)
-{
- if (smooth == m_smooth) {
- return;
- }
- m_smooth = smooth;
- update();
-}
-
-bool ImageItem::smooth() const
-{
- return m_smooth;
-}
-
int ImageItem::nativeWidth() const
{
return m_image.size().width() / m_image.devicePixelRatio();
@@ -90,8 +76,8 @@
return;
}
painter->save();
- painter->setRenderHint(QPainter::Antialiasing, m_smooth);
- painter->setRenderHint(QPainter::SmoothPixmapTransform, m_smooth);
+ painter->setRenderHint(QPainter::Antialiasing, smooth());
+ painter->setRenderHint(QPainter::SmoothPixmapTransform, smooth());
if (m_fillMode == TileVertically) {
painter->scale(width() / (qreal)m_image.width(), 1);
@@ -203,8 +189,14 @@
}
}
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
void ImageItem::geometryChanged(const QRectF &newGeometry, const QRectF
&oldGeometry)
{
QQuickPaintedItem::geometryChanged(newGeometry, oldGeometry);
+#else
+void ImageItem::geometryChange(const QRectF &newGeometry, const QRectF
&oldGeometry)
+{
+ QQuickPaintedItem::geometryChange(newGeometry, oldGeometry);
+#endif
updatePaintedRect();
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kquickimageeditor-0.2.0/src/code/imageitem.h
new/kquickimageeditor-0.3.0/src/code/imageitem.h
--- old/kquickimageeditor-0.2.0/src/code/imageitem.h 2021-10-01
18:15:16.000000000 +0200
+++ new/kquickimageeditor-0.3.0/src/code/imageitem.h 2023-11-02
17:00:24.000000000 +0100
@@ -15,7 +15,6 @@
Q_OBJECT
Q_PROPERTY(QImage image READ image WRITE setImage NOTIFY imageChanged
RESET resetImage)
- Q_PROPERTY(bool smooth READ smooth WRITE setSmooth)
Q_PROPERTY(int nativeWidth READ nativeWidth NOTIFY nativeWidthChanged)
Q_PROPERTY(int nativeHeight READ nativeHeight NOTIFY nativeHeightChanged)
Q_PROPERTY(int paintedWidth READ paintedWidth NOTIFY paintedWidthChanged)
@@ -43,9 +42,6 @@
QImage image() const;
void resetImage();
- void setSmooth(const bool smooth);
- bool smooth() const;
-
int nativeWidth() const;
int nativeHeight() const;
@@ -73,7 +69,11 @@
void horizontalPaddingChanged();
protected:
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
override;
+#else
+ void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)
override;
+#endif
private:
QImage m_image;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kquickimageeditor-0.2.0/src/code/resizerectangle.cpp
new/kquickimageeditor-0.3.0/src/code/resizerectangle.cpp
--- old/kquickimageeditor-0.2.0/src/code/resizerectangle.cpp 2021-10-01
18:15:16.000000000 +0200
+++ new/kquickimageeditor-0.3.0/src/code/resizerectangle.cpp 2023-11-02
17:00:24.000000000 +0100
@@ -155,7 +155,7 @@
node = new QSGGeometryNode;
geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(),
vertexCount, indexCount);
geometry->setIndexDataPattern(QSGGeometry::StaticPattern);
- geometry->setDrawingMode(GL_TRIANGLES);
+ geometry->setDrawingMode(QSGGeometry::DrawTriangles);
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/kquickimageeditor-0.2.0/src/controls/SelectionHandle.qml
new/kquickimageeditor-0.3.0/src/controls/SelectionHandle.qml
--- old/kquickimageeditor-0.2.0/src/controls/SelectionHandle.qml
2021-10-01 18:15:16.000000000 +0200
+++ new/kquickimageeditor-0.3.0/src/controls/SelectionHandle.qml
1970-01-01 01:00:00.000000000 +0100
@@ -1,120 +0,0 @@
-/* SPDX-FileCopyrightText: 2021 Noah Davis <[email protected]>
- * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR
LicenseRef-KDE-Accepted-LGPL
- */
-
-import QtQuick 2.15
-import QtGraphicalEffects 1.15
-import org.kde.kirigami 2.15 as Kirigami
-
-MouseArea {
- id: root
- enum Position {
- TopLeft, Top, TopRight,
- Left, Right,
- BottomLeft, Bottom, BottomRight,
- NPositions
- }
- required property Item target
- property int position: SelectionHandle.TopLeft
-
- readonly property bool leftSide: position === SelectionHandle.TopLeft
- || position === SelectionHandle.Left
- || position === SelectionHandle.BottomLeft
- readonly property bool rightSide: position === SelectionHandle.TopRight
- || position === SelectionHandle.Right
- || position === SelectionHandle.BottomRight
- readonly property bool topSide: position === SelectionHandle.TopLeft
- || position === SelectionHandle.Top
- || position === SelectionHandle.TopRight
- readonly property bool bottomSide: position === SelectionHandle.BottomLeft
- || position === SelectionHandle.Bottom
- || position === SelectionHandle.BottomRight
- readonly property bool horizontalOnly: position === SelectionHandle.Left
|| position === SelectionHandle.Right
- readonly property bool verticalOnly: position === SelectionHandle.Top ||
position === SelectionHandle.Bottom
- // Like forward slash
- readonly property bool forwardDiagonal: position ===
SelectionHandle.TopRight || position === SelectionHandle.BottomLeft
- // Like backward slash
- readonly property bool backwardDiagonal: position ===
SelectionHandle.TopLeft || position === SelectionHandle.BottomRight
-
- property bool lockX: false
- property bool lockY: false
-
- LayoutMirroring.enabled: false
- LayoutMirroring.childrenInherit: true
- anchors.horizontalCenter: if (!pressed && !lockX) {
- if (leftSide) {
- target.left
- } else if (verticalOnly) {
- target.horizontalCenter
- } else {
- target.right
- }
- }
- anchors.verticalCenter: if (!pressed && !lockY) {
- if (topSide) {
- target.top
- } else if (horizontalOnly) {
- target.verticalCenter
- } else {
- target.bottom
- }
- }
- implicitWidth: graphics.implicitWidth + Kirigami.Units.largeSpacing * 2
- implicitHeight: graphics.implicitHeight + Kirigami.Units.largeSpacing * 2
- width: verticalOnly ? target.width - implicitWidth : implicitWidth
- height: horizontalOnly ? target.height - implicitHeight : implicitHeight
- cursorShape: if (horizontalOnly) {
- Qt.SizeHorCursor
- } else if (verticalOnly) {
- Qt.SizeVerCursor
- } else if (forwardDiagonal) {
- // actually oriented like forward slash
- Qt.SizeBDiagCursor
- } else {
- // actually oriented like backward slash
- Qt.SizeFDiagCursor
- }
- drag {
- axis: if (horizontalOnly) {
- Drag.XAxis
- } else if (verticalOnly) {
- Drag.YAxis
- } else {
- Drag.XAndYAxis
- }
- target: pressed ? root : null
- minimumX: -width / 2
- maximumX: parent.width - width / 2
- minimumY: -height / 2
- maximumY: parent.height - height / 2
- threshold: 0
- }
- Rectangle {
- id: graphics
- visible: false
- implicitWidth: Kirigami.Units.gridUnit + Kirigami.Units.gridUnit % 2
- implicitHeight: Kirigami.Units.gridUnit + Kirigami.Units.gridUnit % 2
- anchors.centerIn: parent
- color: Kirigami.Theme.highlightColor
- radius: height / 2
- }
- // Has to be the same size as source
- Item {
- id: maskSource
- visible: false
- anchors.fill: graphics
- Rectangle {
- x: root.leftSide ? parent.width - width : 0
- y: root.topSide ? parent.height - height : 0
- width: root.forwardDiagonal || root.backwardDiagonal ||
root.horizontalOnly ? parent.width / 2 : parent.width
- height: root.forwardDiagonal || root.backwardDiagonal ||
root.verticalOnly ? parent.height / 2 : parent.height
- }
- }
- OpacityMask {
- anchors.fill: graphics
- cached: true
- invert: true
- source: graphics
- maskSource: maskSource
- }
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kquickimageeditor-0.2.0/src/controls/qmldir
new/kquickimageeditor-0.3.0/src/controls/qmldir
--- old/kquickimageeditor-0.2.0/src/controls/qmldir 2021-10-01
18:15:16.000000000 +0200
+++ new/kquickimageeditor-0.3.0/src/controls/qmldir 1970-01-01
01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-module org.kde.kquickimageeditor
-plugin kquickimageeditorplugin
-classname KQuickImageEditorPlugin
-typeinfo plugins.qmltypes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kquickimageeditor-0.2.0/src/controls/qmldir.license
new/kquickimageeditor-0.3.0/src/controls/qmldir.license
--- old/kquickimageeditor-0.2.0/src/controls/qmldir.license 2021-10-01
18:15:16.000000000 +0200
+++ new/kquickimageeditor-0.3.0/src/controls/qmldir.license 1970-01-01
01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-SPDX-FileCopyrightText: 2020 Carl Schwan <[email protected]>
-
-SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/kquickimageeditor-0.2.0/src/controls/qt5/SelectionHandle.qml
new/kquickimageeditor-0.3.0/src/controls/qt5/SelectionHandle.qml
--- old/kquickimageeditor-0.2.0/src/controls/qt5/SelectionHandle.qml
1970-01-01 01:00:00.000000000 +0100
+++ new/kquickimageeditor-0.3.0/src/controls/qt5/SelectionHandle.qml
2023-11-02 17:00:24.000000000 +0100
@@ -0,0 +1,120 @@
+/* SPDX-FileCopyrightText: 2021 Noah Davis <[email protected]>
+ * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR
LicenseRef-KDE-Accepted-LGPL
+ */
+
+import QtQuick 2.15
+import QtGraphicalEffects 1.15
+import org.kde.kirigami 2.15 as Kirigami
+
+MouseArea {
+ id: root
+ enum Position {
+ TopLeft, Top, TopRight,
+ Left, Right,
+ BottomLeft, Bottom, BottomRight,
+ NPositions
+ }
+ required property Item target
+ property int position: SelectionHandle.TopLeft
+
+ readonly property bool leftSide: position === SelectionHandle.TopLeft
+ || position === SelectionHandle.Left
+ || position === SelectionHandle.BottomLeft
+ readonly property bool rightSide: position === SelectionHandle.TopRight
+ || position === SelectionHandle.Right
+ || position === SelectionHandle.BottomRight
+ readonly property bool topSide: position === SelectionHandle.TopLeft
+ || position === SelectionHandle.Top
+ || position === SelectionHandle.TopRight
+ readonly property bool bottomSide: position === SelectionHandle.BottomLeft
+ || position === SelectionHandle.Bottom
+ || position === SelectionHandle.BottomRight
+ readonly property bool horizontalOnly: position === SelectionHandle.Left
|| position === SelectionHandle.Right
+ readonly property bool verticalOnly: position === SelectionHandle.Top ||
position === SelectionHandle.Bottom
+ // Like forward slash
+ readonly property bool forwardDiagonal: position ===
SelectionHandle.TopRight || position === SelectionHandle.BottomLeft
+ // Like backward slash
+ readonly property bool backwardDiagonal: position ===
SelectionHandle.TopLeft || position === SelectionHandle.BottomRight
+
+ property bool lockX: false
+ property bool lockY: false
+
+ LayoutMirroring.enabled: false
+ LayoutMirroring.childrenInherit: true
+ anchors.horizontalCenter: if (!pressed && !lockX) {
+ if (leftSide) {
+ target.left
+ } else if (verticalOnly) {
+ target.horizontalCenter
+ } else {
+ target.right
+ }
+ }
+ anchors.verticalCenter: if (!pressed && !lockY) {
+ if (topSide) {
+ target.top
+ } else if (horizontalOnly) {
+ target.verticalCenter
+ } else {
+ target.bottom
+ }
+ }
+ implicitWidth: graphics.implicitWidth + Kirigami.Units.largeSpacing * 2
+ implicitHeight: graphics.implicitHeight + Kirigami.Units.largeSpacing * 2
+ width: verticalOnly ? target.width - implicitWidth : implicitWidth
+ height: horizontalOnly ? target.height - implicitHeight : implicitHeight
+ cursorShape: if (horizontalOnly) {
+ Qt.SizeHorCursor
+ } else if (verticalOnly) {
+ Qt.SizeVerCursor
+ } else if (forwardDiagonal) {
+ // actually oriented like forward slash
+ Qt.SizeBDiagCursor
+ } else {
+ // actually oriented like backward slash
+ Qt.SizeFDiagCursor
+ }
+ drag {
+ axis: if (horizontalOnly) {
+ Drag.XAxis
+ } else if (verticalOnly) {
+ Drag.YAxis
+ } else {
+ Drag.XAndYAxis
+ }
+ target: pressed ? root : null
+ minimumX: -width / 2
+ maximumX: parent.width - width / 2
+ minimumY: -height / 2
+ maximumY: parent.height - height / 2
+ threshold: 0
+ }
+ Rectangle {
+ id: graphics
+ visible: false
+ implicitWidth: Kirigami.Units.gridUnit + Kirigami.Units.gridUnit % 2
+ implicitHeight: Kirigami.Units.gridUnit + Kirigami.Units.gridUnit % 2
+ anchors.centerIn: parent
+ color: Kirigami.Theme.highlightColor
+ radius: height / 2
+ }
+ // Has to be the same size as source
+ Item {
+ id: maskSource
+ visible: false
+ anchors.fill: graphics
+ Rectangle {
+ x: root.leftSide ? parent.width - width : 0
+ y: root.topSide ? parent.height - height : 0
+ width: root.forwardDiagonal || root.backwardDiagonal ||
root.horizontalOnly ? parent.width / 2 : parent.width
+ height: root.forwardDiagonal || root.backwardDiagonal ||
root.verticalOnly ? parent.height / 2 : parent.height
+ }
+ }
+ OpacityMask {
+ anchors.fill: graphics
+ cached: true
+ invert: true
+ source: graphics
+ maskSource: maskSource
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/kquickimageeditor-0.2.0/src/controls/qt6/SelectionHandle.qml
new/kquickimageeditor-0.3.0/src/controls/qt6/SelectionHandle.qml
--- old/kquickimageeditor-0.2.0/src/controls/qt6/SelectionHandle.qml
1970-01-01 01:00:00.000000000 +0100
+++ new/kquickimageeditor-0.3.0/src/controls/qt6/SelectionHandle.qml
2023-11-02 17:00:24.000000000 +0100
@@ -0,0 +1,120 @@
+/* SPDX-FileCopyrightText: 2021 Noah Davis <[email protected]>
+ * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR
LicenseRef-KDE-Accepted-LGPL
+ */
+
+import QtQuick 2.15
+import Qt5Compat.GraphicalEffects
+import org.kde.kirigami 2.15 as Kirigami
+
+MouseArea {
+ id: root
+ enum Position {
+ TopLeft, Top, TopRight,
+ Left, Right,
+ BottomLeft, Bottom, BottomRight,
+ NPositions
+ }
+ required property Item target
+ property int position: SelectionHandle.TopLeft
+
+ readonly property bool leftSide: position === SelectionHandle.TopLeft
+ || position === SelectionHandle.Left
+ || position === SelectionHandle.BottomLeft
+ readonly property bool rightSide: position === SelectionHandle.TopRight
+ || position === SelectionHandle.Right
+ || position === SelectionHandle.BottomRight
+ readonly property bool topSide: position === SelectionHandle.TopLeft
+ || position === SelectionHandle.Top
+ || position === SelectionHandle.TopRight
+ readonly property bool bottomSide: position === SelectionHandle.BottomLeft
+ || position === SelectionHandle.Bottom
+ || position === SelectionHandle.BottomRight
+ readonly property bool horizontalOnly: position === SelectionHandle.Left
|| position === SelectionHandle.Right
+ readonly property bool verticalOnly: position === SelectionHandle.Top ||
position === SelectionHandle.Bottom
+ // Like forward slash
+ readonly property bool forwardDiagonal: position ===
SelectionHandle.TopRight || position === SelectionHandle.BottomLeft
+ // Like backward slash
+ readonly property bool backwardDiagonal: position ===
SelectionHandle.TopLeft || position === SelectionHandle.BottomRight
+
+ property bool lockX: false
+ property bool lockY: false
+
+ LayoutMirroring.enabled: false
+ LayoutMirroring.childrenInherit: true
+ anchors.horizontalCenter: if (!pressed && !lockX) {
+ if (leftSide) {
+ target.left
+ } else if (verticalOnly) {
+ target.horizontalCenter
+ } else {
+ target.right
+ }
+ }
+ anchors.verticalCenter: if (!pressed && !lockY) {
+ if (topSide) {
+ target.top
+ } else if (horizontalOnly) {
+ target.verticalCenter
+ } else {
+ target.bottom
+ }
+ }
+ implicitWidth: graphics.implicitWidth + Kirigami.Units.largeSpacing * 2
+ implicitHeight: graphics.implicitHeight + Kirigami.Units.largeSpacing * 2
+ width: verticalOnly ? target.width - implicitWidth : implicitWidth
+ height: horizontalOnly ? target.height - implicitHeight : implicitHeight
+ cursorShape: if (horizontalOnly) {
+ Qt.SizeHorCursor
+ } else if (verticalOnly) {
+ Qt.SizeVerCursor
+ } else if (forwardDiagonal) {
+ // actually oriented like forward slash
+ Qt.SizeBDiagCursor
+ } else {
+ // actually oriented like backward slash
+ Qt.SizeFDiagCursor
+ }
+ drag {
+ axis: if (horizontalOnly) {
+ Drag.XAxis
+ } else if (verticalOnly) {
+ Drag.YAxis
+ } else {
+ Drag.XAndYAxis
+ }
+ target: pressed ? root : null
+ minimumX: -width / 2
+ maximumX: parent.width - width / 2
+ minimumY: -height / 2
+ maximumY: parent.height - height / 2
+ threshold: 0
+ }
+ Rectangle {
+ id: graphics
+ visible: false
+ implicitWidth: Kirigami.Units.gridUnit + Kirigami.Units.gridUnit % 2
+ implicitHeight: Kirigami.Units.gridUnit + Kirigami.Units.gridUnit % 2
+ anchors.centerIn: parent
+ color: Kirigami.Theme.highlightColor
+ radius: height / 2
+ }
+ // Has to be the same size as source
+ Item {
+ id: maskSource
+ visible: false
+ anchors.fill: graphics
+ Rectangle {
+ x: root.leftSide ? parent.width - width : 0
+ y: root.topSide ? parent.height - height : 0
+ width: root.forwardDiagonal || root.backwardDiagonal ||
root.horizontalOnly ? parent.width / 2 : parent.width
+ height: root.forwardDiagonal || root.backwardDiagonal ||
root.verticalOnly ? parent.height / 2 : parent.height
+ }
+ }
+ OpacityMask {
+ anchors.fill: graphics
+ cached: true
+ invert: true
+ source: graphics
+ maskSource: maskSource
+ }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/kquickimageeditor-0.2.0/src/resources.qrc
new/kquickimageeditor-0.3.0/src/resources.qrc
--- old/kquickimageeditor-0.2.0/src/resources.qrc 2021-10-01
18:15:16.000000000 +0200
+++ new/kquickimageeditor-0.3.0/src/resources.qrc 1970-01-01
01:00:00.000000000 +0100
@@ -1,15 +0,0 @@
-<!--
-SPDX-FileCopyrightText: (C) 2020 Carl Schwan <[email protected]>
-
-SPDX-License-Identifier: LGPL-2.1-or-later
--->
-<RCC>
- <qresource prefix="/">
- <file alias="BasicResizeHandle.qml">controls/BasicResizeHandle.qml</file>
- <file alias="SelectionTool.qml">controls/SelectionTool.qml</file>
- <file alias="SelectionHandle.qml">controls/SelectionHandle.qml</file>
- <file
alias="SelectionBackground.qml">controls/SelectionBackground.qml</file>
- <file alias="CropBackground.qml">controls/CropBackground.qml</file>
- <file alias="RectangleCutout.qml">controls/RectangleCutout.qml</file>
- </qresource>
-</RCC>
++++++ kquickimageeditor.keyring ++++++
Binary files /var/tmp/diff_new_pack.ZGK5va/_old and
/var/tmp/diff_new_pack.ZGK5va/_new differ