From: Andrew den Exter Date: Thu, 21 Jun 2012 00:07:56 +0000 (+1000) Subject: Fix crash when selecting transformed text. X-Git-Tag: upstream/5.2.1~1617 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=25f6f5bedec23756b83152a4952ade1d94493350;p=platform%2Fupstream%2Fqtdeclarative.git Fix crash when selecting transformed text. QSGClipNode cannot be used directly, a sub-class or external provider of geometry is required. Task-number: QTBUG-26234 Change-Id: I0354ec17b619886b95f7994ad5af5c96e97397a0 Reviewed-by: Gunnar Sletta --- diff --git a/src/quick/items/qquicktextnode.cpp b/src/quick/items/qquicktextnode.cpp index db3c627..ecc522c 100644 --- a/src/quick/items/qquicktextnode.cpp +++ b/src/quick/items/qquicktextnode.cpp @@ -40,10 +40,11 @@ ****************************************************************************/ #include "qquicktextnode_p.h" + #include #include #include - +#include #include #include @@ -214,7 +215,7 @@ namespace { QGlyphRun glyphRun; QRectF boundingRect; SelectionState selectionState; - QSGClipNode *clipNode; + QQuickDefaultClipNode *clipNode; QQuickTextNode::Decorations decorations; QColor color; QColor backgroundColor; @@ -512,7 +513,7 @@ namespace { QVarLengthArray pendingOverlines; QVarLengthArray pendingStrikeOuts; if (!sortedIndexes.isEmpty()) { - QSGClipNode *currentClipNode = m_hasSelection ? new QSGClipNode : 0; + QQuickDefaultClipNode *currentClipNode = m_hasSelection ? new QQuickDefaultClipNode(QRectF()) : 0; bool currentClipNodeUsed = false; for (int i=0; i<=sortedIndexes.size(); ++i) { BinaryTreeNode *node = 0; @@ -566,12 +567,13 @@ namespace { delete currentClipNode; } else { currentClipNode->setIsRectangular(true); - currentClipNode->setClipRect(currentRect); + currentClipNode->setRect(currentRect); + currentClipNode->update(); } } if (node != 0 && m_hasSelection) - currentClipNode = new QSGClipNode; + currentClipNode = new QQuickDefaultClipNode(QRectF()); else currentClipNode = 0; currentClipNodeUsed = false; @@ -964,7 +966,7 @@ namespace { // Then, go through all the nodes for all lines and combine all QGlyphRuns with a common // font, selection state and clip node. - typedef QPair > > KeyType; + typedef QPair > > KeyType; QHash map; QList nodes; for (int i=0; iclipNode; + QQuickDefaultClipNode *clipNode = node->clipNode; if (clipNode != 0 && clipNode->parent() == 0 ) parentNode->appendChildNode(clipNode);