aboutsummaryrefslogtreecommitdiff
path: root/engines/adl/graphics.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/adl/graphics.cpp')
-rw-r--r--engines/adl/graphics.cpp231
1 files changed, 1 insertions, 230 deletions
diff --git a/engines/adl/graphics.cpp b/engines/adl/graphics.cpp
index 8e8117dafd..f9af442a9f 100644
--- a/engines/adl/graphics.cpp
+++ b/engines/adl/graphics.cpp
@@ -22,67 +22,14 @@
#include "common/stream.h"
#include "common/rect.h"
-#include "common/textconsole.h"
#include "adl/display.h"
#include "adl/graphics.h"
-#define MIN_COMMAND 0xe0
-
namespace Adl {
-#define NUM_PATTERNS 22
-#define PATTERN_LEN 4
-static const byte fillPatterns[NUM_PATTERNS][PATTERN_LEN] = {
- { 0x00, 0x00, 0x00, 0x00 },
- { 0x80, 0x80, 0x80, 0x80 },
- { 0xff, 0xff, 0xff, 0xff },
- { 0x7f, 0x7f, 0x7f, 0x7f },
- { 0x2a, 0x55, 0x2a, 0x55 },
- { 0xaa, 0xd5, 0xaa, 0xd5 },
- { 0x55, 0x2a, 0x55, 0x2a },
- { 0xd5, 0xaa, 0xd5, 0xaa },
- { 0x33, 0x66, 0x4c, 0x19 },
- { 0xb3, 0xe6, 0xcc, 0x99 },
- { 0x22, 0x44, 0x08, 0x11 },
- { 0xa2, 0xc4, 0x88, 0x91 },
- { 0x11, 0x22, 0x44, 0x08 },
- { 0x91, 0xa2, 0xc4, 0x88 },
- { 0x6e, 0x5d, 0x3b, 0x77 },
- { 0xee, 0xdd, 0xbb, 0xf7 },
- { 0x5d, 0x3b, 0x77, 0x6e },
- { 0xdd, 0xbb, 0xf7, 0xee },
- { 0x66, 0x4c, 0x19, 0x33 },
- { 0xe6, 0xcc, 0x99, 0xb3 },
- { 0x33, 0x66, 0x4c, 0x19 },
- { 0xb3, 0xe6, 0xcc, 0x99 }
-};
-
-#define CHECK_COMMAND(X) \
- do { \
- if ((X) >= MIN_COMMAND) { \
- pic.seek(-1, SEEK_CUR); \
- return; \
- } \
- } while (0)
-
-#define READ_BYTE(b) \
- do { \
- b = pic.readByte(); \
- if (pic.eos() || pic.err()) \
- return; \
- CHECK_COMMAND(b); \
- } while (0)
-
-#define READ_POINT(p) \
- do { \
- READ_BYTE(p.x); \
- p.x <<= 1; \
- READ_BYTE(p.y); \
- } while (0)
-
// Draws a four-connected line
-void Graphics::drawLine(const Common::Point &p1, const Common::Point &p2, byte color) const {
+void GraphicsMan::drawLine(const Common::Point &p1, const Common::Point &p2, byte color) const {
int16 deltaX = p2.x - p1.x;
int8 xStep = 1;
@@ -119,180 +66,4 @@ void Graphics::drawLine(const Common::Point &p1, const Common::Point &p2, byte c
}
}
-void Graphics::clear() {
- _display.clear(0xff);
- _color = 0;
-}
-
-void Graphics::drawCorners(Common::SeekableReadStream &pic, bool yFirst) {
- Common::Point p;
-
- READ_POINT(p);
-
- if (yFirst)
- goto doYStep;
-
- while (true) {
- int16 n;
-
- READ_BYTE(n);
-
- _display.putPixel(p, _color);
-
- n <<= 1;
- drawLine(p, Common::Point(n, p.y), _color);
- p.x = n;
-
-doYStep:
- READ_BYTE(n);
-
- _display.putPixel(p, _color);
- drawLine(p, Common::Point(p.x, n), _color);
-
- _display.putPixel(Common::Point(p.x + 1, p.y), _color);
- drawLine(Common::Point(p.x + 1, p.y), Common::Point(p.x + 1, n), _color);
-
- p.y = n;
- }
-}
-
-void Graphics::drawRelativeLines(Common::SeekableReadStream &pic) {
- Common::Point p1;
-
- READ_POINT(p1);
- _display.putPixel(p1, _color);
-
- while (true) {
- Common::Point p2(p1);
-
- byte n;
- READ_BYTE(n);
-
- byte h = (n & 0x70) >> 4;
- byte l = n & 7;
-
- if (n & 0x80)
- p2.x -= (h << 1);
- else
- p2.x += (h << 1);
-
- if (n & 8)
- p2.y -= l;
- else
- p2.y += l;
-
- drawLine(p1, p2, _color);
- p1 = p2;
- }
-}
-
-void Graphics::drawAbsoluteLines(Common::SeekableReadStream &pic) {
- Common::Point p1;
-
- READ_POINT(p1);
- _display.putPixel(p1, _color);
-
- while (true) {
- Common::Point p2;
-
- READ_POINT(p2);
- drawLine(p1, p2, _color);
- p1 = p2;
- }
-}
-
-static byte getPatternColor(const Common::Point &p, byte pattern) {
- if (pattern >= NUM_PATTERNS)
- error("Invalid fill pattern %i encountered", pattern);
-
- byte offset = (p.y & 1) << 1;
- offset += (p.x / 7) & 3;
-
- return fillPatterns[pattern][offset % PATTERN_LEN];
-}
-
-void Graphics::fillRow(const Common::Point &p, bool stopBit, byte pattern) {
- const byte color = getPatternColor(p, pattern);
- _display.putPixelRaw(p, color);
-
- Common::Point q(p);
- byte c = color;
-
- while (++q.x < DISPLAY_WIDTH && _display.getPixelBit(q) != stopBit) {
- if ((q.x % 7) == 0)
- c = getPatternColor(q, pattern);
- _display.putPixelRaw(q, c);
- }
-
- q = p;
- c = color;
- while (--q.x >= 0 && _display.getPixelBit(q) != stopBit) {
- if ((q.x % 7) == 6)
- c = getPatternColor(q, pattern);
- _display.putPixelRaw(q, c);
- }
-}
-
-// Basic flood fill
-void Graphics::fill(Common::SeekableReadStream &pic) {
- byte pattern;
- READ_BYTE(pattern);
-
- while (true) {
- Common::Point p;
- READ_POINT(p);
-
- bool stopBit = !_display.getPixelBit(p);
-
- while (--p.y >= 0) {
- if (_display.getPixelBit(p) == stopBit)
- break;
- if (_display.getPixelBit(Common::Point(p.x + 1, p.y)) == stopBit)
- break;
- }
-
- while (++p.y < DISPLAY_HEIGHT) {
- if (_display.getPixelBit(p) == stopBit)
- break;
- if (_display.getPixelBit(Common::Point(p.x + 1, p.y)) == stopBit)
- break;
- fillRow(p, stopBit, pattern);
- }
- }
-}
-
-void Graphics::draw(Common::SeekableReadStream &pic) {
- while (true) {
- byte opcode = pic.readByte();
-
- if (pic.eos() || pic.err())
- error("Error reading picture");
-
- switch (opcode) {
- case 0xe0:
- drawCorners(pic, false);
- break;
- case 0xe1:
- drawCorners(pic, true);
- break;
- case 0xe2:
- drawRelativeLines(pic);
- break;
- case 0xe3:
- drawAbsoluteLines(pic);
- break;
- case 0xe4:
- fill(pic);
- break;
- case 0xe5:
- clear();
- break;
- case 0xff:
- return;
- default:
- error("Invalid pic opcode %02x", opcode);
- }
- }
-}
-
} // End of namespace Adl