master
Benjamin Kraft 3 years ago
parent 2d8b0edb4a
commit 8671bcc5a2
  1. 2
      headers/MainWindow.h
  2. 10
      headers/Mandelbrot.h
  3. 3
      headers/OutputWidget.h
  4. 28
      src/MainWindow.cpp
  5. 10
      src/Mandelbrot.cpp
  6. 7
      src/OutputWidget.cpp

@ -8,7 +8,7 @@ class MainWindow : public QWidget {
public:
explicit MainWindow();
private slots:
void sizeSliderChanged(int);
void iterationsSliderChanged(int);
private:
void buildUI();

@ -4,13 +4,17 @@
#include <QVector2D>
#include <QOpenGLFunctions>
class Mandelbrot : protected QOpenGLFunctions {
class Mandelbrot : public QObject, protected QOpenGLFunctions {
Q_OBJECT
public:
Mandelbrot();
void init();
void draw();
void zoom(double);
public slots:
void setIterations(int);
private:
double scale;
int iterations = 0;
double scale = 1;
QVector2D translation;
};

@ -10,7 +10,8 @@
class OutputWidget : public QOpenGLWidget, protected QOpenGLFunctions {
Q_OBJECT
public:
explicit OutputWidget(QWidget* parent): QOpenGLWidget(parent) {};
explicit OutputWidget(QWidget* parent): QOpenGLWidget(parent) {}
Mandelbrot* getMandelbrot() {return &mandelbrot;}
private:
void initializeGL() override;
void paintGL() override;

@ -10,20 +10,32 @@ MainWindow::MainWindow() {
void MainWindow::buildUI() {
resize(700, 700);
auto sizeSlider = new QSlider(Qt::Horizontal);
sizeSlider->setRange(100, 800);
QSlider::connect(sizeSlider, &QSlider::valueChanged, this, &MainWindow::sizeSliderChanged);
sizeSlider->setValue(500);
auto iterationsSlider = new QSlider(Qt::Horizontal);
iterationsSlider->setRange(5, 300);
QSlider::connect(
iterationsSlider,
&QSlider::valueChanged,
this->outputWidget->getMandelbrot(),
&Mandelbrot::setIterations
);
QSlider::connect(
iterationsSlider,
&QSlider::valueChanged,
this,
&MainWindow::iterationsSliderChanged
);
iterationsSlider->setValue(100);
auto controls = new QGridLayout;
controls->addWidget(sizeSlider);
controls->addWidget(iterationsSlider);
auto lyt = new QVBoxLayout(this);
lyt->addWidget(outputWidget);
lyt->addLayout(controls);
}
//TODO Handle size change
void MainWindow::sizeSliderChanged(int newValue) {
void MainWindow::iterationsSliderChanged(int newValue) {
//TODO update text label
update();
}

@ -1,8 +1,10 @@
#include "../headers/Mandelbrot.h"
Mandelbrot::Mandelbrot() {
void Mandelbrot::init() {
initializeOpenGLFunctions();
}
void Mandelbrot::draw() {
@ -10,5 +12,11 @@ void Mandelbrot::draw() {
}
void Mandelbrot::zoom(double delta) {
scale *= delta;
}
void Mandelbrot::setIterations(int value) {
iterations = value;
}

@ -7,18 +7,17 @@ using std::cout, std::endl;
void OutputWidget::initializeGL() {
cout << "Initialize OpenGL" << endl;
initializeOpenGLFunctions();
getMandelbrot()->init();
auto format = this->format();
cout << "OpenGL version: " <<
format.majorVersion() << "." << format.minorVersion()
<< endl;
cout << "OpenGL version: " << format.majorVersion() << "." << format.minorVersion() << endl;
glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
}
void OutputWidget::paintGL() {
glClear(GL_COLOR_BUFFER_BIT);
mandelbrot.draw();
getMandelbrot()->draw();
}
void OutputWidget::resizeGL(int w, int h) {

Loading…
Cancel
Save