diff options
Diffstat (limited to 'src/quick/items')
-rw-r--r-- | src/quick/items/items.pri | 2 | ||||
-rw-r--r-- | src/quick/items/qquickborderimage.cpp | 70 | ||||
-rw-r--r-- | src/quick/items/qquickimage.cpp | 11 | ||||
-rw-r--r-- | src/quick/items/qquickitem.cpp | 113 | ||||
-rw-r--r-- | src/quick/items/qquickitem.h | 5 | ||||
-rw-r--r-- | src/quick/items/qquickitem_p.h | 4 | ||||
-rw-r--r-- | src/quick/items/qquickninepatchnode.cpp | 305 | ||||
-rw-r--r-- | src/quick/items/qquickninepatchnode_p.h | 98 | ||||
-rw-r--r-- | src/quick/items/qquickrectangle.cpp | 1 | ||||
-rw-r--r-- | src/quick/items/qquickshadereffectsource.cpp | 2 |
10 files changed, 160 insertions, 451 deletions
diff --git a/src/quick/items/items.pri b/src/quick/items/items.pri index 4f22b32837..9f205ed503 100644 --- a/src/quick/items/items.pri +++ b/src/quick/items/items.pri @@ -30,7 +30,6 @@ HEADERS += \ $$PWD/qquickimage_p_p.h \ $$PWD/qquickborderimage_p.h \ $$PWD/qquickborderimage_p_p.h \ - $$PWD/qquickninepatchnode_p.h \ $$PWD/qquickscalegrid_p_p.h \ $$PWD/qquickmousearea_p.h \ $$PWD/qquickmousearea_p_p.h \ @@ -96,7 +95,6 @@ SOURCES += \ $$PWD/qquickimagebase.cpp \ $$PWD/qquickimage.cpp \ $$PWD/qquickborderimage.cpp \ - $$PWD/qquickninepatchnode.cpp \ $$PWD/qquickscalegrid.cpp \ $$PWD/qquickmousearea.cpp \ $$PWD/qquickpincharea.cpp \ diff --git a/src/quick/items/qquickborderimage.cpp b/src/quick/items/qquickborderimage.cpp index abd20c66f0..889877aea1 100644 --- a/src/quick/items/qquickborderimage.cpp +++ b/src/quick/items/qquickborderimage.cpp @@ -41,7 +41,6 @@ #include "qquickborderimage_p.h" #include "qquickborderimage_p_p.h" -#include "qquickninepatchnode_p.h" #include <QtQml/qqmlinfo.h> #include <QtQml/qqmlfile.h> @@ -565,29 +564,70 @@ QSGNode *QQuickBorderImage::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeDat return 0; } - QQuickNinePatchNode *node = static_cast<QQuickNinePatchNode *>(oldNode); + QSGImageNode *node = static_cast<QSGImageNode *>(oldNode); - if (!node) { - node = new QQuickNinePatchNode(); - } + if (!node) + node = d->sceneGraphContext()->createImageNode(); node->setTexture(texture); // Don't implicitly create the scalegrid in the rendering thread... + QRectF innerSourceRect(0, 0, 1, 1); + QRectF targetRect(0, 0, width(), height()); + QRectF innerTargetRect = targetRect; if (d->border) { const QQuickScaleGrid *border = d->getScaleGrid(); - node->setInnerRect(QRectF(border->left(), - border->top(), - qMax(1, d->pix.width() - border->right() - border->left()), - qMax(1, d->pix.height() - border->bottom() - border->top()))); - } else { - node->setInnerRect(QRectF(0, 0, d->pix.width(), d->pix.height())); + innerSourceRect = QRectF(border->left() / qreal(d->pix.width()), + border->top() / qreal(d->pix.height()), + qMax<qreal>(0, d->pix.width() - border->right() - border->left()) / d->pix.width(), + qMax<qreal>(0, d->pix.height() - border->bottom() - border->top()) / d->pix.height()); + innerTargetRect = QRectF(border->left(), + border->top(), + qMax<qreal>(0, width() - border->right() - border->left()), + qMax<qreal>(0, height() - border->bottom() - border->top())); } - node->setRect(QRectF(0, 0, width(), height())); - node->setFiltering(d->smooth ? QSGTexture::Linear : QSGTexture::Nearest); - node->setHorzontalTileMode(d->horizontalTileMode); - node->setVerticalTileMode(d->verticalTileMode); + qreal hTiles = 1; + qreal vTiles = 1; + if (innerSourceRect.width() != 0) { + switch (d->horizontalTileMode) { + case QQuickBorderImage::Repeat: + hTiles = innerTargetRect.width() / qreal(innerSourceRect.width() * d->pix.width()); + break; + case QQuickBorderImage::Round: + hTiles = qCeil(innerTargetRect.width() / qreal(innerSourceRect.width() * d->pix.width())); + break; + default: + break; + } + } + if (innerSourceRect.height() != 0) { + switch (d->verticalTileMode) { + case QQuickBorderImage::Repeat: + vTiles = innerTargetRect.height() / qreal(innerSourceRect.height() * d->pix.height()); + break; + case QQuickBorderImage::Round: + vTiles = qCeil(innerTargetRect.height() / qreal(innerSourceRect.height() * d->pix.height())); + break; + default: + break; + } + } + + node->setTargetRect(targetRect); + node->setInnerSourceRect(innerSourceRect); + node->setInnerTargetRect(innerTargetRect); + node->setSubSourceRect(QRectF(0, 0, hTiles, vTiles)); node->setMirror(d->mirror); + + node->setFiltering(d->smooth ? QSGTexture::Linear : QSGTexture::Nearest); + if (innerSourceRect == QRectF(0, 0, 1, 1) && (vTiles > 1 || hTiles > 1)) { + node->setHorizontalWrapMode(QSGTexture::Repeat); + node->setVerticalWrapMode(QSGTexture::Repeat); + } else { + node->setHorizontalWrapMode(QSGTexture::ClampToEdge); + node->setVerticalWrapMode(QSGTexture::ClampToEdge); + } + node->setAntialiasing(d->antialiasing); node->update(); return node; diff --git a/src/quick/items/qquickimage.cpp b/src/quick/items/qquickimage.cpp index aa68477a9d..f4089be48c 100644 --- a/src/quick/items/qquickimage.cpp +++ b/src/quick/items/qquickimage.cpp @@ -674,18 +674,15 @@ QSGNode *QQuickImage::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) sourceRect.width() / d->pix.width(), sourceRect.height() / d->pix.height()); - if (d->mirror) { - qreal oldLeft = nsrect.left(); - nsrect.setLeft(nsrect.right()); - nsrect.setRight(oldLeft); - } - node->setHorizontalWrapMode(hWrap); node->setVerticalWrapMode(vWrap); node->setFiltering(d->smooth ? QSGTexture::Linear : QSGTexture::Nearest); node->setTargetRect(targetRect); - node->setSourceRect(nsrect); + node->setInnerTargetRect(targetRect); + node->setSubSourceRect(nsrect); + node->setMirror(d->mirror); + node->setAntialiasing(d->antialiasing); node->update(); return node; diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index d3c8973653..a41e451209 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -2401,26 +2401,53 @@ bool QQuickItem::isComponentComplete() const } QQuickItemPrivate::QQuickItemPrivate() -: _anchors(0), _stateGroup(0), - flags(0), widthValid(false), heightValid(false), baselineOffsetValid(false), componentComplete(true), - keepMouse(false), keepTouch(false), hoverEnabled(false), smooth(true), focus(false), activeFocus(false), notifiedFocus(false), - notifiedActiveFocus(false), filtersChildMouseEvents(false), explicitVisible(true), - effectiveVisible(true), explicitEnable(true), effectiveEnable(true), polishScheduled(false), - inheritedLayoutMirror(false), effectiveLayoutMirror(false), isMirrorImplicit(true), - inheritMirrorFromParent(false), inheritMirrorFromItem(false), - isAccessible(false), culled(false), - - dirtyAttributes(0), nextDirtyItem(0), prevDirtyItem(0), - - canvas(0), canvasRefCount(0), parentItem(0), sortedChildItems(&childItems), - - subFocusItem(0), - - x(0), y(0), width(0), height(0), implicitWidth(0), implicitHeight(0), - - baselineOffset(0), - - itemNodeInstance(0), groupNode(0), paintNode(0) + : _anchors(0) + , _stateGroup(0) + , flags(0) + , widthValid(false) + , heightValid(false) + , baselineOffsetValid(false) + , componentComplete(true) + , keepMouse(false) + , keepTouch(false) + , hoverEnabled(false) + , smooth(true) + , antialiasing(false) + , focus(false) + , activeFocus(false) + , notifiedFocus(false) + , notifiedActiveFocus(false) + , filtersChildMouseEvents(false) + , explicitVisible(true) + , effectiveVisible(true) + , explicitEnable(true) + , effectiveEnable(true) + , polishScheduled(false) + , inheritedLayoutMirror(false) + , effectiveLayoutMirror(false) + , isMirrorImplicit(true) + , inheritMirrorFromParent(false) + , inheritMirrorFromItem(false) + , isAccessible(false) + , culled(false) + , dirtyAttributes(0) + , nextDirtyItem(0) + , prevDirtyItem(0) + , canvas(0) + , canvasRefCount(0) + , parentItem(0) + , sortedChildItems(&childItems) + , subFocusItem(0) + , x(0) + , y(0) + , width(0) + , height(0) + , implicitWidth(0) + , implicitHeight(0) + , baselineOffset(0) + , itemNodeInstance(0) + , groupNode(0) + , paintNode(0) { } @@ -4321,6 +4348,7 @@ QString QQuickItemPrivate::dirtyToString() const DIRTY_TO_STRING(EffectReference); DIRTY_TO_STRING(Visible); DIRTY_TO_STRING(HideReference); + DIRTY_TO_STRING(Antialiasing); return rv; } @@ -4488,10 +4516,10 @@ void QQuickItemPrivate::itemChange(QQuickItem::ItemChange change, const QQuickIt */ /*! - Returns true if the item should be drawn with antialiasing and + Returns true if the item should be drawn with smooth pixmap filtering, false otherwise. - The default is false. + The default is true. \sa setSmooth() */ @@ -4519,6 +4547,47 @@ void QQuickItem::setSmooth(bool smooth) emit smoothChanged(smooth); } +/*! + \property QQuickItem::antialiasing + \brief Specifies whether the item is antialiased or not + + Primarily used in Rectangle and image based elements to decide if the item should + use antialiasing or not. Items with antialiasing enabled require more memory and + are potentially slower to render. + + The default is false. +*/ + +/*! + Returns true if the item should be drawn with antialiasing, false otherwise. + + The default is false. + + \sa setAntialiasing() +*/ +bool QQuickItem::antialiasing() const +{ + Q_D(const QQuickItem); + return d->antialiasing; +} + +/*! + Sets whether the item should be drawn with antialiasing to \a antialiasing. + + \sa antialiasing() +*/ +void QQuickItem::setAntialiasing(bool antialiasing) +{ + Q_D(QQuickItem); + if (d->antialiasing == antialiasing) + return; + + d->antialiasing = antialiasing; + d->dirty(QQuickItemPrivate::Antialiasing); + + emit antialiasingChanged(antialiasing); +} + QQuickItem::Flags QQuickItem::flags() const { Q_D(const QQuickItem); diff --git a/src/quick/items/qquickitem.h b/src/quick/items/qquickitem.h index 7174edd057..15bf5dd46d 100644 --- a/src/quick/items/qquickitem.h +++ b/src/quick/items/qquickitem.h @@ -142,6 +142,7 @@ class Q_QUICK_EXPORT QQuickItem : public QObject, public QQmlParserStatus Q_PROPERTY(QQmlListProperty<QQuickTransform> transform READ transform DESIGNABLE false FINAL) Q_PROPERTY(bool smooth READ smooth WRITE setSmooth NOTIFY smoothChanged) + Q_PROPERTY(bool antialiasing READ antialiasing WRITE setAntialiasing NOTIFY antialiasingChanged) Q_PROPERTY(qreal implicitWidth READ implicitWidth WRITE setImplicitWidth NOTIFY implicitWidthChanged) Q_PROPERTY(qreal implicitHeight READ implicitHeight WRITE setImplicitHeight NOTIFY implicitHeightChanged) @@ -258,6 +259,9 @@ public: bool smooth() const; void setSmooth(bool); + bool antialiasing() const; + void setAntialiasing(bool); + Flags flags() const; void setFlag(Flag flag, bool enabled = true); void setFlags(Flags flags); @@ -332,6 +336,7 @@ Q_SIGNALS: void parentChanged(QQuickItem *); void transformOriginChanged(TransformOrigin); void smoothChanged(bool); + void antialiasingChanged(bool); void clipChanged(bool); // XXX todo diff --git a/src/quick/items/qquickitem_p.h b/src/quick/items/qquickitem_p.h index ddebefdb40..69099212ea 100644 --- a/src/quick/items/qquickitem_p.h +++ b/src/quick/items/qquickitem_p.h @@ -389,6 +389,7 @@ public: bool keepTouch:1; bool hoverEnabled:1; bool smooth:1; + bool antialiasing:1; bool focus:1; bool activeFocus:1; bool notifiedFocus:1; @@ -431,13 +432,14 @@ public: EffectReference = 0x00008000, Visible = 0x00010000, HideReference = 0x00020000, + Antialiasing = 0x00040000, // When you add an attribute here, don't forget to update // dirtyToString() TransformUpdateMask = TransformOrigin | Transform | BasicTransform | Position | Size | Canvas, ComplexTransformUpdateMask = Transform | Canvas, - ContentUpdateMask = Size | Content | Smooth | Canvas, + ContentUpdateMask = Size | Content | Smooth | Canvas | Antialiasing, ChildrenUpdateMask = ChildrenChanged | ChildrenStackingChanged | EffectReference | Canvas }; diff --git a/src/quick/items/qquickninepatchnode.cpp b/src/quick/items/qquickninepatchnode.cpp deleted file mode 100644 index d304e2dece..0000000000 --- a/src/quick/items/qquickninepatchnode.cpp +++ /dev/null @@ -1,305 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/ -** -** This file is part of the QtQml module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickninepatchnode_p.h" -#include <private/qsgadaptationlayer_p.h> -#include <private/qmath_p.h> - -QQuickNinePatchNode::QQuickNinePatchNode() - : m_geometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 0) - , m_horizontalTileMode(QQuickBorderImage::Stretch) - , m_verticalTileMode(QQuickBorderImage::Stretch) - , m_dirtyGeometry(false) - , m_mirror(false) -{ - m_geometry.setIndexDataPattern(QSGGeometry::StaticPattern); - m_geometry.setVertexDataPattern(QSGGeometry::StaticPattern); - - setOpaqueMaterial(&m_material); - setMaterial(&m_materialO); - setGeometry(&m_geometry); - m_geometry.setDrawingMode(GL_TRIANGLES); -#ifdef QML_RUNTIME_TESTING - description = QLatin1String("borderimage"); -#endif -} - -void QQuickNinePatchNode::setInnerRect(const QRectF &rect) -{ - if (m_innerRect == rect) - return; - m_innerRect = rect; - m_dirtyGeometry = true; -} - -void QQuickNinePatchNode::setRect(const QRectF &rect) -{ - if (m_targetRect == rect) - return; - m_targetRect = rect; - m_dirtyGeometry = true; -} - -void QQuickNinePatchNode::setHorzontalTileMode(QQuickBorderImage::TileMode mode) -{ - if (mode == QQuickBorderImage::TileMode(m_horizontalTileMode)) - return; - m_horizontalTileMode = mode; - m_dirtyGeometry = true; -} - - -void QQuickNinePatchNode::setVerticalTileMode(QQuickBorderImage::TileMode mode) -{ - if (mode == QQuickBorderImage::TileMode(m_verticalTileMode)) - return; - m_verticalTileMode = mode; - m_dirtyGeometry = true; -} - - -void QQuickNinePatchNode::setFiltering(QSGTexture::Filtering filtering) -{ - if (m_material.filtering() == filtering) - return; - - m_material.setFiltering(filtering); - m_materialO.setFiltering(filtering); - markDirty(DirtyMaterial); -} - -QSGTexture::Filtering QQuickNinePatchNode::filtering() const -{ - return m_material.filtering(); -} - -void QQuickNinePatchNode::setTexture(QSGTexture *texture) -{ - if (texture == m_material.texture()) - return; - m_material.setTexture(texture); - m_materialO.setTexture(texture); - markDirty(DirtyMaterial); -} - -QSGTexture *QQuickNinePatchNode::texture() const -{ - return m_material.texture(); -} - -void QQuickNinePatchNode::setMirror(bool m) -{ - if (m_mirror == m) - return; - m_mirror = m; - m_dirtyGeometry = true; -} - - -void QQuickNinePatchNode::update() -{ - if (!m_dirtyGeometry) - return; - - // For stretch this algorithm could be simplified to use less vertices - // as more vertices could be reused then, but I doubt its where our main - // problem will lie. This way, we at least share the algorithm between all - - Q_ASSERT(m_material.texture()); - - float tw = m_material.texture()->textureSize().width(); - float th = m_material.texture()->textureSize().height(); - - QRectF textureSubRect = m_material.texture()->normalizedTextureSubRect(); - QSize textureSize = m_material.texture()->textureSize(); - - float rightBorder = tw - m_innerRect.right(); - float bottomBorder = th - m_innerRect.bottom(); - -// qDebug() << m_innerRect << m_targetRect << m_horizontalTileMode << m_verticalTileMode; - - int xChunkCount = 0; // Number of chunks - float xChunkSize = 0; // Size of chunk in pixels - float xTexSize = m_innerRect.width(); // Size of the texture to stretch/tile - float xSize = m_targetRect.width() - m_innerRect.left() - rightBorder; // Size of area to fill with chunks - - if (m_horizontalTileMode == QQuickBorderImage::Repeat) { - xChunkCount = qCeil(xSize / xTexSize); - xChunkSize = xTexSize; - } else if (m_horizontalTileMode == QQuickBorderImage::Round) { - xChunkCount = qCeil(xSize / xTexSize); - qreal fullWidth = xChunkCount * xTexSize; - xChunkSize = xTexSize * xSize / fullWidth; - } else { - xChunkCount = 1; - xChunkSize = xSize; - } - - int yChunkCount = 0; - float yChunkSize = 0; // Relative to target rect. - float yTexSize = m_innerRect.height(); // Size of the texture to stretch/tile - float ySize = m_targetRect.height() - m_innerRect.top() - bottomBorder; - - if (m_verticalTileMode == QQuickBorderImage::Repeat) { - yChunkCount = qCeil(ySize / yTexSize); - yChunkSize = yTexSize; - } else if (m_verticalTileMode == QQuickBorderImage::Round) { - yChunkCount = qCeil(ySize / yTexSize); - qreal fullHeight = yChunkCount * yTexSize; - yChunkSize = yTexSize * ySize / fullHeight; - } else { - yChunkCount = 1; - yChunkSize = ySize; - } - - int xTotalChunkCount = xChunkCount + 2; - int yTotalChunkCount = yChunkCount + 2; - - int totalChunkCount = xTotalChunkCount * yTotalChunkCount; - int vertexCount = totalChunkCount * 4; - int indexCount = totalChunkCount * 6; - - if (vertexCount != m_geometry.vertexCount() || indexCount != m_geometry.indexCount()) - m_geometry.allocate(vertexCount, indexCount); - - QSGGeometry::TexturedPoint2D *v = m_geometry.vertexDataAsTexturedPoint2D(); - - - // Fill in the vertices.. The loop below is pretty much an exact replica - // of the one inside fillRow. - float yTexChunk1 = m_innerRect.top() / th; - float yTexChunk2 = m_innerRect.bottom() / th; - - fillRow(v, 0, 0, xChunkCount, xChunkSize, textureSubRect, textureSize); - fillRow(v, m_innerRect.y(), yTexChunk1, xChunkCount, xChunkSize, textureSubRect, textureSize); - - for (int yc=0; yc<yChunkCount; ++yc) { - float yy = m_innerRect.y() + yChunkSize * yc; - fillRow(v, yy, yTexChunk1, xChunkCount, xChunkSize, textureSubRect, textureSize); - - // Special case the last one - if (yc == yChunkCount - 1) { - float t = m_verticalTileMode == QQuickBorderImage::Repeat - ? yTexChunk1 + (yTexChunk2 - yTexChunk1) * (m_targetRect.height() - bottomBorder - yy) / yChunkSize - : yTexChunk2; - fillRow(v, m_targetRect.height() - bottomBorder, t, xChunkCount, xChunkSize, textureSubRect, textureSize); - } else { - fillRow(v, yy + yChunkSize, yTexChunk2, xChunkCount, xChunkSize, textureSubRect, textureSize); - } - } - - fillRow(v, m_targetRect.height() - bottomBorder, yTexChunk2, xChunkCount, xChunkSize, textureSubRect, textureSize); - fillRow(v, m_targetRect.height(), 1, xChunkCount, xChunkSize, textureSubRect, textureSize); - - 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) { -// printf("Vertex: %d: (%.3f, %.3f) - (%.3f, %.3f)\n", -// i, -// v->x, v->y, v->tx, v->ty); -// ++v; -// } - - quint16 *i = m_geometry.indexDataAsUShort(); - int row = xTotalChunkCount * 2; - for (int r=0; r<yTotalChunkCount; ++r) { - int offset = r * row * 2; - for (int c=0; c<xTotalChunkCount; ++c) { - *i++ = offset + c * 2; - *i++ = offset + c * 2 + 1; - *i++ = offset + c * 2 + row; - *i++ = offset + c * 2 + 1; - *i++ = offset + c * 2 + row + 1; - *i++ = offset + c * 2 + row; - } - } - -// i = m_geometry.indexDataAsUShort(); -// for (int idx=0; idx<m_geometry.indexCount(); idx+=6) { -// printf("%2d: ", idx / 6); -// for (int s=0; s<6; ++s) -// printf(" %d", i[idx + s]); -// printf("\n"); -// } - - markDirty(QSGNode::DirtyGeometry); -} - -void QQuickNinePatchNode::fillRow(QSGGeometry::TexturedPoint2D *&v, float y, float ty, int xChunkCount, float xChunkSize, - const QRectF &tsr, // texture sub rect, for atlasses - const QSize &ts) // texture size in pixels -{ - ty = tsr.y() + ty * tsr.height(); - - float tw = ts.width(); - float rightBorder = tw - m_innerRect.right(); - float xTexChunk1 = tsr.left() + tsr.width() * m_innerRect.left() / tw; - float xTexChunk2 = tsr.left() + tsr.width() * m_innerRect.right() / tw; - - v++->set(0, y, tsr.left(), ty); - v++->set(m_innerRect.x(), y, xTexChunk1, ty); - - for (int xc=0; xc<xChunkCount; ++xc) { - float xx = m_innerRect.x() + xChunkSize * xc; - v++->set(xx, y, xTexChunk1, ty); - - // Special case the last one - if (xc == xChunkCount - 1) { - float t = m_horizontalTileMode == QQuickBorderImage::Repeat - ? xTexChunk1 + (xTexChunk2 - xTexChunk1) * (m_targetRect.width() - rightBorder - xx) / xChunkSize - : xTexChunk2; - v->set(m_targetRect.width() - rightBorder, y, t, ty); - } else { - v->set(xx + xChunkSize, y, xTexChunk2, ty); - } - ++v; - } - - v++->set(m_targetRect.width() - rightBorder, y, xTexChunk2, ty); - v++->set(m_targetRect.width(), y, tsr.right(), ty); -} diff --git a/src/quick/items/qquickninepatchnode_p.h b/src/quick/items/qquickninepatchnode_p.h deleted file mode 100644 index c2761f74e5..0000000000 --- a/src/quick/items/qquickninepatchnode_p.h +++ /dev/null @@ -1,98 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/ -** -** This file is part of the QtQml module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKNINEPATCHNODE_H -#define QQUICKNINEPATCHNODE_H - -#include <QtQuick/qsgnode.h> -#include <QtQuick/qsgtexturematerial.h> -#include "qquickborderimage_p.h" - -class TextureReference; - -class QQuickNinePatchNode : public QSGGeometryNode -{ -public: - QQuickNinePatchNode(); - - void setTexture(QSGTexture *texture); - QSGTexture *texture() const; - - void setRect(const QRectF &rect); - QRectF rect() const { return m_targetRect; } - - void setInnerRect(const QRectF &rect); - QRectF innerRect() const { return m_innerRect; } - - void setFiltering(QSGTexture::Filtering filtering); - QSGTexture::Filtering filtering() const; - - void setHorzontalTileMode(QQuickBorderImage::TileMode mode); - QQuickBorderImage::TileMode horizontalTileMode() const { - return (QQuickBorderImage::TileMode) m_horizontalTileMode; - } - - void setVerticalTileMode(QQuickBorderImage::TileMode mode); - QQuickBorderImage::TileMode verticalTileMode() const { - return (QQuickBorderImage::TileMode) m_verticalTileMode; - } - - void setMirror(bool m); - bool mirror() const { return m_mirror; } - - void update(); - -private: - void fillRow(QSGGeometry::TexturedPoint2D *&v, float y, float ty, int xChunkCount, float xChunkSize, const QRectF &tsr, const QSize &ts); - QRectF m_targetRect; - QRectF m_innerRect; - QSGOpaqueTextureMaterial m_material; - QSGTextureMaterial m_materialO; - QSGGeometry m_geometry; - - uint m_horizontalTileMode : 2; - uint m_verticalTileMode : 2; - - uint m_dirtyGeometry : 1; - uint m_mirror : 1; -}; - -#endif // QQUICKNINEPATCHNODE_H diff --git a/src/quick/items/qquickrectangle.cpp b/src/quick/items/qquickrectangle.cpp index 608fd94ac1..ec300e87b0 100644 --- a/src/quick/items/qquickrectangle.cpp +++ b/src/quick/items/qquickrectangle.cpp @@ -502,6 +502,7 @@ QSGNode *QQuickRectangle::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData } rectangle->setRadius(d->radius); + rectangle->setAntialiasing(d->antialiasing); QGradientStops stops; if (d->gradient) { diff --git a/src/quick/items/qquickshadereffectsource.cpp b/src/quick/items/qquickshadereffectsource.cpp index 3f36c86d0c..20b919018e 100644 --- a/src/quick/items/qquickshadereffectsource.cpp +++ b/src/quick/items/qquickshadereffectsource.cpp @@ -1006,7 +1006,7 @@ QSGNode *QQuickShaderEffectSource::updatePaintNode(QSGNode *oldNode, UpdatePaint node->setHorizontalWrapMode(hWrap); node->setVerticalWrapMode(vWrap); node->setTargetRect(QRectF(0, 0, width(), height())); - node->setSourceRect(QRectF(0, 0, 1, 1)); + node->setInnerTargetRect(QRectF(0, 0, width(), height())); node->update(); return node; |