diff options
Diffstat (limited to 'engines/sherlock/surface.h')
-rw-r--r-- | engines/sherlock/surface.h | 56 |
1 files changed, 49 insertions, 7 deletions
diff --git a/engines/sherlock/surface.h b/engines/sherlock/surface.h index 4b7166b090..f3b1b393bb 100644 --- a/engines/sherlock/surface.h +++ b/engines/sherlock/surface.h @@ -30,7 +30,7 @@ namespace Sherlock { struct ImageFrame; -class Surface : public Graphics::Surface { +class Surface { private: bool _freePixels; @@ -38,7 +38,30 @@ private: * Clips the given source bounds so the passed destBounds will be entirely on-screen */ bool clip(Common::Rect &srcBounds, Common::Rect &destBounds); + + /** + * Copy a surface into this one + */ + void blitFrom(const Graphics::Surface &src); + + /** + * Draws a surface at a given position within this surface + */ + void blitFrom(const Graphics::Surface &src, const Common::Point &pt); + + /** + * Draws a sub-section of a surface at a given position within this surface + */ + void blitFrom(const Graphics::Surface &src, const Common::Point &pt, const Common::Rect &srcBounds); + + /** + * Draws a surface at a given position within this surface with transparency + */ + void transBlitFrom(const Graphics::Surface &src, const Common::Point &pt, + bool flipped = false, int overrideColor = 0); protected: + Graphics::Surface _surface; + virtual void addDirtyRect(const Common::Rect &r) {} public: Surface(uint16 width, uint16 height); @@ -54,7 +77,7 @@ public: /** * Copy a surface into this one */ - void blitFrom(const Graphics::Surface &src); + void blitFrom(const Surface &src); /** * Copy an image frame into this surface @@ -64,7 +87,7 @@ public: /** * Draws a surface at a given position within this surface */ - void blitFrom(const Graphics::Surface &src, const Common::Point &pt); + void blitFrom(const Surface &src, const Common::Point &pt); /** * Copy an image frame onto this surface at a given position @@ -74,7 +97,7 @@ public: /** * Draws a sub-section of a surface at a given position within this surface */ - void blitFrom(const Graphics::Surface &src, const Common::Point &pt, const Common::Rect &srcBounds); + void blitFrom(const Surface &src, const Common::Point &pt, const Common::Rect &srcBounds); /** * Copy a sub-area of a source image frame into this surface at a given position @@ -88,9 +111,9 @@ public: bool flipped = false, int overrideColor = 0); /** - * Draws a surface at a given position within this surface with transparency - */ - void transBlitFrom(const Graphics::Surface &src, const Common::Point &pt, + * Draws a surface at a given position within this surface with transparency + */ + void transBlitFrom(const Surface &src, const Common::Point &pt, bool flipped = false, int overrideColor = 0); /** @@ -107,6 +130,25 @@ public: * Clear the screen */ void clear(); + + /** + * Free the underlying surface + */ + void free(); + + /** + * Set the pixels for the surface to an existing data block + */ + void setPixels(byte *pixels, int w, int h); + + inline uint16 w() const { return _surface.w; } + inline uint16 h() const { return _surface.h; } + inline const byte *getPixels() const { return (const byte *)_surface.getPixels(); } + inline byte *getPixels() { return (byte *)_surface.getPixels(); } + inline byte *getBasePtr(int x, int y) { return (byte *)_surface.getBasePtr(x, y); } + inline const byte *getBasePtr(int x, int y) const { return (const byte *)_surface.getBasePtr(x, y); } + inline void hLine(int x, int y, int x2, uint32 color) { _surface.hLine(x, y, x2, color); } + inline void vLine(int x, int y, int y2, uint32 color) { _surface.vLine(x, y, y2, color); } }; } // End of namespace Sherlock |