diff --git a/framebuf.py b/framebuf.py index fc8fd61..b07097d 100755 --- a/framebuf.py +++ b/framebuf.py @@ -107,9 +107,33 @@ def rect(self, x, y, width, height, color): self.fill_rect(self, x, y, 1, height, color) self.fill_rect(self, x+width, y, 1, height, color) - def line(self): - raise NotImplementedError() - + def line(self, x0, y0, x1, y1, color): + """Bresenham's line algorithm""" + dx = abs(x1 - x0) + dy = abs(y1 - y0) + x, y = x0, y0 + sx = -1 if x0 > x1 else 1 + sy = -1 if y0 > y1 else 1 + if dx > dy: + err = dx / 2.0 + while x != x1: + self.pixel(x,y,color) + err -= dy + if err < 0: + y += sy + err += dx + x += sx + else: + err = dy / 2.0 + while y != y1: + self.pixel(x,y,1) + err -= dx + if err < 0: + x += sx + err += dy + y += sy + self.pixel(x,y,1) + def blit(self): raise NotImplementedError()