diff options
Diffstat (limited to 'src/graphics/RasterDrawMethods.inl')
| -rw-r--r-- | src/graphics/RasterDrawMethods.inl | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/graphics/RasterDrawMethods.inl b/src/graphics/RasterDrawMethods.inl index c53c0a8..5ac22cb 100644 --- a/src/graphics/RasterDrawMethods.inl +++ b/src/graphics/RasterDrawMethods.inl @@ -1,4 +1,5 @@ #include "font.h" +#include <math.h> int PIXELMETHODS_CLASS::drawtext_outline(int x, int y, const char *s, int r, int g, int b, int a) { @@ -359,6 +360,12 @@ void PIXELMETHODS_CLASS::fillrect(int x, int y, int w, int h, int r, int g, int void PIXELMETHODS_CLASS::drawcircle(int x, int y, int rx, int ry, int r, int g, int b, int a) { int yTop = ry, yBottom, i, j; + if (!rx) + { + for (j = -ry; j <= ry; j++) + blendpixel(x, y+j, r, g, b, a); + return; + } for (i = 0; i <= rx; i++) { yBottom = yTop; while (pow(i-rx,2.0)*pow(ry,2.0) + pow(yTop-ry,2.0)*pow(rx,2.0) <= pow(rx,2.0)*pow(ry,2.0)) @@ -367,14 +374,14 @@ void PIXELMETHODS_CLASS::drawcircle(int x, int y, int rx, int ry, int r, int g, yTop--; for (int j = yBottom; j <= yTop; j++) { - blendpixel(x+i, y+j, r, g, b, a); + blendpixel(x+i-rx, y+j-ry, r, g, b, a); if (i != rx) - blendpixel(x+2*rx-i, y+j, r, g, b, a); + blendpixel(x-i+rx, y+j-ry, r, g, b, a); if (j != ry) { - blendpixel(x+i, y+2*ry-j, r, g, b, a); + blendpixel(x+i-rx, y-j+ry, r, g, b, a); if (i != rx) - blendpixel(x+2*rx-i, y+2*ry-j, r, g, b, a); + blendpixel(x-i+rx, y-j+ry, r, g, b, a); } } } @@ -383,6 +390,12 @@ void PIXELMETHODS_CLASS::drawcircle(int x, int y, int rx, int ry, int r, int g, void PIXELMETHODS_CLASS::fillcircle(int x, int y, int rx, int ry, int r, int g, int b, int a) { int yTop = ry+1, yBottom, i, j; + if (!rx) + { + for (j = -ry; j <= ry; j++) + blendpixel(x, y+j, r, g, b, a); + return; + } for (i = 0; i <= rx; i++) { while (pow(i-rx,2.0)*pow(ry,2.0) + pow(yTop-ry,2.0)*pow(rx,2.0) <= pow(rx,2.0)*pow(ry,2.0)) @@ -390,9 +403,9 @@ void PIXELMETHODS_CLASS::fillcircle(int x, int y, int rx, int ry, int r, int g, yBottom = 2*ry - yTop; for (int j = yBottom+1; j < yTop; j++) { - blendpixel(x+i, y+j, r, g, b, a); + blendpixel(x+i-rx, y+j-ry, r, g, b, a); if (i != rx) - blendpixel(x+2*rx-i, y+j, r, g, b, a); + blendpixel(x-i+rx, y+j-ry, r, g, b, a); } } } |
