blob: a71b107e6aba763baed50cc98fed7e2eef69ffb9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
#ifndef ELIPSEBRUSH_H_
#define ELIPSEBRUSH_H_
#include <cmath>
#include "Brush.h"
class EllipseBrush: public Brush
{
public:
EllipseBrush(ui::Point size_):
Brush(size_)
{
SetRadius(size_);
};
virtual void GenerateBitmap()
{
if(bitmap)
delete[] bitmap;
bitmap = new unsigned char[size.X*size.Y];
int rx = radius.X;
int ry = radius.Y;
if (!rx)
{
for (int j = 0; j <= 2*ry; j++)
{
bitmap[j*(size.X)+rx] = 255;
}
}
else
{
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 = 0; j <= ry*2; j++)
{
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;
}
}
}
}
}
};
#endif /* ELIPSEBRUSH_H_ */
|