File indexing completed on 2024-05-12 16:34:27

0001 /* This file is part of the KDE project
0002  * Copyright (c) 2009 Jan Hambrecht <jaham@gmx.net>
0003  *
0004  * This library is free software; you can redistribute it and/or
0005  * modify it under the terms of the GNU Lesser General Public
0006  * License as published by the Free Software Foundation; either
0007  * version 2.1 of the License, or (at your option) any later version.
0008  *
0009  * This library is distributed in the hope that it will be useful,
0010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0012  * Library General Public License for more details.
0013  *
0014  * You should have received a copy of the GNU Lesser General Public License
0015  * along with this library; see the file COPYING.LIB.  If not, write to
0016  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0017  * Boston, MA 02110-1301, USA.
0018  */
0019 
0020 #ifndef COLORMATRIXEFFECT_H
0021 #define COLORMATRIXEFFECT_H
0022 
0023 #include "KoFilterEffect.h"
0024 #include <QVector>
0025 
0026 #define ColorMatrixEffectId "feColorMatrix"
0027 
0028 /// A color matrix effect
0029 class ColorMatrixEffect : public KoFilterEffect
0030 {
0031 public:
0032     enum Type {
0033         Matrix,
0034         Saturate,
0035         HueRotate,
0036         LuminanceAlpha
0037     };
0038 
0039     ColorMatrixEffect();
0040 
0041     /// Returns the type of the color matrix
0042     Type type() const;
0043 
0044     /// Returns the size of the color matrix
0045     static int colorMatrixSize();
0046 
0047     /// Returns the row count of the color matrix
0048     static int colorMatrixRowCount();
0049 
0050     /// Returns the column count of the color matrix
0051     static int colorMatrixColumnCount();
0052 
0053     QVector<qreal> colorMatrix() const;
0054 
0055     /// Sets a color matrix and changes type to Matrix
0056     void setColorMatrix(const QVector<qreal> &matrix);
0057 
0058     /// Sets a saturate value and changes type to Saturate
0059     void setSaturate(qreal value);
0060 
0061     /// Returns the saturate value if type == Saturate
0062     qreal saturate() const;
0063 
0064     /// Sets a hue rotate value and changes type to HueRotate
0065     void setHueRotate(qreal value);
0066 
0067     /// Returns the saturate value if type == HueRotate
0068     qreal hueRotate() const;
0069 
0070     /// Sets luminance alpha an changes type to LuminanceAlpha
0071     void setLuminanceAlpha();
0072 
0073     /// reimplemented from KoFilterEffect
0074     QImage processImage(const QImage &image, const KoFilterEffectRenderContext &context) const override;
0075     /// reimplemented from KoFilterEffect
0076     bool load(const KoXmlElement &element, const KoFilterEffectLoadingContext &context) override;
0077     /// reimplemented from KoFilterEffect
0078     void save(KoXmlWriter &writer) override;
0079 
0080 private:
0081     /// sets color matrix to identity matrix
0082     void setIdentity();
0083 
0084     Type m_type;        ///< the color matrix type
0085     QVector<qreal> m_matrix; ///< the color matrix to apply
0086     qreal m_value;      ///< the value (saturate or hueRotate)
0087 };
0088 
0089 #endif // COLORMATRIXEFFECT_H