summaryrefslogtreecommitdiff
path: root/src/blitter/8bpp_base.cpp
diff options
context:
space:
mode:
authortruelight <truelight@openttd.org>2007-06-18 19:38:23 +0000
committertruelight <truelight@openttd.org>2007-06-18 19:38:23 +0000
commit09879ea308c600cd5c1a2d69ba70bd4c566710cb (patch)
tree269271622a8d64c7bdf5ea91e2e0e9f553bde1cf /src/blitter/8bpp_base.cpp
parentc31ff284c321be86dcd3e4640f11b4e82a6c7cb4 (diff)
downloadopenttd-09879ea308c600cd5c1a2d69ba70bd4c566710cb.tar.xz
(svn r10203) -Codechange: more moving things to blitter-layer: DrawLine
Diffstat (limited to 'src/blitter/8bpp_base.cpp')
-rw-r--r--src/blitter/8bpp_base.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/blitter/8bpp_base.cpp b/src/blitter/8bpp_base.cpp
index 486d7a190..65de3b195 100644
--- a/src/blitter/8bpp_base.cpp
+++ b/src/blitter/8bpp_base.cpp
@@ -36,6 +36,56 @@ void Blitter_8bppBase::DrawRect(void *video, int width, int height, uint8 color)
} while (--height);
}
+void Blitter_8bppBase::DrawLine(void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8 color)
+{
+ int dy;
+ int dx;
+ int stepx;
+ int stepy;
+ int frac;
+
+ dy = (y2 - y) * 2;
+ if (dy < 0) {
+ dy = -dy;
+ stepy = -1;
+ } else {
+ stepy = 1;
+ }
+
+ dx = (x2 - x) * 2;
+ if (dx < 0) {
+ dx = -dx;
+ stepx = -1;
+ } else {
+ stepx = 1;
+ }
+
+ this->SetPixel(video, x, y, color);
+ if (dx > dy) {
+ frac = dy - (dx / 2);
+ while (x != x2) {
+ if (frac >= 0) {
+ y += stepy;
+ frac -= dx;
+ }
+ x += stepx;
+ frac += dy;
+ if (x > 0 && y > 0 && x < screen_width && y < screen_height) this->SetPixel(video, x, y, color);
+ }
+ } else {
+ frac = dx - (dy / 2);
+ while (y != y2) {
+ if (frac >= 0) {
+ x += stepx;
+ frac -= dy;
+ }
+ y += stepy;
+ frac += dx;
+ if (x > 0 && y > 0 && x < screen_width && y < screen_height) this->SetPixel(video, x, y, color);
+ }
+ }
+}
+
void Blitter_8bppBase::CopyFromBuffer(void *video, const void *src, int width, int height, int src_pitch)
{
int direction = (height < 0) ? -1 : 1;