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 QTextLine nextLine = layout.createLine();
984 elideText = wrappedLine
985 ? elidedText(line.width(), line, &nextLine)
986 : elidedText(line.width(), line);
987 elideStart = line.textStart();
994 if (nextLine.isValid())
995 nextLine.setLineWidth(0);
998 height = naturalHeight;
1004 previousHeight = height;
1005 height = naturalHeight;
1007 widthExceeded |= wrapped;
1015 if ((requireImplicitSize) && line.isValid() && unwrappedLineCount < maxLineCount) {
1018 for (
int lineCount = layout.lineCount(); lineCount < maxLineCount; ++lineCount) {
1019 line = layout.createLine();
1020 if (!line.isValid())
1022 if (layoutText.at(line.textStart() - 1) == QChar::LineSeparator)
1023 ++unwrappedLineCount;
1024 setLineGeometry(line, lineWidth, naturalHeight);
1029 const int eol = line.isValid()
1030 ? line.textStart() + line.textLength()
1031 : layoutText.size();
1032 if (eol < layoutText.size() && layoutText.at(eol) != QChar::LineSeparator)
1033 line = layout.createLine();
1034 for (; line.isValid() && unwrappedLineCount < maxLineCount; ++unwrappedLineCount)
1035 line = layout.createLine();
1040 const qreal naturalWidth = layout.maximumWidth();
1042 bool wasInLayout = internalWidthUpdate;
1043 internalWidthUpdate =
true;
1044 q->setImplicitSize(naturalWidth + q->leftPadding() + q->rightPadding(), naturalHeight + qMax(lineHeightOffset(), 0) + q->topPadding() + q->bottomPadding());
1045 internalWidthUpdate = wasInLayout;
1048 singlelineElide = elideMode != QQuickText::ElideNone && q->widthValid();
1049 multilineElide = elideMode == QQuickText::ElideRight
1051 && (q->heightValid() || maximumLineCountValid);
1052 canWrap = wrapMode != QQuickText::NoWrap && q->widthValid();
1054 horizontalFit = fontSizeMode() & QQuickText::HorizontalFit && q->widthValid();
1055 verticalFit = fontSizeMode() & QQuickText::VerticalFit
1056 && (q->heightValid() || (maximumLineCountValid && canWrap));
1058 const qreal oldWidth = lineWidth;
1059 const qreal oldHeight = maxHeight;
1061 const qreal availWidth = availableWidth();
1062 const qreal availHeight = availableHeight();
1064 lineWidth = q->widthValid() && q->width() > 0 ? availWidth : naturalWidth;
1065 maxHeight = q->heightValid() ? availHeight : FLT_MAX;
1069 if ((!qFuzzyCompare(lineWidth, oldWidth) || (widthExceeded && lineWidth > oldWidth))
1070 && (singlelineElide || multilineElide || canWrap || horizontalFit
1071 || q->effectiveHAlign() != QQuickText::AlignLeft)) {
1072 widthChanged =
true;
1073 widthExceeded = lineWidth >= qMin(oldWidth, naturalWidth);
1074 heightExceeded =
false;
1080 if ((maxHeight < qMin(oldHeight, naturalHeight) || (heightExceeded && maxHeight > oldHeight))
1081 && (multilineElide || (canWrap && maximumLineCountValid))) {
1082 widthExceeded =
false;
1083 heightExceeded =
false;
1089 if (!q->widthValid() && !implicitWidthValid && unwrappedLineCount > 1 && q->effectiveHAlign() != QQuickText::AlignLeft) {
1090 widthExceeded =
false;
1091 heightExceeded =
false;
1094 }
else if (widthChanged) {
1095 widthChanged =
false;
1096 if (line.isValid()) {
1097 for (
int lineCount = layout.lineCount(); lineCount < maxLineCount; ++lineCount) {
1098 line = layout.createLine();
1099 if (!line.isValid())
1101 setLineGeometry(line, lineWidth, naturalHeight);
1106 bool wasInLayout = internalWidthUpdate;
1107 internalWidthUpdate =
true;
1108 q->setImplicitHeight(naturalHeight + qMax(lineHeightOffset(), 0) + q->topPadding() + q->bottomPadding());
1109 internalWidthUpdate = wasInLayout;
1111 multilineElide = elideMode == QQuickText::ElideRight
1113 && (q->heightValid() || maximumLineCountValid);
1114 verticalFit = fontSizeMode() & QQuickText::VerticalFit
1115 && (q->heightValid() || (maximumLineCountValid && canWrap));
1117 const qreal oldHeight = maxHeight;
1118 maxHeight = q->heightValid() ? availableHeight() : FLT_MAX;
1121 if ((maxHeight < qMin(oldHeight, naturalHeight) || (heightExceeded && maxHeight > oldHeight))
1122 && (multilineElide || (canWrap && maximumLineCountValid))) {
1123 widthExceeded =
false;
1124 heightExceeded =
false;
1133 if (eos != -1 && elide) {
1134 int start = eos + 1;
1135 eos = text.indexOf(QLatin1Char(
'\x9c'), start);
1136 layoutText = text.mid(start, eos != -1 ? eos - start : -1);
1137 layoutText.replace(QLatin1Char(
'\n'), QChar::LineSeparator);
1138 layout.setText(layoutText);
1139 textHasChanged =
true;
1146 if (layout.lineCount() > 0) {
1147 QTextLine firstLine = layout.lineAt(0);
1148 QTextLine lastLine = layout.lineAt(layout.lineCount() - 1);
1149 advance = QSizeF(lastLine.horizontalAdvance(),
1150 lastLine.y() - firstLine.y());
1155 if (!horizontalFit && !verticalFit)
1159 if (qFuzzyCompare(smallFont, largeFont))
1163 if (horizontalFit) {
1164 if (unelidedRect.width() > lineWidth || (!verticalFit && wrapped)) {
1165 widthExceeded =
true;
1166 largeFont = scaledFontSize;
1168 scaledFontSize = (smallFont + largeFont) / 2;
1171 }
else if (!verticalFit) {
1172 smallFont = scaledFontSize;
1175 if ((largeFont - smallFont) < sizeFittingThreshold)
1178 scaledFontSize = (smallFont + largeFont) / 2;
1183 if (truncateHeight || unelidedRect.height() > maxHeight) {
1184 heightExceeded =
true;
1185 largeFont = scaledFontSize;
1187 scaledFontSize = (smallFont + largeFont) / 2;
1190 smallFont = scaledFontSize;
1193 if ((largeFont - smallFont) < sizeFittingThreshold)
1196 scaledFontSize = (smallFont + largeFont) / 2;
1201 implicitWidthValid =
true;
1202 implicitHeightValid =
true;
1204 QFontInfo scaledFontInfo(scaledFont);
1205 if (fontInfo.weight() != scaledFontInfo.weight()
1206 || fontInfo.pixelSize() != scaledFontInfo.pixelSize()
1207 || fontInfo.italic() != scaledFontInfo.italic()
1208 || !qFuzzyCompare(fontInfo.pointSizeF(), scaledFontInfo.pointSizeF())
1209 || fontInfo.family() != scaledFontInfo.family()
1210 || fontInfo.styleName() != scaledFontInfo.styleName()) {
1211 fontInfo = scaledFontInfo;
1212 emit q->fontInfoChanged();
1215 if (eos != multilengthEos)
1218 assignedFont = QFontInfo(font).family();
1222 elideLayout.reset(
new QTextLayout);
1223 elideLayout->setCacheEnabled(
true);
1225 QTextEngine *engine = layout.engine();
1226 if (engine && engine->hasFormats()) {
1227 QList<QTextLayout::FormatRange> formats;
1228 switch (elideMode) {
1229 case QQuickText::ElideRight:
1230 elideFormats(elideStart, elideText.size() - 1, 0, &formats);
1232 case QQuickText::ElideLeft:
1233 elideFormats(elideEnd - elideText.size() + 1, elideText.size() - 1, 1, &formats);
1235 case QQuickText::ElideMiddle: {
1236 const int index = elideText.indexOf(elideChar);
1238 elideFormats(elideStart, index, 0, &formats);
1240 elideEnd - elideText.size() + index + 1,
1241 elideText.size() - index - 1,
1250 elideLayout->setFormats(formats);
1253 elideLayout->setFont(layout.font());
1254 elideLayout->setTextOption(layout.textOption());
1255 elideLayout->setText(elideText);
1256 elideLayout->beginLayout();
1258 QTextLine elidedLine = elideLayout->createLine();
1259 elidedLine.setPosition(QPointF(0, height));
1261 setupCustomLineGeometry(elidedLine, height, elideText.size(), visibleCount - 1);
1263 setLineGeometry(elidedLine, lineWidth, height);
1265 elideLayout->endLayout();
1267 br = br.united(elidedLine.naturalTextRect());
1269 if (visibleCount == 1)
1270 layout.clearLayout();
1272 elideLayout.reset();
1275 QTextLine firstLine = visibleCount == 1 && elideLayout
1276 ? elideLayout->lineAt(0)
1278 if (firstLine.isValid())
1279 *baseline = firstLine.y() + firstLine.ascent();
1282 br.setHeight(height);
1285 if (lineCount != visibleCount) {
1286 lineCount = visibleCount;
1287 emit q->lineCountChanged();
1290 if (truncated != wasTruncated)
1291 emit q->truncatedChanged();
1296void QQuickTextPrivate::setLineGeometry(QTextLine &line, qreal lineWidth, qreal &height)
1299 line.setLineWidth(lineWidth);
1301 if (extra.isAllocated() && extra->imgTags.isEmpty()) {
1302 line.setPosition(QPointF(line.position().x(), height));
1303 height += (lineHeightMode() == QQuickText::FixedHeight) ? lineHeight() : line.height() * lineHeight();
1308 qreal textHeight = line.height();
1309 qreal totalLineHeight = textHeight;
1311 QList<QQuickStyledTextImgTag *> imagesInLine;
1313 if (extra.isAllocated()) {
1314 for (QQuickStyledTextImgTag *image : std::as_const(extra->imgTags)) {
1315 if (image->position >= line.textStart() &&
1316 image->position < line.textStart() + line.textLength()) {
1319 const QQmlContext *context = qmlContext(q);
1320 const QUrl url = context->resolvedUrl(q->baseUrl()).resolved(image->url);
1321 image->pix.reset(
new QQuickPixmap(context->engine(), url, QRect(), image->size * effectiveDevicePixelRatio()));
1323 if (image->pix->isLoading()) {
1324 image->pix->connectFinished(q, SLOT(imageDownloadFinished()));
1325 }
else if (image->pix->isReady()) {
1326 if (!image->size.isValid()) {
1327 image->size = image->pix->implicitSize();
1330 needToUpdateLayout =
true;
1332 }
else if (image->pix->isError()) {
1333 qmlWarning(q) << image->pix->error();
1337 qreal ih = qreal(image->size.height());
1338 if (image->align == QQuickStyledTextImgTag::Top)
1340 else if (image->align == QQuickStyledTextImgTag::Middle)
1341 image->pos.setY((textHeight / 2.0) - (ih / 2.0));
1343 image->pos.setY(textHeight - ih);
1344 imagesInLine << image;
1345 textTop = qMax(textTop, qAbs(image->pos.y()));
1350 for (QQuickStyledTextImgTag *image : std::as_const(imagesInLine)) {
1351 totalLineHeight = qMax(totalLineHeight, textTop + image->pos.y() + image->size.height());
1352 const int leadX = line.cursorToX(image->position);
1353 const int trailX = line.cursorToX(image->position, QTextLine::Trailing);
1354 const bool rtl = trailX < leadX;
1355 image->pos.setX(leadX + (rtl ? (-image->offset - image->size.width()) : image->offset));
1356 image->pos.setY(image->pos.y() + height + textTop);
1357 extra->visibleImgTags << image;
1360 line.setPosition(QPointF(line.position().x(), height + textTop));
1361 height += (lineHeightMode() == QQuickText::FixedHeight) ? lineHeight() : totalLineHeight * lineHeight();
2601QSGNode *QQuickText::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data)
2606 if (d->text.isEmpty()) {
2607 d->containsUnscalableGlyphs =
false;
2612 if (d->updateType != QQuickTextPrivate::UpdatePaintNode && oldNode !=
nullptr) {
2614 d->updateType = QQuickTextPrivate::UpdateNone;
2618 d->updateType = QQuickTextPrivate::UpdateNone;
2620 const qreal dy = QQuickTextUtil::alignedY(d->layedOutTextRect.height() + d->lineHeightOffset(), d->availableHeight(), d->vAlign) + topPadding();
2622 QSGInternalTextNode *node =
nullptr;
2624 node = d->sceneGraphContext()->createInternalTextNode(d->sceneGraphRenderContext());
2626 node =
static_cast<QSGInternalTextNode *>(oldNode);
2628 node->setFiltering(smooth() ? QSGTexture::Linear : QSGTexture::Nearest);
2630 node->setTextStyle(QSGTextNode::TextStyle(d->style));
2631 node->setRenderType(QSGTextNode::RenderType(d->renderType));
2632 node->setRenderTypeQuality(d->renderTypeQuality());
2634 node->setMatrix(QMatrix4x4());
2636 node->setColor(QColor::fromRgba(d->color));
2637 node->setStyleColor(QColor::fromRgba(d->styleColor));
2638 node->setLinkColor(QColor::fromRgba(d->linkColor));
2640 node->setDevicePixelRatio(d->effectiveDevicePixelRatio());
2643 node->setViewport(clipRect());
2644 const qreal dx = QQuickTextUtil::alignedX(d->layedOutTextRect.width(), d->availableWidth(), effectiveHAlign()) + leftPadding();
2646 node->addTextDocument(QPointF(dx, dy), d->extra->doc);
2647 }
else if (d->layedOutTextRect.width() > 0) {
2648 if (flags().testFlag(ItemObservesViewport))
2649 node->setViewport(clipRect());
2651 node->setViewport(QRectF{});
2652 const qreal dx = QQuickTextUtil::alignedX(d->lineWidth, d->availableWidth(), effectiveHAlign()) + leftPadding();
2653 int unelidedLineCount = d->lineCount;
2655 unelidedLineCount -= 1;
2656 if (unelidedLineCount > 0)
2657 node->addTextLayout(QPointF(dx, dy), &d->layout, -1, -1,0, unelidedLineCount);
2660 node->addTextLayout(QPointF(dx, dy), d->elideLayout.get());
2662 if (d->extra.isAllocated()) {
2663 for (QQuickStyledTextImgTag *img : std::as_const(d->extra->visibleImgTags)) {
2664 if (img->pix && img->pix->isReady())
2665 node->addImage(QRectF(img->pos.x() + dx, img->pos.y() + dy, img->size.width(), img->size.height()), img->pix->image());
2670 d->containsUnscalableGlyphs = node->containsUnscalableGlyphs();
2674 invalidateFontCaches();