diff options
author | Paul Gilbert | 2015-05-19 09:10:35 -0400 |
---|---|---|
committer | Paul Gilbert | 2015-05-19 09:10:35 -0400 |
commit | 8ae0014bc25e42e519d5a6a31279ee22580aaba9 (patch) | |
tree | f65994d628384e0cec0ead4799e92410658e157f /engines/sherlock/surface.h | |
parent | 1c395b4de91f3edb0ad7109da016eb42a32b434b (diff) | |
download | scummvm-rg350-8ae0014bc25e42e519d5a6a31279ee22580aaba9.tar.gz scummvm-rg350-8ae0014bc25e42e519d5a6a31279ee22580aaba9.tar.bz2 scummvm-rg350-8ae0014bc25e42e519d5a6a31279ee22580aaba9.zip |
SHERLOCK: Refactor Surface not to descend directly from Graphics::Surface
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 |