[Scummvm-cvs-logs] SF.net SVN: scummvm:[33172] scummvm/branches/gsoc2008-gui/gui/ThemeRenderer .cpp

Tanoku at users.sourceforge.net Tanoku at users.sourceforge.net
Mon Jul 21 16:03:38 CEST 2008


Revision: 33172
          http://scummvm.svn.sourceforge.net/scummvm/?rev=33172&view=rev
Author:   Tanoku
Date:     2008-07-21 14:03:37 +0000 (Mon, 21 Jul 2008)

Log Message:
-----------
Milestone: Rendering pipeline is fully working. 'Yay...'

Modified Paths:
--------------
    scummvm/branches/gsoc2008-gui/gui/ThemeRenderer.cpp

Modified: scummvm/branches/gsoc2008-gui/gui/ThemeRenderer.cpp
===================================================================
--- scummvm/branches/gsoc2008-gui/gui/ThemeRenderer.cpp	2008-07-21 13:13:59 UTC (rev 33171)
+++ scummvm/branches/gsoc2008-gui/gui/ThemeRenderer.cpp	2008-07-21 14:03:37 UTC (rev 33172)
@@ -98,7 +98,7 @@
 	deinit();
 	setGraphicsMode(_graphicsMode);
 
-	if (_screen->pixels) {
+	if (_screen->pixels && _backBuffer->pixels) {
 		_initOk = true;
 		clearAll();
 		resetDrawArea();
@@ -127,6 +127,7 @@
 		_system->hideOverlay();
 		freeRenderer();
 		freeScreen();
+		freeBackbuffer();
 		_initOk = false;
 	}
 }
@@ -156,14 +157,17 @@
 void ThemeRenderer::screenInit(bool backBuffer) {
 	freeScreen();
 	freeBackbuffer();
+
+	uint32 width = _system->getOverlayWidth();
+	uint32 height = _system->getOverlayHeight();
 	
 	if (backBuffer) {
 		_backBuffer = new Surface;
-		_backBuffer->create(_system->getOverlayWidth(), _system->getOverlayHeight(), sizeof(PixelType));
+		_backBuffer->create(width, height, sizeof(PixelType));
 	}
 	
 	_screen = new Surface;
-	_screen->create(_system->getOverlayWidth(), _system->getOverlayHeight(), sizeof(PixelType));
+	_screen->create(width, height, sizeof(PixelType));
 	_system->clearOverlay();
 }
 
@@ -228,12 +232,6 @@
 	_widgets[data_id]->_surfaceCache = 0;
 	_widgets[data_id]->_hasText = false;
 
-	// TODO: set this only when needed
-	// possibly add an option to the parser to set this
-	// on each drawdata...
-//	if (data_id >= kDDMainDialogBackground && data_id <= kDDWidgetBackgroundSlider)
-//		_widgets[data_id]->_buffer = true;
-
 	return true;
 }
 
@@ -388,6 +386,7 @@
 }
 
 void ThemeRenderer::restoreBackground(Common::Rect r, bool special) {
+	r.clip(_screen->w, _screen->h); // AHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHA... Oh god. :(
 	_vectorRenderer->blitSurface(_backBuffer, r);
 }
 
@@ -544,11 +543,6 @@
 void ThemeRenderer::drawText(const Common::Rect &r, const Common::String &str, WidgetStateInfo state, TextAlign align, bool inverted, int deltax, bool useEllipsis, FontStyle font) {
 	if (!_initOk)
 		return;
-
-	// TODO: Queue this up too!
-	// restoreBackground(r);
-	// getFont(font)->drawString(_screen, str, r.left, r.top, r.width(), getTextColor(state), convertAligment(align), deltax, useEllipsis);
-	// addDirtyRect(r);
 	
 	queueDDText(kDDNone, r, str, getTextColor(state), align);
 }
@@ -571,8 +565,8 @@
 			drawDD(*q, true, false);
 			
 		_vectorRenderer->setSurface(_screen);
+		_vectorRenderer->blitSurface(_backBuffer, Common::Rect(0, 0, _screen->w, _screen->h));
 		_bufferQueue.clear();
-		memcpy(_screen->pixels, _backBuffer->pixels, _screen->w * _screen->h * _screen->bytesPerPixel);
 	}
 	
 	if (!_screenQueue.empty()) {
@@ -610,7 +604,9 @@
 	if (doBuffer)
 		_buffering = true;
 
-	memcpy(_backBuffer->pixels, _screen->pixels, _screen->w * _screen->h * _screen->bytesPerPixel);
+	_vectorRenderer->setSurface(_backBuffer);
+	_vectorRenderer->blitSurface(_screen, Common::Rect(0, 0, _screen->w, _screen->h));
+	_vectorRenderer->setSurface(_screen);
 }
 
 } // end of namespace GUI.


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list