diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2013-03-13 20:50:39 +0100 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2013-03-13 20:50:39 +0100 |
commit | f85065f15b5d4521ae57857aaafcdeb8fbc3bdb7 (patch) | |
tree | fa13250a84514aae4736bc8cba0dd2386e815585 /plugingui | |
parent | e7245e50b584a9e6ff43a8079ebac199aea1ec0c (diff) |
Add clear method. Fixed alpha bleding (again).
Diffstat (limited to 'plugingui')
-rw-r--r-- | plugingui/painter.cc | 13 | ||||
-rw-r--r-- | plugingui/painter.h | 2 | ||||
-rw-r--r-- | plugingui/pixelbuffer.cc | 6 |
3 files changed, 17 insertions, 4 deletions
diff --git a/plugingui/painter.cc b/plugingui/painter.cc index b74952f..e5da246 100644 --- a/plugingui/painter.cc +++ b/plugingui/painter.cc @@ -191,9 +191,16 @@ void GUI::Painter::drawRectangle(int x1, int y1, int x2, int y2) void GUI::Painter::drawFilledRectangle(int x1, int y1, int x2, int y2) { - for(int x = x1; x < x2; x++) { - for(int y = y1; y < y2; y++) { - drawPoint(x, y); + for(int y = y1; y < y2; y++) { + drawLine(x1, y, x2, y); + } +} + +void GUI::Painter::clear() +{ + for(int x = 0; x < pixbuf->width; x++) { + for(int y = 0; y < pixbuf->height; y++) { + pixbuf->setPixel(x, y, 0, 0, 0, 0); } } } diff --git a/plugingui/painter.h b/plugingui/painter.h index b45cf3a..f236369 100644 --- a/plugingui/painter.h +++ b/plugingui/painter.h @@ -68,6 +68,8 @@ public: void drawFilledCircle(int x, int y, int r); void drawImage(int x, int y, struct __img__ * img); + void clear(); + private: void plot(int x, int y, double c); double ipart(double x); diff --git a/plugingui/pixelbuffer.cc b/plugingui/pixelbuffer.cc index e9e376a..c0dc2cc 100644 --- a/plugingui/pixelbuffer.cc +++ b/plugingui/pixelbuffer.cc @@ -114,7 +114,11 @@ void GUI::PixelBufferAlpha::addPixel(size_t x, size_t y, buf[PX(2)] = (unsigned char)(blue * a + buf[PX(2)] * (1-a)); //buf[PX(3)] = (unsigned char)(alpha * a + buf[PX(3)] * (1-a)); - buf[PX(3)] = alpha>buf[PX(3)]?alpha:buf[PX(3)]; + //buf[PX(3)] = alpha>buf[PX(3)]?alpha:buf[PX(3)]; + + float a1 = (float)buf[PX(3)] / 255.0; + float a2 = (float)alpha / 255.0; + buf[PX(3)] = (a1 + ((1 - a1) * a2)) * 255.0; } void GUI::PixelBufferAlpha::pixel(size_t x, size_t y, |