mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-11 19:54:03 +00:00
156 lines
4.1 KiB
C++
156 lines
4.1 KiB
C++
/* 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
|