diff --git a/headers/MainWindow.h b/headers/MainWindow.h index ea0a868..8466fff 100644 --- a/headers/MainWindow.h +++ b/headers/MainWindow.h @@ -8,7 +8,7 @@ class MainWindow : public QWidget { public: explicit MainWindow(); private slots: - void sizeSliderChanged(int); + void iterationsSliderChanged(int); private: void buildUI(); diff --git a/headers/Mandelbrot.h b/headers/Mandelbrot.h index 374dc12..acf5d0f 100644 --- a/headers/Mandelbrot.h +++ b/headers/Mandelbrot.h @@ -4,13 +4,17 @@ #include #include -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; }; diff --git a/headers/OutputWidget.h b/headers/OutputWidget.h index 7c0b6cf..5e8b041 100644 --- a/headers/OutputWidget.h +++ b/headers/OutputWidget.h @@ -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; diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 12c5611..2ed7417 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -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(); } diff --git a/src/Mandelbrot.cpp b/src/Mandelbrot.cpp index 53405f7..e05bfcf 100644 --- a/src/Mandelbrot.cpp +++ b/src/Mandelbrot.cpp @@ -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; } + + diff --git a/src/OutputWidget.cpp b/src/OutputWidget.cpp index b6f2ed2..b5b7e5b 100644 --- a/src/OutputWidget.cpp +++ b/src/OutputWidget.cpp @@ -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) {