![](/media/cache/profiles/301b144af4d1614dbcf92f9710be50fb.jpg.50x50_q85.jpg)
Emulation of the 1970's Chip-8 machine. The emulator has 7 games that are unmodified from the original Chip-8 format.
Diff: LCD_ST7735/Canvas.h
- Revision:
- 0:bc3f11b1b41f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LCD_ST7735/Canvas.h Sun Feb 08 01:58:57 2015 +0000 @@ -0,0 +1,102 @@ +#include "Base.h" + +#ifndef __CANVAS_H__ +#define __CANVAS_H__ + +template <typename T> +class Canvas +{ + public: + Canvas(T &surface) : + _surface(surface) + { + + } + + inline void clear() + { + _surface.clear(); + } + + inline void setPixel(int x, int y, uint16_t color) + { + _surface.setPixel(x, y, color); + } + + inline uint16_t getPixel(int x, int y) + { + return _surface.getPixel(x, y); + } + + void drawLine(int x1, int y1, int x2, int y2, uint16_t color) + { + int dx = abs(x2 - x1); + int dy = abs(y2 - y1); + + if (dx == 0) + { + if (y1 > y2) swap(y1, y2); + _surface.fastVLine(y1, y2, x1, color); + return; + } + else if(dy == 0) + { + if (x1 > x2) swap(x1, x2); + _surface.fastHLine(x1, x2, y1, color); + return; + } + + int sx = (x1 < x2) ? 1 : -1; + int sy = (y1 < y2) ? 1 : -1; + int err = dx - dy; + while(x1 != x2 || y1 != y2) + { + setPixel(x1, y1, color); + int e2 = err << 1; + if (e2 > -dy) + { + err -= dy; + x1 += sx; + } + if (e2 < dx) + { + err += dx; + y1 += sy; + } + } + setPixel(x2, y2, color); + } + + void drawRect(int x1, int y1, int x2, int y2, uint16_t color) + { + if (x1 > x2) swap(x1, x2); + if (y1 > y2) swap(y1, y2); + + _surface.fastHLine(x1, x2, y1, color); + _surface.fastHLine(x1, x2, y2, color); + + _surface.fastVLine(y1, y2, x1, color); + _surface.fastVLine(y1, y2, x2, color); + } + + void fillRect(int x1, int y1, int x2, int y2, uint16_t color) + { + if (x1 > x2) swap(x1, x2); + if (y1 > y2) swap(y1, y2); + + for (int x = x1; x <= x2; ++x) + { + _surface.fastVLine(y1, y2, x, color); + } + } + + void drawBitmap(int x, int y, T &bmp, int srcX, int srcY, int srcWidth, int srcHeight, bool transparent) + { + _surface.drawBitmap(x, y, bmp, srcX, srcY, srcWidth, srcHeight, transparent); + } + + private: + T &_surface; +}; + +#endif // __CANVAS_H__ \ No newline at end of file