diff options
Diffstat (limited to 'src/datavisualizationqml2/declarativesurface.cpp')
-rw-r--r-- | src/datavisualizationqml2/declarativesurface.cpp | 55 |
1 files changed, 45 insertions, 10 deletions
diff --git a/src/datavisualizationqml2/declarativesurface.cpp b/src/datavisualizationqml2/declarativesurface.cpp index f74472f5..8375fa53 100644 --- a/src/datavisualizationqml2/declarativesurface.cpp +++ b/src/datavisualizationqml2/declarativesurface.cpp @@ -27,7 +27,8 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE DeclarativeSurface::DeclarativeSurface(QQuickItem *parent) : AbstractDeclarative(parent), m_shared(0), - m_initialisedSize(0, 0) + m_initialisedSize(0, 0), + m_gradient(0) { setFlags(QQuickItem::ItemHasContents); setAcceptedMouseButtons(Qt::AllButtons); @@ -49,6 +50,12 @@ DeclarativeSurface::~DeclarativeSurface() delete m_shared; } +void DeclarativeSurface::handleGradientUpdate() +{ + if (m_gradient) + setControllerGradient(*m_gradient); +} + QSGNode *DeclarativeSurface::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) { // If old node exists and has right size, reuse it. @@ -72,11 +79,6 @@ QSGNode *DeclarativeSurface::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeDa return node; } -void DeclarativeSurface::setGradientColorAt(qreal pos, const QColor &color) -{ - m_shared->setGradientColorAt(pos, color); -} - void DeclarativeSurface::setDataProxy(QSurfaceDataProxy *dataProxy) { m_shared->setActiveDataProxy(dataProxy); @@ -137,14 +139,47 @@ bool DeclarativeSurface::isSurfaceGridEnabled() const return m_shared->surfaceGrid(); } -void DeclarativeSurface::setGradient(const QLinearGradient &gradient) +void DeclarativeSurface::setGradient(ColorGradient *gradient) { - m_shared->setGradient(gradient); + // connect new / disconnect old + if (gradient != m_gradient) { + if (m_gradient) + QObject::disconnect(m_gradient, 0, this, 0); + + m_gradient = gradient; + + if (m_gradient) { + QObject::connect(m_gradient, &ColorGradient::updated, this, + &DeclarativeSurface::handleGradientUpdate); + } + } + + if (m_gradient) + setControllerGradient(*m_gradient); +} + +ColorGradient *DeclarativeSurface::gradient() const +{ + + return m_gradient; } -QLinearGradient DeclarativeSurface::gradient() const +void DeclarativeSurface::setControllerGradient(const ColorGradient &gradient) { - return m_shared->gradient(); + QLinearGradient newGradient; + QGradientStops stops; + QList<ColorGradientStop *> qmlstops = gradient.m_stops; + + // Get sorted gradient stops + for (int i = 0; i < qmlstops.size(); i++) { + int j = 0; + while (j < stops.size() && stops.at(j).first < qmlstops[i]->position()) + j++; + stops.insert(j, QGradientStop(qmlstops.at(i)->position(), qmlstops.at(i)->color())); + } + + newGradient.setStops(stops); + m_shared->setGradient(newGradient); } QT_DATAVISUALIZATION_END_NAMESPACE |