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

0001 /*
0002  *  SPDX-FileCopyrightText: 2002 Patrick Julien <freak@codepimps.org>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #ifndef KISTYPES_H_
0007 #define KISTYPES_H_
0008 
0009 #include <QVector>
0010 #include <QPoint>
0011 #include <QList>
0012 
0013 #include "kritaimage_export.h"
0014 
0015 template<class T>
0016 class KisWeakSharedPtr;
0017 template<class T>
0018 class KisSharedPtr;
0019 
0020 template<class T> class QSharedPointer;
0021 template<class T> class QWeakPointer;
0022 
0023 template <class T>
0024 uint qHash(KisSharedPtr<T> ptr) {
0025     return qHash(ptr.data());
0026 }
0027 
0028 template <class T>
0029 uint qHash(KisWeakSharedPtr<T> ptr) {
0030     return qHash(ptr.data());
0031 }
0032 
0033 namespace std {
0034 template <class T>
0035 struct hash<KisSharedPtr<T>>
0036 {
0037     size_t operator()(const KisSharedPtr<T> &ptr) const {
0038         return hash<const T*>()(ptr.data());
0039     }
0040 };
0041 
0042 template <class T>
0043 struct hash<KisWeakSharedPtr<T>>
0044 {
0045     size_t operator()(const KisWeakSharedPtr<T> &ptr) const {
0046         return hash<const T*>()(ptr.data());
0047     }
0048 };
0049 
0050 }
0051 
0052 
0053 /**
0054  * Define lots of shared pointer versions of Krita classes.
0055  * Shared pointer classes have the advantage of near automatic
0056  * memory management (but beware of circular references)
0057  * These types should never be passed by reference,
0058  * because that will mess up their reference counter.
0059  *
0060  * An example of the naming pattern used:
0061  *
0062  * KisPaintDeviceSP is a KisSharedPtr of KisPaintDevice
0063  * KisPaintDeviceWSP is a KisWeakSharedPtr of KisPaintDevice
0064  * vKisPaintDeviceSP is a QVector of KisPaintDeviceSP
0065  * vKisPaintDeviceSP_it is an iterator of vKisPaintDeviceSP
0066  *
0067  */
0068 class KisImage;
0069 typedef KisSharedPtr<KisImage> KisImageSP;
0070 typedef KisWeakSharedPtr<KisImage> KisImageWSP;
0071 
0072 class KisPaintDevice;
0073 typedef KisSharedPtr<KisPaintDevice> KisPaintDeviceSP;
0074 typedef KisWeakSharedPtr<KisPaintDevice> KisPaintDeviceWSP;
0075 typedef QVector<KisPaintDeviceSP> vKisPaintDeviceSP;
0076 typedef vKisPaintDeviceSP::iterator vKisPaintDeviceSP_it;
0077 
0078 class KisFixedPaintDevice;
0079 typedef KisSharedPtr<KisFixedPaintDevice> KisFixedPaintDeviceSP;
0080 
0081 class KisMask;
0082 typedef KisSharedPtr<KisMask> KisMaskSP;
0083 typedef KisWeakSharedPtr<KisMask> KisMaskWSP;
0084 
0085 class KisNode;
0086 typedef KisSharedPtr<KisNode> KisNodeSP;
0087 typedef KisWeakSharedPtr<KisNode> KisNodeWSP;
0088 typedef QVector<KisNodeSP> vKisNodeSP;
0089 typedef vKisNodeSP::iterator vKisNodeSP_it;
0090 typedef vKisNodeSP::const_iterator vKisNodeSP_cit;
0091 
0092 class KisBaseNode;
0093 typedef KisSharedPtr<KisBaseNode> KisBaseNodeSP;
0094 typedef KisWeakSharedPtr<KisBaseNode> KisBaseNodeWSP;
0095 
0096 class KisEffectMask;
0097 typedef KisSharedPtr<KisEffectMask> KisEffectMaskSP;
0098 typedef KisWeakSharedPtr<KisEffectMask> KisEffectMaskWSP;
0099 
0100 class KisFilterMask;
0101 typedef KisSharedPtr<KisFilterMask> KisFilterMaskSP;
0102 typedef KisWeakSharedPtr<KisFilterMask> KisFilterMaskWSP;
0103 
0104 class KisTransformMask;
0105 typedef KisSharedPtr<KisTransformMask> KisTransformMaskSP;
0106 typedef KisWeakSharedPtr<KisTransformMask> KisTransformMaskWSP;
0107 
0108 class KisTransformMaskParamsInterface;
0109 typedef QSharedPointer<KisTransformMaskParamsInterface> KisTransformMaskParamsInterfaceSP;
0110 typedef QWeakPointer<KisTransformMaskParamsInterface> KisTransformMaskParamsInterfaceWSP;
0111 
0112 class KisTransparencyMask;
0113 typedef KisSharedPtr<KisTransparencyMask> KisTransparencyMaskSP;
0114 typedef KisWeakSharedPtr<KisTransparencyMask> KisTransparencyMaskWSP;
0115 
0116 class KisColorizeMask;
0117 typedef KisSharedPtr<KisColorizeMask> KisColorizeMaskSP;
0118 typedef KisWeakSharedPtr<KisColorizeMask> KisColorizeMaskWSP;
0119 
0120 class KisLayer;
0121 typedef KisSharedPtr<KisLayer> KisLayerSP;
0122 typedef KisWeakSharedPtr<KisLayer> KisLayerWSP;
0123 
0124 class KisShapeLayer;
0125 typedef KisSharedPtr<KisShapeLayer> KisShapeLayerSP;
0126 
0127 class KisPaintLayer;
0128 typedef KisSharedPtr<KisPaintLayer> KisPaintLayerSP;
0129 
0130 class KisAdjustmentLayer;
0131 typedef KisSharedPtr<KisAdjustmentLayer> KisAdjustmentLayerSP;
0132 
0133 class KisGeneratorLayer;
0134 typedef KisSharedPtr<KisGeneratorLayer> KisGeneratorLayerSP;
0135 
0136 class KisCloneLayer;
0137 typedef KisSharedPtr<KisCloneLayer> KisCloneLayerSP;
0138 typedef KisWeakSharedPtr<KisCloneLayer> KisCloneLayerWSP;
0139 
0140 class KisGroupLayer;
0141 typedef KisSharedPtr<KisGroupLayer> KisGroupLayerSP;
0142 typedef KisWeakSharedPtr<KisGroupLayer> KisGroupLayerWSP;
0143 
0144 class KisFileLayer;
0145 typedef KisSharedPtr<KisFileLayer> KisFileLayerSP;
0146 typedef KisWeakSharedPtr<KisFileLayer> KisFileLayerWSP;
0147 
0148 class KisSelection;
0149 typedef KisSharedPtr<KisSelection> KisSelectionSP;
0150 typedef KisWeakSharedPtr<KisSelection> KisSelectionWSP;
0151 
0152 class KisSelectionComponent;
0153 typedef KisSharedPtr<KisSelectionComponent> KisSelectionComponentSP;
0154 
0155 class KisSelectionMask;
0156 typedef KisSharedPtr<KisSelectionMask> KisSelectionMaskSP;
0157 
0158 class KisPixelSelection;
0159 typedef KisSharedPtr<KisPixelSelection> KisPixelSelectionSP;
0160 
0161 class KisHistogram;
0162 typedef KisSharedPtr<KisHistogram> KisHistogramSP;
0163 
0164 typedef QVector<QPoint> vKisSegments;
0165 
0166 class KisFilter;
0167 typedef KisSharedPtr<KisFilter> KisFilterSP;
0168 
0169 class KisLayerStyleFilter;
0170 typedef KisSharedPtr<KisLayerStyleFilter> KisLayerStyleFilterSP;
0171 
0172 class KisGenerator;
0173 typedef KisSharedPtr<KisGenerator> KisGeneratorSP;
0174 
0175 class KisConvolutionKernel;
0176 typedef KisSharedPtr<KisConvolutionKernel> KisConvolutionKernelSP;
0177 
0178 class KisAnnotation;
0179 typedef KisSharedPtr<KisAnnotation> KisAnnotationSP;
0180 typedef QVector<KisAnnotationSP> vKisAnnotationSP;
0181 typedef vKisAnnotationSP::iterator vKisAnnotationSP_it;
0182 typedef vKisAnnotationSP::const_iterator vKisAnnotationSP_cit;
0183 
0184 class KisAnimationFrameCache;
0185 typedef KisSharedPtr<KisAnimationFrameCache> KisAnimationFrameCacheSP;
0186 typedef KisWeakSharedPtr<KisAnimationFrameCache> KisAnimationFrameCacheWSP;
0187 
0188 class KisPaintingAssistant;
0189 typedef QSharedPointer<KisPaintingAssistant> KisPaintingAssistantSP;
0190 typedef QWeakPointer<KisPaintingAssistant> KisPaintingAssistantWSP;
0191 
0192 class KisReferenceImage;
0193 typedef QSharedPointer<KisReferenceImage> KisReferenceImageSP;
0194 typedef QWeakPointer<KisReferenceImage> KisReferenceImageWSP;
0195 
0196 // Repeat iterators
0197 class KisHLineIterator2;
0198 template<class T> class KisRepeatHLineIteratorPixelBase;
0199 typedef KisRepeatHLineIteratorPixelBase< KisHLineIterator2 > KisRepeatHLineConstIteratorNG;
0200 typedef KisSharedPtr<KisRepeatHLineConstIteratorNG> KisRepeatHLineConstIteratorSP;
0201 
0202 class KisVLineIterator2;
0203 template<class T> class KisRepeatVLineIteratorPixelBase;
0204 typedef KisRepeatVLineIteratorPixelBase< KisVLineIterator2 > KisRepeatVLineConstIteratorNG;
0205 typedef KisSharedPtr<KisRepeatVLineConstIteratorNG> KisRepeatVLineConstIteratorSP;
0206 
0207 
0208 // NG Iterators
0209 class KisHLineIteratorNG;
0210 typedef KisSharedPtr<KisHLineIteratorNG> KisHLineIteratorSP;
0211 
0212 class KisHLineConstIteratorNG;
0213 typedef KisSharedPtr<KisHLineConstIteratorNG> KisHLineConstIteratorSP;
0214 
0215 class KisVLineIteratorNG;
0216 typedef KisSharedPtr<KisVLineIteratorNG> KisVLineIteratorSP;
0217 
0218 class KisVLineConstIteratorNG;
0219 typedef KisSharedPtr<KisVLineConstIteratorNG> KisVLineConstIteratorSP;
0220 
0221 class KisRandomConstAccessorNG;
0222 typedef KisSharedPtr<KisRandomConstAccessorNG> KisRandomConstAccessorSP;
0223 
0224 class KisRandomAccessorNG;
0225 typedef KisSharedPtr<KisRandomAccessorNG> KisRandomAccessorSP;
0226 
0227 class KisRandomSubAccessor;
0228 typedef KisSharedPtr<KisRandomSubAccessor> KisRandomSubAccessorSP;
0229 
0230 // Things
0231 
0232 typedef QVector<QPointF> vQPointF;
0233 
0234 class KisPaintOpPreset;
0235 typedef QSharedPointer<KisPaintOpPreset> KisPaintOpPresetSP;
0236 typedef QWeakPointer<KisPaintOpPreset> KisPaintOpPresetWSP;
0237 
0238 template <typename T>
0239 class KisPinnedSharedPtr;
0240 
0241 class KisPaintOpSettings;
0242 typedef KisPinnedSharedPtr<KisPaintOpSettings> KisPaintOpSettingsSP;
0243 
0244 template <typename T>
0245 class KisRestrictedSharedPtr;
0246 typedef KisRestrictedSharedPtr<KisPaintOpSettings> KisPaintOpSettingsRestrictedSP;
0247 
0248 class KisPaintOp;
0249 typedef KisSharedPtr<KisPaintOp> KisPaintOpSP;
0250 
0251 class KoID;
0252 typedef QList<KoID> KoIDList;
0253 
0254 class KoUpdater;
0255 template<class T> class QPointer;
0256 typedef QPointer<KoUpdater> KoUpdaterPtr;
0257 
0258 class KisProcessingVisitor;
0259 typedef KisSharedPtr<KisProcessingVisitor> KisProcessingVisitorSP;
0260 
0261 class KUndo2Command;
0262 typedef QSharedPointer<KUndo2Command> KUndo2CommandSP;
0263 
0264 typedef QList<KisNodeSP> KisNodeList;
0265 typedef QSharedPointer<KisNodeList> KisNodeListSP;
0266 
0267 typedef QList<KisPaintDeviceSP> KisPaintDeviceList;
0268 
0269 class KisStroke;
0270 typedef QSharedPointer<KisStroke> KisStrokeSP;
0271 typedef QWeakPointer<KisStroke> KisStrokeWSP;
0272 typedef KisStrokeWSP KisStrokeId;
0273 
0274 class KisFilterConfiguration;
0275 typedef KisPinnedSharedPtr<KisFilterConfiguration> KisFilterConfigurationSP;
0276 
0277 class KisPropertiesConfiguration;
0278 typedef KisPinnedSharedPtr<KisPropertiesConfiguration> KisPropertiesConfigurationSP;
0279 
0280 class KisLockedProperties;
0281 typedef KisSharedPtr<KisLockedProperties> KisLockedPropertiesSP;
0282 
0283 class KisProjectionUpdatesFilter;
0284 typedef QSharedPointer<KisProjectionUpdatesFilter> KisProjectionUpdatesFilterSP;
0285 using KisProjectionUpdatesFilterCookie = void*;
0286 
0287 class KisAbstractProjectionPlane;
0288 typedef QSharedPointer<KisAbstractProjectionPlane> KisAbstractProjectionPlaneSP;
0289 typedef QWeakPointer<KisAbstractProjectionPlane> KisAbstractProjectionPlaneWSP;
0290 
0291 class KisProjectionLeaf;
0292 typedef QSharedPointer<KisProjectionLeaf> KisProjectionLeafSP;
0293 typedef QWeakPointer<KisProjectionLeaf> KisProjectionLeafWSP;
0294 
0295 class KisKeyframe;
0296 typedef QSharedPointer<KisKeyframe> KisKeyframeSP;
0297 typedef QWeakPointer<KisKeyframe> KisKeyframeWSP;
0298 
0299 class KisScalarKeyframe;
0300 typedef QSharedPointer<KisScalarKeyframe> KisScalarKeyframeSP;
0301 typedef QWeakPointer<KisScalarKeyframe> KisScalarKeyframeWSP;
0302 
0303 class KisRasterKeyframe;
0304 typedef QSharedPointer<KisRasterKeyframe> KisRasterKeyframeSP;
0305 typedef QWeakPointer<KisRasterKeyframe> KisRasterKeyframeWSP;
0306 
0307 class KisFilterChain;
0308 typedef KisSharedPtr<KisFilterChain> KisFilterChainSP;
0309 
0310 class KisProofingConfiguration;
0311 typedef QSharedPointer<KisProofingConfiguration> KisProofingConfigurationSP;
0312 typedef QWeakPointer<KisProofingConfiguration> KisProofingConfigurationWSP;
0313 
0314 class KisLayerComposition;
0315 typedef QSharedPointer<KisLayerComposition> KisLayerCompositionSP;
0316 typedef QWeakPointer<KisLayerComposition> KisLayerCompositionWSP;
0317 
0318 class KisMirrorAxis;
0319 typedef KisSharedPtr<KisMirrorAxis> KisMirrorAxisSP;
0320 typedef KisWeakSharedPtr<KisMirrorAxis> KisMirrorAxisWSP;
0321 
0322 class StoryboardItem;
0323 typedef QSharedPointer<StoryboardItem> StoryboardItemSP;
0324 typedef QVector<StoryboardItemSP> StoryboardItemList;
0325 
0326 class StoryboardComment;
0327 typedef QVector<StoryboardComment> StoryboardCommentList;
0328 
0329 #include <QSharedPointer>
0330 #include <QWeakPointer>
0331 #include <kis_shared_ptr.h>
0332 #include <kis_restricted_shared_ptr.h>
0333 #include <kis_pinned_shared_ptr.h>
0334 
0335 #endif // KISTYPES_H_
0336