File indexing completed on 2024-06-23 04:27:53

0001 /*
0002  *  SPDX-FileCopyrightText: 2017 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef KISTEXTUREMASKINFO_H
0008 #define KISTEXTUREMASKINFO_H
0009 
0010 
0011 #include <kis_paint_device.h>
0012 #include <QSharedPointer>
0013 #include <QMutex>
0014 
0015 
0016 #include <boost/operators.hpp>
0017 
0018 #include <KoPattern.h>
0019 
0020 class KisTextureMaskInfo;
0021 class KisResourcesInterface;
0022 
0023 class KisTextureMaskInfo : public boost::equality_comparable<KisTextureMaskInfo>
0024 {
0025 public:
0026     KisTextureMaskInfo(int levelOfDetail, bool preserveAlpha);
0027     KisTextureMaskInfo(const KisTextureMaskInfo &rhs);
0028 
0029     ~KisTextureMaskInfo();
0030 
0031     friend bool operator==(const KisTextureMaskInfo &lhs, const KisTextureMaskInfo &rhs);
0032 
0033     KisTextureMaskInfo& operator=(const KisTextureMaskInfo &rhs);
0034 
0035     bool isValid() const;
0036 
0037     int levelOfDetail() const;
0038 
0039     bool hasMask() const;
0040 
0041     KisPaintDeviceSP mask();
0042 
0043     QRect maskBounds() const;
0044 
0045     bool fillProperties(const KisPropertiesConfiguration *setting, KisResourcesInterfaceSP resourcesInterface);
0046 
0047     void recalculateMask();
0048 
0049     bool hasAlpha();
0050 
0051 private:
0052     int m_levelOfDetail = 0;
0053     bool m_preserveAlpha = false;
0054 
0055     KoPatternSP m_pattern = 0;
0056 
0057     qreal m_scale = 1.0;
0058     qreal m_brightness = 0.0;
0059     qreal m_contrast = 1.0;
0060     qreal m_neutralPoint = 0.5;
0061     bool m_invert = false;
0062 
0063     int m_cutoffLeft = 0;
0064     int m_cutoffRight = 255;
0065     int m_cutoffPolicy = 0;
0066 
0067     KisPaintDeviceSP m_mask;
0068     QRect m_maskBounds;
0069 
0070 };
0071 
0072 typedef QSharedPointer<KisTextureMaskInfo> KisTextureMaskInfoSP;
0073 
0074 struct KisTextureMaskInfoCache
0075 {
0076     static KisTextureMaskInfoCache *instance();
0077     KisTextureMaskInfoSP fetchCachedTextureInfo(KisTextureMaskInfoSP info);
0078 
0079 private:
0080     QMutex m_mutex;
0081     QSharedPointer<KisTextureMaskInfo> m_lodInfo;
0082     QSharedPointer<KisTextureMaskInfo> m_mainInfo;
0083 };
0084 
0085 #endif // KISTEXTUREMASKINFO_H