/* 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 . * */ #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 &getSurface() const; const Graphics::PixelFormat &getPixelFormat() const; const Common::SharedPtr &getCursorGraphic() const; void setCursorGraphic(const Common::SharedPtr &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 _surface; Common::SharedPtr _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