Render markdown task lists (checkboxes instead of bullets) in QTextEdit
Checkboxes are right-aligned with any bullets that are in the same QTextList so that there is enough space to make them larger than bullets. But hopefully mixing bullets and checkboxes will be a rarely-used feature. Change-Id: I28e274d1f7883aa093df29eb4988e99641e87a71 Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
parent
deae75ae09
commit
75256d62d2
|
|
@ -50,6 +50,12 @@ The list will automatically be renumbered if you add or remove items. *Try
|
|||
adding new sections to the above list or removing existing item to see the
|
||||
numbers change.*
|
||||
|
||||
Task lists can be used to track progress on projects:
|
||||
|
||||
- [ ] This is not yet done
|
||||
- This is just a bullet point
|
||||
- [x] This is done
|
||||
|
||||
## Images
|
||||
|
||||
Inline images are treated like ordinary ranges of characters in the text
|
||||
|
|
|
|||
|
|
@ -1436,6 +1436,21 @@ void QTextDocumentLayoutPrivate::drawListItem(const QPointF &offset, QPainter *p
|
|||
|
||||
QBrush brush = context.palette.brush(QPalette::Text);
|
||||
|
||||
bool marker = bl.blockFormat().marker() != QTextBlockFormat::NoMarker;
|
||||
if (marker) {
|
||||
int adj = fontMetrics.lineSpacing() / 6;
|
||||
r.adjust(-adj, 0, -adj, 0);
|
||||
if (bl.blockFormat().marker() == QTextBlockFormat::Checked) {
|
||||
// ### Qt6: render with QStyle / PE_IndicatorCheckBox. We don't currently
|
||||
// have access to that here, because it would be a widget dependency.
|
||||
painter->setPen(QPen(painter->pen().color(), 2));
|
||||
painter->drawLine(r.topLeft(), r.bottomRight());
|
||||
painter->drawLine(r.topRight(), r.bottomLeft());
|
||||
painter->setPen(QPen(painter->pen().color(), 0));
|
||||
}
|
||||
painter->drawRect(r.adjusted(-adj, -adj, adj, adj));
|
||||
}
|
||||
|
||||
switch (style) {
|
||||
case QTextListFormat::ListDecimal:
|
||||
case QTextListFormat::ListLowerAlpha:
|
||||
|
|
@ -1456,16 +1471,21 @@ void QTextDocumentLayoutPrivate::drawListItem(const QPointF &offset, QPainter *p
|
|||
break;
|
||||
}
|
||||
case QTextListFormat::ListSquare:
|
||||
painter->fillRect(r, brush);
|
||||
if (!marker)
|
||||
painter->fillRect(r, brush);
|
||||
break;
|
||||
case QTextListFormat::ListCircle:
|
||||
painter->setPen(QPen(brush, 0));
|
||||
painter->drawEllipse(r.translated(0.5, 0.5)); // pixel align for sharper rendering
|
||||
if (!marker) {
|
||||
painter->setPen(QPen(brush, 0));
|
||||
painter->drawEllipse(r.translated(0.5, 0.5)); // pixel align for sharper rendering
|
||||
}
|
||||
break;
|
||||
case QTextListFormat::ListDisc:
|
||||
painter->setBrush(brush);
|
||||
painter->setPen(Qt::NoPen);
|
||||
painter->drawEllipse(r);
|
||||
if (!marker) {
|
||||
painter->setBrush(brush);
|
||||
painter->setPen(Qt::NoPen);
|
||||
painter->drawEllipse(r);
|
||||
}
|
||||
break;
|
||||
case QTextListFormat::ListStyleUndefined:
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in New Issue