diff options
| author | richiesams | 2013-08-05 19:06:23 -0500 | 
|---|---|---|
| committer | richiesams | 2013-08-05 19:06:23 -0500 | 
| commit | 6598bb20fda6aec37d5d7c96ceb6ecde47fda866 (patch) | |
| tree | 71bf12ca08cc79f7603cdbc49d62b9db531e5c8a | |
| parent | 1cff0fb0d6e33f436a998b07037b7a2428de34a8 (diff) | |
| download | scummvm-rg350-6598bb20fda6aec37d5d7c96ceb6ecde47fda866.tar.gz scummvm-rg350-6598bb20fda6aec37d5d7c96ceb6ecde47fda866.tar.bz2 scummvm-rg350-6598bb20fda6aec37d5d7c96ceb6ecde47fda866.zip | |
ZVISION: Create image auto screen centering during blitting
| -rw-r--r-- | engines/zvision/render_manager.cpp | 20 | ||||
| -rw-r--r-- | engines/zvision/render_manager.h | 6 | 
2 files changed, 15 insertions, 11 deletions
| diff --git a/engines/zvision/render_manager.cpp b/engines/zvision/render_manager.cpp index 70f67deab7..1473dcccac 100644 --- a/engines/zvision/render_manager.cpp +++ b/engines/zvision/render_manager.cpp @@ -56,7 +56,7 @@ void RenderManager::updateScreen(bool isConsoleActive) {  	}  } -void RenderManager::renderSubRectToScreen(uint16 *buffer, uint32 imageWidth, uint32 imageHeight, uint32 horizontalPitch, uint32 destinationX, uint32 destinationY, Common::Rect subRectangle) { +void RenderManager::renderSubRectToScreen(uint16 *buffer, uint32 imageWidth, uint32 imageHeight, uint32 horizontalPitch, uint32 destinationX, uint32 destinationY, Common::Rect subRectangle, bool autoCenter) {  	// Panoramas are transposed  	// The actual data is transposed in mutateImage  	if (_renderTable.getRenderState() == RenderTable::PANORAMA || _renderTable.getRenderState() == RenderTable::TILT) { @@ -83,6 +83,11 @@ void RenderManager::renderSubRectToScreen(uint16 *buffer, uint32 imageWidth, uin  	if (!subRectangle.isValidRect() || subRectangle.isEmpty() || !destRect.isValidRect() || destRect.isEmpty())  		return; +	// Center the image on the screen if asked +	if (autoCenter) { +		destRect.moveTo((_width - subRectangle.width()) / 2, (_height - subRectangle.height()) / 2); +	} +  	if (_renderTable.getRenderState() == RenderTable::FLAT) {  		_system->copyRectToScreen(buffer + subRectangle.top * horizontalPitch + subRectangle.left, horizontalPitch, destRect.left, destRect.top, destRect.width(), destRect.height());  	} else { @@ -94,7 +99,7 @@ void RenderManager::renderSubRectToScreen(uint16 *buffer, uint32 imageWidth, uin  	}  } -void RenderManager::renderImageToScreen(const Common::String &fileName, uint32 destinationX, uint32 destinationY, Common::Rect subRectangle) { +void RenderManager::renderImageToScreen(const Common::String &fileName, uint32 destinationX, uint32 destinationY, Common::Rect subRectangle, bool autoCenter) {  	Common::File file;  	if (!file.open(fileName)) { @@ -102,10 +107,10 @@ void RenderManager::renderImageToScreen(const Common::String &fileName, uint32 d  		return;  	} -	renderImageToScreen(file, destinationX, destinationY, subRectangle); +	renderImageToScreen(file, destinationX, destinationY, subRectangle, autoCenter);  } -void RenderManager::renderImageToScreen(Common::SeekableReadStream &stream, uint32 destinationX, uint32 destinationY, Common::Rect subRectangle) { +void RenderManager::renderImageToScreen(Common::SeekableReadStream &stream, uint32 destinationX, uint32 destinationY, Common::Rect subRectangle, bool autoCenter) {  	// Read the magic number  	// Some files are true TGA, while others are TGZ  	uint32 fileType; @@ -124,7 +129,7 @@ void RenderManager::renderImageToScreen(Common::SeekableReadStream &stream, uint  		uint32 horizontalPitch = imageWidth * sizeof(uint16); -		renderSubRectToScreen((uint16 *)buffer, imageWidth, imageHeight, horizontalPitch, destinationX, destinationY, subRectangle); +		renderSubRectToScreen((uint16 *)buffer, imageWidth, imageHeight, horizontalPitch, destinationX, destinationY, subRectangle, autoCenter);  		delete[] buffer;  	} else {  		// Reset the cursor @@ -138,7 +143,7 @@ void RenderManager::renderImageToScreen(Common::SeekableReadStream &stream, uint  		}  		const Graphics::Surface *tgaSurface = tga.getSurface(); -		renderSubRectToScreen((uint16 *)tgaSurface->pixels, tgaSurface->w, tgaSurface->h, tgaSurface->pitch, destinationX, destinationY, subRectangle);		 +		renderSubRectToScreen((uint16 *)tgaSurface->pixels, tgaSurface->w, tgaSurface->h, tgaSurface->pitch, destinationX, destinationY, subRectangle, autoCenter);  		tga.destroy();  	} @@ -160,8 +165,7 @@ void RenderManager::setBackgroundImage(const Common::String &fileName) {  	_currentBackground = file; -	// TODO: Check if all the panoramas are the same height. AKA: can we hardcode the vertical centering to 80px? -	renderImageToScreen(*_currentBackground, 0, 80); +	renderImageToScreen(*_currentBackground, 0, 0, Common::Rect(), true);  }  } // End of namespace ZVision diff --git a/engines/zvision/render_manager.h b/engines/zvision/render_manager.h index c4318f7dd3..3352f415a9 100644 --- a/engines/zvision/render_manager.h +++ b/engines/zvision/render_manager.h @@ -72,7 +72,7 @@ public:  	 * @param destinationY    Y position where the image should be put  	 * @param subRectangle    The subrectangle of the image that should be rendered. If this is an empty rectangle, it will blit the entire image.  	 */ -	void renderImageToScreen(const Common::String &fileName, uint32 destinationX, uint32 destinationY, Common::Rect subRectangle = Common::Rect(0, 0, 0, 0)); +	void renderImageToScreen(const Common::String &fileName, uint32 destinationX, uint32 destinationY, Common::Rect subRectangle = Common::Rect(0, 0, 0, 0), bool autoCenter = false);  	/**  	 * Blits the image or a portion of the image to the screen. Actual screen updates won't happen until the end of the frame. @@ -83,7 +83,7 @@ public:  	 * @param destinationY    Y position where the image should be put  	 * @param subRectangle    The subrectangle of the image that should be rendered. If this is an empty rectangle, it will blit the entire image.  	 */ -	void renderImageToScreen(Common::SeekableReadStream &stream, uint32 destinationX, uint32 destinationY, Common::Rect subRectangle = Common::Rect(0, 0, 0, 0)); +	void renderImageToScreen(Common::SeekableReadStream &stream, uint32 destinationX, uint32 destinationY, Common::Rect subRectangle = Common::Rect(0, 0, 0, 0), bool autoCenter = false);  	/**  	 * Sets the current background image to be used by the RenderManager and immediately @@ -98,7 +98,7 @@ public:  	bool needsScreenUpdate() { return _needsScreenUpdate; };  private: -	void renderSubRectToScreen(uint16 *buffer, uint32 imageWidth, uint32 imageHeight, uint32 horizontalPitch, uint32 destinationX, uint32 destinationY, Common::Rect subRectangle); +	void renderSubRectToScreen(uint16 *buffer, uint32 imageWidth, uint32 imageHeight, uint32 horizontalPitch, uint32 destinationX, uint32 destinationY, Common::Rect subRectangle, bool autoCenter);  };  } // End of namespace ZVision | 
