You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// This file is part of Eigen, a lightweight C++ template library
// for linear algebra.
//
// Copyright (C) 2008 Benoit Jacob <jacob.benoit.1@gmail.com>
//
// This Source Code Form is subject to the terms of the Mozilla
// Public License v. 2.0. If a copy of the MPL was not distributed
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifndef MANDELBROT_H
#define MANDELBROT_H
#include <Eigen/Core>
#include <QtGui/QApplication>
#include <QtGui/QWidget>
#include <QtCore/QThread>
class MandelbrotWidget;
class MandelbrotThread : public QThread { friend class MandelbrotWidget; MandelbrotWidget *widget; long long total_iter; int id, max_iter; bool single_precision;
public: MandelbrotThread(MandelbrotWidget *w, int i) : widget(w), id(i) {} void run(); template<typename Real> void render(int img_width, int img_height); };
class MandelbrotWidget : public QWidget { Q_OBJECT
friend class MandelbrotThread; Eigen::Vector2d center; double xradius; int size; unsigned char *buffer; QPoint lastpos; int draft; MandelbrotThread **threads; int threadcount;
protected: void resizeEvent(QResizeEvent *); void paintEvent(QPaintEvent *); void mousePressEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event);
public: MandelbrotWidget() : QWidget(), center(0,0), xradius(2), size(0), buffer(0), draft(16) { setAutoFillBackground(false); threadcount = QThread::idealThreadCount(); threads = new MandelbrotThread*[threadcount]; for(int th = 0; th < threadcount; th++) threads[th] = new MandelbrotThread(this, th); } ~MandelbrotWidget() { if(buffer) delete[]buffer; for(int th = 0; th < threadcount; th++) delete threads[th]; delete[] threads; } };
#endif // MANDELBROT_H
|