From 5d5b997864bdc9d0daddf5b9b73a803122558130 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Sun, 8 May 2005 12:33:55 +0000 Subject: Patch #1193795 (Adding drawLine() to Surface) svn-id: r17959 --- graphics/surface.cpp | 22 ++++++++++++++++++++++ graphics/surface.h | 3 ++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/graphics/surface.cpp b/graphics/surface.cpp index 0ae59926f2..4d7cc713bf 100644 --- a/graphics/surface.cpp +++ b/graphics/surface.cpp @@ -20,10 +20,32 @@ #include "common/stdafx.h" #include "common/util.h" +#include "graphics/primitives.h" #include "graphics/surface.h" namespace Graphics { +static void plotPoint1(int x, int y, int color, void *data) { + Surface *s = (Surface *)data; + byte *ptr = (byte *)s->getBasePtr(x, y); + *ptr = (byte)color; +} + +static void plotPoint2(int x, int y, int color, void *data) { + Surface *s = (Surface *)data; + uint16 *ptr = (uint16 *)s->getBasePtr(x, y); + *ptr = (uint16)color; +} + +void Surface::drawLine(int x0, int y0, int x1, int y1, uint32 color) { + if (bytesPerPixel == 1) + Graphics::drawLine(x0, y0, x1, y1, color, &plotPoint1, this); + else if (bytesPerPixel == 2) + Graphics::drawLine(x0, y0, x1, y1, color, &plotPoint2, this); + else + error("Surface::drawLine: bytesPerPixel must be 1 or 2"); +} + void Surface::hLine(int x, int y, int x2, uint32 color) { // Clipping if (y < 0 || y >= h) diff --git a/graphics/surface.h b/graphics/surface.h index 8407b73bbe..ce3596b364 100644 --- a/graphics/surface.h +++ b/graphics/surface.h @@ -46,7 +46,8 @@ struct Surface { inline void *getBasePtr(int x, int y) { return static_cast(static_cast(pixels) + y * pitch + x * bytesPerPixel); } - + + void drawLine(int x0, int y0, int x1, int y1, uint32 color); void hLine(int x, int y, int x2, uint32 color); void vLine(int x, int y, int y2, uint32 color); void fillRect(const Common::Rect &r, uint32 color); -- cgit v1.2.3