summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>2011-09-23 12:50:44 +0200
committerQt by Nokia <qt-info@nokia.com>2011-09-26 16:05:36 +0200
commitc87dcd9a5df43abc9ee111b0051233a0fe9dd11a (patch)
treec62c3204006b0c7b03bcfe24bb87074ff2321f66
parent1cfee04d5e8eb3f5d539aad9625f92ff4d294f9c (diff)
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>
-rw-r--r--src/gui/text/qtextdocumentlayout.cpp40
-rw-r--r--src/gui/text/qtextdocumentlayout_p.h4
2 files changed, 43 insertions, 1 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);
diff --git a/src/gui/text/qtextdocumentlayout_p.h b/src/gui/text/qtextdocumentlayout_p.h
index b103d886be..bef4c844f6 100644
--- a/src/gui/text/qtextdocumentlayout_p.h
+++ b/src/gui/text/qtextdocumentlayout_p.h
@@ -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;