qwt_plot_rasteritem.h 3.21 KB
Newer Older
pixhawk's avatar
pixhawk committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
 * Qwt Widget Library
 * Copyright (C) 1997   Josef Wilgen
 * Copyright (C) 2002   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_PLOT_RASTERITEM_H
#define QWT_PLOT_RASTERITEM_H

#include <qglobal.h>
#include <qstring.h>
#include <qimage.h>

17
#include "qwt_plot_item.h"
pixhawk's avatar
pixhawk committed
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

/*!
  \brief A class, which displays raster data

  Raster data is a grid of pixel values, that can be represented
  as a QImage. It is used for many types of information like
  spectrograms, cartograms, geographical maps ...

  Often a plot has several types of raster data organized in layers.
  ( f.e a geographical map, with weather statistics ).
  Using setAlpha() raster items can be stacked easily.

  QwtPlotRasterItem is only implemented for images of the following formats:
  QImage::Format_Indexed8, QImage::Format_ARGB32.

  \sa QwtPlotSpectrogram
*/

class QWT_EXPORT QwtPlotRasterItem: public QwtPlotItem
{
public:
    /*!
      - NoCache\n
        renderImage() is called, whenever the item has to be repainted
      - PaintCache\n
        renderImage() is called, whenever the image cache is not valid,
        or the scales, or the size of the canvas has changed. This type
        of cache is only useful for improving the performance of hide/show
        operations. All other situations are already handled by the
        plot canvas cache.
      - ScreenCache\n
        The screen cache is an image in size of the screen. As long as
        the scales don't change the target image is scaled from the cache.
        This might improve the performance
        when resizing the plot widget, but suffers from scaling effects.

      The default policy is NoCache
     */
56
    enum CachePolicy {
pixhawk's avatar
pixhawk committed
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
        NoCache,
        PaintCache,
        ScreenCache
    };

    explicit QwtPlotRasterItem(const QString& title = QString::null);
    explicit QwtPlotRasterItem(const QwtText& title);
    virtual ~QwtPlotRasterItem();

    void setAlpha(int alpha);
    int alpha() const;

    void setCachePolicy(CachePolicy);
    CachePolicy cachePolicy() const;

    void invalidateCache();

    virtual void draw(QPainter *p,
75 76
                      const QwtScaleMap &xMap, const QwtScaleMap &yMap,
                      const QRect &rect) const;
pixhawk's avatar
pixhawk committed
77 78 79 80 81

    virtual QSize rasterHint(const QwtDoubleRect &) const;

protected:

82 83 84 85 86 87 88 89 90 91 92 93 94
    /*!
     Renders an image for an area

     The format of the image must be QImage::Format_Indexed8,
     QImage::Format_RGB32 or QImage::Format_ARGB32

     \param xMap Maps x-values into pixel coordinates.
     \param yMap Maps y-values into pixel coordinates.
     \param area Requested area for the image in scale coordinates
    */
    virtual QImage renderImage(const QwtScaleMap &xMap,
                               const QwtScaleMap &yMap, const QwtDoubleRect &area
                              ) const = 0;
pixhawk's avatar
pixhawk committed
95 96 97 98 99 100 101 102 103 104 105 106

private:
    QwtPlotRasterItem( const QwtPlotRasterItem & );
    QwtPlotRasterItem &operator=( const QwtPlotRasterItem & );

    void init();

    class PrivateData;
    PrivateData *d_data;
};

#endif