diff options
author | Martin Jones <martin.jones@nokia.com> | 2011-05-23 17:09:58 +1000 |
---|---|---|
committer | Martin Jones <martin.jones@nokia.com> | 2011-05-25 11:03:22 +1000 |
commit | dc641323e2f82873908aa55ce3bd4ac46f2112c5 (patch) | |
tree | 7d75021e677b90147e79b99d578dd8bb8f21f589 | |
parent | 2d69163a2819f72c5b18c5dd483976a54c797b81 (diff) |
Implement "mirror" property for BorderImage.
Change-Id: Iee5b252ce1b0d39da42f553cf2ae782ad14d297f
Reviewed-by: Gunnar
-rw-r--r-- | src/declarative/items/qsgborderimage.cpp | 1 | ||||
-rw-r--r-- | src/declarative/items/qsgninepatchnode.cpp | 17 | ||||
-rw-r--r-- | src/declarative/items/qsgninepatchnode_p.h | 4 |
3 files changed, 22 insertions, 0 deletions
diff --git a/src/declarative/items/qsgborderimage.cpp b/src/declarative/items/qsgborderimage.cpp index 9a8a8818e8..81df0a31e7 100644 --- a/src/declarative/items/qsgborderimage.cpp +++ b/src/declarative/items/qsgborderimage.cpp @@ -346,6 +346,7 @@ QSGNode *QSGBorderImage::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData * node->setFiltering(d->smooth ? QSGTexture::Linear : QSGTexture::Nearest); node->setHorzontalTileMode(d->horizontalTileMode); node->setVerticalTileMode(d->verticalTileMode); + node->setMirror(d->mirror); node->update(); return node; diff --git a/src/declarative/items/qsgninepatchnode.cpp b/src/declarative/items/qsgninepatchnode.cpp index 045dd6c94f..eaa97178f4 100644 --- a/src/declarative/items/qsgninepatchnode.cpp +++ b/src/declarative/items/qsgninepatchnode.cpp @@ -48,6 +48,7 @@ QSGNinePatchNode::QSGNinePatchNode() , m_horizontalTileMode(QSGBorderImage::Stretch) , m_verticalTileMode(QSGBorderImage::Stretch) , m_dirtyGeometry(false) + , m_mirror(false) { setOpaqueMaterial(&m_material); setMaterial(&m_materialO); @@ -118,6 +119,15 @@ QSGTexture *QSGNinePatchNode::texture() const return m_material.texture(); } +void QSGNinePatchNode::setMirror(bool m) +{ + if (m_mirror == m) + return; + m_mirror = m; + m_dirtyGeometry = true; +} + + void QSGNinePatchNode::update() { if (!m_dirtyGeometry) @@ -210,6 +220,13 @@ void QSGNinePatchNode::update() fillRow(v, m_targetRect.height() - bottomBorder, yTexChunk2, xChunkCount, xChunkSize); fillRow(v, m_targetRect.height(), 1, xChunkCount, xChunkSize); + if (m_mirror) { + v = m_geometry.vertexDataAsTexturedPoint2D(); + for (int i=0; i<m_geometry.vertexCount(); ++i) { + v->x = m_targetRect.width() - v->x; + ++v; + } + } // v = m_geometry.vertexDataAsTexturedPoint2D(); // for (int i=0; i<m_geometry.vertexCount(); ++i) { diff --git a/src/declarative/items/qsgninepatchnode_p.h b/src/declarative/items/qsgninepatchnode_p.h index ac927bce84..ef1686d528 100644 --- a/src/declarative/items/qsgninepatchnode_p.h +++ b/src/declarative/items/qsgninepatchnode_p.h @@ -75,6 +75,9 @@ public: return (QSGBorderImage::TileMode) m_verticalTileMode; } + void setMirror(bool m); + bool mirror() const { return m_mirror; } + void update(); private: @@ -89,6 +92,7 @@ private: uint m_verticalTileMode : 2; uint m_dirtyGeometry : 1; + uint m_mirror : 1; }; #endif // QSGNINEPATCHNODE_H |