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

Tanoku at users.sourceforge.net Tanoku at users.sourceforge.net
Mon May 26 20:17:04 CEST 2008


Revision: 32296
          http://scummvm.svn.sourceforge.net/scummvm/?rev=32296&view=rev
Author:   Tanoku
Date:     2008-05-26 11:17:03 -0700 (Mon, 26 May 2008)

Log Message:
-----------
Draw steps.

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

Modified: scummvm/branches/gsoc2008-gui/graphics/VectorRenderer.cpp
===================================================================
--- scummvm/branches/gsoc2008-gui/graphics/VectorRenderer.cpp	2008-05-26 18:03:55 UTC (rev 32295)
+++ scummvm/branches/gsoc2008-gui/graphics/VectorRenderer.cpp	2008-05-26 18:17:03 UTC (rev 32296)
@@ -60,29 +60,54 @@
 
 	_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!!
-		vr->setFgColor(255, 0, 206);
-		vr->setGradientFactor(1);
-		vr->setGradientColors(214, 113, 8, 240, 200, 25);
-		vr->fillSurface(kFillMode_Gradient);
 
-		vr->setBgColor(25, 25, 175);
-		vr->shadowEnable(3);
-		vr->setFgColor(240, 204, 120);
-		vr->setStrokeWidth(1);
-		vr->setFillMode(kFillMode_Gradient);
+		for (int i = 0; i < 4; ++i)
+			vr->drawStep(&steps[i]);
 
-		vr->setGradientFactor(3);
-		vr->setGradientColors(255, 231, 140, 255, 243, 206);	
-		vr->drawRoundedSquare(25, 95, 18, 465, 290);
-
-		vr->setGradientFactor(1);
-		vr->setGradientColors(206, 121, 99, 173, 40, 8);
-		vr->drawRoundedSquare(500, 95, 8, 120, 30);
-		vr->drawRoundedSquare(500, 135, 8, 120, 30);
-		vr->drawRoundedSquare(500, 175, 8, 120, 30);
-
 		_system->copyRectToOverlay((OverlayColor*)_screen.getBasePtr(0, 0), _screen.w, 0, 0, _screen.w, _screen.w);
 		_system->updateScreen();
 
@@ -98,6 +123,44 @@
 }
 
 /********************************************************************
+ * DRAWSTEP handling functions
+ ********************************************************************/
+void VectorRenderer::drawStep(DrawStep *step) {
+
+	if (step->flags & kDrawStep_CallbackOnly) {
+		(this->*(step->drawing_call))(step);
+		return;
+	}
+
+	if (step->flags & kDrawStep_SetBG)
+		setBgColor(step->color2.r, step->color2.g, step->color2.b);
+
+	if (step->flags & kDrawStep_SetFG)
+		setFgColor(step->color1.r, step->color1.g, step->color1.b);
+
+	if (step->flags & kDrawStep_SetGradient)
+		setGradientColors(step->color1.r, step->color1.g, step->color1.b, 
+						  step->color2.r, step->color2.g, step->color2.b);
+
+	if (step->flags & kDrawStep_SetShadow)
+		shadowEnable(step->shadow);
+
+	if (step->flags & kDrawStep_SetGradientFactor)
+		setGradientFactor(step->factor);
+
+	if (step->flags & kDrawStep_SetStroke)
+		setStrokeWidth(step->stroke);
+
+	if (step->flags & kDrawStep_SetFillMode)
+		setFillMode(step->fill_mode);
+		
+	if (step->flags & kDrawStep_SettingsOnly)
+		return;
+
+	(this->*(step->drawing_call))(step);	
+}
+
+/********************************************************************
  * MISCELANEOUS functions
  ********************************************************************/
 /** Fixed point SQUARE ROOT **/

Modified: scummvm/branches/gsoc2008-gui/graphics/VectorRenderer.h
===================================================================
--- scummvm/branches/gsoc2008-gui/graphics/VectorRenderer.h	2008-05-26 18:03:55 UTC (rev 32295)
+++ scummvm/branches/gsoc2008-gui/graphics/VectorRenderer.h	2008-05-26 18:17:03 UTC (rev 32296)
@@ -34,8 +34,9 @@
 namespace Graphics {
 
 void vector_renderer_test(OSystem *_system);
+class VectorRenderer;
 
-/** Specified the way in which a shape is filled */
+/** Specifies the way in which a shape is filled */
 enum FillMode {
 	kFillMode_Disabled = 0,
 	kFillMode_Foreground = 1,
@@ -44,23 +45,34 @@
 };
 
 struct DrawStep {
-	bool set_fg, set_bg, set_grad;
+	uint32 flags; /** Step flags, see DrawStepFlags */
 
-	uint8 fg_r, fg_g, fg_b;
-	uint8 bg_r, bg_g, bg_b;
+	struct { 
+		uint8 r, g, b; 
+	}	
+	color1, /** Foreground color/gradient start */
+	color2; /** Background color/gradient end */
 
-	uint8 grad_r1, grad_g1, grad_b1;
-	uint8 grad_r2, grad_g2, grad_b2;
+	uint16 x, y, w, h, r; /** Shape size */
+	uint8 shadow, stroke, factor; /** Misc options... */
 
-	uint16 x, y, w, h, r;
-	uint8 shadows, stroke, factor;
+	FillMode fill_mode; /** active fill mode */
 
-	FillMode fill_mode;
+	void (VectorRenderer::*drawing_call)(DrawStep*); /** Pointer to drawing function */
+};
 
-	void (*drawing_call)(DrawStep *step);
+enum DrawStepFlags {
+	kDrawStep_CallbackOnly		= (1 << 0),
+	kDrawStep_SettingsOnly		= (1 << 1),
+	kDrawStep_SetBG				= (1 << 2),
+	kDrawStep_SetFG				= (1 << 3),
+	kDrawStep_SetGradient		= (1 << 4),
+	kDrawStep_SetShadow			= (1 << 5),
+	kDrawStep_SetGradientFactor	= (1 << 6),
+	kDrawStep_SetStroke			= (1 << 7),
+	kDrawStep_SetFillMode		= (1 << 8)
 };
 
-
 /**
  * VectorRenderer: The core Vector Renderer Class
  *
@@ -199,7 +211,7 @@
 	 *
 	 * @param mode Fill mode (bg, fg or gradient) used to fill the surface
 	 */
-	virtual void fillSurface(FillMode mode = kFillMode_Foreground) = 0;
+	virtual void fillSurface() = 0;
 
 	/**
 	 * Clears the active surface.
@@ -263,27 +275,28 @@
 			_gradientFactor = factor;
 	}
 
-	void drawStep_CIRCLE(DrawStep *step) {
+	void drawCallback_CIRCLE(DrawStep *step) {
 		drawCircle(step->x, step->y, step->r);
 	}
 
-	void drawStep_SQUARE(DrawStep *step) {
+	void drawCallback_SQUARE(DrawStep *step) {
 		drawSquare(step->x, step->y, step->w, step->h);
 	}
 
-	void drawStep_LINE(DrawStep *step) {
+	void drawCallback_LINE(DrawStep *step) {
 		drawLine(step->x, step->y, step->x + step->w, step->y + step->h);
 	}
 
-	void drawStep_ROUNDEDSQ(DrawStep *step) {
+	void drawCallback_ROUNDSQ(DrawStep *step) {
 		drawRoundedSquare(step->x, step->y, step->r, step->w, step->h);
 	}
 
+	void drawCallback_FILLSURFACE(DrawStep *step) {
+		fillSurface();
+	}
 
-	virtual void drawStep(DrawStep *step) {
+	virtual void drawStep(DrawStep *step);
 
-	}
-
 protected:
 	Surface *_activeSurface; /** Pointer to the surface currently being drawn */
 
@@ -370,18 +383,18 @@
 	/**
 	 * @see VectorRenderer::fillSurface()
 	 */
-	void fillSurface(FillMode mode = kFillMode_Foreground) {
+	void fillSurface() {
 		PixelType *ptr = (PixelType *)_activeSurface->getBasePtr(0, 0);
 
 		int w = _activeSurface->w;
 		int h = _activeSurface->h ;
 		int pitch = surfacePitch();
 
-		if (mode == kFillMode_Background)
+		if (Base::_fillMode == kFillMode_Background)
 			colorFill(ptr, ptr + w * h, _bgColor);
-		else if (mode == kFillMode_Foreground)
+		else if (Base::_fillMode == kFillMode_Foreground)
 			colorFill(ptr, ptr + w * h, _fgColor);
-		else if (mode == kFillMode_Gradient) {
+		else if (Base::_fillMode == kFillMode_Gradient) {
 			int i = h;
 			while (i--) {
 				colorFill(ptr, ptr + w, calcGradient(h - i, h));


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