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

Tanoku at users.sourceforge.net Tanoku at users.sourceforge.net
Wed May 28 16:27:23 CEST 2008


Revision: 32339
          http://scummvm.svn.sourceforge.net/scummvm/?rev=32339&view=rev
Author:   Tanoku
Date:     2008-05-28 07:27:22 -0700 (Wed, 28 May 2008)

Log Message:
-----------
InterfaceManager core implemented.

Modified Paths:
--------------
    scummvm/branches/gsoc2008-gui/base/main.cpp
    scummvm/branches/gsoc2008-gui/graphics/VectorRenderer.cpp
    scummvm/branches/gsoc2008-gui/graphics/VectorRenderer.h
    scummvm/branches/gsoc2008-gui/gui/InterfaceManager.cpp
    scummvm/branches/gsoc2008-gui/gui/InterfaceManager.h

Modified: scummvm/branches/gsoc2008-gui/base/main.cpp
===================================================================
--- scummvm/branches/gsoc2008-gui/base/main.cpp	2008-05-28 13:02:33 UTC (rev 32338)
+++ scummvm/branches/gsoc2008-gui/base/main.cpp	2008-05-28 14:27:22 UTC (rev 32339)
@@ -42,12 +42,9 @@
 #include "common/system.h"
 #include "gui/newgui.h"
 #include "gui/message.h"
+#include "gui/InterfaceManager.h"
 
-#define _VECTOR_RENDERER_DBG 1
-
-#if defined(_VECTOR_RENDERER_DBG)
-#include "graphics/VectorRenderer.h"
-#elif defined(_WIN32_WCE)
+#if defined(_WIN32_WCE)
 #include "backends/platform/wince/CELauncherDialog.h"
 #elif defined(__DC__)
 #include "backends/platform/dc/DCLauncherDialog.h"
@@ -71,9 +68,11 @@
 	// Clear the main screen
 	system.clearScreen();
 
-#if defined(_VECTOR_RENDERER_DBG)
+#if 1
 
-	Graphics::vector_renderer_test( &system );
+	GUI::InterfaceManager iManager(&system, GUI::InterfaceManager::GFX_Standard_16bit);
+
+	iManager.runGUI();
 	return true;
 
 #else

Modified: scummvm/branches/gsoc2008-gui/graphics/VectorRenderer.cpp
===================================================================
--- scummvm/branches/gsoc2008-gui/graphics/VectorRenderer.cpp	2008-05-28 13:02:33 UTC (rev 32338)
+++ scummvm/branches/gsoc2008-gui/graphics/VectorRenderer.cpp	2008-05-28 14:27:22 UTC (rev 32339)
@@ -24,102 +24,28 @@
  */
 
 #include "common/util.h"
-#include "graphics/surface.h"
-#include "graphics/colormasks.h"
 #include "common/system.h"
 #include "common/events.h"
 
+#include "graphics/surface.h"
+#include "graphics/colormasks.h"
+
+#include "gui/InterfaceManager.h"
 #include "graphics/VectorRenderer.h"
 
 namespace Graphics {
 
-/********************************************************************
- * DEBUG FUNCTIONS
- ********************************************************************/
-VectorRenderer *createRenderer() {
-	return new VectorRendererSpec<uint16, ColorMasks<565> >;
-}
+VectorRenderer *createRenderer(int mode) {
+	switch (mode) {
+	case GUI::InterfaceManager::GFX_Standard_16bit:
+		return new VectorRendererSpec<uint16, ColorMasks<565> >;
 
+	case GUI::InterfaceManager::GFX_Antialias_16bit:
+		return new VectorRendererAA<uint16, ColorMasks<565> >;
 
-void vector_renderer_test(OSystem *_system) {
-	Common::EventManager *eventMan = _system->getEventManager();
-
-	VectorRenderer *vr = createRenderer();
-
-	Surface _screen;
-	_screen.create(_system->getOverlayWidth(), _system->getOverlayHeight(), sizeof(OverlayColor));
-
-	if (!_screen.pixels)
-		return;
-
-	_system->clearOverlay();
-	_system->grabOverlay((OverlayColor*)_screen.pixels, _screen.w);
-
-	vr->setSurface(&_screen);
-	vr->clearSurface();
-
-	_system->showOverlay();
-
-	DrawStep *steps = new DrawStep[5];
-
-	steps[0].color1.r = 214;
-	steps[0].color1.g = 113;
-	steps[0].color1.b = 8;
-	steps[0].color2.r = 240;
-	steps[0].color2.g = 200;
-	steps[0].color2.b = 25;
-	steps[0].fill_mode = kFillMode_Gradient;
-	steps[0].drawing_call = &VectorRenderer::drawCallback_FILLSURFACE;
-	steps[0].flags = kDrawStep_SetGradient | kDrawStep_SetFillMode;
-
-	steps[1].color1.r = 206;
-	steps[1].color1.g = 121;
-	steps[1].color1.b = 99;
-	steps[1].color2.r = 173;
-	steps[1].color2.g = 40;
-	steps[1].color2.b = 8;
-	steps[1].x = 500;
-	steps[1].y = 95;
-	steps[1].r = 8;
-	steps[1].w = 120;
-	steps[1].h = 30;
-	steps[1].drawing_call = &VectorRenderer::drawCallback_ROUNDSQ;
-	steps[1].flags = kDrawStep_SetGradient;
-
-	steps[2].x = 500;
-	steps[2].y = 135;
-	steps[2].r = 8;
-	steps[2].w = 120;
-	steps[2].h = 30;
-	steps[2].drawing_call = &VectorRenderer::drawCallback_ROUNDSQ;
-	steps[2].flags = kDrawStep_CallbackOnly;
-
-	steps[3].x = 500;
-	steps[3].y = 175;
-	steps[3].r = 8;
-	steps[3].w = 120;
-	steps[3].h = 30;
-	steps[3].drawing_call = &VectorRenderer::drawCallback_ROUNDSQ;
-	steps[3].flags = kDrawStep_CallbackOnly;
-
-	bool running = true;
-	while (running) { // draw!!
-
-		for (int i = 0; i < 4; ++i)
-			vr->drawStep(&steps[i]);
-
-		_system->copyRectToOverlay((OverlayColor*)_screen.getBasePtr(0, 0), _screen.w, 0, 0, _screen.w, _screen.w);
-		_system->updateScreen();
-
-		Common::Event event;
-		_system->delayMillis(100);
-		while (eventMan->pollEvent(event)) {
-			if (event.type == Common::EVENT_QUIT)
-				running = false;
-		}
+	default:
+		return NULL;
 	}
-
-	_system->hideOverlay();
 }
 
 /********************************************************************

Modified: scummvm/branches/gsoc2008-gui/graphics/VectorRenderer.h
===================================================================
--- scummvm/branches/gsoc2008-gui/graphics/VectorRenderer.h	2008-05-28 13:02:33 UTC (rev 32338)
+++ scummvm/branches/gsoc2008-gui/graphics/VectorRenderer.h	2008-05-28 14:27:22 UTC (rev 32339)
@@ -32,10 +32,10 @@
 #include "common/system.h"
 
 namespace Graphics {
-
-void vector_renderer_test(OSystem *_system);
 class VectorRenderer;
 
+VectorRenderer *createRenderer(int mode);
+
 /** Specifies the way in which a shape is filled */
 enum FillMode {
 	kFillMode_Disabled = 0,
@@ -297,6 +297,8 @@
 
 	virtual void drawStep(DrawStep *step);
 
+	virtual void copyFrame(OSystem *sys) = 0;
+
 protected:
 	Surface *_activeSurface; /** Pointer to the surface currently being drawn */
 
@@ -403,6 +405,17 @@
 		}
 	}
 
+	virtual void copyFrame(OSystem *sys) {
+#ifdef OVERLAY_MULTIPLE_DEPTHS
+		sys->copyRectToOverlay((const PixelType*)_activeSurface->getBasePtr(0, 0), 
+			_activeSurface->w, 0, 0, _activeSurface->w, _activeSurface->w);
+#else
+		sys->copyRectToOverlay((const OverlayColor*)_activeSurface->getBasePtr(0, 0), 
+			_activeSurface->w, 0, 0, _activeSurface->w, _activeSurface->w);
+#endif
+		sys->updateScreen();
+	}
+
 protected:
 
 	/**
@@ -598,7 +611,7 @@
 	 *
 	 * @see VectorRenderer::drawLineAlg()
 	 */
-	void drawLineAlg(int x1, int y1, int x2, int y2, int dx, int dy, PixelType color);
+	virtual void drawLineAlg(int x1, int y1, int x2, int y2, int dx, int dy, PixelType color);
 
 	/**
 	 * "Wu's Circle Antialiasing Algorithm" as published by Xiaolin Wu, July 1991

Modified: scummvm/branches/gsoc2008-gui/gui/InterfaceManager.cpp
===================================================================
--- scummvm/branches/gsoc2008-gui/gui/InterfaceManager.cpp	2008-05-28 13:02:33 UTC (rev 32338)
+++ scummvm/branches/gsoc2008-gui/gui/InterfaceManager.cpp	2008-05-28 14:27:22 UTC (rev 32339)
@@ -34,6 +34,103 @@
 
 namespace GUI {
 
+template<typename PixelType> 
+void InterfaceManager::screenInit() {
+	freeScreen();
 
+	_screen = new Graphics::Surface;
+	_screen->create(_system->getOverlayWidth(), _system->getOverlayHeight(), sizeof(PixelType));
+	_system->clearOverlay();
+}
 
+void InterfaceManager::setGraphicsMode(Graphics_Mode mode) {
+	if (mode == _graphicsMode)
+		return;
+
+	_graphicsMode = mode;
+
+	switch (mode) {
+	case GFX_Standard_16bit:
+		_bytesPerPixel = sizeof(uint16);
+		screenInit<uint16>();
+		break;
+
+	case GFX_Antialias_16bit:
+		_bytesPerPixel = sizeof(uint16);
+		screenInit<uint16>();
+		break;
+	}
+
+	_vectorRenderer = Graphics::createRenderer(mode);
+	_vectorRenderer->setSurface(_screen);
+}
+
+int InterfaceManager::runGUI() {
+	Common::EventManager *eventMan = _system->getEventManager();
+	_system->showOverlay();
+
+	Graphics::DrawStep *steps = new Graphics::DrawStep[5];
+
+	steps[0].color1.r = 214;
+	steps[0].color1.g = 113;
+	steps[0].color1.b = 8;
+	steps[0].color2.r = 240;
+	steps[0].color2.g = 200;
+	steps[0].color2.b = 25;
+	steps[0].fill_mode = Graphics::kFillMode_Gradient;
+	steps[0].drawing_call = &Graphics::VectorRenderer::drawCallback_FILLSURFACE;
+	steps[0].flags = Graphics::kDrawStep_SetGradient | Graphics::kDrawStep_SetFillMode;
+
+	steps[1].color1.r = 206;
+	steps[1].color1.g = 121;
+	steps[1].color1.b = 99;
+	steps[1].color2.r = 173;
+	steps[1].color2.g = 40;
+	steps[1].color2.b = 8;
+	steps[1].x = 500;
+	steps[1].y = 95;
+	steps[1].r = 8;
+	steps[1].w = 120;
+	steps[1].h = 30;
+	steps[1].drawing_call = &Graphics::VectorRenderer::drawCallback_ROUNDSQ;
+	steps[1].flags = Graphics::kDrawStep_SetGradient;
+
+	steps[2].x = 500;
+	steps[2].y = 135;
+	steps[2].r = 8;
+	steps[2].w = 120;
+	steps[2].h = 30;
+	steps[2].drawing_call = &Graphics::VectorRenderer::drawCallback_ROUNDSQ;
+	steps[2].flags = Graphics::kDrawStep_CallbackOnly;
+
+	steps[3].x = 500;
+	steps[3].y = 175;
+	steps[3].r = 8;
+	steps[3].w = 120;
+	steps[3].h = 30;
+	steps[3].drawing_call = &Graphics::VectorRenderer::drawCallback_ROUNDSQ;
+	steps[3].flags = Graphics::kDrawStep_CallbackOnly;
+
+	bool running = true;
+	while (running) { // draw!!
+
+		for (int i = 0; i < 4; ++i)
+			_vectorRenderer->drawStep(&steps[i]);
+
+		_vectorRenderer->copyFrame(_system);
+
+		Common::Event event;
+		_system->delayMillis(100);
+		while (eventMan->pollEvent(event)) {
+			if (event.type == Common::EVENT_QUIT)
+				running = false;
+		}
+	}
+
+	_system->hideOverlay();
+	return 1;
+}
+
+
+
 } // end of namespace GUI.

Modified: scummvm/branches/gsoc2008-gui/gui/InterfaceManager.h
===================================================================
--- scummvm/branches/gsoc2008-gui/gui/InterfaceManager.h	2008-05-28 13:02:33 UTC (rev 32338)
+++ scummvm/branches/gsoc2008-gui/gui/InterfaceManager.h	2008-05-28 14:27:22 UTC (rev 32339)
@@ -37,14 +37,26 @@
 class InterfaceManager {
 
 public:
-	InterfaceManager() : _vectorRenderer(NULL) {
-		_vectorRenderer = createRenderer();
+	enum Graphics_Mode {
+		GFX_Disabled = 0,
+		GFX_Standard_16bit,
+		GFX_Antialias_16bit
+	};
+
+	InterfaceManager(OSystem *system, Graphics_Mode mode) : _vectorRenderer(NULL), 
+		_system(system), _graphicsMode(GFX_Disabled), _screen(NULL), _bytesPerPixel(0) {
+
+		setGraphicsMode(mode);
 	}
 
 	~InterfaceManager() {
-		delete _vectorRenderer;
+		freeRenderer();
+		freeScreen();
 	}
 
+	void setGraphicsMode(Graphics_Mode mode);
+	int runGUI();
+
 protected:
 	Graphics::VectorRenderer *createRenderer() {
 		// TODO: Find out what pixel format we are using,
@@ -52,7 +64,27 @@
 		return new Graphics::VectorRendererSpec<uint16, ColorMasks<565> >;
 	}
 
+	template<typename PixelType> 
+	void screenInit();
+
+	void freeRenderer() {
+		if (_vectorRenderer != NULL)
+			delete _vectorRenderer;
+	}
+
+	void freeScreen() {
+		if (_screen != NULL) {
+			_screen->free();
+			delete _screen;
+		}
+	}
+
+	OSystem *_system;
 	Graphics::VectorRenderer *_vectorRenderer;
+	Graphics::Surface *_screen;
+
+	int _bytesPerPixel;
+	Graphics_Mode _graphicsMode;
 };
 
 } // 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