diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2016-09-18 12:42:15 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2016-11-02 15:12:04 +0100 |
commit | 44861dcbfeee041223c4aac1ee075e92fa4daa01 (patch) | |
tree | 6dfdfd9637846a7aedd71ace97d7d2ad366496d7 /eigen/demos/mandelbrot/mandelbrot.h | |
parent | f3fe458b9e0a29a99a39d47d9a76dc18964b6fec (diff) |
update
Diffstat (limited to 'eigen/demos/mandelbrot/mandelbrot.h')
-rw-r--r-- | eigen/demos/mandelbrot/mandelbrot.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/eigen/demos/mandelbrot/mandelbrot.h b/eigen/demos/mandelbrot/mandelbrot.h new file mode 100644 index 0000000..a687fd0 --- /dev/null +++ b/eigen/demos/mandelbrot/mandelbrot.h @@ -0,0 +1,71 @@ +// 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 |