// qtextlayout.sip generated by MetaSIP on Sun Nov  9 16:48:00 2014
//
// This file is part of the QtGui Python extension module.
//
// Copyright (c) 2014 Riverbank Computing Limited <info@riverbankcomputing.com>
// 
// This file is part of PyQt.
// 
// This file may be used under the terms of the GNU General Public
// License versions 2.0 or 3.0 as published by the Free Software
// Foundation and appearing in the files LICENSE.GPL2 and LICENSE.GPL3
// included in the packaging of this file.  Alternatively you may (at
// your option) use any later version of the GNU General Public
// License if such license has been publicly approved by Riverbank
// Computing Limited (or its successors, if any) and the KDE Free Qt
// Foundation. In addition, as a special exception, Riverbank gives you
// certain additional rights. These rights are described in the Riverbank
// GPL Exception version 1.1, which can be found in the file
// GPL_EXCEPTION.txt in this package.
// 
// If you are unsure which license is appropriate for your use, please
// contact the sales department at sales@riverbankcomputing.com.
// 
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.


class QTextInlineObject
{
%TypeHeaderCode
#include <qtextlayout.h>
%End

public:
    bool isValid() const;
    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;
};

class QTextLayout
{
%TypeHeaderCode
#include <qtextlayout.h>
%End

public:
    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);
%If (Qt_5_0_0 -)
    const QTextOption &textOption() const;
%End
%If (- Qt_5_0_0)
    QTextOption textOption() const;
%End
    void setPreeditArea(int position, const QString &text);
    int preeditAreaPosition() const;
    QString preeditAreaText() const;

    struct FormatRange
    {
%TypeHeaderCode
#include <qtextlayout.h>
%End

        int start;
        int length;
        QTextCharFormat format;
    };

    void setAdditionalFormats(const QList<QTextLayout::FormatRange> &overrides);
    QList<QTextLayout::FormatRange> additionalFormats() const;
    void clearAdditionalFormats();
    void setCacheEnabled(bool enable);
    bool cacheEnabled() const;
    void beginLayout();
    void endLayout();
    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, QTextLayout::CursorMode mode = QTextLayout::SkipCharacters) const;
    int previousCursorPosition(int oldPos, QTextLayout::CursorMode mode = QTextLayout::SkipCharacters) const;
    void draw(QPainter *p, const QPointF &pos, const QVector<QTextLayout::FormatRange> &selections /DocValue="list-of-QTextLayout.FormatRange"/ = QVector<QTextLayout::FormatRange>(), const QRectF &clip = QRectF()) const;
    void drawCursor(QPainter *p, const QPointF &pos, int cursorPosition) const;
%If (Qt_4_2_0 -)
    void drawCursor(QPainter *p, const QPointF &pos, int cursorPosition, int width) const;
%End
    QPointF position() const;
    void setPosition(const QPointF &p);
    QRectF boundingRect() const;
    qreal minimumWidth() const;
    qreal maximumWidth() const;
%If (Qt_4_4_0 -)
    void clearLayout();
%End
%If (Qt_4_8_0 -)
    void setCursorMoveStyle(Qt::CursorMoveStyle style);
%End
%If (Qt_4_8_0 -)
    Qt::CursorMoveStyle cursorMoveStyle() const;
%End
%If (Qt_4_8_0 -)
    int leftCursorPosition(int oldPos) const;
%End
%If (Qt_4_8_0 -)
    int rightCursorPosition(int oldPos) const;
%End
%If (Qt_5_0_0 -)
    QList<QGlyphRun> glyphRuns(int from = -1, int length = -1) const;
%End
%If (Qt_4_8_0 - Qt_5_0_0)
%If (PyQt_RawFont)
    QList<QGlyphRun> glyphRuns() const;
%End
%End

private:
    QTextLayout(const QTextLayout &);
};

class QTextLine
{
%TypeHeaderCode
#include <qtextlayout.h>
%End

public:
    QTextLine();
    bool isValid() const;
    QRectF rect() const;
    qreal x() const;
    qreal y() const;
    qreal width() const;
    qreal ascent() const;
    qreal descent() const;
    qreal height() const;
    qreal naturalTextWidth() const;
    QRectF naturalTextRect() const;

    enum Edge
    {
        Leading,
        Trailing,
    };

    enum CursorPosition
    {
        CursorBetweenCharacters,
        CursorOnCharacter,
    };

    qreal cursorToX(int *cursorPos /In,Out/, QTextLine::Edge edge = QTextLine::Leading) const;
    int xToCursor(qreal x, QTextLine::CursorPosition edge = QTextLine::CursorBetweenCharacters) const;
    void setLineWidth(qreal width);
    void setNumColumns(int columns);
%If (Qt_4_3_0 -)
    void setNumColumns(int columns, qreal alignmentWidth);
%End
    void setPosition(const QPointF &pos);
    int textStart() const;
    int textLength() const;
    int lineNumber() const;
    void draw(QPainter *painter, const QPointF &position, const QTextLayout::FormatRange *selection = 0) const;
%If (Qt_4_2_0 -)
    QPointF position() const;
%End
%If (Qt_4_6_0 -)
    qreal leading() const;
%End
%If (Qt_4_6_0 -)
    void setLeadingIncluded(bool included);
%End
%If (Qt_4_6_0 -)
    bool leadingIncluded() const;
%End
%If (Qt_4_7_0 -)
    qreal horizontalAdvance() const;
%End
%If (Qt_5_0_0 -)
    QList<QGlyphRun> glyphRuns(int from = -1, int length = -1) const;
%End
};
