aboutsummaryrefslogtreecommitdiff
path: root/engines/illusions/screen.h
diff options
context:
space:
mode:
authorjohndoe1232014-04-04 10:53:00 +0200
committerEugene Sandulenko2018-07-20 06:43:33 +0000
commit6ba5570de52344da602cf02fb83725b468e3d8c5 (patch)
tree1e5cda64c460754c15b6b35534c596bbd2cea941 /engines/illusions/screen.h
parent54bce3d37a852e0d3a674277ff09212a7adfc007 (diff)
downloadscummvm-rg350-6ba5570de52344da602cf02fb83725b468e3d8c5.tar.gz
scummvm-rg350-6ba5570de52344da602cf02fb83725b468e3d8c5.tar.bz2
scummvm-rg350-6ba5570de52344da602cf02fb83725b468e3d8c5.zip
ILLUSIONS: Move SpriteDrawQueue to screen
Diffstat (limited to 'engines/illusions/screen.h')
-rw-r--r--engines/illusions/screen.h43
1 files changed, 42 insertions, 1 deletions
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<SpriteDrawQueueItem*> SpriteDrawQueueList;
+ typedef SpriteDrawQueueList::iterator SpriteDrawQueueListIterator;
+ struct FindInsertionPosition : public Common::UnaryFunction<const SpriteDrawQueueItem*, bool> {
+ 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);