diff options
| author | jacob1 <jfu614@gmail.com> | 2013-05-14 20:39:20 (GMT) |
|---|---|---|
| committer | jacob1 <jfu614@gmail.com> | 2013-05-14 20:39:20 (GMT) |
| commit | 2e409f966cbae3665ac2d6f9a9a0311f3894e3b6 (patch) | |
| tree | 23c86bdb698caea424e45809dddb0d1bee4fc066 /src/graphics/RasterDrawMethods.inl | |
| parent | 431f5a0083dca3da5c881e507908690ebb5a052a (diff) | |
| download | powder-2e409f966cbae3665ac2d6f9a9a0311f3894e3b6.zip powder-2e409f966cbae3665ac2d6f9a9a0311f3894e3b6.tar.gz | |
gfx.draw/fillcircle
Diffstat (limited to 'src/graphics/RasterDrawMethods.inl')
| -rw-r--r-- | src/graphics/RasterDrawMethods.inl | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/graphics/RasterDrawMethods.inl b/src/graphics/RasterDrawMethods.inl index b4de875..c53c0a8 100644 --- a/src/graphics/RasterDrawMethods.inl +++ b/src/graphics/RasterDrawMethods.inl @@ -356,6 +356,47 @@ void PIXELMETHODS_CLASS::fillrect(int x, int y, int w, int h, int r, int g, int blendpixel(x+i, y+j, r, g, b, a); } +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; + 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)) + yTop++; + if (yBottom != yTop) + yTop--; + for (int j = yBottom; j <= yTop; j++) + { + blendpixel(x+i, y+j, r, g, b, a); + if (i != rx) + blendpixel(x+2*rx-i, y+j, r, g, b, a); + if (j != ry) + { + blendpixel(x+i, y+2*ry-j, r, g, b, a); + if (i != rx) + blendpixel(x+2*rx-i, y+2*ry-j, r, g, b, a); + } + } + } +} + +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; + 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)) + yTop++; + yBottom = 2*ry - yTop; + for (int j = yBottom+1; j < yTop; j++) + { + blendpixel(x+i, y+j, r, g, b, a); + if (i != rx) + blendpixel(x+2*rx-i, y+j, r, g, b, a); + } + } +} + void PIXELMETHODS_CLASS::gradientrect(int x, int y, int width, int height, int r, int g, int b, int a, int r2, int g2, int b2, int a2) { |
