diff options
Diffstat (limited to 'src/graphicsitems/nodes/qxninepatchnode.cpp')
-rw-r--r-- | src/graphicsitems/nodes/qxninepatchnode.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/graphicsitems/nodes/qxninepatchnode.cpp b/src/graphicsitems/nodes/qxninepatchnode.cpp index 6de5ef6..e7bbe11 100644 --- a/src/graphicsitems/nodes/qxninepatchnode.cpp +++ b/src/graphicsitems/nodes/qxninepatchnode.cpp @@ -43,15 +43,15 @@ #include "utilities.h" #include "adaptationlayer.h" -QxNinePatchNode::QxNinePatchNode(const QRectF &targetRect, const QPixmap &pixmap, +QxNinePatchNode::QxNinePatchNode(const QRectF &targetRect, TextureReference *texture, const QRect &innerRect, qreal opacity, bool linearFiltering) -: m_targetRect(targetRect), m_pixmap(pixmap), m_innerRect(innerRect), m_opacity(opacity), m_linearFiltering(linearFiltering) +: m_targetRect(targetRect), m_innerRect(innerRect), m_opacity(opacity), m_linearFiltering(linearFiltering) { - m_texture = Utilities::getTextureForPixmap(pixmap, true); - bool alpha = pixmap.hasAlphaChannel(); - m_material.setTexture(m_texture->texture(), !alpha); + m_texture = texture; + bool alpha = texture->hasAlphaChannel(); + m_material.setTexture(m_texture, !alpha); m_material.setLinearFiltering(linearFiltering); - m_materialO.setTexture(m_texture->texture(), !alpha); + m_materialO.setTexture(m_texture, !alpha); m_materialO.setOpacity(m_opacity); m_materialO.setLinearFiltering(linearFiltering); @@ -135,12 +135,13 @@ void QxNinePatchNode::updateGeometry() V *vertices = (V *)g->vertexData(); qreal x[6], y[6], u[6], v[6]; + QRectF texRect = m_texture->textureRect(); x[0] = m_targetRect.x(); x[1] = m_targetRect.x() + m_innerRect.x(); x[2] = x[1] + 0.5; x[3] = m_targetRect.x() + m_targetRect.width() - - (m_pixmap.width() - (m_innerRect.x() + m_innerRect.width())); + (texRect.width() - (m_innerRect.x() + m_innerRect.width())); x[4] = x[3] - 0.5; x[5] = m_targetRect.x() + m_targetRect.width(); @@ -148,14 +149,14 @@ void QxNinePatchNode::updateGeometry() y[1] = m_targetRect.y() + m_innerRect.y(); y[2] = y[1] + 0.5; y[3] = m_targetRect.y() + m_targetRect.height() - - (m_pixmap.height() - (m_innerRect.y() + m_innerRect.height())); + (texRect.height() - (m_innerRect.y() + m_innerRect.height())); y[4] = y[3] - 0.5; y[5] = m_targetRect.y() + m_targetRect.height(); - qreal pw = m_pixmap.width(); - qreal ph = m_pixmap.height(); + qreal pw = texRect.width(); + qreal ph = texRect.height(); - QRectF src = m_texture->sourceRect(); + QRectF src = texRect; u[0] = src.left(); u[1] = src.left() + m_innerRect.x() / pw * src.width(); u[2] = u[1] + 0.5 / pw * src.width(); |