aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock/surface.h
diff options
context:
space:
mode:
authorPaul Gilbert2015-05-19 09:10:35 -0400
committerPaul Gilbert2015-05-19 09:10:35 -0400
commit8ae0014bc25e42e519d5a6a31279ee22580aaba9 (patch)
treef65994d628384e0cec0ead4799e92410658e157f /engines/sherlock/surface.h
parent1c395b4de91f3edb0ad7109da016eb42a32b434b (diff)
downloadscummvm-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.h56
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