[Scummvm-cvs-logs] scummvm master -> 7d24e1471c445fbf49b3efbb8d046eb26db849cd

dreammaster dreammaster at scummvm.org
Sun Jun 1 00:21:47 CEST 2014


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:
7d24e1471c MADS: Merge copyFromScaled into the existing copyFrom method


Commit: 7d24e1471c445fbf49b3efbb8d046eb26db849cd
    https://github.com/scummvm/scummvm/commit/7d24e1471c445fbf49b3efbb8d046eb26db849cd
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2014-05-31T18:21:11-04:00

Commit Message:
MADS: Merge copyFromScaled into the existing copyFrom method

Changed paths:
    engines/mads/msurface.cpp
    engines/mads/msurface.h
    engines/mads/scene_data.cpp
    engines/mads/sprites.cpp



diff --git a/engines/mads/msurface.cpp b/engines/mads/msurface.cpp
index 839882a..0108b0b 100644
--- a/engines/mads/msurface.cpp
+++ b/engines/mads/msurface.cpp
@@ -259,24 +259,52 @@ void MSurface::copyFrom(MSurface *src, const Common::Rect &srcBounds,
 
 void MSurface::copyFrom(MSurface *src, const Common::Point &destPos, int depth,
 	DepthSurface *depthSurface, int scale, int transparentColor) {
-
 	int destX = destPos.x, destY = destPos.y;
-	if (scale == 100) {
+	int frameWidth = src->getWidth();
+	int frameHeight = src->getHeight();
+
+	int highestDim = MAX(frameWidth, frameHeight);
+	bool lineDist[MADS_SCREEN_WIDTH];
+	int distIndex = 0;
+	int distXCount = 0, distYCount = 0;
+
+	if (scale != -1) {
+		int distCtr = 0;
+		do {
+			distCtr += scale;
+			if (distCtr < 100) {
+				lineDist[distIndex] = false;
+			} else {
+				lineDist[distIndex] = true;
+				distCtr -= 100;
+
+				if (distIndex < frameWidth)
+					++distXCount;
+
+				if (distIndex < frameHeight)
+					++distYCount;
+			}
+		} while (++distIndex < highestDim);
+
+		destX -= distXCount / 2;
+		destY -= distYCount - 1;
+	}
+
+	// Special case for quicker drawing of non-scaled images
+	if (scale == 100 || scale == -1) {
 		// Copy the specified area
 		Common::Rect copyRect(0, 0, src->getWidth(), src->getHeight());
 
 		if (destX < 0) {
 			copyRect.left += -destX;
 			destX = 0;
-		}
-		else if (destX + copyRect.width() > w) {
+		} else if (destX + copyRect.width() > w) {
 			copyRect.right -= destX + copyRect.width() - w;
 		}
 		if (destY < 0) {
 			copyRect.top += -destY;
 			destY = 0;
-		}
-		else if (destY + copyRect.height() > h) {
+		} else if (destY + copyRect.height() > h) {
 			copyRect.bottom -= destY + copyRect.height() - h;
 		}
 
@@ -310,33 +338,6 @@ void MSurface::copyFrom(MSurface *src, const Common::Point &destPos, int depth,
 	int destRight = this->getWidth() - 1;
 	int destBottom = this->getHeight() - 1;
 	bool normalFrame = true;
-	int frameWidth = src->getWidth();
-	int frameHeight = src->getHeight();
-
-	int highestDim = MAX(frameWidth, frameHeight);
-	bool lineDist[MADS_SCREEN_WIDTH];
-	int distIndex = 0;
-	int distXCount = 0, distYCount = 0;
-
-	int distCtr = 0;
-	do {
-		distCtr += scale;
-		if (distCtr < 100) {
-			lineDist[distIndex] = false;
-		} else {
-			lineDist[distIndex] = true;
-			distCtr -= 100;
-
-			if (distIndex < frameWidth)
-				++distXCount;
-
-			if (distIndex < frameHeight)
-				++distYCount;
-		}
-	} while (++distIndex < highestDim);
-
-	destX -= distXCount / 2;
-	destY -= distYCount - 1;
 
 	// Check x bounding area
 	int spriteLeft = 0;
@@ -419,27 +420,6 @@ void MSurface::copyFrom(MSurface *src, const Common::Point &destPos, int depth,
 	}
 }
 
-void MSurface::copyFromScaled(MSurface *src, const Common::Point &destPos, int depth,
-		DepthSurface *depthSurface, int scale, int transparentColor) {
-	int distXCount = 0, distYCount = 0;
-	int highestDim = MAX(src->w, src->h);
-	int accum = 0;
-
-	for (int idx = 0; idx < highestDim; ++idx) {
-		accum += scale;
-		if (accum >= 100) {
-			accum -= 100;
-			if (idx < src->w)
-				++distXCount;
-			if (idx < src->h)
-				++distYCount;
-		}
-	}
-
-	Common::Point newPos(destPos.x - distXCount / 2, destPos.y - distYCount);
-	copyFrom(src, src->getBounds(), newPos, transparentColor);
-}
-
 void MSurface::scrollX(int xAmount) {
 	if (xAmount == 0)
 		return;
diff --git a/engines/mads/msurface.h b/engines/mads/msurface.h
index 985a097..dec36e7 100644
--- a/engines/mads/msurface.h
+++ b/engines/mads/msurface.h
@@ -168,20 +168,6 @@ public:
 		int scale, int transparentColor = -1);
 
 	/**
-	* Copys a sub-section of another surface into the current one, taking into
-	* account variation in the destination copy position based on item size
-	* and scaling.
-	* @param src			Source surface
-	* @param destPos		Destination position to draw in current surface
-	* @param depth			Depth of sprite
-	* @param depthSurface	Depth surface to use with sprite depth
-	* @param scale			Scale for image
-	* @param transparentColor	Transparency palette index
-	*/
-	void copyFromScaled(MSurface *src, const Common::Point &destPos, int depth, DepthSurface *depthSurface,
-		int scale, int transparentColor = -1);
-
-	/**
 	 * Copies the surface to a given destination surface
 	 */
 	void copyTo(MSurface *dest, int transparentColor = -1) {
diff --git a/engines/mads/scene_data.cpp b/engines/mads/scene_data.cpp
index d53a668..1494f62 100644
--- a/engines/mads/scene_data.cpp
+++ b/engines/mads/scene_data.cpp
@@ -265,7 +265,7 @@ void SceneInfo::load(int sceneId, int variant, const Common::String &resName,
 		assert(asset && _depthStyle != 2);
 
 		MSprite *spr = asset->getFrame(asset->getCount() - 1);
-		bgSurface.copyFromScaled(spr, si._position, si._depth, &depthSurface, 
+		bgSurface.copyFrom(spr, si._position, si._depth, &depthSurface, 
 			si._scale, spr->getTransparencyIndex());
 	}
 
diff --git a/engines/mads/sprites.cpp b/engines/mads/sprites.cpp
index a229fcc..b7688ad 100644
--- a/engines/mads/sprites.cpp
+++ b/engines/mads/sprites.cpp
@@ -324,7 +324,7 @@ void SpriteSlots::drawSprites(MSurface *s) {
 		}
 
 		if ((slot._scale < 100) && (slot._scale != -1)) {
-			// Minimalized drawing
+			// Scaled drawing
 			s->copyFrom(spr, slot._position, slot._depth, &scene._depthSurface,
 				slot._scale, sprite->getTransparencyIndex());
 		} else {
@@ -341,7 +341,7 @@ void SpriteSlots::drawSprites(MSurface *s) {
 			if (slot._depth > 1) {
 				// Draw the frame with depth processing
 				s->copyFrom(spr, Common::Point(xp, yp), slot._depth, &scene._depthSurface,
-					100, sprite->getTransparencyIndex());
+					-1, sprite->getTransparencyIndex());
 			} else {
 				// No depth, so simply draw the image
 				spr->copyTo(s, Common::Point(xp, yp), sprite->getTransparencyIndex());






More information about the Scummvm-git-logs mailing list