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