File indexing completed on 2025-03-09 04:03:43

0001 /* This file is part of the KDE project
0002  * SPDX-FileCopyrightText: 2007, 2009 Jan Hambrecht <jaham@gmx.net>
0003  * SPDX-FileCopyrightText: 2010 Thorsten Zachmann <zachmann@kde.org>
0004  *
0005  * SPDX-License-Identifier: LGPL-2.0-or-later
0006  */
0007 
0008 #include "SvgGradientHelper.h"
0009 
0010 #include <QConicalGradient>
0011 #include <QLinearGradient>
0012 #include <QRadialGradient>
0013 
0014 #include <cmath>
0015 #include <KoFlake.h>
0016 
0017 SvgGradientHelper::SvgGradientHelper()
0018     : m_gradient(new QGradient())
0019     , m_meshgradient(new SvgMeshGradient)
0020     , m_gradientUnits(KoFlake::ObjectBoundingBox)
0021 {
0022 }
0023 
0024 SvgGradientHelper::~SvgGradientHelper()
0025 {
0026 }
0027 
0028 SvgGradientHelper::SvgGradientHelper(const SvgGradientHelper &other)
0029     : m_gradient(KoFlake::cloneGradient(other.m_gradient.data()))
0030     , m_meshgradient(new SvgMeshGradient(*other.m_meshgradient))
0031     , m_gradientUnits(other.m_gradientUnits)
0032     , m_gradientTransform(other.m_gradientTransform)
0033 {
0034 }
0035 
0036 SvgGradientHelper & SvgGradientHelper::operator = (const SvgGradientHelper & rhs)
0037 {
0038     if (this == &rhs)
0039         return *this;
0040 
0041     m_gradientUnits = rhs.m_gradientUnits;
0042     m_gradientTransform = rhs.m_gradientTransform;
0043     m_gradient.reset(KoFlake::cloneGradient(rhs.m_gradient.data()));
0044     m_meshgradient.reset(new SvgMeshGradient(*rhs.m_meshgradient));
0045 
0046     return *this;
0047 }
0048 
0049 void SvgGradientHelper::setGradientUnits(KoFlake::CoordinateSystem units)
0050 {
0051     m_gradientUnits = units;
0052 }
0053 
0054 KoFlake::CoordinateSystem SvgGradientHelper::gradientUnits() const
0055 {
0056     return m_gradientUnits;
0057 }
0058 
0059 QGradient * SvgGradientHelper::gradient() const
0060 {
0061     return m_gradient.data();
0062 }
0063 
0064 void SvgGradientHelper::setGradient(QGradient * g)
0065 {
0066     m_gradient.reset(g);
0067 }
0068 
0069 void SvgGradientHelper::setMeshGradient(SvgMeshGradient *g)
0070 {
0071     m_meshgradient.reset(new SvgMeshGradient(*g));
0072 }
0073 
0074 QScopedPointer<SvgMeshGradient>& SvgGradientHelper::meshgradient()
0075 {
0076     return m_meshgradient;
0077 }
0078 
0079 bool SvgGradientHelper::isMeshGradient() const
0080 {
0081     return m_meshgradient->isValid();
0082 }
0083 
0084 QTransform SvgGradientHelper::transform() const
0085 {
0086     return m_gradientTransform;
0087 }
0088 
0089 void SvgGradientHelper::setTransform(const QTransform &transform)
0090 {
0091     m_gradientTransform = transform;
0092 }
0093 
0094 QGradient::Spread SvgGradientHelper::spreadMode() const
0095 {
0096     return m_gradient->spread();
0097 }
0098 
0099 void SvgGradientHelper::setSpreadMode(const QGradient::Spread &spreadMode)
0100 {
0101     m_gradient->setSpread(spreadMode);
0102 }