summaryrefslogtreecommitdiffstats
path: root/src/gui/text/qtextdocumentlayout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/text/qtextdocumentlayout.cpp')
-rw-r--r--src/gui/text/qtextdocumentlayout.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp
index 04bdfa8d30..5138aa3e70 100644
--- a/src/gui/text/qtextdocumentlayout.cpp
+++ b/src/gui/text/qtextdocumentlayout.cpp
@@ -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);