diff options
author | Eugene Sandulenko | 2016-09-10 16:55:29 +0200 |
---|---|---|
committer | GitHub | 2016-09-10 16:55:29 +0200 |
commit | b7a8242b9b453d3e965f3d1d085c7456025ac8f8 (patch) | |
tree | 8f8268861c777ad9204aee7a12b71d8e18eaec91 /engines/xeen/screen.h | |
parent | a46cc8597cdc2ab2aca146ed79c0fcf3f4df5617 (diff) | |
parent | a520a18a0101877d11cd488c5b6f93f5b63892af (diff) | |
download | scummvm-rg350-b7a8242b9b453d3e965f3d1d085c7456025ac8f8.tar.gz scummvm-rg350-b7a8242b9b453d3e965f3d1d085c7456025ac8f8.tar.bz2 scummvm-rg350-b7a8242b9b453d3e965f3d1d085c7456025ac8f8.zip |
Merge pull request #818 from dreammaster/xeen
XEEN: Might & Magic engine
Diffstat (limited to 'engines/xeen/screen.h')
-rw-r--r-- | engines/xeen/screen.h | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/engines/xeen/screen.h b/engines/xeen/screen.h new file mode 100644 index 0000000000..854a05a7cf --- /dev/null +++ b/engines/xeen/screen.h @@ -0,0 +1,194 @@ +/* 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. + * + */ + +#ifndef XEEN_SCREEN_H +#define XEEN_SCREEN_H + +#include "common/scummsys.h" +#include "common/system.h" +#include "common/array.h" +#include "common/keyboard.h" +#include "common/rect.h" +#include "xeen/font.h" +#include "xeen/sprites.h" +#include "xeen/xsurface.h" + +namespace Xeen { + +#define SCREEN_WIDTH 320 +#define SCREEN_HEIGHT 200 +#define PALETTE_COUNT 256 +#define PALETTE_SIZE (256 * 3) +#define GAME_WINDOW 28 + +class XeenEngine; +class Screen; + +struct DrawStruct { + SpriteResource *_sprites; + int _frame; + int _x; + int _y; + int _scale; + int _flags; + + DrawStruct(int frame, int x, int y, int scale = 0, int flags = 0) : + _sprites(nullptr), _frame(frame), _x(x), _y(y), _scale(scale), _flags(flags) {} + DrawStruct(): _sprites(nullptr), _frame(0), _x(0), _y(0), _scale(0), _flags(0) {} +}; + +class Window: public XSurface { +private: + XeenEngine *_vm; + Common::Rect _bounds; + Common::Rect _innerBounds; + XSurface _savedArea; + int _a; + int _border; + int _xLo, _xHi; + int _ycL, _ycH; + + void open2(); +public: + bool _enabled; +public: + virtual void addDirtyRect(const Common::Rect &r); +public: + Window(); + Window(const Window &src); + Window(XeenEngine *vm, const Common::Rect &bounds, int a, int border, + int xLo, int ycL, int xHi, int ycH); + + void setBounds(const Common::Rect &r); + + const Common::Rect &getBounds() { return _bounds; } + + void open(); + + void close(); + + /** + * Update the window + */ + void update(); + + void frame(); + + /** + * Fill the content area of a window with the current background color + */ + void fill(); + + const char *writeString(const Common::String &s); + + void drawList(DrawStruct *items, int count); + + int getString(Common::String &line, uint maxLen, int maxWidth); +}; + +class Screen: public FontSurface { +private: + XeenEngine *_vm; + Common::List<Common::Rect> _dirtyRects; + byte _mainPalette[PALETTE_SIZE]; + byte _tempPalette[PALETTE_SIZE]; + XSurface _pages[2]; + XSurface _savedScreens[10]; + bool _fadeIn; + + void mergeDirtyRects(); + + bool unionRectangle(Common::Rect &destRect, const Common::Rect &src1, const Common::Rect &src2); + + /** + * Mark the entire screen for drawing + */ + void drawScreen(); + + void fadeInner(int step); + + void updatePalette(); + + void updatePalette(const byte *pal, int start, int count16); +public: + /** + * Adds an area that requires redrawing on the next frame update + */ + virtual void addDirtyRect(const Common::Rect &r); +public: + Common::Array<Window> _windows; + + Common::Array<Window *> _windowStack; +public: + Screen(XeenEngine *vm); + + virtual ~Screen(); + + void setupWindows(); + + void closeWindows(); + + void update(); + + /** + * Load a palette resource into the temporary palette + */ + void loadPalette(const Common::String &name); + + /** + * Load a background resource into memory + */ + void loadBackground(const Common::String &name); + + /** + * Copy a loaded background into a display page + */ + void loadPage(int pageNum); + + void freePages(); + + /** + * Merge the two pages along a horizontal split point + */ + void horizMerge(int xp); + + /** + * Merge the two pages along a vertical split point + */ + void vertMerge(int yp); + + void draw(void *data = nullptr); + + void fadeIn(int step); + + void fadeOut(int step); + + void saveBackground(int slot = 1); + + void restoreBackground(int slot = 1); + + void frameWindow(uint bgType); +}; + +} // End of namespace Xeen + +#endif /* XEEN_SCREEN_H */ |