From c66233f83e2d86b72f45aff20fb3198976850e42 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Fri, 4 Mar 2011 23:17:57 -0500 Subject: GRAPHICS: Split the NE cursor code from the NEResources class Now the code lies in Graphics and all cursors are not cached upon opening an exe. The engine is now in charge of caching which cursors it wants. --- graphics/wincursor.h | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 graphics/wincursor.h (limited to 'graphics/wincursor.h') diff --git a/graphics/wincursor.h b/graphics/wincursor.h new file mode 100644 index 0000000000..3e2fc55bb8 --- /dev/null +++ b/graphics/wincursor.h @@ -0,0 +1,94 @@ +/* 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 GRAPHICS_WINCURSOR_H +#define GRAPHICS_WINCURSOR_H + +#include "common/array.h" +#include "common/winexe.h" + +namespace Common { + class NEResources; + class PEResources; + class SeekableReadStream; +} + +namespace Graphics { + +/** A Windows cursor. */ +class WinCursor { +public: + WinCursor(); + ~WinCursor(); + + /** Return the cursor's width. */ + uint16 getWidth() const; + /** Return the cursor's height. */ + uint16 getHeight() const; + /** Return the cursor's hotspot's x coordinate. */ + uint16 getHotspotX() const; + /** Return the cursor's hotspot's y coordinate. */ + uint16 getHotspotY() const; + /** Return the cursor's transparent key. */ + byte getKeyColor() const; + + const byte *getSurface() const { return _surface; } + const byte *getPalette() const { return _palette; } + + /** Read the cursor's data out of a stream. */ + bool readFromStream(Common::SeekableReadStream &stream); + +private: + byte *_surface; + byte _palette[256 * 3]; + + uint16 _width; ///< The cursor's width. + uint16 _height; ///< The cursor's height. + uint16 _hotspotX; ///< The cursor's hotspot's x coordinate. + uint16 _hotspotY; ///< The cursor's hotspot's y coordinate. + byte _keyColor; ///< The cursor's transparent key + + /** Clear the cursor. */ + void clear(); +}; + +struct WinCursorGroup { + WinCursorGroup(); + ~WinCursorGroup(); + + struct CursorItem { + Common::WinResourceID id; + WinCursor *cursor; + }; + + Common::Array cursors; + + static WinCursorGroup *createCursorGroup(Common::NEResources &exe, const Common::WinResourceID &id); + //static WinCursorGroup *createCursorGroup(Common::PEResources &exe, const Common::WinResourceID &id); +}; + +} // End of namespace Graphics + +#endif -- cgit v1.2.3 From 6143fe965bb5332d8f32709ff1cce3624cd0e51d Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Sat, 5 Mar 2011 13:36:55 -0500 Subject: GRAPHICS: Add support for PE cursors in WinCursorGroup Only 1bpp still --- graphics/wincursor.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'graphics/wincursor.h') diff --git a/graphics/wincursor.h b/graphics/wincursor.h index 3e2fc55bb8..b89bda9cd4 100644 --- a/graphics/wincursor.h +++ b/graphics/wincursor.h @@ -86,7 +86,7 @@ struct WinCursorGroup { Common::Array cursors; static WinCursorGroup *createCursorGroup(Common::NEResources &exe, const Common::WinResourceID &id); - //static WinCursorGroup *createCursorGroup(Common::PEResources &exe, const Common::WinResourceID &id); + static WinCursorGroup *createCursorGroup(Common::PEResources &exe, const Common::WinResourceID &id); }; } // End of namespace Graphics -- cgit v1.2.3 From b158a4084463d478ba961434f88971ae2a7aeac2 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Mon, 7 Mar 2011 13:24:05 -0500 Subject: GRAPHICS: Add doxygen comments for WinCursorGroup --- graphics/wincursor.h | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'graphics/wincursor.h') diff --git a/graphics/wincursor.h b/graphics/wincursor.h index b89bda9cd4..ca0abf6fe1 100644 --- a/graphics/wincursor.h +++ b/graphics/wincursor.h @@ -74,6 +74,15 @@ private: void clear(); }; +/** + * A structure holding an array of cursors from a single Windows Executable cursor group. + * + * Windows lumps different versions of the same cursors/icons together and decides which one + * to use based on the screen's color depth and resolution. For instance, one cursor group + * could hold a 1bpp 16x16 cursorand a 8bpp 16x16 cursor. This will hold all cursors in the + * group. This class should be used to actually parse the cursors, whereas WinCursor is just + * the representation used by this struct to store the cursors. + */ struct WinCursorGroup { WinCursorGroup(); ~WinCursorGroup(); @@ -85,7 +94,9 @@ struct WinCursorGroup { Common::Array cursors; + /** Create a cursor group from an NE EXE, returns 0 on failure */ static WinCursorGroup *createCursorGroup(Common::NEResources &exe, const Common::WinResourceID &id); + /** Create a cursor group from an PE EXE, returns 0 on failure */ static WinCursorGroup *createCursorGroup(Common::PEResources &exe, const Common::WinResourceID &id); }; -- cgit v1.2.3