From 6ba5570de52344da602cf02fb83725b468e3d8c5 Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Fri, 4 Apr 2014 10:53:00 +0200 Subject: ILLUSIONS: Move SpriteDrawQueue to screen --- engines/illusions/screen.h | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) (limited to 'engines/illusions/screen.h') diff --git a/engines/illusions/screen.h b/engines/illusions/screen.h index 33a0de3986..6332f7887f 100644 --- a/engines/illusions/screen.h +++ b/engines/illusions/screen.h @@ -23,8 +23,9 @@ #ifndef ILLUSIONS_SCREEN_H #define ILLUSIONS_SCREEN_H -#include "illusions/spritedrawqueue.h" +#include "illusions/graphics.h" #include "common/list.h" +#include "common/rect.h" #include "graphics/surface.h" namespace Illusions { @@ -55,6 +56,46 @@ protected: void decompress(SpriteDecompressQueueItem *item); }; +struct SpriteDrawQueueItem { + byte *_drawFlags; + int16 _kind; + int16 _scale; + uint16 _flags; + uint32 _priority; + Graphics::Surface *_surface; + WidthHeight _dimensions; + Common::Point _drawPosition; + Common::Point _controlPosition; +}; + +class SpriteDrawQueue { +public: + SpriteDrawQueue(Screen *screen); + ~SpriteDrawQueue(); + bool draw(SpriteDrawQueueItem *item); + void drawAll(); + void insertSprite(byte *drawFlags, Graphics::Surface *surface, WidthHeight &dimensions, + Common::Point &drawPosition, Common::Point &controlPosition, uint32 priority, int16 scale, uint16 flags); + void insertSurface(Graphics::Surface *surface, WidthHeight &dimensions, + Common::Point &drawPosition, uint32 priority); + void insertTextSurface(Graphics::Surface *surface, WidthHeight &dimensions, + Common::Point &drawPosition, uint32 priority); +protected: + typedef Common::List SpriteDrawQueueList; + typedef SpriteDrawQueueList::iterator SpriteDrawQueueListIterator; + struct FindInsertionPosition : public Common::UnaryFunction { + uint32 _priority; + FindInsertionPosition(uint32 priority) : _priority(priority) {} + bool operator()(const SpriteDrawQueueItem *item) const { + return item->_priority >= _priority; + } + }; + Screen *_screen; + SpriteDrawQueueList _queue; + void insert(SpriteDrawQueueItem *item, uint32 priority); + bool calcItemRect(SpriteDrawQueueItem *item, Common::Rect &srcRect, Common::Rect &dstRect); +}; + class Screen { public: Screen(IllusionsEngine *vm); -- cgit v1.2.3