summaryrefslogtreecommitdiffstats
path: root/src/gui/text
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/text')
-rw-r--r--src/gui/text/qtextobject.cpp50
-rw-r--r--src/gui/text/qtextobject.h4
2 files changed, 53 insertions, 1 deletions
diff --git a/src/gui/text/qtextobject.cpp b/src/gui/text/qtextobject.cpp
index d1a39c6ab6..bd1e970583 100644
--- a/src/gui/text/qtextobject.cpp
+++ b/src/gui/text/qtextobject.cpp
@@ -1233,6 +1233,56 @@ QString QTextBlock::text() const
return text;
}
+/*!
+ \since 5.3
+
+ Returns the block's text format options as a list of continuous ranges
+ of QTextCharFormat. The range's character format is used when inserting text
+ within the range boundaries.
+
+ \sa charFormat(), blockFormat()
+*/
+QList<QTextLayout::FormatRange> QTextBlock::textFormats() const
+{
+ QList<QTextLayout::FormatRange> formats;
+ if (!p || !n)
+ return formats;
+
+ const QTextFormatCollection *formatCollection = p->formatCollection();
+
+ int start = 0;
+ int cur = start;
+ int format = -1;
+
+ const int pos = position();
+ QTextDocumentPrivate::FragmentIterator it = p->find(pos);
+ QTextDocumentPrivate::FragmentIterator end = p->find(pos + length() - 1); // -1 to omit the block separator char
+ for (; it != end; ++it) {
+ const QTextFragmentData * const frag = it.value();
+ if (format != it.value()->format) {
+ if (cur - start > 0) {
+ QTextLayout::FormatRange range;
+ range.start = start;
+ range.length = cur - start;
+ range.format = formatCollection->charFormat(format);
+ formats.append(range);
+ }
+
+ format = frag->format;
+ start = cur;
+ }
+ cur += frag->size_array[0];
+ }
+ if (cur - start > 0) {
+ QTextLayout::FormatRange range;
+ range.start = start;
+ range.length = cur - start;
+ range.format = formatCollection->charFormat(format);
+ formats.append(range);
+ }
+
+ return formats;
+}
/*!
Returns the text document this text block belongs to, or 0 if the
diff --git a/src/gui/text/qtextobject.h b/src/gui/text/qtextobject.h
index 87f2cf6197..6a127f0315 100644
--- a/src/gui/text/qtextobject.h
+++ b/src/gui/text/qtextobject.h
@@ -44,6 +44,7 @@
#include <QtCore/qobject.h>
#include <QtGui/qtextformat.h>
+#include <QtGui/qtextlayout.h>
#include <QtGui/qglyphrun.h>
QT_BEGIN_NAMESPACE
@@ -55,7 +56,6 @@ class QTextDocumentPrivate;
class QTextCursor;
class QTextBlock;
class QTextFragment;
-class QTextLayout;
class QTextList;
class Q_GUI_EXPORT QTextObject : public QObject
@@ -223,6 +223,8 @@ public:
QString text() const;
+ QList<QTextLayout::FormatRange> textFormats() const;
+
const QTextDocument *document() const;
QTextList *textList() const;