summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjacob1 <jfu614@gmail.com>2013-01-04 19:18:01 (GMT)
committer jacob1 <jfu614@gmail.com>2013-01-04 19:18:01 (GMT)
commitbce28b83b83f37f8c774e35b85508673627c6447 (patch)
tree8cd89e29ea81d80337e39ac3f357013b27234f0b /src
parentbdf0cc41c5308c04256c1434a5e8ad6516d7e874 (diff)
downloadpowder-bce28b83b83f37f8c774e35b85508673627c6447.zip
powder-bce28b83b83f37f8c774e35b85508673627c6447.tar.gz
faster ellipse brush resizing that doesn't lag/freeze
Diffstat (limited to 'src')
-rw-r--r--src/game/EllipseBrush.h34
1 files changed, 26 insertions, 8 deletions
diff --git a/src/game/EllipseBrush.h b/src/game/EllipseBrush.h
index 9a75dfb..d6c8b40 100644
--- a/src/game/EllipseBrush.h
+++ b/src/game/EllipseBrush.h
@@ -26,17 +26,35 @@ public:
bitmap = new unsigned char[size.X*size.Y];
int rx = radius.X;
int ry = radius.Y;
- for(int x = 0; x <= radius.X*2; x++)
+
+ if (!rx)
{
- for(int y = 0; y <= radius.Y*2; y++)
+ for (int j = 0; j <= 2*ry; j++)
{
- if((pow(x-radius.X,2.0f)*pow(ry,2.0f)+pow(y-radius.Y,2.0f)*pow(rx,2.0f)<=pow(rx,2.0f)*pow(ry,2.0f)))
- {
- bitmap[y*(size.X)+x] = 255;
- }
- else
+ bitmap[j*(size.X)+rx] = 255;
+ }
+ }
+ else
+ {
+ int yTop = ry, i, j, yBottom;
+ for (i = 0; i <= rx; i++)
+ {
+ while (pow(i-rx,2.0f)*pow(ry,2.0f) + pow(yTop-ry,2.0f)*pow(rx,2.0f) <= pow(rx,2.0f)*pow(ry,2.0f))
+ yTop = yTop + 1;
+ yTop = yTop - 1;
+ yBottom = 2*ry - yTop;
+ for (int j = 0; j <= ry*2; j++)
{
- bitmap[y*(size.X)+x] = 0;
+ if (j >= yBottom && j <= yTop)
+ {
+ bitmap[j*(size.X)+i] = 255;
+ bitmap[j*(size.X)+2*rx-i] = 255;
+ }
+ else
+ {
+ bitmap[j*(size.X)+i] = 0;
+ bitmap[j*(size.X)+2*rx-i] = 0;
+ }
}
}
}