diff options
| -rw-r--r-- | graphics/surface.cpp | 30 | 
1 files changed, 25 insertions, 5 deletions
| diff --git a/graphics/surface.cpp b/graphics/surface.cpp index 3f53ce56f4..772ec12e54 100644 --- a/graphics/surface.cpp +++ b/graphics/surface.cpp @@ -42,8 +42,10 @@ void Surface::drawLine(int x0, int y0, int x1, int y1, uint32 color) {  		Graphics::drawLine(x0, y0, x1, y1, color, plotPoint<byte>, this);  	else if (format.bytesPerPixel == 2)  		Graphics::drawLine(x0, y0, x1, y1, color, plotPoint<uint16>, this); +	else if (format.bytesPerPixel == 4) +		Graphics::drawLine(x0, y0, x1, y1, color, plotPoint<uint32>, this);  	else -		error("Surface::drawLine: bytesPerPixel must be 1 or 2"); +		error("Surface::drawLine: bytesPerPixel must be 1, 2, or 4");  }  void Surface::create(uint16 width, uint16 height, const PixelFormat &f) { @@ -92,8 +94,11 @@ void Surface::hLine(int x, int y, int x2, uint32 color) {  	} else if (format.bytesPerPixel == 2) {  		uint16 *ptr = (uint16 *)getBasePtr(x, y);  		Common::set_to(ptr, ptr + (x2-x+1), (uint16)color); +	} else if (format.bytesPerPixel == 4) { +		uint32 *ptr = (uint32 *)getBasePtr(x, y); +		Common::set_to(ptr, ptr + (x2-x+1), color);  	} else { -		error("Surface::hLine: bytesPerPixel must be 1 or 2"); +		error("Surface::hLine: bytesPerPixel must be 1, 2, or 4");  	}  } @@ -122,8 +127,15 @@ void Surface::vLine(int x, int y, int y2, uint32 color) {  			*ptr = (uint16)color;  			ptr += pitch/2;  		} +	 +	} else if (format.bytesPerPixel == 4) { +		uint32 *ptr = (uint32 *)getBasePtr(x, y); +		while (y++ <= y2) { +			*ptr = color; +			ptr += pitch / 4; +		}  	} else { -		error("Surface::vLine: bytesPerPixel must be 1 or 2"); +		error("Surface::vLine: bytesPerPixel must be 1, 2, or 4");  	}  } @@ -183,8 +195,8 @@ void Surface::move(int dx, int dy, int height) {  	if ((dx == 0 && dy == 0) || height <= 0)  		return; -	if (format.bytesPerPixel != 1 && format.bytesPerPixel != 2) -		error("Surface::move: bytesPerPixel must be 1 or 2"); +	if (format.bytesPerPixel != 1 && format.bytesPerPixel != 2 && format.bytesPerPixel != 4) +		error("Surface::move: bytesPerPixel must be 1, 2, or 4");  	byte *src, *dst;  	int x, y; @@ -223,6 +235,10 @@ void Surface::move(int dx, int dy, int height) {  					*(uint16 *)dst = *(const uint16 *)src;  					src -= 2;  					dst -= 2; +				} else if (format.bytesPerPixel == 4) { +					*(uint32 *)dst = *(const uint32 *)src; +					src -= 4; +					dst -= 4;  				}  			}  			src += pitch + (pitch - dx * format.bytesPerPixel); @@ -240,6 +256,10 @@ void Surface::move(int dx, int dy, int height) {  					*(uint16 *)dst = *(const uint16 *)src;  					src += 2;  					dst += 2; +				} else if (format.bytesPerPixel == 4) { +					*(uint32 *)dst = *(const uint32 *)src; +					src += 4; +					dst += 4;  				}  			}  			src += pitch - (pitch + dx * format.bytesPerPixel); | 
