Add some enablers to QTextDocumentLayout
Required to access internals used in the layout process, so that we can present the layout in the scenegraph. For instance, the frameBoundingRect() for tables will be the internal bounding rect of the cells. To avoid regressions, I've added a separate function for the outer bounding rect. For now, this is private API, but if it turns out to be useful, the functions can easily be added as virtual to QAbstractTextDocumentLayout. Task-number: QTBUG-20917 Change-Id: I04e07d3850b21f9f0704bf8c8a3ffe97ee5c3fda Reviewed-on: http://codereview.qt-project.org/5539 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
This commit is contained in:
parent
1cfee04d5e
commit
c87dcd9a5d
@ -3136,6 +3136,46 @@ void QTextDocumentLayout::setFixedColumnWidth(int width)
|
||||
d->fixedColumnWidth = width;
|
||||
}
|
||||
|
||||
QRectF QTextDocumentLayout::tableCellBoundingRect(QTextTable *table, const QTextTableCell &cell) const
|
||||
{
|
||||
if (!cell.isValid())
|
||||
return QRectF();
|
||||
|
||||
QTextTableData *td = static_cast<QTextTableData *>(data(table));
|
||||
|
||||
QRectF tableRect = tableBoundingRect(table);
|
||||
QRectF cellRect = td->cellRect(cell);
|
||||
|
||||
return cellRect.translated(tableRect.topLeft());
|
||||
}
|
||||
|
||||
QRectF QTextDocumentLayout::tableBoundingRect(QTextTable *table) const
|
||||
{
|
||||
Q_D(const QTextDocumentLayout);
|
||||
if (d->docPrivate->pageSize.isNull())
|
||||
return QRectF();
|
||||
d->ensureLayoutFinished();
|
||||
|
||||
QPointF pos;
|
||||
const int framePos = table->firstPosition();
|
||||
QTextFrame *f = table;
|
||||
while (f) {
|
||||
QTextFrameData *fd = data(f);
|
||||
pos += fd->position.toPointF();
|
||||
|
||||
if (f != table) {
|
||||
if (QTextTable *table = qobject_cast<QTextTable *>(f)) {
|
||||
QTextTableCell cell = table->cellAt(framePos);
|
||||
if (cell.isValid())
|
||||
pos += static_cast<QTextTableData *>(fd)->cellPosition(cell).toPointF();
|
||||
}
|
||||
}
|
||||
|
||||
f = f->parentFrame();
|
||||
}
|
||||
return QRectF(pos, data(table)->size.toSizeF());
|
||||
}
|
||||
|
||||
QRectF QTextDocumentLayout::frameBoundingRect(QTextFrame *frame) const
|
||||
{
|
||||
Q_D(const QTextDocumentLayout);
|
||||
|
@ -60,7 +60,7 @@
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QTextListFormat;
|
||||
|
||||
class QTextTableCell;
|
||||
class QTextDocumentLayoutPrivate;
|
||||
|
||||
class Q_GUI_EXPORT QTextDocumentLayout : public QAbstractTextDocumentLayout
|
||||
@ -91,6 +91,8 @@ public:
|
||||
|
||||
virtual QRectF frameBoundingRect(QTextFrame *frame) const;
|
||||
virtual QRectF blockBoundingRect(const QTextBlock &block) const;
|
||||
QRectF tableBoundingRect(QTextTable *table) const;
|
||||
QRectF tableCellBoundingRect(QTextTable *table, const QTextTableCell &cell) const;
|
||||
|
||||
// ####
|
||||
int layoutStatus() const;
|
||||
|
Loading…
Reference in New Issue
Block a user