summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Faure <[email protected]>2024-07-18 01:46:58 +0200
committerDavid Faure <[email protected]>2024-07-20 12:06:51 +0200
commit99c1465215beac52fad4c6772c9bfef2209157e4 (patch)
tree72704be95ef20e80af24e7182239ef8d1975f96b
parent8f04defa1e3973faec19a9cb1ab9bbf1ea7fb031 (diff)
QTextDocument: repair AlignBaseline for inline objects
The code from QTBUG-14414 (Qt4 commit ee9455ed2a83084692d969c398ecb91bcd4fc33a) was removed in commit 199f9c54484b0dae3bc81f83c880a965192ecb24, due to an oversight: that commit was only about images, while there's also the case of inline objects that contain actual text. Such objects are easy to overlook because they are not provided by Qt itself. They are however common in applications that implement word-processor-looking "variables", like a place-holder for "page number", for instance). Pick-to: 6.8 6.7 Change-Id: I2ff1476583bdfe24abcc523cffb65ce116b7faf9 Reviewed-by: Axel Spoerl <[email protected]>
-rw-r--r--src/gui/text/qtextdocumentlayout.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp
index 406ef9d86f1..ef91decc9ff 100644
--- a/src/gui/text/qtextdocumentlayout.cpp
+++ b/src/gui/text/qtextdocumentlayout.cpp
@@ -3896,14 +3896,25 @@ void QTextDocumentLayout::resizeInlineObject(QTextInlineObject item, int posInDo
QSizeF inlineSize = (pos == QTextFrameFormat::InFlow ? intrinsic : QSizeF(0, 0));
item.setWidth(inlineSize.width());
- if (f.verticalAlignment() == QTextCharFormat::AlignMiddle) {
+ switch (f.verticalAlignment()) {
+ case QTextCharFormat::AlignMiddle: {
QFontMetrics m(f.font());
qreal halfX = m.xHeight()/2.;
item.setAscent((inlineSize.height() + halfX) / 2.);
item.setDescent((inlineSize.height() - halfX) / 2.);
- } else {
+ break;
+ }
+ case QTextCharFormat::AlignBaseline: {
+ QFontMetrics m(f.font());
+ qreal descent = m.descent();
+ item.setDescent(descent);
+ item.setAscent(inlineSize.height() - descent);
+ break;
+ }
+ default:
item.setDescent(0);
item.setAscent(inlineSize.height());
+ break;
}
}