diff options
Diffstat (limited to 'src/gui/text/qtextdocument.cpp')
-rw-r--r-- | src/gui/text/qtextdocument.cpp | 65 |
1 files changed, 63 insertions, 2 deletions
diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index 15a313e13d..c39d3514c5 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -53,6 +53,9 @@ namespace { QTextDocument::ResourceProvider qt_defaultResourceProvider; }; +QAbstractUndoItem::~QAbstractUndoItem() + = default; + /*! \fn bool Qt::mightBeRichText(QAnyStringView text) @@ -2757,6 +2760,51 @@ bool QTextHtmlExporter::emitCharFormatStyle(const QTextCharFormat &format) html += " -qt-stroke-width:"_L1; html += QString::number(outlinePen.widthF()); html += "px;"_L1; + + html += " -qt-stroke-linecap:"_L1; + if (outlinePen.capStyle() == Qt::SquareCap) + html += "squarecap;"_L1; + else if (outlinePen.capStyle() == Qt::FlatCap) + html += "flatcap;"_L1; + else if (outlinePen.capStyle() == Qt::RoundCap) + html += "roundcap;"_L1; + + html += " -qt-stroke-linejoin:"_L1; + if (outlinePen.joinStyle() == Qt::MiterJoin) + html += "miterjoin;"_L1; + else if (outlinePen.joinStyle() == Qt::SvgMiterJoin) + html += "svgmiterjoin;"_L1; + else if (outlinePen.joinStyle() == Qt::BevelJoin) + html += "beveljoin;"_L1; + else if (outlinePen.joinStyle() == Qt::RoundJoin) + html += "roundjoin;"_L1; + + if (outlinePen.joinStyle() == Qt::MiterJoin || + outlinePen.joinStyle() == Qt::SvgMiterJoin) { + html += " -qt-stroke-miterlimit:"_L1; + html += QString::number(outlinePen.miterLimit()); + html += u';'; + } + + if (outlinePen.style() == Qt::CustomDashLine && !outlinePen.dashPattern().empty()) { + html += " -qt-stroke-dasharray:"_L1; + QString dashArrayString; + QList<qreal> dashes = outlinePen.dashPattern(); + + for (int i = 0; i < dashes.length() - 1; i++) { + qreal dash = dashes[i]; + dashArrayString += QString::number(dash) + u','; + } + + dashArrayString += QString::number(dashes.last()); + html += dashArrayString; + html += u';'; + + html += " -qt-stroke-dashoffset:"_L1; + html += QString::number(outlinePen.dashOffset()); + html += u';'; + } + attributesEmitted = true; } @@ -2944,6 +2992,17 @@ void QTextHtmlExporter::emitFragment(const QTextFragment &fragment) html += "<img"_L1; + QString maxWidthCss; + + if (imgFmt.hasProperty(QTextFormat::ImageMaxWidth)) { + auto length = imgFmt.lengthProperty(QTextFormat::ImageMaxWidth); + maxWidthCss += "max-width:"_L1; + if (length.type() == QTextLength::PercentageLength) + maxWidthCss += QString::number(length.rawValue()) + "%;"_L1; + else if (length.type() == QTextLength::FixedLength) + maxWidthCss += QString::number(length.rawValue()) + "px;"_L1; + } + if (imgFmt.hasProperty(QTextFormat::ImageName)) emitAttribute("src", imgFmt.name()); @@ -2960,9 +3019,11 @@ void QTextHtmlExporter::emitFragment(const QTextFragment &fragment) emitAttribute("height", QString::number(imgFmt.height())); if (imgFmt.verticalAlignment() == QTextCharFormat::AlignMiddle) - html += " style=\"vertical-align: middle;\""_L1; + html += " style=\"vertical-align: middle;"_L1 + maxWidthCss + u'\"'; else if (imgFmt.verticalAlignment() == QTextCharFormat::AlignTop) - html += " style=\"vertical-align: top;\""_L1; + html += " style=\"vertical-align: top;"_L1 + maxWidthCss + u'\"'; + else if (!maxWidthCss.isEmpty()) + html += " style=\""_L1 + maxWidthCss + u'\"'; if (QTextFrame *imageFrame = qobject_cast<QTextFrame *>(doc->objectForFormat(imgFmt))) emitFloatStyle(imageFrame->frameFormat().position()); |