aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/graphics/gui.h
blob: c5b1ad1892bcead0feebfaa48bb7f6e5d12ce429 (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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
/* 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.
 *
 * $URL$
 * $Id$
 *
 */

#ifndef SCI_GRAPHICS_GUI_H
#define SCI_GRAPHICS_GUI_H

#include "sci/graphics/helpers.h"

namespace Sci {

// Control types and flags
enum {
	SCI_CONTROLS_TYPE_BUTTON		= 1,
	SCI_CONTROLS_TYPE_TEXT			= 2,
	SCI_CONTROLS_TYPE_TEXTEDIT		= 3,
	SCI_CONTROLS_TYPE_ICON			= 4,
	SCI_CONTROLS_TYPE_LIST			= 6,
	SCI_CONTROLS_TYPE_LIST_ALIAS	= 7,
	SCI_CONTROLS_TYPE_DUMMY			= 10
};

class Screen;
class SciPalette;
class Cursor;
class Gfx;
class WindowMgr;
class SciGuiAnimate;
class Controls;
class Menu;
class Text;
class Transitions;

class SciGui {
public:
	SciGui(EngineState *s, Screen *screen, SciPalette *palette, Cursor *cursor);
	SciGui();
	virtual ~SciGui();

	virtual void init(bool usesOldGfxFunctions);

	virtual void wait(int16 ticks);
	virtual void setPort(uint16 portPtr);
	virtual Common::Rect getPortPic(int16 &picTop, int16 &picLeft);
	virtual void setPortPic(Common::Rect rect, int16 picTop, int16 picLeft, bool initPriorityBandsFlag);
	virtual reg_t getPort();
	virtual void globalToLocal(int16 *x, int16 *y);
	virtual void localToGlobal(int16 *x, int16 *y);
	virtual int16 coordinateToPriority(int16 y);
	virtual int16 priorityToCoordinate(int16 priority);

	virtual reg_t newWindow(Common::Rect dims, Common::Rect restoreRect, uint16 style, int16 priority, int16 colorPen, int16 colorBack, const char *title);
	virtual void disposeWindow(uint16 windowPtr, bool reanimate);

	virtual void display(const char *text, int argc, reg_t *argv);

	virtual void textSize(const char *text, int16 font, int16 maxWidth, int16 *textWidth, int16 *textHeight);
	virtual void textFonts(int argc, reg_t *argv);
	virtual void textColors(int argc, reg_t *argv);

	virtual void drawStatus(const char *text, int16 colorPen, int16 colorBack);
	virtual void drawMenuBar(bool clear);
	virtual void menuReset();
	virtual void menuAdd(Common::String title, Common::String content, reg_t contentVmPtr);
	virtual void menuSet(uint16 menuId, uint16 itemId, uint16 attributeId, reg_t value);
	virtual reg_t menuGet(uint16 menuId, uint16 itemId, uint16 attributeId);
	virtual reg_t menuSelect(reg_t eventObject);

	virtual void drawPicture(GuiResourceId pictureId, int16 animationNr, bool animationBlackoutFlag, bool mirroredFlag, bool addToFlag, int16 EGApaletteNo);
	virtual void drawCel(GuiResourceId viewId, int16 loopNo, int16 celNo, uint16 leftPos, uint16 topPos, int16 priority, uint16 paletteNo, int16 origHeight = -1);
	virtual void drawControlButton(Common::Rect rect, reg_t obj, const char *text, int16 fontId, int16 style, bool hilite);
	virtual void drawControlText(Common::Rect rect, reg_t obj, const char *text, int16 fontId, int16 alignment, int16 style, bool hilite);
	virtual void drawControlTextEdit(Common::Rect rect, reg_t obj, const char *text, int16 fontId, int16 mode, int16 style, int16 cursorPos, int16 maxChars, bool hilite);
	virtual void drawControlIcon(Common::Rect rect, reg_t obj, GuiResourceId viewId, int16 loopNo, int16 celNo, int16 style, bool hilite);
	virtual void drawControlList(Common::Rect rect, reg_t obj, int16 maxChars, int16 count, const char **entries, GuiResourceId fontId, int16 style, int16 upperPos, int16 cursorPos, bool isAlias, bool hilite);
	virtual void editControl(reg_t controlObject, reg_t eventObject);

	virtual void graphFillBoxForeground(Common::Rect rect);
	virtual void graphFillBoxBackground(Common::Rect rect);
	virtual void graphFillBox(Common::Rect rect, uint16 colorMask, int16 color, int16 priority, int16 control);
	virtual void graphFrameBox(Common::Rect rect, int16 color);
	virtual void graphDrawLine(Common::Point startPoint, Common::Point endPoint, int16 color, int16 priority, int16 control);
	virtual reg_t graphSaveBox(Common::Rect rect, uint16 flags);
	virtual reg_t graphSaveUpscaledHiresBox(Common::Rect rect);
	virtual void graphRestoreBox(reg_t handle);
	virtual void graphUpdateBox(Common::Rect rect);
	virtual void graphRedrawBox(Common::Rect rect);
	virtual void graphAdjustPriority(int top, int bottom);

	virtual int16 picNotValid(int16 newPicNotValid);

	virtual void paletteSet(GuiResourceId resourceNo, uint16 flags);
	virtual void paletteSetFlag(uint16 fromColor, uint16 toColor, uint16 flag);
	virtual void paletteUnsetFlag(uint16 fromColor, uint16 toColor, uint16 flag);
	virtual int16 paletteFind(uint16 r, uint16 g, uint16 b);
	virtual void paletteSetIntensity(uint16 fromColor, uint16 toColor, uint16 intensity, bool setPalette);
	virtual bool paletteAnimate(uint16 fromColor, uint16 toColor, int16 speed);
	virtual void paletteAnimateSet();

	virtual void shakeScreen(uint16 shakeCount, uint16 directions);

	virtual uint16 onControl(byte screenMask, Common::Rect rect);
	virtual void animateShowPic();
	virtual void animate(reg_t listReference, bool cycle, int argc, reg_t *argv);
	virtual void addToPicList(reg_t listReference, int argc, reg_t *argv);
	virtual void addToPicView(GuiResourceId viewId, int16 loopNo, int16 celNo, int16 leftPos, int16 topPos, int16 priority, int16 control);
	virtual void setNowSeen(reg_t objectReference);
	virtual bool canBeHere(reg_t curObject, reg_t listReference);
	virtual bool isItSkip(GuiResourceId viewId, int16 loopNo, int16 celNo, Common::Point position);
	virtual void baseSetter(reg_t object);

	void hideCursor();
	void showCursor();
	void setCursorShape(GuiResourceId cursorId);
	void setCursorView(GuiResourceId viewNum, int loopNum, int cellNum, Common::Point *hotspot);
	virtual void setCursorPos(Common::Point pos);
	Common::Point getCursorPos();
	virtual void moveCursor(Common::Point pos);
	void setCursorZone(Common::Rect zone);

	virtual int16 getCelWidth(GuiResourceId viewId, int16 loopNo, int16 celNo);
	virtual int16 getCelHeight(GuiResourceId viewId, int16 loopNo, int16 celNo);

	virtual int16 getLoopCount(GuiResourceId viewId);
	virtual int16 getCelCount(GuiResourceId viewId, int16 loopNo);

	virtual reg_t portraitLoad(Common::String resourceName);
	virtual void portraitShow(Common::String resourceName, Common::Point position, uint16 resourceNum, uint16 noun, uint16 verb, uint16 cond, uint16 seq);
	virtual void portraitUnload(uint16 portraitId);

#ifdef ENABLE_SCI32
	// SCI32
	virtual void addScreenItem(reg_t object);
	virtual void deleteScreenItem(reg_t object);
	virtual void addPlane(reg_t object);
	virtual void updatePlane(reg_t object);
	virtual void deletePlane(reg_t object);
	virtual void frameOut();
	virtual void globalToLocal(int16 *x, int16 *y, reg_t planeObj);
	virtual void localToGlobal(int16 *x, int16 *y, reg_t planeObj);
#endif

	virtual bool debugUndither(bool flag);
	virtual bool debugShowMap(int mapNo);

	// FIXME: Don't store EngineState
	virtual void resetEngineState(EngineState *s);

protected:
	Cursor *_cursor;
	EngineState *_s;
	Screen *_screen;
	SciPalette *_palette;
	Gfx *_gfx;

private:
	virtual void initPriorityBands();
	virtual void addToPicSetPicNotValid();
	virtual int getControlPicNotValid();

	WindowMgr *_windowMgr;
	SciGuiAnimate *_animate;
	Controls *_controls;
	Menu *_menu;
	Text *_text;
	Transitions *_transitions;

	bool _usesOldGfxFunctions;

#ifdef ENABLE_SCI32
	Common::Array<reg_t> _screenItems;
	Common::Array<reg_t> _planes;
#endif
};

} // End of namespace Sci

#endif