summaryrefslogtreecommitdiffstats
path: root/src/graphicsitems/nodes/qxninepatchnode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphicsitems/nodes/qxninepatchnode.cpp')
-rw-r--r--src/graphicsitems/nodes/qxninepatchnode.cpp23
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();