diff options
Diffstat (limited to 'src/graphicsitems/qxpaintitem.cpp')
-rw-r--r-- | src/graphicsitems/qxpaintitem.cpp | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/src/graphicsitems/qxpaintitem.cpp b/src/graphicsitems/qxpaintitem.cpp index fa6e7d6..3c74455 100644 --- a/src/graphicsitems/qxpaintitem.cpp +++ b/src/graphicsitems/qxpaintitem.cpp @@ -56,19 +56,23 @@ QxPaintItemPrivate::QxPaintItemPrivate() : QxItemPrivate() + , m_node(0) , m_opaque_painting(false) , m_dirty(false) { } +QxPaintItemPrivate::~QxPaintItemPrivate() +{ + delete m_node; +} + /*! Constructs a QxPaintItem with \a parent. */ QxPaintItem::QxPaintItem(QxItem *parent) : QxItem(*(new QxPaintItemPrivate), parent) { - Q_D(QxPaintItem); - d->m_node.setPaintItem(this); } /*! @@ -77,8 +81,6 @@ QxPaintItem::QxPaintItem(QxItem *parent) QxPaintItem::QxPaintItem(QxPaintItemPrivate &dd, QxItem *parent) : QxItem(dd, parent) { - Q_D(QxPaintItem); - d->m_node.setPaintItem(this); } /*! @@ -95,7 +97,8 @@ void QxPaintItem::update() { Q_D(QxPaintItem); d->m_dirty = true; - d->m_node.markDirty(Node::DirtyMaterial); + if (d->m_node) + d->m_node->markDirty(Node::DirtyMaterial); } /*! @@ -105,8 +108,14 @@ void QxPaintItem::componentComplete() { Q_D(QxPaintItem); QxItem::componentComplete(); - d->m_node.setSize(size().toSize()); - setPaintNode(&d->m_node); + Q_ASSERT(d->m_node == 0); + d->m_node = new QxPainterNode(this); + d->m_node->setSize(size().toSize()); + d->m_node->setOpacity(renderOpacity()); + d->m_node->setSmoothPainting(smooth()); + d->m_node->setLinearFiltering(smooth()); + d->m_node->setOpaquePainting(d->m_opaque_painting); + setPaintNode(d->m_node); update(); } @@ -116,8 +125,8 @@ void QxPaintItem::componentComplete() void QxPaintItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) { Q_D(QxPaintItem); - if (newGeometry.size() != oldGeometry.size()) { - d->m_node.setSize(newGeometry.size().toSize()); + if (d->m_node && newGeometry.size() != oldGeometry.size()) { + d->m_node->setSize(newGeometry.size().toSize()); update(); } QxItem::geometryChanged(newGeometry, oldGeometry); @@ -129,8 +138,8 @@ void QxPaintItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGe void QxPaintItem::renderOpacityChanged(qreal newOpacity, qreal oldOpacity) { Q_D(QxPaintItem); - if (newOpacity != oldOpacity) - d->m_node.setOpacity(newOpacity); + if (d->m_node && newOpacity != oldOpacity) + d->m_node->setOpacity(newOpacity); QxItem::renderOpacityChanged(newOpacity, oldOpacity); } @@ -140,9 +149,9 @@ void QxPaintItem::renderOpacityChanged(qreal newOpacity, qreal oldOpacity) void QxPaintItem::smoothChange(bool newSmooth, bool oldSmooth) { Q_D(QxPaintItem); - if (newSmooth != oldSmooth) { - d->m_node.setSmoothPainting(newSmooth); - d->m_node.setLinearFiltering(newSmooth); + if (d->m_node && newSmooth != oldSmooth) { + d->m_node->setSmoothPainting(newSmooth); + d->m_node->setLinearFiltering(newSmooth); update(); } QxItem::smoothChange(newSmooth, oldSmooth); @@ -163,7 +172,8 @@ void QxPaintItem::setOpaquePainting(bool opaque) if (opaque == d->m_opaque_painting) return; d->m_opaque_painting = opaque; - d->m_node.updateTexture(); + if (d->m_node) + d->m_node->setOpaquePainting(d->m_opaque_painting); } /*! |