From 5a50a0cdfedd97c5152da1501f31c45b7c9cd136 Mon Sep 17 00:00:00 2001 From: Benjo Date: Fri, 4 Feb 2022 13:13:26 +0100 Subject: [PATCH] added zoom modifier --- headers/Mandelbrot.h | 3 ++- src/Mandelbrot.cpp | 3 ++- src/OutputWidget.cpp | 8 ++------ 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/headers/Mandelbrot.h b/headers/Mandelbrot.h index b321fb2..c98b8cc 100644 --- a/headers/Mandelbrot.h +++ b/headers/Mandelbrot.h @@ -11,11 +11,12 @@ public: void draw(GLuint, QOpenGLShaderProgram&); void setIterations(int); void translateRelative(QVector2D); - void zoomRelative(float, QVector2D); + void zoomRelative(int, QVector2D); private: int iterations = 0; QVector2D origin {-2, -1}; QVector2D size {2, 2}; + float zoomModifier = 1.05; void setShaderValues(QOpenGLShaderProgram&) const; }; diff --git a/src/Mandelbrot.cpp b/src/Mandelbrot.cpp index d3f8def..22398b6 100644 --- a/src/Mandelbrot.cpp +++ b/src/Mandelbrot.cpp @@ -19,7 +19,8 @@ void Mandelbrot::setShaderValues(QOpenGLShaderProgram &shader) const { shader.setUniformValue("iterationCount", iterations); } -void Mandelbrot::zoomRelative(float delta, QVector2D posRelative) { +void Mandelbrot::zoomRelative(int direction, QVector2D posRelative) { + float delta = direction < 0 ? zoomModifier : (1 / zoomModifier); QVector2D newSize = size * delta; QVector2D fixPos = origin + posRelative * size; QVector2D newOrigin = fixPos - posRelative * newSize; diff --git a/src/OutputWidget.cpp b/src/OutputWidget.cpp index 96e2af3..2b68dbd 100644 --- a/src/OutputWidget.cpp +++ b/src/OutputWidget.cpp @@ -73,14 +73,10 @@ QVector2D relative(QPoint p, QSize s){ void OutputWidget::wheelEvent(QWheelEvent *e) { QPoint pos = e->position().toPoint(); - float modifier = 1; - if (e->angleDelta().y() > 0) - modifier /= 1.1; - else - modifier *= 1.1; + int direction = e->angleDelta().y() > 0 ? 1 : -1; QVector2D relativePos = relative(pos, size()); relativePos.setY(1 - relativePos.y()); - getMandelbrot()->zoomRelative(modifier, relativePos); + getMandelbrot()->zoomRelative(direction, relativePos); update(); }