diff options
| author | jacob1 <jfu614@gmail.com> | 2013-01-04 19:18:01 (GMT) |
|---|---|---|
| committer | jacob1 <jfu614@gmail.com> | 2013-01-04 19:18:01 (GMT) |
| commit | bce28b83b83f37f8c774e35b85508673627c6447 (patch) | |
| tree | 8cd89e29ea81d80337e39ac3f357013b27234f0b /src | |
| parent | bdf0cc41c5308c04256c1434a5e8ad6516d7e874 (diff) | |
| download | powder-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.h | 34 |
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; + } } } } |
