From bce28b83b83f37f8c774e35b85508673627c6447 Mon Sep 17 00:00:00 2001 From: jacob1 Date: Fri, 4 Jan 2013 14:18:01 -0500 Subject: faster ellipse brush resizing that doesn't lag/freeze 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; + } } } } -- cgit v0.9.2-21-gd62e