diff options
| -rw-r--r-- | graphics/VectorRenderer.cpp | 40 | ||||
| -rw-r--r-- | graphics/VectorRenderer.h | 99 | ||||
| -rw-r--r-- | gui/InterfaceManager.cpp | 8 | ||||
| -rw-r--r-- | gui/ThemeParser.cpp | 13 | ||||
| -rw-r--r-- | gui/ThemeParser.h | 15 | 
5 files changed, 88 insertions, 87 deletions
diff --git a/graphics/VectorRenderer.cpp b/graphics/VectorRenderer.cpp index 2c50ddd0ec..abfd53edcd 100644 --- a/graphics/VectorRenderer.cpp +++ b/graphics/VectorRenderer.cpp @@ -51,39 +51,39 @@ VectorRenderer *createRenderer(int mode) {  /********************************************************************   * DRAWSTEP handling functions   ********************************************************************/ -void VectorRenderer::drawStep(Common::Rect area, DrawStep *step) { +void VectorRenderer::drawStep(const Common::Rect &area, const DrawStep &step) { -	if (step->flags & DrawStep::kStepCallbackOnly) { -		(this->*(step->drawing_call))(&area, step); +	if (step.flags & DrawStep::kStepCallbackOnly) { +		(this->*(step.drawing_call))(area, step);  		return;  	} -	if (step->flags & DrawStep::kStepSetBG) -		setBgColor(step->color2.r, step->color2.g, step->color2.b); +	if (step.flags & DrawStep::kStepSetBG) +		setBgColor(step.color2.r, step.color2.g, step.color2.b); -	if (step->flags & DrawStep::kStepSetFG) -		setFgColor(step->color1.r, step->color1.g, step->color1.b); +	if (step.flags & DrawStep::kStepSetFG) +		setFgColor(step.color1.r, step.color1.g, step.color1.b); -	if (step->flags & DrawStep::kStepSetGradient) -		setGradientColors(step->color1.r, step->color1.g, step->color1.b,  -						  step->color2.r, step->color2.g, step->color2.b); +	if (step.flags & DrawStep::kStepSetGradient) +		setGradientColors(step.color1.r, step.color1.g, step.color1.b,  +						  step.color2.r, step.color2.g, step.color2.b); -	if (step->flags & DrawStep::kStepSetShadow) -		shadowEnable(step->shadow); +	if (step.flags & DrawStep::kStepSetShadow) +		shadowEnable(step.shadow); -	if (step->flags & DrawStep::kStepSetGradientFactor) -		setGradientFactor(step->factor); +	if (step.flags & DrawStep::kStepSetGradientFactor) +		setGradientFactor(step.factor); -	if (step->flags & DrawStep::kStepSetStroke) -		setStrokeWidth(step->stroke); +	if (step.flags & DrawStep::kStepSetStroke) +		setStrokeWidth(step.stroke); -	if (step->flags & DrawStep::kStepSetFillMode) -		setFillMode((FillMode)step->fill_mode); +	if (step.flags & DrawStep::kStepSetFillMode) +		setFillMode((FillMode)step.fill_mode); -	if (step->flags & DrawStep::kStepSettingsOnly) +	if (step.flags & DrawStep::kStepSettingsOnly)  		return; -	(this->*(step->drawing_call))(&area, step);	 +	(this->*(step.drawing_call))(area, step);	  }  /******************************************************************** diff --git a/graphics/VectorRenderer.h b/graphics/VectorRenderer.h index 918ed1c39e..310f32f856 100644 --- a/graphics/VectorRenderer.h +++ b/graphics/VectorRenderer.h @@ -37,6 +37,7 @@  namespace Graphics {  class VectorRenderer; +struct DrawStep;  struct DrawStep {  	uint32 flags; /** Step flags, see DrawStepFlags */ @@ -64,7 +65,7 @@ struct DrawStep {  	uint32 scale; /** scale of all the coordinates in FIXED POINT with 16 bits mantissa */ -	void (VectorRenderer::*drawing_call)(Common::Rect*, DrawStep*); /** Pointer to drawing function */ +	void (VectorRenderer::*drawing_call)(const Common::Rect &, const DrawStep &); /** Pointer to drawing function */  	enum DrawStepFlags {  		kStepCallbackOnly		= (1 << 0), @@ -77,38 +78,6 @@ struct DrawStep {  		kStepSetStroke			= (1 << 7),  		kStepSetFillMode		= (1 << 8)  	}; - -	void getPositions(Common::Rect *area, uint16 &in_x, uint16 &in_y, uint16 &in_w, uint16 &in_h) { -		if (fill_area) { -			in_x = area->left; -			in_y = area->top; -			in_w = area->width(); -			in_h = area->height(); -		} else { -			if (!x.relative) in_x = area->left + x.pos;  -			else in_x = area->left + area->width() - x.pos; - -			if (!y.relative) in_y = area->top + y.pos; -			else in_y = area->top + area->height() - y.pos; - -			if (in_x + w > area->right) in_w = area->right - in_x; -			else in_w = w; - -			if (in_y + h > area->bottom) in_h = area->bottom - in_y; -			else in_h = h; -		} - -		if (scale != (1 << 16) && scale != 0) { -			in_x = (in_x * scale) >> 16; -			in_y = (in_y * scale) >> 16; -			in_w = (in_w * scale) >> 16; -			in_h = (in_h * scale) >> 16; -		} -	} - -	uint8 getRadius() { -		return (((uint32)radius * scale) >> 16); -	}  };  VectorRenderer *createRenderer(int mode); @@ -360,48 +329,76 @@ public:  			_gradientFactor = factor;  	} +	void stepGetPositions(const DrawStep &step, const Common::Rect &area, uint16 &in_x, uint16 &in_y, uint16 &in_w, uint16 &in_h) { +		if (step.fill_area) { +			in_x = area.left; +			in_y = area.top; +			in_w = area.width(); +			in_h = area.height(); +		} else { +			if (!step.x.relative) in_x = area.left + step.x.pos;  +			else in_x = area.left + area.width() - step.x.pos; + +			if (!step.y.relative) in_y = area.top + step.y.pos; +			else in_y = area.top + area.height() - step.y.pos; + +			if (in_x + step.w > area.right) in_w = area.right - in_x; +			else in_w = step.w; + +			if (in_y + step.h > area.bottom) in_h = area.bottom - in_y; +			else in_h = step.h; +		} + +		if (step.scale != (1 << 16) && step.scale != 0) { +			in_x = (in_x * step.scale) >> 16; +			in_y = (in_y * step.scale) >> 16; +			in_w = (in_w * step.scale) >> 16; +			in_h = (in_h * step.scale) >> 16; +		} +	} +  	/**  	 * DrawStep callback functions for each drawing feature   	 */ -	void drawCallback_CIRCLE(Common::Rect *area, DrawStep *step) { +	void drawCallback_CIRCLE(const Common::Rect &area, const DrawStep &step) {  		uint16 x, y, w, h; -		step->getPositions(area, x, y, w, h); -		drawCircle(x, y, step->getRadius()); +		stepGetPositions(step, area, x, y, w, h); +		drawCircle(x, y, (step.radius * step.scale) >> 16);  	} -	void drawCallback_SQUARE(Common::Rect *area, DrawStep *step) { +	void drawCallback_SQUARE(const Common::Rect &area, const DrawStep &step) {  		uint16 x, y, w, h; -		step->getPositions(area, x, y, w, h); +		stepGetPositions(step, area, x, y, w, h);  		drawSquare(x, y, w, h);  	} -	void drawCallback_LINE(Common::Rect *area, DrawStep *step) { +	void drawCallback_LINE(const Common::Rect &area, const DrawStep &step) {  		uint16 x, y, w, h; -		step->getPositions(area, x, y, w, h); +		stepGetPositions(step, area, x, y, w, h);  		drawLine(x, y, x + w, y + w);  	} -	void drawCallback_ROUNDSQ(Common::Rect *area, DrawStep *step) { +	void drawCallback_ROUNDSQ(const Common::Rect &area, const DrawStep &step) {  		uint16 x, y, w, h; -		step->getPositions(area, x, y, w, h); +		stepGetPositions(step, area, x, y, w, h);  		/* HACK! Radius of the rounded squares isn't scaled */ -		drawRoundedSquare(x, y, step->radius, w, h); +		drawRoundedSquare(x, y, step.radius, w, h);  	} -	void drawCallback_FILLSURFACE(Common::Rect *area, DrawStep *step) { +	void drawCallback_FILLSURFACE(const Common::Rect &area, const DrawStep &step) {  		fillSurface();  	} -	void drawCallback_TRIANGLE(Common::Rect *area, DrawStep *step) { +	void drawCallback_TRIANGLE(const Common::Rect &area, const DrawStep &step) {  		uint16 x, y, w, h; -		step->getPositions(area, x, y, w, h); -		drawTriangle(x, y, w, h, (TriangleOrientation)step->extra_data); +		stepGetPositions(step, area, x, y, w, h); +		drawTriangle(x, y, w, h, (TriangleOrientation)step.extra_data);  	} -	void drawCallback_BEVELSQ(Common::Rect *area, DrawStep *step) { +	void drawCallback_BEVELSQ(const Common::Rect &area, const DrawStep &step) {  		uint16 x, y, w, h; -		step->getPositions(area, x, y, w, h); -		drawBeveledSquare(x, y, w, h, step->extra_data); +		stepGetPositions(step, area, x, y, w, h); +		drawBeveledSquare(x, y, w, h, step.extra_data);  	}  	/** @@ -411,7 +408,7 @@ public:  	 * @param area Zone to paint on  	 * @param step Pointer to a DrawStep struct.  	 */ -	virtual void drawStep(Common::Rect area, DrawStep *step); +	virtual void drawStep(const Common::Rect &area, const DrawStep &step);  	/**  	 * Copies the current surface to the system overlay  diff --git a/gui/InterfaceManager.cpp b/gui/InterfaceManager.cpp index a1eaa71c52..f0874393f0 100644 --- a/gui/InterfaceManager.cpp +++ b/gui/InterfaceManager.cpp @@ -97,7 +97,7 @@ void InterfaceManager::drawDD(DrawData type, const Common::Rect &r) {  		drawCached(type, r);  	} else {  		for (int i = 0; i < _widgets[type]->_stepCount; ++i) -			_vectorRenderer->drawStep(r, _widgets[type]->_steps[i]); +			_vectorRenderer->drawStep(r, *_widgets[type]->_steps[i]);  	}  } @@ -205,9 +205,9 @@ int InterfaceManager::runGUI() {  	bool running = true;  	while (running) { // draw!! -		_vectorRenderer->drawStep(Common::Rect(), &steps[0]); -		_vectorRenderer->drawStep(area, &steps[1]); -		_vectorRenderer->drawStep(area, &steps[2]); +		_vectorRenderer->drawStep(Common::Rect(), steps[0]); +		_vectorRenderer->drawStep(area, steps[1]); +		_vectorRenderer->drawStep(area, steps[2]);  //		_vectorRenderer->drawStep(Common::Rect(32, 32, 256, 256), &steps[3]);  		_vectorRenderer->copyFrame(_system); diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp index fc960ca4d7..cd77b4a5e1 100644 --- a/gui/ThemeParser.cpp +++ b/gui/ThemeParser.cpp @@ -103,14 +103,15 @@ void ThemeParser::parseKeyValue(Common::String &key_name) {  	skipSpaces();  	Common::String data; +	char string_start; -	if (_text[_pos] == '"') { -		data += _text[_pos++]; +	if (_text[_pos] == '"' || _text[_pos] == '\'') { +		string_start = _text[_pos++]; -		while (_text[_pos] != '"') +		while (_text[_pos] != string_start)  			data += _text[_pos++]; -		data += _text[_pos++]; +		_pos++;  	} else {  		while (isValidNameChar(_text[_pos]))  			data += _text[_pos++]; @@ -131,7 +132,9 @@ bool ThemeParser::parse() {  			break;  		skipSpaces(); -		skipComments(); + +		if (skipComments()) +			continue;  		switch (_state) {  			case kParserNeedKey: diff --git a/gui/ThemeParser.h b/gui/ThemeParser.h index f87708e3f2..762baefd7f 100644 --- a/gui/ThemeParser.h +++ b/gui/ThemeParser.h @@ -38,8 +38,8 @@ namespace GUI {  class ThemeParser { -	static const int PARSER_MAX_DEPTH = 4; -	typedef void (ThemeParser::*PARSER_CALLBACK)(); +	static const int kParserMaxDepth = 4; +	typedef void (ThemeParser::*ParserCallback)();  public:  	ThemeParser() { @@ -73,15 +73,16 @@ protected:  			_pos++;  	} -	inline void skipComments() { +	inline bool skipComments() {  		if (_text[_pos] == '/' && _text[_pos + 1] == '*') {  			_pos += 2;  			while (_text[_pos++]) {  				if (_text[_pos - 2] == '*' && _text[_pos - 1] == '/')  					break;  			} -			skipSpaces(); +			return true;  		} +		return false;  	}  	int _pos; @@ -92,10 +93,10 @@ protected:  	Common::String _error;  	Common::String _token; -	Common::FixedStack<Common::String, PARSER_MAX_DEPTH> _activeKey; -	Common::FixedStack<Common::StringMap, PARSER_MAX_DEPTH> _keyValues; +	Common::FixedStack<Common::String, kParserMaxDepth> _activeKey; +	Common::FixedStack<Common::StringMap, kParserMaxDepth> _keyValues; -	Common::HashMap<Common::String, PARSER_CALLBACK, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _callbacks; +	Common::HashMap<Common::String, ParserCallback, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _callbacks;  };  }  | 
