File indexing completed on 2024-05-12 15:58:51

0001 /*
0002  *  SPDX-FileCopyrightText: 2018 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef KISIMAGESIGNALS_H
0008 #define KISIMAGESIGNALS_H
0009 
0010 #include <QVector>
0011 #include <QRectF>
0012 #include "kritaimage_export.h"
0013 #include "kis_types.h"
0014 
0015 enum KisImageSignalTypeEnum {
0016     LayersChangedSignal,
0017     ModifiedWithoutUndoSignal,
0018     SizeChangedSignal,
0019     ProfileChangedSignal,
0020     ColorSpaceChangedSignal,
0021     ResolutionChangedSignal,
0022     NodeReselectionRequestSignal
0023 };
0024 
0025 /**
0026  * A special signal which handles stillPoint capabilities of the image
0027  *
0028  * \see KisImage::sigSizeChanged()
0029  */
0030 struct KRITAIMAGE_EXPORT ComplexSizeChangedSignal {
0031     ComplexSizeChangedSignal();
0032     ComplexSizeChangedSignal(QPointF _oldStillPoint, QPointF _newStillPoint);
0033 
0034     /**
0035      * A helper method calculating the still points from image areas
0036      * we process. It works as if the source image was "cropped" by \p
0037      * portionOfOldImage, and this portion formed the new image of size
0038      * \p transformedIntoImageOfSize.
0039      *
0040      * Note, that \p portionOfTheImage may be equal to the image bounds().
0041      */
0042     ComplexSizeChangedSignal(const QRect &portionOfOldImage, const QSize &transformedIntoImageOfSize);
0043 
0044     ComplexSizeChangedSignal inverted() const;
0045 
0046     QPointF oldStillPoint;
0047     QPointF newStillPoint;
0048 };
0049 
0050 /**
0051  * A special signal which handles emitting signals for node reselection
0052  *
0053  * \see KisImage::sigRequestNodeReselection()
0054  */
0055 struct KRITAIMAGE_EXPORT ComplexNodeReselectionSignal {
0056     ComplexNodeReselectionSignal();
0057     ComplexNodeReselectionSignal(KisNodeSP _newActiveNode, KisNodeList _newSelectedNodes,
0058                                  KisNodeSP _oldActiveNode = KisNodeSP(), KisNodeList _oldSelectedNodes = KisNodeList());
0059 
0060     ComplexNodeReselectionSignal inverted() const;
0061 
0062     KisNodeSP newActiveNode;
0063     KisNodeList newSelectedNodes;
0064     KisNodeSP oldActiveNode;
0065     KisNodeList oldSelectedNodes;
0066 };
0067 
0068 struct KRITAIMAGE_EXPORT KisImageSignalType {
0069     KisImageSignalType();
0070     KisImageSignalType(KisImageSignalTypeEnum _id);
0071     KisImageSignalType(ComplexSizeChangedSignal signal);
0072     KisImageSignalType(ComplexNodeReselectionSignal signal);
0073 
0074     KisImageSignalType inverted() const;
0075 
0076     KisImageSignalTypeEnum id;
0077     ComplexSizeChangedSignal sizeChangedSignal;
0078     ComplexNodeReselectionSignal nodeReselectionSignal;
0079 };
0080 
0081 typedef QVector<KisImageSignalType> KisImageSignalVector;
0082 
0083 #endif // KISIMAGESIGNALS_H