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

0001 /*
0002  *  SPDX-FileCopyrightText: 2010 Boudewijn Rempt <boud@valdyas.org>
0003  *  SPDX-FileCopyrightText: 2010 Dmitry Kazakov <dimula73@gmail.com>
0004  *
0005  *  SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 #ifndef KIS_DEFAULT_BOUNDS_H
0008 #define KIS_DEFAULT_BOUNDS_H
0009 
0010 #include <QRect>
0011 #include "kis_types.h"
0012 #include "kis_default_bounds_base.h"
0013 
0014 class KisDefaultBounds;
0015 class KisSelectionDefaultBounds;
0016 class KisSelectionEmptyBounds;
0017 class KisWrapAroundBoundsWrapper;
0018 typedef KisSharedPtr<KisDefaultBounds> KisDefaultBoundsSP;
0019 typedef KisSharedPtr<KisSelectionDefaultBounds> KisSelectionDefaultBoundsSP;
0020 typedef KisSharedPtr<KisSelectionEmptyBounds> KisSelectionEmptyBoundsSP;
0021 typedef KisSharedPtr<KisWrapAroundBoundsWrapper> KisWrapAroundBoundsWrapperSP;
0022 
0023 class KRITAIMAGE_EXPORT KisDefaultBounds :  public KisDefaultBoundsBase
0024 {
0025 public:
0026     KisDefaultBounds();
0027     KisDefaultBounds(KisImageWSP image);
0028     ~KisDefaultBounds() override;
0029 
0030     QRect bounds() const override;
0031     bool wrapAroundMode() const override;
0032     int currentLevelOfDetail() const override;
0033     int currentTime() const override;
0034     bool externalFrameActive() const override;
0035     void * sourceCookie() const override;
0036 
0037 protected:
0038     friend class KisPaintDeviceTest;
0039     static const QRect infiniteRect;
0040 
0041 private:
0042     Q_DISABLE_COPY(KisDefaultBounds)
0043 
0044     struct Private;
0045     Private * const m_d;
0046 };
0047 
0048 class KRITAIMAGE_EXPORT KisSelectionDefaultBounds : public KisDefaultBoundsBase
0049 {
0050 public:
0051     KisSelectionDefaultBounds(KisPaintDeviceSP parentPaintDevice);
0052     ~KisSelectionDefaultBounds() override;
0053 
0054     QRect bounds() const override;
0055     QRect imageBorderRect() const override;
0056     bool wrapAroundMode() const override;
0057     int currentLevelOfDetail() const override;
0058     int currentTime() const override;
0059     bool externalFrameActive() const override;
0060     void * sourceCookie() const override;
0061 
0062 private:
0063     Q_DISABLE_COPY(KisSelectionDefaultBounds)
0064 
0065     struct Private;
0066     Private * const m_d;
0067 };
0068 
0069 class KRITAIMAGE_EXPORT KisSelectionEmptyBounds : public KisDefaultBounds
0070 {
0071 public:
0072     KisSelectionEmptyBounds(KisImageWSP image);
0073     ~KisSelectionEmptyBounds() override;
0074     QRect bounds() const override;
0075 };
0076 
0077 /**
0078  * @brief The KisWrapAroundBoundsWrapper class
0079  * wrapper around a KisDefaultBoundsBaseSP to enable
0080  * wraparound. Used for patterns.
0081  */
0082 class KRITAIMAGE_EXPORT KisWrapAroundBoundsWrapper :  public KisDefaultBoundsBase
0083 {
0084 public:
0085     KisWrapAroundBoundsWrapper(KisDefaultBoundsBaseSP base, QRect bounds);
0086     ~KisWrapAroundBoundsWrapper() override;
0087 
0088     QRect bounds() const override;
0089     bool wrapAroundMode() const override;
0090     int currentLevelOfDetail() const override;
0091     int currentTime() const override;
0092     bool externalFrameActive() const override;
0093     void * sourceCookie() const override;
0094 
0095 protected:
0096     friend class KisPaintDeviceTest;
0097 
0098 private:
0099     Q_DISABLE_COPY(KisWrapAroundBoundsWrapper)
0100 
0101     struct Private;
0102     const QScopedPointer<Private> m_d;
0103 };
0104 
0105 #endif // KIS_DEFAULT_BOUNDS_H