Skip to content
Snippets Groups Projects
qwt_text_engine.h 4.74 KiB
Newer Older
  • Learn to ignore specific revisions
  • pixhawk's avatar
    pixhawk committed
    /* -*- 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
    #include <qsize.h>
    
    pixhawk's avatar
    pixhawk committed
    
    class QFont;
    
    Bryant's avatar
    Bryant committed
    class QRectF;
    
    pixhawk's avatar
    pixhawk committed
    class QString;
    class QPainter;
    
    
    pixhawk's avatar
    pixhawk committed
      \brief Abstract base class for rendering text strings
    
      A text engine is responsible for rendering texts for a
    
      specific text format. They are used by QwtText to render a text.
    
    pixhawk's avatar
    pixhawk committed
    
    
      QwtPlainTextEngine and QwtRichTextEngine are part of the Qwt library.
    
    Bryant's avatar
    Bryant committed
      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
    */
    
    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
    
          \param width Width
    
    pixhawk's avatar
    pixhawk committed
    
          \return Calculated height
         */
    
    Bryant's avatar
    Bryant committed
        virtual double heightForWidth( const QFont &font, int flags,
            const QString &text, double width ) const = 0;
    
    pixhawk's avatar
    pixhawk committed
    
        /*!
          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
          \return Calculated size
    
    pixhawk's avatar
    pixhawk committed
         */
    
    Bryant's avatar
    Bryant committed
        virtual QSizeF textSize( const QFont &font, int flags,
            const QString &text ) const = 0;
    
    pixhawk's avatar
    pixhawk committed
    
    
    pixhawk's avatar
    pixhawk committed
          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
        virtual bool mightRender( const QString &text ) const = 0;
    
    pixhawk's avatar
    pixhawk committed
    
        /*!
          Return margins around the texts
    
    
          The textSize might include margins around the
    
    Bryant's avatar
    Bryant committed
          text, like QFontMetrics::descent(). In situations
          where texts need to be aligned in detail, knowing
    
    pixhawk's avatar
    pixhawk committed
          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
        virtual void textMargins( const QFont &font, const QString &text,
            double &left, double &right, double &top, double &bottom ) const = 0;
    
    pixhawk's avatar
    pixhawk committed
    
        /*!
          Draw the text in a clipping rectangle
    
          \param painter Painter
          \param rect Clipping rectangle
    
    Bryant's avatar
    Bryant committed
          \param flags Bitwise OR of the flags like in for QPainter::drawText()
    
    pixhawk's avatar
    pixhawk committed
          \param text Text to be rendered
    
    Bryant's avatar
    Bryant committed
        virtual void draw( QPainter *painter, const QRectF &rect,
            int flags, const QString &text ) const = 0;
    
    pixhawk's avatar
    pixhawk committed
    
    protected:
        QwtTextEngine();
    };
    
    
    /*!
      \brief A text engine for plain texts
    
      QwtPlainTextEngine renders texts using the basic Qt classes
    
      QPainter and QFontMetrics.
    
    pixhawk's avatar
    pixhawk committed
    */
    class QWT_EXPORT QwtPlainTextEngine: public QwtTextEngine
    {
    public:
        QwtPlainTextEngine();
        virtual ~QwtPlainTextEngine();
    
    
    Bryant's avatar
    Bryant committed
        virtual double heightForWidth( const QFont &font, int flags,
            const QString &text, double width ) const;
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
        virtual QSizeF textSize( const QFont &font, int flags,
            const QString &text ) const;
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
        virtual void draw( QPainter *painter, const QRectF &rect,
            int flags, const QString &text ) const;
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
        virtual bool mightRender( const QString & ) const;
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
        virtual void textMargins( const QFont &, const QString &,
            double &left, double &right, double &top, double &bottom ) const;
    
    pixhawk's avatar
    pixhawk committed
    
    private:
    
        class PrivateData;
    
    pixhawk's avatar
    pixhawk committed
        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
        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
    
    
    Bryant's avatar
    Bryant committed
        virtual void draw( QPainter *painter, const QRectF &rect,
            int flags, const QString &text ) const;
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
        virtual bool mightRender( const QString & ) const;
    
    pixhawk's avatar
    pixhawk committed
    
    
    Bryant's avatar
    Bryant committed
        virtual void textMargins( const QFont &, const QString &,
            double &left, double &right, double &top, double &bottom ) const;
    
    pixhawk's avatar
    pixhawk committed
    
    private:
    
    Bryant's avatar
    Bryant committed
        QString taggedText( const QString &, int flags ) const;
    
    pixhawk's avatar
    pixhawk committed
    };
    
    #endif // !QT_NO_RICHTEXT
    
    #endif