summaryrefslogtreecommitdiff
path: root/src/graphics/RasterDrawMethods.inl
diff options
context:
space:
mode:
authorjacob1 <jfu614@gmail.com>2013-05-14 20:39:20 (GMT)
committer jacob1 <jfu614@gmail.com>2013-05-14 20:39:20 (GMT)
commit2e409f966cbae3665ac2d6f9a9a0311f3894e3b6 (patch)
tree23c86bdb698caea424e45809dddb0d1bee4fc066 /src/graphics/RasterDrawMethods.inl
parent431f5a0083dca3da5c881e507908690ebb5a052a (diff)
downloadpowder-2e409f966cbae3665ac2d6f9a9a0311f3894e3b6.zip
powder-2e409f966cbae3665ac2d6f9a9a0311f3894e3b6.tar.gz
gfx.draw/fillcircle
Diffstat (limited to 'src/graphics/RasterDrawMethods.inl')
-rw-r--r--src/graphics/RasterDrawMethods.inl41
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)
{