aboutsummaryrefslogtreecommitdiffstats
diff options
authorJason A. Donenfeld <Jason@zx2c4.com>2008-10-08 16:31:24 -0400
committerJason A. Donenfeld <Jason@zx2c4.com>2008-10-08 16:31:24 -0400
commit8df4bb880190deb3d6245d0eff5c52d7f62bf787 (patch)
tree27f0483cf0b031e689277c822c152c08b35a71cc
parentImprove painting order. (diff)
downloadtrianglefractalchaos-8df4bb880190deb3d6245d0eff5c52d7f62bf787.tar.xz
trianglefractalchaos-8df4bb880190deb3d6245d0eff5c52d7f62bf787.zip
Optimized drawing code.
-rw-r--r--TriangleFractalChaos.cpp38
-rw-r--r--TriangleFractalChaos.h5
2 files changed, 12 insertions, 31 deletions
diff --git a/TriangleFractalChaos.cpp b/TriangleFractalChaos.cpp
index f6d6760..907b4d7 100644
--- a/TriangleFractalChaos.cpp
+++ b/TriangleFractalChaos.cpp
@@ -5,9 +5,6 @@
#include <QLabel>
#include <QImage>
#include <QTimer>
-#include <QPixmap>
-#include <cstdlib>
-#include <QDebug>
TriangleFractalChaos::TriangleFractalChaos(QWidget *parent)
: QWidget(parent)
@@ -49,18 +46,14 @@ void TriangleFractalChaos::toggleDraw()
magnification->setEnabled(false);
generate->setText("&Stop");
setFixedSize(size());
- int width, height;
- if(this->width() < this->height()) {
- width = this->width();
- height = qRound((double)width * 1.73205081 / 2.0);
- } else {
- width = this->height();
- height = qRound((double)width * 1.73205081 / 2.0);
- }
+ int width = qMin(this->width(), this->height());
+ int height = qRound((double)width * 1.73205081 / 2.0);
int deltaWidthHalf = qRound(((double)(this->width() - width)) / 2.0) / magnification->value();
int deltaHeightHalf = qRound(((double)(this->height() - height)) / 2.0) / magnification->value();
width /= magnification->value();
height /= magnification->value();
+ if(dots)
+ delete dots;
dots = new QImage(size() / magnification->value(), QImage::Format_RGB32);
dots->fill(backgroundColor);
startingPoints[0] = QPoint(qRound((double)width / 2.0) - 1 + deltaWidthHalf, deltaHeightHalf);
@@ -69,13 +62,11 @@ void TriangleFractalChaos::toggleDraw()
dots->setPixel(startingPoints[0], 0xff00ff00);
dots->setPixel(startingPoints[1], 0xff00ff00);
dots->setPixel(startingPoints[2], 0xff00ff00);
- int randomX = rand() % (width + 1);
- int yStart = height - qRound((double)height / ((double)width / 2.0) * (double)randomX);
- if(yStart < 0) yStart *= -1;
- int randomY = (rand() % (height - yStart + 1)) + yStart;
+ int randomX = qrand() % (width + 1);
+ int yStart = qAbs(height - qRound((double)height / ((double)width / 2.0) * (double)randomX));
+ int randomY = (qrand() % (height - yStart + 1)) + yStart;
lastPoint = QPoint(randomX + deltaWidthHalf, randomY + deltaHeightHalf);
dots->setPixel(lastPoint, 0xffff0000);
- update();
drawTimer->start(delay->value());
} else {
drawTimer->stop();
@@ -88,18 +79,11 @@ void TriangleFractalChaos::toggleDraw()
setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
}
}
-void TriangleFractalChaos::paintEvent(QPaintEvent *event)
-{
- if(dots) {
- QPalette palette;
- palette.setBrush(backgroundRole(), QBrush(QPixmap::fromImage(dots->scaled(size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation))));
- setPalette(palette);
- }
- QWidget::paintEvent(event);
-}
void TriangleFractalChaos::drawDot()
{
- lastPoint = (lastPoint + startingPoints[rand() % 3]) / 2;
+ lastPoint = (lastPoint + startingPoints[qrand() % 3]) / 2;
dots->setPixel(lastPoint, 0xff000000);
- update();
+ QPalette palette;
+ palette.setBrush(backgroundRole(), dots->scaled(size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+ setPalette(palette);
} \ No newline at end of file
diff --git a/TriangleFractalChaos.h b/TriangleFractalChaos.h
index 5268e52..87c74d6 100644
--- a/TriangleFractalChaos.h
+++ b/TriangleFractalChaos.h
@@ -1,10 +1,10 @@
#include <QWidget>
+#include <QPoint>
class QTimer;
class QSpinBox;
class QLabel;
class QPushButton;
class QImage;
-class QPoint;
class TriangleFractalChaos : public QWidget
{
@@ -12,9 +12,6 @@ class TriangleFractalChaos : public QWidget
public:
TriangleFractalChaos(QWidget *parent = 0);
-
-protected:
- void paintEvent(QPaintEvent *event);
private:
QSpinBox *magnification;