summaryrefslogtreecommitdiffstats
path: root/src/graphicsitems/qxpaintitem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphicsitems/qxpaintitem.cpp')
-rw-r--r--src/graphicsitems/qxpaintitem.cpp40
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);
}
/*!