File: render.h

package info (click to toggle)
scummvm 2.9.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 450,580 kB
  • sloc: cpp: 4,299,825; asm: 28,322; python: 12,901; sh: 11,302; java: 9,289; xml: 7,895; perl: 2,639; ansic: 2,465; yacc: 1,670; javascript: 1,020; makefile: 933; lex: 578; awk: 275; objc: 82; sed: 11; php: 1
file content (155 lines) | stat: -rw-r--r-- 4,230 bytes parent folder | download | duplicates (3)
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
/* 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 3 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, see <http://www.gnu.org/licenses/>.
 *
 */

#ifndef MTROPOLIS_RENDER_H
#define MTROPOLIS_RENDER_H

#include "common/events.h"
#include "common/ptr.h"
#include "common/scummsys.h"

#include "graphics/pixelformat.h"

#include "actions.h"

namespace Graphics {

class ManagedSurface;
struct Surface;

} // End of namespace Graphics

namespace MTropolis {

class CursorGraphic;
class Runtime;
class Project;
struct SceneTransitionEffect;

enum TextAlignment {
	kTextAlignmentLeft,
	kTextAlignmentCenter,
	kTextAlignmentRight,
};

struct TextStyleFlags {
	bool bold : 1;
	bool italic : 1;
	bool underline : 1;
	bool outline : 1;
	bool shadow : 1;
	bool condensed : 1;
	bool expanded : 1;

	TextStyleFlags();
	bool load(uint8 dataStyleFlags);
};

struct MacFontFormatting {
	MacFontFormatting();
	MacFontFormatting(uint16 mff_fontID, uint8 mff_fontFlags, uint16 mff_size);

	uint16 fontID;
	uint8 fontFlags;
	uint16 size;
};

struct MacFormattingSpan {
	MacFormattingSpan();

	uint16 spanStart;
	MacFontFormatting formatting;
};

struct WindowParameters {
	Runtime *runtime;
	int32 x;
	int32 y;
	int16 width;
	int16 height;
	const Graphics::PixelFormat format;

	WindowParameters(Runtime *wp_runtime, int32 wp_x, int32 wp_y, int16 wp_width, int16 wp_height, const Graphics::PixelFormat &wp_format);
};

class Window {
public:
	explicit Window(const WindowParameters &windowParams);
	virtual ~Window();

	int32 getX() const;
	int32 getY() const;
	int32 getWidth() const;
	int32 getHeight() const;
	void setPosition(int32 x, int32 y);
	void resizeWindow(int32 width, int32 height);	// Destroys contents

	const Common::SharedPtr<Graphics::ManagedSurface> &getSurface() const;
	const Graphics::PixelFormat &getPixelFormat() const;

	const Common::SharedPtr<CursorGraphic> &getCursorGraphic() const;
	void setCursorGraphic(const Common::SharedPtr<CursorGraphic> &cursor);

	bool getMouseVisible() const;
	void setMouseVisible(bool visible);

	void setStrata(int strata);
	int getStrata() const;

	// Mouse transparency = ignores mouse events
	void setMouseTransparent(bool isTransparent);
	bool isMouseTransparent() const;

	void close();
	void detachFromRuntime();

	virtual void onMouseDown(int32 x, int32 y, int mouseButton);
	virtual void onMouseMove(int32 x, int32 y);
	virtual void onMouseUp(int32 x, int32 y, int mouseButton);
	virtual void onKeyboardEvent(const Common::EventType evtType, bool repeat, const Common::KeyState &keyEvt);
	virtual void onAction(Actions::Action action);

protected:
	int32 _x;
	int32 _y;
	Runtime *_runtime;
	int _strata;
	bool _isMouseTransparent;
	bool _isMouseVisible;

	Common::SharedPtr<Graphics::ManagedSurface> _surface;
	Common::SharedPtr<CursorGraphic> _cursor;
};

namespace Render {

uint32 resolveRGB(uint8 r, uint8 g, uint8 b, const Graphics::PixelFormat &fmt);
void renderProject(Runtime *runtime, Window *mainWindow, bool *outSkipped);
void renderSceneTransition(Runtime *runtime, Window *mainWindow, const SceneTransitionEffect &effect, uint32 startTime, uint32 endTime, uint32 currentTime, const Graphics::ManagedSurface &oldFrame, const Graphics::ManagedSurface &newFrame);

void convert32To16(Graphics::ManagedSurface &destSurface, const Graphics::ManagedSurface &srcSurface);
void convert16To32(Graphics::ManagedSurface &destSurface, const Graphics::ManagedSurface &srcSurface);

} // End of namespace Render

} // End of namespace MTropolis

#endif