[Scummvm-cvs-logs] scummvm master -> 764a34edf74813d703f81c48778bd4494079f49f

lordhoto lordhoto at gmail.com
Fri Aug 16 05:35:59 CEST 2013


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
6713743441 VKEYBD: Make code agnostic of OverlayColor.
764a34edf7 TESTBED: Make code agonstic to OverlayColor.


Commit: 67137434416df22f5e75cd29d94c8a9fa195ed66
    https://github.com/scummvm/scummvm/commit/67137434416df22f5e75cd29d94c8a9fa195ed66
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2013-08-15T20:34:38-07:00

Commit Message:
VKEYBD: Make code agnostic of OverlayColor.

This removes the use of OverlayColor in vkeybd and supports both 16 and 32bit
overlays.

Changed paths:
    backends/vkeybd/virtual-keyboard-gui.cpp
    backends/vkeybd/virtual-keyboard-gui.h
    backends/vkeybd/virtual-keyboard.h



diff --git a/backends/vkeybd/virtual-keyboard-gui.cpp b/backends/vkeybd/virtual-keyboard-gui.cpp
index 8bf9a54..ec4cbf1 100644
--- a/backends/vkeybd/virtual-keyboard-gui.cpp
+++ b/backends/vkeybd/virtual-keyboard-gui.cpp
@@ -32,11 +32,9 @@
 
 namespace Common {
 
-static void blit(Graphics::Surface *surf_dst, Graphics::Surface *surf_src, int16 x, int16 y, OverlayColor transparent) {
-	if (surf_dst->format.bytesPerPixel != sizeof(OverlayColor) || surf_src->format.bytesPerPixel != sizeof(OverlayColor))
-		return;
-
-	const OverlayColor *src = (const OverlayColor *)surf_src->getPixels();
+template<typename ColorType>
+static void blitImplementation(Graphics::Surface *surf_dst, Graphics::Surface *surf_src, int16 x, int16 y, ColorType transparent) {
+	const ColorType *src = (const ColorType *)surf_src->getPixels();
 	int blitW = surf_src->w;
 	int blitH = surf_src->h;
 
@@ -58,13 +56,13 @@ static void blit(Graphics::Surface *surf_dst, Graphics::Surface *surf_src, int16
 	if (blitW <= 0 || blitH <= 0)
 		return;
 
-	OverlayColor *dst = (OverlayColor *)surf_dst->getBasePtr(x, y);
+	ColorType *dst = (ColorType *)surf_dst->getBasePtr(x, y);
 	int dstAdd = surf_dst->w - blitW;
 	int srcAdd = surf_src->w - blitW;
 
 	for (int i = 0; i < blitH; ++i) {
 		for (int j = 0; j < blitW; ++j, ++dst, ++src) {
-			OverlayColor col = *src;
+			ColorType col = *src;
 			if (col != transparent)
 				*dst = col;
 		}
@@ -73,6 +71,16 @@ static void blit(Graphics::Surface *surf_dst, Graphics::Surface *surf_src, int16
 	}
 }
 
+static void blit(Graphics::Surface *surf_dst, Graphics::Surface *surf_src, int16 x, int16 y, uint32 transparent) {
+	if (surf_dst->format.bytesPerPixel != surf_src->format.bytesPerPixel)
+		return;
+
+	if (surf_dst->format.bytesPerPixel == 2)
+		blitImplementation<uint16>(surf_dst, surf_src, x, y, transparent);
+	else if (surf_dst->format.bytesPerPixel == 4)
+		blitImplementation<uint32>(surf_dst, surf_src, x, y, transparent);
+}
+
 VirtualKeyboardGUI::VirtualKeyboardGUI(VirtualKeyboard *kbd)
 	: _kbd(kbd), _displaying(false), _drag(false),
 	  _drawCaret(false), _displayEnabled(false), _firstRun(true),
@@ -111,7 +119,7 @@ void VirtualKeyboardGUI::initMode(VirtualKeyboard::Mode *mode) {
 	}
 }
 
-void VirtualKeyboardGUI::setupDisplayArea(Rect &r, OverlayColor forecolor) {
+void VirtualKeyboardGUI::setupDisplayArea(Rect &r, uint32 forecolor) {
 
 	_dispFont = FontMan.getFontByUsage(Graphics::FontManager::kBigGUIFont);
 	if (!fontIsSuitable(_dispFont, r)) {
@@ -356,13 +364,13 @@ void VirtualKeyboardGUI::redraw() {
 	Graphics::Surface surf;
 	surf.create(w, h, _system->getOverlayFormat());
 
-	OverlayColor *dst = (OverlayColor *)surf.getPixels();
-	const OverlayColor *src = (OverlayColor *) _overlayBackup.getBasePtr(_dirtyRect.left, _dirtyRect.top);
+	byte *dst = (byte *)surf.getPixels();
+	const byte *src = (const byte *)_overlayBackup.getBasePtr(_dirtyRect.left, _dirtyRect.top);
 
 	while (h--) {
-		memcpy(dst, src, surf.w * sizeof(OverlayColor));
-		dst += surf.w;
-		src += _overlayBackup.w;
+		memcpy(dst, src, surf.pitch);
+		dst += surf.pitch;
+		src += _overlayBackup.pitch;
 	}
 
 	blit(&surf, _kbdSurface, _kbdBound.left - _dirtyRect.left,
diff --git a/backends/vkeybd/virtual-keyboard-gui.h b/backends/vkeybd/virtual-keyboard-gui.h
index d0f9c88..a2000ad 100644
--- a/backends/vkeybd/virtual-keyboard-gui.h
+++ b/backends/vkeybd/virtual-keyboard-gui.h
@@ -99,7 +99,7 @@ private:
 	VirtualKeyboard *_kbd;
 	Rect _kbdBound;
 	Graphics::Surface *_kbdSurface;
-	OverlayColor _kbdTransparentColor;
+	uint32 _kbdTransparentColor;
 
 	Point _dragPoint;
 	bool _drag;
@@ -113,7 +113,7 @@ private:
 	const Graphics::Font *_dispFont;
 	int16 _dispX, _dispY;
 	uint _dispI;
-	OverlayColor _dispForeColor, _dispBackColor;
+	uint32 _dispForeColor, _dispBackColor;
 
 	int _lastScreenChanged;
 	int16 _screenW, _screenH;
@@ -121,7 +121,7 @@ private:
 	bool _displaying;
 	bool _firstRun;
 
-	void setupDisplayArea(Rect &r, OverlayColor forecolor);
+	void setupDisplayArea(Rect &r, uint32 forecolor);
 	void move(int16 x, int16 y);
 	void moveToDefaultPosition();
 	void screenChanged();
diff --git a/backends/vkeybd/virtual-keyboard.h b/backends/vkeybd/virtual-keyboard.h
index 4ab5ad4..3b2b219 100644
--- a/backends/vkeybd/virtual-keyboard.h
+++ b/backends/vkeybd/virtual-keyboard.h
@@ -112,11 +112,11 @@ protected:
 		String              resolution;
 		String              bitmapName;
 		Graphics::Surface   *image;
-		OverlayColor        transparentColor;
+		uint32              transparentColor;
 		ImageMap            imageMap;
 		VKEventMap          events;
 		Rect                displayArea;
-		OverlayColor        displayFontColor;
+		uint32              displayFontColor;
 
 		Mode() : image(0) {}
 		~Mode() {


Commit: 764a34edf74813d703f81c48778bd4494079f49f
    https://github.com/scummvm/scummvm/commit/764a34edf74813d703f81c48778bd4494079f49f
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2013-08-15T20:34:44-07:00

Commit Message:
TESTBED: Make code agonstic to OverlayColor.

Changed paths:
    engines/testbed/graphics.cpp



diff --git a/engines/testbed/graphics.cpp b/engines/testbed/graphics.cpp
index 590e6c6..26e073d 100644
--- a/engines/testbed/graphics.cpp
+++ b/engines/testbed/graphics.cpp
@@ -927,17 +927,29 @@ TestExitStatus GFXtests::overlayGraphics() {
 
 	Graphics::PixelFormat pf = g_system->getOverlayFormat();
 
-	OverlayColor buffer[50 * 100];
-	OverlayColor value = pf.RGBToColor(0, 255, 0);
+	byte *buffer = new byte[50 * 100 * pf.bytesPerPixel];
+	const uint32 value = pf.RGBToColor(0, 255, 0);
 
-	for (int i = 0; i < 50 * 100; i++) {
-		buffer[i] = value;
+	if (pf.bytesPerPixel == 2) {
+		uint16 *dst = (uint16 *)buffer;
+		for (int i = 50 * 100; i > 0; --i) {
+			*dst++ = value;
+		}
+	} else if (pf.bytesPerPixel == 4) {
+		uint32 *dst = (uint32 *)buffer;
+		for (int i = 50 * 100; i > 0; --i) {
+			*dst++ = value;
+		}
+	} else {
+		error("GFXtests::overlayGraphics: Unsupported color depth: %d", pf.bytesPerPixel);
 	}
 
 	g_system->showOverlay();
-	g_system->copyRectToOverlay(buffer, 200, 270, 175, 100, 50);
+	g_system->copyRectToOverlay(buffer, 100 * pf.bytesPerPixel, 270, 175, 100, 50);
 	g_system->updateScreen();
 
+	delete[] buffer;
+
 	g_system->delayMillis(1000);
 
 	g_system->hideOverlay();






More information about the Scummvm-git-logs mailing list