qwt_text_engine.h 4.74 KB
Newer Older
pixhawk's avatar
pixhawk committed
1
2
3
4
5
6
7
8
9
10
11
12
13
/* -*- 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
 *****************************************************************************/

#ifndef QWT_TEXT_ENGINE_H
#define QWT_TEXT_ENGINE_H 1

#include "qwt_global.h"
Bryant's avatar
Bryant committed
14
#include <qsize.h>
pixhawk's avatar
pixhawk committed
15
16

class QFont;
Bryant's avatar
Bryant committed
17
class QRectF;
pixhawk's avatar
pixhawk committed
18
19
20
class QString;
class QPainter;

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

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

27
  QwtPlainTextEngine and QwtRichTextEngine are part of the Qwt library.
Bryant's avatar
Bryant committed
28
29
30
31
32
  The implementation of QwtMathMLTextEngine uses code from the 
  Qt solution package. Because of license implications it is built into
  a separate library.
 
  \sa QwtText::setTextEngine()
pixhawk's avatar
pixhawk committed
33
34
35
36
37
38
39
40
41
42
43
44
45
*/

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
46
      \param width Width
pixhawk's avatar
pixhawk committed
47
48
49

      \return Calculated height
     */
Bryant's avatar
Bryant committed
50
51
    virtual double heightForWidth( const QFont &font, int flags,
        const QString &text, double width ) const = 0;
pixhawk's avatar
pixhawk committed
52
53
54
55
56
57
58
59

    /*!
      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

Bryant's avatar
Bryant committed
60
      \return Calculated size
pixhawk's avatar
pixhawk committed
61
     */
Bryant's avatar
Bryant committed
62
63
    virtual QSizeF textSize( const QFont &font, int flags,
        const QString &text ) const = 0;
pixhawk's avatar
pixhawk committed
64

65
    /*!
pixhawk's avatar
pixhawk committed
66
67
68
69
70
      Test if a string can be rendered by this text engine

      \param text Text to be tested
      \return true, if it can be rendered
     */
Bryant's avatar
Bryant committed
71
    virtual bool mightRender( const QString &text ) const = 0;
pixhawk's avatar
pixhawk committed
72
73
74
75

    /*!
      Return margins around the texts

76
      The textSize might include margins around the
Bryant's avatar
Bryant committed
77
78
      text, like QFontMetrics::descent(). In situations
      where texts need to be aligned in detail, knowing
pixhawk's avatar
pixhawk committed
79
80
81
82
83
84
85
86
87
      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
     */
Bryant's avatar
Bryant committed
88
89
    virtual void textMargins( const QFont &font, const QString &text,
        double &left, double &right, double &top, double &bottom ) const = 0;
pixhawk's avatar
pixhawk committed
90
91
92
93
94
95

    /*!
      Draw the text in a clipping rectangle

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

protected:
    QwtTextEngine();
};


/*!
  \brief A text engine for plain texts

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

Bryant's avatar
Bryant committed
119
120
    virtual double heightForWidth( const QFont &font, int flags,
        const QString &text, double width ) const;
pixhawk's avatar
pixhawk committed
121

Bryant's avatar
Bryant committed
122
123
    virtual QSizeF textSize( const QFont &font, int flags,
        const QString &text ) const;
pixhawk's avatar
pixhawk committed
124

Bryant's avatar
Bryant committed
125
126
    virtual void draw( QPainter *painter, const QRectF &rect,
        int flags, const QString &text ) const;
pixhawk's avatar
pixhawk committed
127

Bryant's avatar
Bryant committed
128
    virtual bool mightRender( const QString & ) const;
pixhawk's avatar
pixhawk committed
129

Bryant's avatar
Bryant committed
130
131
    virtual void textMargins( const QFont &, const QString &,
        double &left, double &right, double &top, double &bottom ) const;
pixhawk's avatar
pixhawk committed
132
133

private:
134
    class PrivateData;
pixhawk's avatar
pixhawk committed
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
    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();

Bryant's avatar
Bryant committed
152
153
154
155
156
    virtual double heightForWidth( const QFont &font, int flags,
        const QString &text, double width ) const;

    virtual QSizeF textSize( const QFont &font, int flags,
        const QString &text ) const;
pixhawk's avatar
pixhawk committed
157

Bryant's avatar
Bryant committed
158
159
    virtual void draw( QPainter *painter, const QRectF &rect,
        int flags, const QString &text ) const;
pixhawk's avatar
pixhawk committed
160

Bryant's avatar
Bryant committed
161
    virtual bool mightRender( const QString & ) const;
pixhawk's avatar
pixhawk committed
162

Bryant's avatar
Bryant committed
163
164
    virtual void textMargins( const QFont &, const QString &,
        double &left, double &right, double &top, double &bottom ) const;
pixhawk's avatar
pixhawk committed
165
166

private:
Bryant's avatar
Bryant committed
167
    QString taggedText( const QString &, int flags ) const;
pixhawk's avatar
pixhawk committed
168
169
170
171
172
};

#endif // !QT_NO_RICHTEXT

#endif