[Scummvm-git-logs] scummvm master -> 07498687bdae9c05b9ef59470522078c0187c533
bluegr
noreply at scummvm.org
Sun Jun 5 14:28:30 UTC 2022
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
07498687bd GRAPHICS: Add Surface::copyRectToSurfaceWithKey()
Commit: 07498687bdae9c05b9ef59470522078c0187c533
https://github.com/scummvm/scummvm/commit/07498687bdae9c05b9ef59470522078c0187c533
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2022-06-05T17:28:28+03:00
Commit Message:
GRAPHICS: Add Surface::copyRectToSurfaceWithKey()
Changed paths:
graphics/managed_surface.h
graphics/surface.cpp
graphics/surface.h
gui/about.cpp
diff --git a/graphics/managed_surface.h b/graphics/managed_surface.h
index 3b8d169ec28..0d5b60891d6 100644
--- a/graphics/managed_surface.h
+++ b/graphics/managed_surface.h
@@ -533,6 +533,24 @@ public:
_innerSurface.copyRectToSurface(srcSurface, destX, destY, subRect);
}
+ /**
+ * Copy a bitmap to the internal buffer of the surface.
+ *
+ * The pixel format of the buffer must match the pixel format of the surface.
+ */
+ void copyRectToSurfaceWithKey(const void *buffer, int srcPitch, int destX, int destY, int width, int height, uint32 key) {
+ _innerSurface.copyRectToSurfaceWithKey(buffer, srcPitch, destX, destY, width, height, key);
+ }
+
+ /**
+ * Copy a bitmap to the internal buffer of the surface.
+ *
+ * The pixel format of the buffer must match the pixel format of the surface.
+ */
+ void copyRectToSurfaceWithKey(const Graphics::Surface &srcSurface, int destX, int destY, const Common::Rect subRect, uint32 key) {
+ _innerSurface.copyRectToSurfaceWithKey(srcSurface, destX, destY, subRect, key);
+ }
+
/**
* Copy the data from another surface, reinitializing the
* surface to match the dimensions of the passed surface.
diff --git a/graphics/surface.cpp b/graphics/surface.cpp
index 102f84a73a6..66bc3f17f86 100644
--- a/graphics/surface.cpp
+++ b/graphics/surface.cpp
@@ -188,6 +188,26 @@ void Surface::copyRectToSurface(const Graphics::Surface &srcSurface, int destX,
copyRectToSurface(srcSurface.getBasePtr(subRect.left, subRect.top), srcSurface.pitch, destX, destY, subRect.width(), subRect.height());
}
+void Surface::copyRectToSurfaceWithKey(const void *buffer, int srcPitch, int destX, int destY, int width, int height, uint32 key) {
+ assert(buffer);
+
+ assert(destX >= 0 && destX < w);
+ assert(destY >= 0 && destY < h);
+ assert(height > 0 && destY + height <= h);
+ assert(width > 0 && destX + width <= w);
+
+ // Copy buffer data to internal buffer
+ const byte *src = (const byte *)buffer;
+ byte *dst = (byte *)getBasePtr(destX, destY);
+ Graphics::keyBlit(dst, src, pitch, srcPitch, width, height, format.bytesPerPixel, key);
+}
+
+void Surface::copyRectToSurfaceWithKey(const Graphics::Surface &srcSurface, int destX, int destY, const Common::Rect subRect, uint32 key) {
+ assert(srcSurface.format == format);
+
+ copyRectToSurfaceWithKey(srcSurface.getBasePtr(subRect.left, subRect.top), srcSurface.pitch, destX, destY, subRect.width(), subRect.height(), key);
+}
+
void Surface::hLine(int x, int y, int x2, uint32 color) {
// Clipping
if (y < 0 || y >= h)
diff --git a/graphics/surface.h b/graphics/surface.h
index cccb766f7be..5d2e2a9480b 100644
--- a/graphics/surface.h
+++ b/graphics/surface.h
@@ -289,6 +289,34 @@ public:
*/
void copyRectToSurface(const Graphics::Surface &srcSurface, int destX, int destY, const Common::Rect subRect);
+ /**
+ * Copy a bitmap to the internal buffer of the surface.
+ *
+ * The pixel format of the buffer must match the pixel format of the surface.
+ *
+ * @param buffer Buffer containing the graphics data source.
+ * @param srcPitch Pitch of the buffer (number of bytes in a scanline).
+ * @param destX The x coordinate of the destination rectangle.
+ * @param destY The y coordinate of the destination rectangle.
+ * @param width Width of the destination rectangle.
+ * @param height Height of the destination rectangle.
+ * @param key
+ */
+ void copyRectToSurfaceWithKey(const void *buffer, int srcPitch, int destX, int destY, int width, int height, uint32 key);
+
+ /**
+ * Copy a bitmap to the internal buffer of the surface.
+ *
+ * The pixel format of the buffer must match the pixel format of the surface.
+ *
+ * @param srcSurface Source of the bitmap data.
+ * @param destX The x coordinate of the destination rectangle.
+ * @param destY The y coordinate of the destination rectangle.
+ * @param subRect The subRect of the surface to be blitted.
+ * @param key
+ */
+ void copyRectToSurfaceWithKey(const Graphics::Surface &srcSurface, int destX, int destY, const Common::Rect subRect, uint32 key);
+
/**
* Convert the data to another pixel format.
*
diff --git a/gui/about.cpp b/gui/about.cpp
index b47b912b6c6..94ec8d52c37 100644
--- a/gui/about.cpp
+++ b/gui/about.cpp
@@ -26,7 +26,6 @@
#include "common/system.h"
#include "common/translation.h"
#include "common/util.h"
-#include "graphics/conversion.h"
#include "graphics/surface.h"
#include "graphics/fonts/amigafont.h"
#include "gui/about.h"
@@ -1099,7 +1098,7 @@ void EE::draw(int sn, int x1, int y1) {
int x = x1 * _scale;
int y = y1 * _scale;
- Graphics::keyBlit((byte *)_back.getBasePtr(x, y), (const byte *)_sp[sn].getPixels(), _back.pitch, _sp[sn].pitch, _sp[sn].w, _sp[sn].h, _back.format.bytesPerPixel, _colorKey);
+ _back.copyRectToSurfaceWithKey(_sp[sn].getPixels(), _sp[sn].pitch, x, y, _sp[sn].w, _sp[sn].h, _colorKey);
g_system->copyRectToOverlay(_back.getBasePtr(x, y), _back.pitch, _windowX + x, _windowY + y, _sp[sn].w, _sp[sn].h);
}
More information about the Scummvm-git-logs
mailing list