diff options
author | Paul Gilbert | 2015-08-02 19:04:48 -0400 |
---|---|---|
committer | Paul Gilbert | 2015-08-02 19:04:48 -0400 |
commit | b06cfaed9c2f890551d357fbc88fd7359b7f9158 (patch) | |
tree | 3767383ebf495f6596d46eb6224520b07800fc53 /engines | |
parent | 9f74d342a87da25c96550f2528e0eab67eb6897a (diff) | |
download | scummvm-rg350-b06cfaed9c2f890551d357fbc88fd7359b7f9158.tar.gz scummvm-rg350-b06cfaed9c2f890551d357fbc88fd7359b7f9158.tar.bz2 scummvm-rg350-b06cfaed9c2f890551d357fbc88fd7359b7f9158.zip |
SHERLOCK: RT: Fix transparency when dragging lab items with cursor
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sherlock/events.cpp | 12 | ||||
-rw-r--r-- | engines/sherlock/surface.h | 11 |
2 files changed, 12 insertions, 11 deletions
diff --git a/engines/sherlock/events.cpp b/engines/sherlock/events.cpp index fb09a31c5a..204db8bd15 100644 --- a/engines/sherlock/events.cpp +++ b/engines/sherlock/events.cpp @@ -27,6 +27,7 @@ #include "graphics/cursorman.h" #include "sherlock/sherlock.h" #include "sherlock/events.h" +#include "sherlock/surface.h" namespace Sherlock { @@ -120,9 +121,8 @@ void Events::setCursor(CursorId cursorId, const Common::Point &cursorPos, const r.moveTo(0, 0); // Form a single surface containing both frames - Graphics::Surface s; - s.create(r.width(), r.height(), Graphics::PixelFormat::createFormatCLUT8()); - s.fillRect(r, TRANSPARENCY); + Surface s(r.width(), r.height()); + s.fill(TRANSPARENCY); // Draw the passed image Common::Point drawPos; @@ -130,11 +130,11 @@ void Events::setCursor(CursorId cursorId, const Common::Point &cursorPos, const drawPos.x = -cursorPt.x; if (cursorPt.y < 0) drawPos.y = -cursorPt.y; - s.copyRectToSurface(surface, drawPos.x, drawPos.y, Common::Rect(0, 0, surface.w, surface.h)); + s.blitFrom(surface, Common::Point(drawPos.x, drawPos.y)); // Draw the cursor image drawPos = Common::Point(MAX(cursorPt.x, (int16)0), MAX(cursorPt.y, (int16)0)); - s.copyRectToSurface(cursorImg, drawPos.x, drawPos.y, Common::Rect(0, 0, cursorImg.w, cursorImg.h)); + s.transBlitFrom(cursorImg, Common::Point(drawPos.x, drawPos.y)); // Set up hotspot position for cursor, adjusting for cursor image's position within the surface Common::Point hotspot; @@ -142,7 +142,7 @@ void Events::setCursor(CursorId cursorId, const Common::Point &cursorPos, const hotspot = Common::Point(8, 8); hotspot += drawPos; // Set the cursor - setCursor(s, hotspot.x, hotspot.y); + setCursor(s.getRawSurface(), hotspot.x, hotspot.y); } void Events::animateCursorIfNeeded() { diff --git a/engines/sherlock/surface.h b/engines/sherlock/surface.h index dd1a199b1f..385fb1793e 100644 --- a/engines/sherlock/surface.h +++ b/engines/sherlock/surface.h @@ -50,11 +50,6 @@ private: 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); @@ -113,6 +108,11 @@ public: void blitFrom(const ImageFrame &src, const Common::Point &pt, const Common::Rect &srcBounds); /** + * Draws a surface at a given position within this surface + */ + void blitFrom(const Graphics::Surface &src, const Common::Point &pt); + + /** * Draws an image frame at a given position within this surface with transparency */ void transBlitFrom(const ImageFrame &src, const Common::Point &pt, @@ -174,6 +174,7 @@ public: 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 Graphics::Surface &getRawSurface() { return _surface; } 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); } }; |