434void QQuickTextPrivate::updateSize()
438 if (!q->isComponentComplete()) {
439 updateOnComponentComplete =
true;
443 if (!requireImplicitSize) {
444 implicitWidthChanged();
445 implicitHeightChanged();
447 if (requireImplicitSize)
451 qreal hPadding = q->leftPadding() + q->rightPadding();
452 qreal vPadding = q->topPadding() + q->bottomPadding();
454 const QSizeF previousSize(q->contentWidth(), q->contentHeight());
456 if (text.isEmpty() && !isLineLaidOutConnected() && fontSizeMode() == QQuickText::FixedSize) {
461 QFontMetricsF fm(font);
462 qreal fontHeight = qCeil(fm.height());
464 fontHeight = lineHeightMode() == QQuickText::FixedHeight
466 : fontHeight * lineHeight();
468 updateBaseline(fm.ascent(), q->height() - fontHeight - vPadding);
469 q->setImplicitSize(hPadding, fontHeight + qMax(lineHeightOffset(), 0) + vPadding);
470 layedOutTextRect = QRectF(0, 0, 0, fontHeight);
472 signalSizeChange(previousSize);
474 emit q->lineCountChanged();
477 emit q->truncatedChanged();
479 updateType = UpdatePaintNode;
489 QRectF textRect = setupTextLayout(&baseline);
491 if (internalWidthUpdate)
494 layedOutTextRect = textRect;
495 size = textRect.size();
496 updateBaseline(baseline, q->height() - size.height() - vPadding);
498 widthExceeded =
true;
499 heightExceeded =
false;
501 extra->doc->setDefaultFont(font);
502 QQuickText::HAlignment horizontalAlignment = q->effectiveHAlign();
503 if (rightToLeftText) {
504 if (horizontalAlignment == QQuickText::AlignLeft)
505 horizontalAlignment = QQuickText::AlignRight;
506 else if (horizontalAlignment == QQuickText::AlignRight)
507 horizontalAlignment = QQuickText::AlignLeft;
510 option.setAlignment((Qt::Alignment)
int(horizontalAlignment | vAlign));
511 option.setWrapMode(QTextOption::WrapMode(wrapMode));
512 option.setUseDesignMetrics(renderType != QQuickText::NativeRendering);
513 extra->doc->setDefaultTextOption(option);
514 qreal naturalWidth = 0;
515 if (requireImplicitSize) {
516 extra->doc->setTextWidth(-1);
517 naturalWidth = extra->doc->idealWidth();
518 const bool wasInLayout = internalWidthUpdate;
519 internalWidthUpdate =
true;
520 q->setImplicitWidth(naturalWidth + hPadding);
521 internalWidthUpdate = wasInLayout;
523 if (internalWidthUpdate)
526 extra->doc->setPageSize(QSizeF(q->width(), -1));
527 if (q->widthValid() && (wrapMode != QQuickText::NoWrap || extra->doc->idealWidth() < availableWidth()))
528 extra->doc->setTextWidth(availableWidth());
530 extra->doc->setTextWidth(extra->doc->idealWidth());
532 QSizeF dsize = extra->doc->size();
533 layedOutTextRect = QRectF(QPointF(0,0), dsize);
534 size = QSizeF(extra->doc->idealWidth(),dsize.height());
537 qreal baseline = QFontMetricsF(font).ascent();
538 QTextBlock firstBlock = extra->doc->firstBlock();
539 if (firstBlock.isValid() && firstBlock.layout() !=
nullptr && firstBlock.lineCount() > 0)
540 baseline = firstBlock.layout()->lineAt(0).ascent();
542 updateBaseline(baseline, q->height() - size.height() - vPadding);
545 internalWidthUpdate =
true;
546 qreal oldWidth = q->width();
548 if (!q->widthValid())
549 iWidth = size.width();
551 q->setImplicitSize(iWidth + hPadding, size.height() + qMax(lineHeightOffset(), 0) + vPadding);
552 internalWidthUpdate =
false;
559 if (!qFuzzyCompare(q->width(), oldWidth) && !updateSizeRecursionGuard) {
560 updateSizeRecursionGuard =
true;
562 updateSizeRecursionGuard =
false;
565 q->setImplicitHeight(size.height() + lineHeightOffset() + vPadding);
567 QTextBlock firstBlock = extra->doc->firstBlock();
568 while (firstBlock.layout()->lineCount() == 0)
569 firstBlock = firstBlock.next();
571 QTextBlock lastBlock = extra->doc->lastBlock();
572 while (lastBlock.layout()->lineCount() == 0)
573 lastBlock = lastBlock.previous();
575 if (firstBlock.lineCount() > 0 && lastBlock.lineCount() > 0) {
576 QTextLine firstLine = firstBlock.layout()->lineAt(0);
577 QTextLine lastLine = lastBlock.layout()->lineAt(lastBlock.layout()->lineCount() - 1);
578 advance = QSizeF(lastLine.horizontalAdvance(),
579 (lastLine.y() + lastBlock.layout()->position().y() + lastLine.ascent()) - (firstLine.y() + firstBlock.layout()->position().y() + firstLine.ascent()));
586 signalSizeChange(previousSize);
587 updateType = UpdatePaintNode;
777QRectF QQuickTextPrivate::setupTextLayout(qreal *
const baseline)
781 bool singlelineElide = elideMode != QQuickText::ElideNone && q->widthValid();
782 bool multilineElide = elideMode == QQuickText::ElideRight
784 && (q->heightValid() || maximumLineCountValid);
786 if ((!requireImplicitSize || (implicitWidthValid && implicitHeightValid))
787 && ((singlelineElide && availableWidth() <= 0.)
788 || (multilineElide && q->heightValid() && availableHeight() <= 0.))) {
790 widthExceeded = q->widthValid() && availableWidth() <= 0.;
791 heightExceeded = q->heightValid() && availableHeight() <= 0.;
795 emit q->truncatedChanged();
799 q->setFlag(QQuickItem::ItemObservesViewport,
false);
800 emit q->lineCountChanged();
803 if (qFuzzyIsNull(q->width())) {
804 layout.setText(QString());
805 textHasChanged =
true;
808 QFontMetricsF fm(font);
809 qreal height = (lineHeightMode() == QQuickText::FixedHeight) ? lineHeight() : qCeil(fm.height()) * lineHeight();
810 *baseline = fm.ascent();
811 return QRectF(0, 0, 0, height);
814 bool shouldUseDesignMetrics = renderType != QQuickText::NativeRendering;
815 if (extra.isAllocated())
816 extra->visibleImgTags.clear();
817 layout.setCacheEnabled(
true);
818 QTextOption textOption = layout.textOption();
819 if (textOption.alignment() != q->effectiveHAlign()
820 || textOption.wrapMode() != QTextOption::WrapMode(wrapMode)
821 || textOption.useDesignMetrics() != shouldUseDesignMetrics) {
822 textOption.setAlignment(Qt::Alignment(q->effectiveHAlign()));
823 textOption.setWrapMode(QTextOption::WrapMode(wrapMode));
824 textOption.setUseDesignMetrics(shouldUseDesignMetrics);
825 layout.setTextOption(textOption);
827 if (layout.font() != font)
828 layout.setFont(font);
830 lineWidth = (q->widthValid() || implicitWidthValid) && q->width() > 0
833 qreal maxHeight = q->heightValid() ? availableHeight() : FLT_MAX;
835 const bool customLayout = isLineLaidOutConnected();
836 const bool wasTruncated = truncated;
838 bool canWrap = wrapMode != QQuickText::NoWrap && q->widthValid();
840 bool horizontalFit = fontSizeMode() & QQuickText::HorizontalFit && q->widthValid();
841 bool verticalFit = fontSizeMode() & QQuickText::VerticalFit
842 && (q->heightValid() || (maximumLineCountValid && canWrap));
844 const bool pixelSize = font.pixelSize() != -1;
845 QString layoutText = layout.text();
847 const qreal minimumSize = pixelSize
848 ?
static_cast<qreal>(minimumPixelSize())
849 : minimumPointSize();
850 qreal largeFont = pixelSize ? font.pixelSize() : font.pointSizeF();
851 qreal smallFont = fontSizeMode() != QQuickText::FixedSize
852 ? qMin<qreal>(minimumSize, largeFont)
854 qreal scaledFontSize = largeFont;
855 const qreal sizeFittingThreshold(0.01);
857 bool widthChanged =
false;
858 widthExceeded = availableWidth() <= 0 && (singlelineElide || canWrap || horizontalFit);
859 heightExceeded = availableHeight() <= 0 && (multilineElide || verticalFit);
863 QFont scaledFont = font;
865 int visibleCount = 0;
872 bool noBreakLastLine = multilineElide && (wrapMode == QQuickText::Wrap || wrapMode == QQuickText::WordWrap);
874 int eos = multilengthEos;
882 scaledFont.setPixelSize(scaledFontSize);
884 scaledFont.setPointSizeF(scaledFontSize);
885 if (layout.font() != scaledFont)
886 layout.setFont(scaledFont);
889 layout.beginLayout();
891 bool wrapped =
false;
892 bool truncateHeight =
false;
895 int unwrappedLineCount = 1;
896 const int maxLineCount = maximumLineCount();
898 qreal naturalHeight = 0;
899 qreal previousHeight = 0;
904 for (visibleCount = 1; ; ++visibleCount) {
905 line = layout.createLine();
907 if (noBreakLastLine && visibleCount == maxLineCount)
908 layout.engine()->option.setWrapMode(QTextOption::WrapAnywhere);
910 setupCustomLineGeometry(line, naturalHeight, layoutText.size());
912 setLineGeometry(line, lineWidth, naturalHeight);
914 if (noBreakLastLine && visibleCount == maxLineCount)
915 layout.engine()->option.setWrapMode(QTextOption::WrapMode(wrapMode));
917 unelidedRect = br.united(line.naturalTextRect());
921 if (multilineElide && naturalHeight > maxHeight && visibleCount > 1) {
923 heightExceeded =
true;
928 truncateHeight =
true;
932 const QTextLine previousLine = layout.lineAt(visibleCount - 1);
933 elideText = layoutText.at(line.textStart() - 1) != QChar::LineSeparator
934 ? elidedText(line.width(), previousLine, &line)
935 : elidedText(line.width(), previousLine);
936 elideStart = previousLine.textStart();
939 height = previousHeight;
943 const bool isLastLine = line.textStart() + line.textLength() >= layoutText.size();
945 if (singlelineElide && visibleCount == 1 && line.naturalTextWidth() > line.width()) {
948 widthExceeded =
true;
953 elideText = layout.engine()->elidedText(
954 Qt::TextElideMode(elideMode),
955 QFixed::fromReal(line.width()),
959 elideStart = line.textStart();
960 elideEnd = elideStart + line.textLength();
963 height = naturalHeight;
967 const bool wrappedLine = layoutText.at(line.textStart() + line.textLength() - 1) != QChar::LineSeparator;
968 wrapped |= wrappedLine;
971 ++unwrappedLineCount;
974 if (visibleCount == maxLineCount) {
976 heightExceeded |= wrapped;
978 if (multilineElide) {
983 const QTextLine nextLine = layout.createLine();
984 elideText = wrappedLine
985 ? elidedText(line.width(), line, &nextLine)
986 : elidedText(line.width(), line);
987 elideStart = line.textStart();
991 height = naturalHeight;
997 previousHeight = height;
998 height = naturalHeight;
1000 widthExceeded |= wrapped;
1008 if ((requireImplicitSize) && line.isValid() && unwrappedLineCount < maxLineCount) {
1011 for (
int lineCount = layout.lineCount(); lineCount < maxLineCount; ++lineCount) {
1012 line = layout.createLine();
1013 if (!line.isValid())
1015 if (layoutText.at(line.textStart() - 1) == QChar::LineSeparator)
1016 ++unwrappedLineCount;
1017 setLineGeometry(line, lineWidth, naturalHeight);
1022 const int eol = line.isValid()
1023 ? line.textStart() + line.textLength()
1024 : layoutText.size();
1025 if (eol < layoutText.size() && layoutText.at(eol) != QChar::LineSeparator)
1026 line = layout.createLine();
1027 for (; line.isValid() && unwrappedLineCount <= maxLineCount; ++unwrappedLineCount)
1028 line = layout.createLine();
1032 const qreal naturalWidth = layout.maximumWidth();
1034 bool wasInLayout = internalWidthUpdate;
1035 internalWidthUpdate =
true;
1036 q->setImplicitSize(naturalWidth + q->leftPadding() + q->rightPadding(), naturalHeight + qMax(lineHeightOffset(), 0) + q->topPadding() + q->bottomPadding());
1037 internalWidthUpdate = wasInLayout;
1040 singlelineElide = elideMode != QQuickText::ElideNone && q->widthValid();
1041 multilineElide = elideMode == QQuickText::ElideRight
1043 && (q->heightValid() || maximumLineCountValid);
1044 canWrap = wrapMode != QQuickText::NoWrap && q->widthValid();
1046 horizontalFit = fontSizeMode() & QQuickText::HorizontalFit && q->widthValid();
1047 verticalFit = fontSizeMode() & QQuickText::VerticalFit
1048 && (q->heightValid() || (maximumLineCountValid && canWrap));
1050 const qreal oldWidth = lineWidth;
1051 const qreal oldHeight = maxHeight;
1053 const qreal availWidth = availableWidth();
1054 const qreal availHeight = availableHeight();
1056 lineWidth = q->widthValid() && q->width() > 0 ? availWidth : naturalWidth;
1057 maxHeight = q->heightValid() ? availHeight : FLT_MAX;
1061 if ((!qFuzzyCompare(lineWidth, oldWidth) || (widthExceeded && lineWidth > oldWidth))
1062 && (singlelineElide || multilineElide || canWrap || horizontalFit
1063 || q->effectiveHAlign() != QQuickText::AlignLeft)) {
1064 widthChanged =
true;
1065 widthExceeded = lineWidth >= qMin(oldWidth, naturalWidth);
1066 heightExceeded =
false;
1072 if ((maxHeight < qMin(oldHeight, naturalHeight) || (heightExceeded && maxHeight > oldHeight))
1073 && (multilineElide || (canWrap && maximumLineCountValid))) {
1074 widthExceeded =
false;
1075 heightExceeded =
false;
1081 if (!q->widthValid() && !implicitWidthValid && unwrappedLineCount > 1 && q->effectiveHAlign() != QQuickText::AlignLeft) {
1082 widthExceeded =
false;
1083 heightExceeded =
false;
1086 }
else if (widthChanged) {
1087 widthChanged =
false;
1088 if (line.isValid()) {
1089 for (
int lineCount = layout.lineCount(); lineCount < maxLineCount; ++lineCount) {
1090 line = layout.createLine();
1091 if (!line.isValid())
1093 setLineGeometry(line, lineWidth, naturalHeight);
1098 bool wasInLayout = internalWidthUpdate;
1099 internalWidthUpdate =
true;
1100 q->setImplicitHeight(naturalHeight + qMax(lineHeightOffset(), 0) + q->topPadding() + q->bottomPadding());
1101 internalWidthUpdate = wasInLayout;
1103 multilineElide = elideMode == QQuickText::ElideRight
1105 && (q->heightValid() || maximumLineCountValid);
1106 verticalFit = fontSizeMode() & QQuickText::VerticalFit
1107 && (q->heightValid() || (maximumLineCountValid && canWrap));
1109 const qreal oldHeight = maxHeight;
1110 maxHeight = q->heightValid() ? availableHeight() : FLT_MAX;
1113 if ((maxHeight < qMin(oldHeight, naturalHeight) || (heightExceeded && maxHeight > oldHeight))
1114 && (multilineElide || (canWrap && maximumLineCountValid))) {
1115 widthExceeded =
false;
1116 heightExceeded =
false;
1125 if (eos != -1 && elide) {
1126 int start = eos + 1;
1127 eos = text.indexOf(QLatin1Char(
'\x9c'), start);
1128 layoutText = text.mid(start, eos != -1 ? eos - start : -1);
1129 layoutText.replace(QLatin1Char(
'\n'), QChar::LineSeparator);
1130 layout.setText(layoutText);
1131 textHasChanged =
true;
1138 if (layout.lineCount() > 0) {
1139 QTextLine firstLine = layout.lineAt(0);
1140 QTextLine lastLine = layout.lineAt(layout.lineCount() - 1);
1141 advance = QSizeF(lastLine.horizontalAdvance(),
1142 lastLine.y() - firstLine.y());
1147 if (!horizontalFit && !verticalFit)
1151 if (qFuzzyCompare(smallFont, largeFont))
1155 if (horizontalFit) {
1156 if (unelidedRect.width() > lineWidth || (!verticalFit && wrapped)) {
1157 widthExceeded =
true;
1158 largeFont = scaledFontSize;
1160 scaledFontSize = (smallFont + largeFont) / 2;
1163 }
else if (!verticalFit) {
1164 smallFont = scaledFontSize;
1167 if ((largeFont - smallFont) < sizeFittingThreshold)
1170 scaledFontSize = (smallFont + largeFont) / 2;
1175 if (truncateHeight || unelidedRect.height() > maxHeight) {
1176 heightExceeded =
true;
1177 largeFont = scaledFontSize;
1179 scaledFontSize = (smallFont + largeFont) / 2;
1182 smallFont = scaledFontSize;
1185 if ((largeFont - smallFont) < sizeFittingThreshold)
1188 scaledFontSize = (smallFont + largeFont) / 2;
1193 implicitWidthValid =
true;
1194 implicitHeightValid =
true;
1196 QFontInfo scaledFontInfo(scaledFont);
1197 if (fontInfo.weight() != scaledFontInfo.weight()
1198 || fontInfo.pixelSize() != scaledFontInfo.pixelSize()
1199 || fontInfo.italic() != scaledFontInfo.italic()
1200 || !qFuzzyCompare(fontInfo.pointSizeF(), scaledFontInfo.pointSizeF())
1201 || fontInfo.family() != scaledFontInfo.family()
1202 || fontInfo.styleName() != scaledFontInfo.styleName()) {
1203 fontInfo = scaledFontInfo;
1204 emit q->fontInfoChanged();
1207 if (eos != multilengthEos)
1210 assignedFont = QFontInfo(font).family();
1214 elideLayout.reset(
new QTextLayout);
1215 elideLayout->setCacheEnabled(
true);
1217 QTextEngine *engine = layout.engine();
1218 if (engine && engine->hasFormats()) {
1219 QList<QTextLayout::FormatRange> formats;
1220 switch (elideMode) {
1221 case QQuickText::ElideRight:
1222 elideFormats(elideStart, elideText.size() - 1, 0, &formats);
1224 case QQuickText::ElideLeft:
1225 elideFormats(elideEnd - elideText.size() + 1, elideText.size() - 1, 1, &formats);
1227 case QQuickText::ElideMiddle: {
1228 const int index = elideText.indexOf(elideChar);
1230 elideFormats(elideStart, index, 0, &formats);
1232 elideEnd - elideText.size() + index + 1,
1233 elideText.size() - index - 1,
1242 elideLayout->setFormats(formats);
1245 elideLayout->setFont(layout.font());
1246 elideLayout->setTextOption(layout.textOption());
1247 elideLayout->setText(elideText);
1248 elideLayout->beginLayout();
1250 QTextLine elidedLine = elideLayout->createLine();
1251 elidedLine.setPosition(QPointF(0, height));
1253 setupCustomLineGeometry(elidedLine, height, elideText.size(), visibleCount - 1);
1255 setLineGeometry(elidedLine, lineWidth, height);
1257 elideLayout->endLayout();
1259 br = br.united(elidedLine.naturalTextRect());
1261 if (visibleCount == 1)
1262 layout.clearLayout();
1264 elideLayout.reset();
1267 QTextLine firstLine = visibleCount == 1 && elideLayout
1268 ? elideLayout->lineAt(0)
1270 if (firstLine.isValid())
1271 *baseline = firstLine.y() + firstLine.ascent();
1274 br.setHeight(height);
1277 if (lineCount != visibleCount) {
1278 lineCount = visibleCount;
1279 emit q->lineCountChanged();
1282 if (truncated != wasTruncated)
1283 emit q->truncatedChanged();
1288void QQuickTextPrivate::setLineGeometry(QTextLine &line, qreal lineWidth, qreal &height)
1291 line.setLineWidth(lineWidth);
1293 if (extra.isAllocated() && extra->imgTags.isEmpty()) {
1294 line.setPosition(QPointF(line.position().x(), height));
1295 height += (lineHeightMode() == QQuickText::FixedHeight) ? lineHeight() : line.height() * lineHeight();
1300 qreal textHeight = line.height();
1301 qreal totalLineHeight = textHeight;
1303 QList<QQuickStyledTextImgTag *> imagesInLine;
1305 if (extra.isAllocated()) {
1306 for (QQuickStyledTextImgTag *image : std::as_const(extra->imgTags)) {
1307 if (image->position >= line.textStart() &&
1308 image->position < line.textStart() + line.textLength()) {
1311 const QQmlContext *context = qmlContext(q);
1312 const QUrl url = context->resolvedUrl(q->baseUrl()).resolved(image->url);
1313 image->pix.reset(
new QQuickPixmap(context->engine(), url, QRect(), image->size * effectiveDevicePixelRatio()));
1315 if (image->pix->isLoading()) {
1316 image->pix->connectFinished(q, SLOT(imageDownloadFinished()));
1317 }
else if (image->pix->isReady()) {
1318 if (!image->size.isValid()) {
1319 image->size = image->pix->implicitSize();
1322 needToUpdateLayout =
true;
1324 }
else if (image->pix->isError()) {
1325 qmlWarning(q) << image->pix->error();
1329 qreal ih = qreal(image->size.height());
1330 if (image->align == QQuickStyledTextImgTag::Top)
1332 else if (image->align == QQuickStyledTextImgTag::Middle)
1333 image->pos.setY((textHeight / 2.0) - (ih / 2.0));
1335 image->pos.setY(textHeight - ih);
1336 imagesInLine << image;
1337 textTop = qMax(textTop, qAbs(image->pos.y()));
1342 for (QQuickStyledTextImgTag *image : std::as_const(imagesInLine)) {
1343 totalLineHeight = qMax(totalLineHeight, textTop + image->pos.y() + image->size.height());
1344 const int leadX = line.cursorToX(image->position);
1345 const int trailX = line.cursorToX(image->position, QTextLine::Trailing);
1346 const bool rtl = trailX < leadX;
1347 image->pos.setX(leadX + (rtl ? (-image->offset - image->size.width()) : image->offset));
1348 image->pos.setY(image->pos.y() + height + textTop);
1349 extra->visibleImgTags << image;
1352 line.setPosition(QPointF(line.position().x(), height + textTop));
1353 height += (lineHeightMode() == QQuickText::FixedHeight) ? lineHeight() : totalLineHeight * lineHeight();
2593QSGNode *QQuickText::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data)
2598 if (d->text.isEmpty()) {
2599 d->containsUnscalableGlyphs =
false;
2604 if (d->updateType != QQuickTextPrivate::UpdatePaintNode && oldNode !=
nullptr) {
2606 d->updateType = QQuickTextPrivate::UpdateNone;
2610 d->updateType = QQuickTextPrivate::UpdateNone;
2612 const qreal dy = QQuickTextUtil::alignedY(d->layedOutTextRect.height() + d->lineHeightOffset(), d->availableHeight(), d->vAlign) + topPadding();
2614 QSGInternalTextNode *node =
nullptr;
2616 node = d->sceneGraphContext()->createInternalTextNode(d->sceneGraphRenderContext());
2618 node =
static_cast<QSGInternalTextNode *>(oldNode);
2620 node->setFiltering(smooth() ? QSGTexture::Linear : QSGTexture::Nearest);
2622 node->setTextStyle(QSGTextNode::TextStyle(d->style));
2623 node->setRenderType(QSGTextNode::RenderType(d->renderType));
2624 node->setRenderTypeQuality(d->renderTypeQuality());
2626 node->setMatrix(QMatrix4x4());
2628 node->setColor(QColor::fromRgba(d->color));
2629 node->setStyleColor(QColor::fromRgba(d->styleColor));
2630 node->setLinkColor(QColor::fromRgba(d->linkColor));
2632 node->setDevicePixelRatio(d->effectiveDevicePixelRatio());
2635 node->setViewport(clipRect());
2636 const qreal dx = QQuickTextUtil::alignedX(d->layedOutTextRect.width(), d->availableWidth(), effectiveHAlign()) + leftPadding();
2638 node->addTextDocument(QPointF(dx, dy), d->extra->doc);
2639 }
else if (d->layedOutTextRect.width() > 0) {
2640 if (flags().testFlag(ItemObservesViewport))
2641 node->setViewport(clipRect());
2643 node->setViewport(QRectF{});
2644 const qreal dx = QQuickTextUtil::alignedX(d->lineWidth, d->availableWidth(), effectiveHAlign()) + leftPadding();
2645 int unelidedLineCount = d->lineCount;
2647 unelidedLineCount -= 1;
2648 if (unelidedLineCount > 0)
2649 node->addTextLayout(QPointF(dx, dy), &d->layout, -1, -1,0, unelidedLineCount);
2652 node->addTextLayout(QPointF(dx, dy), d->elideLayout.get());
2654 if (d->extra.isAllocated()) {
2655 for (QQuickStyledTextImgTag *img : std::as_const(d->extra->visibleImgTags)) {
2656 if (img->pix && img->pix->isReady())
2657 node->addImage(QRectF(img->pos.x() + dx, img->pos.y() + dy, img->size.width(), img->size.height()), img->pix->image());
2662 d->containsUnscalableGlyphs = node->containsUnscalableGlyphs();
2666 invalidateFontCaches();