Krita Source Code Documentation
Loading...
Searching...
No Matches
transform_transaction_properties.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2013 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef __TRANSFORM_TRANSACTION_PROPERTIES_H
8#define __TRANSFORM_TRANSACTION_PROPERTIES_H
9
10#include <QRectF>
11#include <QPointF>
12#include "kis_node.h"
13#include "kis_layer_utils.h"
15#include "kis_transform_mask.h"
16
18
20{
21public:
25
36 {
37 m_hasInvisibleNodes = false;
38 Q_FOREACH (KisNodeSP node, transformedNodes) {
39 if (KisExternalLayer *extLayer = dynamic_cast<KisExternalLayer*>(node.data())) {
40 if (!extLayer->supportsPerspectiveTransform()) {
42 break;
43 }
44 }
45 if (dynamic_cast<const KisTransformMask*>(node.data())) {
47 }
48
49 m_hasInvisibleNodes |= !node->visible(false);
50 }
51 }
52
53 qreal originalHalfWidth() const {
54 return m_originalRect.width() / 2.0;
55 }
56
57 qreal originalHalfHeight() const {
58 return m_originalRect.height() / 2.0;
59 }
60
61 QRectF originalRect() const {
62 return m_originalRect;
63 }
64
65 QPointF originalCenterGeometric() const {
66 return m_originalRect.center();
67 }
68
69 QPointF originalTopLeft() const {
70 return m_originalRect.topLeft();
71 }
72
73 QPointF originalBottomLeft() const {
74 return m_originalRect.bottomLeft();
75 }
76
77 QPointF originalBottomRight() const {
78 return m_originalRect.bottomRight();
79 }
80
81 QPointF originalTopRight() const {
82 return m_originalRect.topRight();
83 }
84
85 QPointF originalMiddleLeft() const {
86 return QPointF(m_originalRect.left(), (m_originalRect.top() + m_originalRect.bottom()) / 2.0);
87 }
88
89 QPointF originalMiddleRight() const {
90 return QPointF(m_originalRect.right(), (m_originalRect.top() + m_originalRect.bottom()) / 2.0);
91 }
92
93 QPointF originalMiddleTop() const {
94 return QPointF((m_originalRect.left() + m_originalRect.right()) / 2.0, m_originalRect.top());
95 }
96
97 QPointF originalMiddleBottom() const {
98 return QPointF((m_originalRect.left() + m_originalRect.right()) / 2.0, m_originalRect.bottom());
99 }
100
101 QPoint originalTopLeftAligned() const {
102 return m_originalRect.toAlignedRect().topLeft();
103 }
104
106 return m_originalRect.toAlignedRect().bottomRight();
107 }
108
110 return m_currentConfig;
111 }
112
114 return m_rootNodes;
115 }
116
120
121 qreal basePreviewOpacity() const {
122 // Todo: this doesn't work for multiple layers
123 return 0.9 * qreal(m_rootNodes[0]->opacity()) / 255.0;
124 }
125
126 const QPolygonF convexHull() {
127 return m_convexHull;
128 }
129
133
137
138 bool hasInvisibleNodes() const {
139 return m_hasInvisibleNodes;
140 }
141
144 }
145
147 m_currentConfig = config;
148 }
149
150 void setConvexHull(const QPolygonF &hull) {
151 m_convexHull = hull;
152 }
153
157
158private:
167 QPolygonF m_convexHull;
172};
173
174#endif /* __TRANSFORM_TRANSACTION_PROPERTIES_H */
void setCurrentConfigLocation(ToolTransformArgs *config)
TransformTransactionProperties(const QRectF &originalRect, ToolTransformArgs *currentConfig, KisNodeList rootNodes, const QList< KisNodeSP > &transformedNodes)
virtual bool visible(bool recursive=false) const