Qt Reference Documentation

# mandelbrotwidget.h Example File

threads/mandelbrot/mandelbrotwidget.h

     /****************************************************************************
     **
     ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
     ** All rights reserved.
     ** Contact: Nokia Corporation (qt-info@nokia.com)
     **
     ** This file is part of the examples of the Qt Toolkit.
     **
     ** $QT_BEGIN_LICENSE:BSD$
     ** You may use this file under the terms of the BSD license as follows:
     **
     ** "Redistribution and use in source and binary forms, with or without
     ** modification, are permitted provided that the following conditions are
     ** met:
     **   * Redistributions of source code must retain the above copyright
     **     notice, this list of conditions and the following disclaimer.
     **   * Redistributions in binary form must reproduce the above copyright
     **     notice, this list of conditions and the following disclaimer in
     **     the documentation and/or other materials provided with the
     **     distribution.
     **   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
     **     the names of its contributors may be used to endorse or promote
     **     products derived from this software without specific prior written
     **     permission.
     **
     ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
     ** $QT_END_LICENSE$
     **
     ****************************************************************************/

     #ifndef MANDELBROTWIDGET_H
     #define MANDELBROTWIDGET_H

     #include <QPixmap>
     #include <QWidget>
     #include "renderthread.h"

     #if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5) || defined(Q_WS_SIMULATOR)
     #include <QPushButton>

     class ZoomButton : public QPushButton
     {
         Q_OBJECT
     public:
         ZoomButton(const QString &text, double zoomFactor, QWidget *parent = NULL)
             : QPushButton(text, parent), m_ZoomFactor(zoomFactor)
         {
             connect(this, SIGNAL(clicked()), this, SLOT(handleClick()));
         }

     signals:
         void zoom(double zoomFactor);

     private slots:
         void handleClick()
         {
             emit zoom(m_ZoomFactor);
         }

     private:
         const double m_ZoomFactor;
     };
     #endif

     class MandelbrotWidget : public QWidget
     {
         Q_OBJECT

     public:
         MandelbrotWidget(QWidget *parent = 0);

     protected:
         void paintEvent(QPaintEvent *event);
         void resizeEvent(QResizeEvent *event);
         void keyPressEvent(QKeyEvent *event);
         void wheelEvent(QWheelEvent *event);
         void mousePressEvent(QMouseEvent *event);
         void mouseMoveEvent(QMouseEvent *event);
         void mouseReleaseEvent(QMouseEvent *event);

     private slots:
         void updatePixmap(const QImage &image, double scaleFactor);
         void zoom(double zoomFactor);

     private:
         void scroll(int deltaX, int deltaY);

         RenderThread thread;
         QPixmap pixmap;
         QPoint pixmapOffset;
         QPoint lastDragPos;
         double centerX;
         double centerY;
         double pixmapScale;
         double curScale;
     };

     #endif