aboutsummaryrefslogtreecommitdiff
path: root/engines/lab/graphics.h
blob: 564f0416077620553f0bc6018aa33b2423689618 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 */

/*
 * This code is based on Labyrinth of Time code with assistance of
 *
 * Copyright (c) 1993 Terra Nova Development
 * Copyright (c) 2004 The Wyrmkeep Entertainment Co.
 *
 */

#ifndef LAB_GRAPHICS_H
#define LAB_GRAPHICS_H

#include "graphics/palette.h"

namespace Lab {

class LabEngine;

class DisplayMan {
private:
	LabEngine *_vm;

	uint16 fadeNumIn(uint16 num, uint16 res, uint16 counter);
	uint16 fadeNumOut(uint16 num, uint16 res, uint16 counter);

	byte _curapen;
	byte *_curBitmap;
	byte _curvgapal[256 * 3];
	byte *_tempScrollData;

public:
	DisplayMan(LabEngine *lab);
	virtual ~DisplayMan();

	uint16 scaleX(uint16 x);
	uint16 scaleY(uint16 y);
	int16 VGAScaleX(int16 x);
	int16 VGAScaleY(int16 y);
	uint16 SVGACord(uint16 cord);
	void loadPict(const char *filename);
	bool readPict(const char *filename, bool playOnce);
	void freePict();
	byte *readPictToMem(const char *filename, uint16 x, uint16 y);
	void doScrollBlack();
	void copyPage(uint16 width, uint16 height, uint16 nheight, uint16 startline, byte *mem);
	void doScrollWipe(char *filename);
	void doScrollBounce();
	void doTransWipe(CloseDataPtr *cPtr, char *filename);
	void doWipe(uint16 wipeType, CloseDataPtr *cPtr, char *filename);
	void blackScreen();
	void whiteScreen();
	void blackAllScreen();
	void createBox(uint16 y2);
	void drawPanel();
	bool setUpScreens();
	int32 longDrawMessage(const char *str);
	void drawMessage(const char *str);
	void setAPen(byte pennum);
	void rectFill(uint16 x1, uint16 y1, uint16 x2, uint16 y2);
	void rectFillScaled(uint16 x1, uint16 y1, uint16 x2, uint16 y2);
	/* Window text stuff */
	uint32 flowText(void *font,				/* the TextAttr pointer */
					int16 spacing,			/* How much vertical spacing between the lines */
					byte pencolor,			/* pen number to use for text */
					byte backpen,			/* the background color */
					bool fillback,			/* Whether to fill the background */
					bool centerh,			/* Whether to center the text horizontally */
					bool centerv,			/* Whether to center the text vertically */
					bool output,			/* Whether to output any text */
					uint16 x1, uint16 y1,	/* Cords */
					uint16 x2, uint16 y2,
					const char *text);		/* The text itself */

	uint32 flowTextScaled(void *font,		/* the TextAttr pointer */
		int16 spacing,			/* How much vertical spacing between the lines */
		byte pencolor,			/* pen number to use for text */
		byte backpen,			/* the background color */
		bool fillback,			/* Whether to fill the background */
		bool centerh,			/* Whether to center the text horizontally */
		bool centerv,			/* Whether to center the text vertically */
		bool output,			/* Whether to output any text */
		uint16 x1, uint16 y1,	/* Cords */
		uint16 x2, uint16 y2,
		const char *text);		/* The text itself */

	uint32 flowTextToMem(Image *destIm,
					void *font,				/* the TextAttr pointer */
					int16 spacing,			/* How much vertical spacing between the lines */
					byte pencolor,			/* pen number to use for text */
					byte backpen,			/* the background color */
					bool fillback,			/* Whether to fill the background */
					bool centerh,			/* Whether to center the text horizontally */
					bool centerv,			/* Whether to center the text vertically */
					bool output,			/* Whether to output any text */
					uint16 x1, uint16 y1,	/* Cords */
					uint16 x2, uint16 y2,
					const char *str);		/* The text itself */

	void drawHLine(uint16 x, uint16 y1, uint16 y2);
	void drawVLine(uint16 x1, uint16 y, uint16 x2);
	void screenUpdate();
	bool createScreen(bool HiRes);
	void setAmigaPal(uint16 *pal, uint16 numColors);
	void writeColorRegs(byte *buf, uint16 first, uint16 numreg);
	void setPalette(void *cmap, uint16 numcolors);
	void overlayRect(uint16 pencolor, uint16 x1, uint16 y1, uint16 x2, uint16 y2);
	byte *getCurrentDrawingBuffer();
	void scrollDisplayX(int16 dx, uint16 x1, uint16 y1, uint16 x2, uint16 y2);
	void scrollDisplayY(int16 dy, uint16 x1, uint16 y1, uint16 x2, uint16 y2);
	void fade(bool fadein, uint16 res);

	bool _longWinInFront;
	bool _lastMessageLong;
	uint32 _screenBytesPerPage;
	int _screenWidth;
	int _screenHeight;
	byte *_displayBuffer;
	byte *_currentDisplayBuffer;
	bool _doNotDrawMessage;
	uint16 *FadePalette;
};

} // End of namespace Lab

#endif // LAB_GRAPHICS_H