qwt_text_engine.h 4.92 KB
Newer Older
pixhawk's avatar
pixhawk committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
 * Qwt Widget Library
 * Copyright (C) 1997   Josef Wilgen
 * Copyright (C) 2003   Uwe Rathmann
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the Qwt License, Version 1.0
 *****************************************************************************/

// vim: expandtab

#ifndef QWT_TEXT_ENGINE_H
#define QWT_TEXT_ENGINE_H 1

#include <qsize.h>
#include "qwt_global.h"

class QFont;
class QRect;
class QString;
class QPainter;

23
/*!
pixhawk's avatar
pixhawk committed
24 25 26
  \brief Abstract base class for rendering text strings

  A text engine is responsible for rendering texts for a
27
  specific text format. They are used by QwtText to render a text.
pixhawk's avatar
pixhawk committed
28

29
  QwtPlainTextEngine and QwtRichTextEngine are part of the Qwt library.
pixhawk's avatar
pixhawk committed
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

  QwtMathMLTextEngine can be found in Qwt MathML extension, that
  needs the MathML renderer of the Qt solutions package. Unfortunately
  it is only available with a commercial Qt license.

  \sa QwtText::setTextEngine
*/

class QWT_EXPORT QwtTextEngine
{
public:
    virtual ~QwtTextEngine();

    /*!
      Find the height for a given width

      \param font Font of the text
      \param flags Bitwise OR of the flags used like in QPainter::drawText
      \param text Text to be rendered
49
      \param width Width
pixhawk's avatar
pixhawk committed
50 51 52

      \return Calculated height
     */
53 54
    virtual int heightForWidth(const QFont &font, int flags,
                               const QString &text, int width) const = 0;
pixhawk's avatar
pixhawk committed
55 56 57 58 59 60 61 62 63 64 65

    /*!
      Returns the size, that is needed to render text

      \param font Font of the text
      \param flags Bitwise OR of the flags like in for QPainter::drawText
      \param text Text to be rendered

      \return Caluclated size
     */
    virtual QSize textSize(const QFont &font, int flags,
66
                           const QString &text) const = 0;
pixhawk's avatar
pixhawk committed
67

68
    /*!
pixhawk's avatar
pixhawk committed
69 70 71 72 73 74 75 76 77 78
      Test if a string can be rendered by this text engine

      \param text Text to be tested
      \return true, if it can be rendered
     */
    virtual bool mightRender(const QString &text) const = 0;

    /*!
      Return margins around the texts

79
      The textSize might include margins around the
pixhawk's avatar
pixhawk committed
80 81 82 83 84 85 86 87 88 89 90 91
      text, like QFontMetrics::descent. In situations
      where texts need to be aligend in detail, knowing
      these margins might improve the layout calculations.

      \param font Font of the text
      \param text Text to be rendered
      \param left Return value for the left margin
      \param right Return value for the right margin
      \param top Return value for the top margin
      \param bottom Return value for the bottom margin
     */
    virtual void textMargins(const QFont &font, const QString &text,
92
                             int &left, int &right, int &top, int &bottom) const = 0;
pixhawk's avatar
pixhawk committed
93 94 95 96 97 98 99 100

    /*!
      Draw the text in a clipping rectangle

      \param painter Painter
      \param rect Clipping rectangle
      \param flags Bitwise OR of the flags like in for QPainter::drawText
      \param text Text to be rendered
101
     */
pixhawk's avatar
pixhawk committed
102
    virtual void draw(QPainter *painter, const QRect &rect,
103
                      int flags, const QString &text) const = 0;
pixhawk's avatar
pixhawk committed
104 105 106 107 108 109 110 111 112 113

protected:
    QwtTextEngine();
};


/*!
  \brief A text engine for plain texts

  QwtPlainTextEngine renders texts using the basic Qt classes
114
  QPainter and QFontMetrics.
pixhawk's avatar
pixhawk committed
115 116 117 118 119 120 121
*/
class QWT_EXPORT QwtPlainTextEngine: public QwtTextEngine
{
public:
    QwtPlainTextEngine();
    virtual ~QwtPlainTextEngine();

122 123
    virtual int heightForWidth(const QFont &font, int flags,
                               const QString &text, int width) const;
pixhawk's avatar
pixhawk committed
124 125

    virtual QSize textSize(const QFont &font, int flags,
126
                           const QString &text) const;
pixhawk's avatar
pixhawk committed
127 128

    virtual void draw(QPainter *painter, const QRect &rect,
129
                      int flags, const QString &text) const;
pixhawk's avatar
pixhawk committed
130 131 132 133

    virtual bool mightRender(const QString &) const;

    virtual void textMargins(const QFont &, const QString &,
134
                             int &left, int &right, int &top, int &bottom) const;
pixhawk's avatar
pixhawk committed
135 136

private:
137
    class PrivateData;
pixhawk's avatar
pixhawk committed
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
    PrivateData *d_data;
};


#ifndef QT_NO_RICHTEXT

/*!
  \brief A text engine for Qt rich texts

  QwtRichTextEngine renders Qt rich texts using the classes
  of the Scribe framework of Qt.
*/
class QWT_EXPORT QwtRichTextEngine: public QwtTextEngine
{
public:
    QwtRichTextEngine();

155 156
    virtual int heightForWidth(const QFont &font, int flags,
                               const QString &text, int width) const;
pixhawk's avatar
pixhawk committed
157 158

    virtual QSize textSize(const QFont &font, int flags,
159
                           const QString &text) const;
pixhawk's avatar
pixhawk committed
160 161

    virtual void draw(QPainter *painter, const QRect &rect,
162
                      int flags, const QString &text) const;
pixhawk's avatar
pixhawk committed
163 164 165 166

    virtual bool mightRender(const QString &) const;

    virtual void textMargins(const QFont &, const QString &,
167
                             int &left, int &right, int &top, int &bottom) const;
pixhawk's avatar
pixhawk committed
168 169 170 171 172 173 174
private:
    QString taggedText(const QString &, int flags) const;
};

#endif // !QT_NO_RICHTEXT

#endif