void KoVariable::resize(const QTextDocument *document, QTextInlineObject object, int posInDocument, const QTextCharFormat &format, QPaintDevice *pd) { Q_D(KoVariable); Q_UNUSED(document); Q_UNUSED(posInDocument); if (d->modified == false) return; if (object.isValid() == false) return; d->modified = true; Q_ASSERT(format.isCharFormat()); QFontMetricsF fm(format.font(), pd); qreal width = qMax(qreal(0.0), fm.width(d->value)); qreal ascent = fm.ascent(); qreal descent = fm.descent(); if (object.width() != width) { object.setWidth(width); } if (object.ascent() != ascent) { object.setAscent(ascent); } if (object.descent() != descent) { object.setDescent(descent); } }
void KoVariable::paint(QPainter &painter, QPaintDevice *pd, const QTextDocument *document, const QRectF &rect, QTextInlineObject object, int posInDocument, const QTextCharFormat &format) { Q_D(KoVariable); Q_UNUSED(document); Q_UNUSED(posInDocument); // TODO set all the font properties from the format (color etc) QFont font(format.font(), pd); QTextLayout layout(d->value, font, pd); layout.setCacheEnabled(true); QList<QTextLayout::FormatRange> layouts; QTextLayout::FormatRange range; range.start = 0; range.length = d->value.length(); range.format = format; layouts.append(range); layout.setAdditionalFormats(layouts); QTextOption option(Qt::AlignLeft | Qt::AlignAbsolute); if (object.isValid()) { option.setTextDirection(object.textDirection()); } layout.setTextOption(option); layout.beginLayout(); layout.createLine(); layout.endLayout(); layout.draw(&painter, rect.topLeft()); }