summaryrefslogtreecommitdiffstats
path: root/src/gui/text/qtextlayout.h
diff options
context:
space:
mode:
authorQt by Nokia <qt-info@nokia.com>2011-04-27 12:05:43 +0200
committeraxis <qt-info@nokia.com>2011-04-27 12:05:43 +0200
commit38be0d13830efd2d98281c645c3a60afe05ffece (patch)
tree6ea73f3ec77f7d153333779883e8120f82820abe /src/gui/text/qtextlayout.h
Initial import from the monolithic Qt.
This is the beginning of revision history for this module. If you want to look at revision history older than this, please refer to the Qt Git wiki for how to use Git history grafting. At the time of writing, this wiki is located here: http://qt.gitorious.org/qt/pages/GitIntroductionWithQt If you have already performed the grafting and you don't see any history beyond this commit, try running "git log" with the "--follow" argument. Branched from the monolithic repo, Qt master branch, at commit 896db169ea224deb96c59ce8af800d019de63f12
Diffstat (limited to 'src/gui/text/qtextlayout.h')
-rw-r--r--src/gui/text/qtextlayout.h259
1 files changed, 259 insertions, 0 deletions
diff --git a/src/gui/text/qtextlayout.h b/src/gui/text/qtextlayout.h
new file mode 100644
index 0000000000..9dd8ebd28f
--- /dev/null
+++ b/src/gui/text/qtextlayout.h
@@ -0,0 +1,259 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QTEXTLAYOUT_H
+#define QTEXTLAYOUT_H
+
+#include <QtCore/qstring.h>
+#include <QtCore/qnamespace.h>
+#include <QtCore/qrect.h>
+#include <QtCore/qvector.h>
+#include <QtGui/qcolor.h>
+#include <QtCore/qobject.h>
+#include <QtGui/qevent.h>
+#include <QtGui/qtextformat.h>
+#include <QtGui/qglyphs.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Gui)
+
+class QTextEngine;
+class QFont;
+class QRect;
+class QRegion;
+class QTextFormat;
+class QPalette;
+class QPainter;
+
+class Q_GUI_EXPORT QTextInlineObject
+{
+public:
+ QTextInlineObject(int i, QTextEngine *e) : itm(i), eng(e) {}
+ inline QTextInlineObject() : itm(0), eng(0) {}
+ inline bool isValid() const { return eng; }
+
+ QRectF rect() const;
+ qreal width() const;
+ qreal ascent() const;
+ qreal descent() const;
+ qreal height() const;
+
+ Qt::LayoutDirection textDirection() const;
+
+ void setWidth(qreal w);
+ void setAscent(qreal a);
+ void setDescent(qreal d);
+
+ int textPosition() const;
+
+ int formatIndex() const;
+ QTextFormat format() const;
+
+private:
+ friend class QTextLayout;
+ int itm;
+ QTextEngine *eng;
+};
+
+class QPaintDevice;
+class QTextFormat;
+class QTextLine;
+class QTextBlock;
+class QTextOption;
+
+class Q_GUI_EXPORT QTextLayout
+{
+public:
+ // does itemization
+ QTextLayout();
+ QTextLayout(const QString& text);
+ QTextLayout(const QString& text, const QFont &font, QPaintDevice *paintdevice = 0);
+ QTextLayout(const QTextBlock &b);
+ ~QTextLayout();
+
+ void setFont(const QFont &f);
+ QFont font() const;
+
+ void setText(const QString& string);
+ QString text() const;
+
+ void setTextOption(const QTextOption &option);
+ QTextOption textOption() const;
+
+ void setPreeditArea(int position, const QString &text);
+ int preeditAreaPosition() const;
+ QString preeditAreaText() const;
+
+ struct FormatRange {
+ int start;
+ int length;
+ QTextCharFormat format;
+ };
+ void setAdditionalFormats(const QList<FormatRange> &overrides);
+ QList<FormatRange> additionalFormats() const;
+ void clearAdditionalFormats();
+
+ void setCacheEnabled(bool enable);
+ bool cacheEnabled() const;
+
+ void beginLayout();
+ void endLayout();
+ void clearLayout();
+
+ QTextLine createLine();
+
+ int lineCount() const;
+ QTextLine lineAt(int i) const;
+ QTextLine lineForTextPosition(int pos) const;
+
+ enum CursorMode {
+ SkipCharacters,
+ SkipWords
+ };
+ bool isValidCursorPosition(int pos) const;
+ int nextCursorPosition(int oldPos, CursorMode mode = SkipCharacters) const;
+ int previousCursorPosition(int oldPos, CursorMode mode = SkipCharacters) const;
+
+ void draw(QPainter *p, const QPointF &pos, const QVector<FormatRange> &selections = QVector<FormatRange>(),
+ const QRectF &clip = QRectF()) const;
+ void drawCursor(QPainter *p, const QPointF &pos, int cursorPosition) const;
+ void drawCursor(QPainter *p, const QPointF &pos, int cursorPosition, int width) const;
+
+ QPointF position() const;
+ void setPosition(const QPointF &p);
+
+ QRectF boundingRect() const;
+
+ qreal minimumWidth() const;
+ qreal maximumWidth() const;
+
+#if !defined(QT_NO_RAWFONT)
+ QList<QGlyphs> glyphs() const;
+#endif
+
+ QTextEngine *engine() const { return d; }
+ void setFlags(int flags);
+private:
+ QTextLayout(QTextEngine *e) : d(e) {}
+ Q_DISABLE_COPY(QTextLayout)
+
+ friend class QPainter;
+ friend class QPSPrinter;
+ friend class QGraphicsSimpleTextItemPrivate;
+ friend class QGraphicsSimpleTextItem;
+ friend void qt_format_text(const QFont &font, const QRectF &_r, int tf, const QTextOption *, const QString& str,
+ QRectF *brect, int tabstops, int* tabarray, int tabarraylen,
+ QPainter *painter);
+ QTextEngine *d;
+};
+
+
+class Q_GUI_EXPORT QTextLine
+{
+public:
+ inline QTextLine() : i(0), eng(0) {}
+ inline bool isValid() const { return eng; }
+
+ QRectF rect() const;
+ qreal x() const;
+ qreal y() const;
+ qreal width() const;
+ qreal ascent() const;
+ qreal descent() const;
+ qreal height() const;
+ qreal leading() const;
+
+ void setLeadingIncluded(bool included);
+ bool leadingIncluded() const;
+
+ qreal naturalTextWidth() const;
+ qreal horizontalAdvance() const;
+ QRectF naturalTextRect() const;
+
+ enum Edge {
+ Leading,
+ Trailing
+ };
+ enum CursorPosition {
+ CursorBetweenCharacters,
+ CursorOnCharacter
+ };
+
+ /* cursorPos gets set to the valid position */
+ qreal cursorToX(int *cursorPos, Edge edge = Leading) const;
+ inline qreal cursorToX(int cursorPos, Edge edge = Leading) const { return cursorToX(&cursorPos, edge); }
+ int xToCursor(qreal x, CursorPosition = CursorBetweenCharacters) const;
+
+ void setLineWidth(qreal width);
+ void setNumColumns(int columns);
+ void setNumColumns(int columns, qreal alignmentWidth);
+
+ void setPosition(const QPointF &pos);
+ QPointF position() const;
+
+ int textStart() const;
+ int textLength() const;
+
+ int lineNumber() const { return i; }
+
+ void draw(QPainter *p, const QPointF &point, const QTextLayout::FormatRange *selection = 0) const;
+
+private:
+ QTextLine(int line, QTextEngine *e) : i(line), eng(e) {}
+ void layout_helper(int numGlyphs);
+
+#if !defined(QT_NO_RAWFONT)
+ QList<QGlyphs> glyphs(int from, int length) const;
+#endif
+
+ friend class QTextLayout;
+ friend class QTextFragment;
+ int i;
+ QTextEngine *eng;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QTEXTLAYOUT_H