Krita Source Code Documentation
Loading...
Searching...
No Matches
KisTransformComponents.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2025 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#include <QDebug>
8#include <kis_algebra_2d.h>
10
11namespace KisAlgebra2D {
12
18
19KisTransformComponents componentsForTransform(const QTransform &t)
20{
21 KisTransformComponents result;
22
24
26 !qFuzzyIsNull(m.dx) || !qFuzzyIsNull(m.dy));
27
28 result.setFlag(KisTransformComponent::Scale,
29 !qFuzzyCompare(m.scaleX, 1.0) || !qFuzzyCompare(m.scaleY, 1.0));
30
31 result.setFlag(KisTransformComponent::Shear,
33
34 result.setFlag(KisTransformComponent::Rotate,
36
37 result.setFlag(KisTransformComponent::Project,
38 !qFuzzyIsNull(m.proj[0]) || !qFuzzyIsNull(m.proj[1]) || !qFuzzyCompare(m.proj[2], 1.0));
39
40 return result;
41}
42
43KisTransformComponents compareTransformComponents(const QTransform &lhs, const QTransform &rhs)
44{
47
48 KisTransformComponents result;
49
50 if (qFuzzyCompare(m1.dx, m2.dx) && qFuzzyCompare(m1.dy, m2.dy)) {
52 }
53
54 if (qFuzzyCompare(m1.scaleX, m2.scaleX) && qFuzzyCompare(m1.scaleX, m2.scaleY)) {
55 result.setFlag(KisTransformComponent::Scale);
56 }
57
58 if (qFuzzyCompare(m1.shearXY, m2.shearXY)) {
59 result.setFlag(KisTransformComponent::Shear);
60 }
61
62 if (qFuzzyCompare(m1.angle, m2.angle)) {
63 result.setFlag(KisTransformComponent::Rotate);
64 }
65
66 if (qFuzzyCompare(m1.proj[0], m2.proj[0]) &&
67 qFuzzyCompare(m1.proj[1], m2.proj[1]) &&
68 qFuzzyCompare(m1.proj[2], m2.proj[2])) {
69
70 result.setFlag(KisTransformComponent::Project);
71 }
72
73 return result;
74}
75
76}
77
78QDebug operator<<(QDebug dbg, KisAlgebra2D::KisTransformComponent component) {
79 switch (component) {
81 dbg << "KisTransformComponent::Translate";
82 break;
84 dbg << "KisTransformComponent::Scale";
85 break;
87 dbg << "KisTransformComponent::Rotate";
88 break;
90 dbg << "KisTransformComponent::Shear";
91 break;
93 dbg << "KisTransformComponent::Project";
94 break;
95 default:
96 dbg << "<unknown>";
97 break;
98 }
99 return dbg;
100}
101
102QDebug operator<<(QDebug dbg, KisAlgebra2D::KisTransformComponents components) {
103 dbg.nospace() << "KisTransformComponents(";
104
105 bool first = true;
106 if (components.testFlag(KisAlgebra2D::KisTransformComponent::Translate)) {
107 dbg.nospace() << (first ? "" : " | ") << "Translate";
108 first = false;
109 }
110 if (components.testFlag(KisAlgebra2D::KisTransformComponent::Scale)) {
111 dbg.nospace() << (first ? "" : " | ") << "Scale";
112 first = false;
113 }
114 if (components.testFlag(KisAlgebra2D::KisTransformComponent::Rotate)) {
115 dbg.nospace() << (first ? "" : " | ") << "Rotate";
116 first = false;
117 }
118 if (components.testFlag(KisAlgebra2D::KisTransformComponent::Shear)) {
119 dbg.nospace() << (first ? "" : " | ") << "Shear";
120 first = false;
121 }
122 if (components.testFlag(KisAlgebra2D::KisTransformComponent::Project)) {
123 dbg.nospace() << (first ? "" : " | ") << "Project";
124 first = false;
125 }
126
127 dbg.nospace() << ")";
128 return dbg.space();
129}
QDebug operator<<(QDebug dbg, KisAlgebra2D::KisTransformComponent component)
static bool qFuzzyCompare(half p1, half p2)
static bool qFuzzyIsNull(half h)
KisTransformComponents compareTransformComponents(const QTransform &lhs, const QTransform &rhs)
KisTransformComponents makeFullTransformComponents()
KisTransformComponents componentsForTransform(const QTransform &t)