aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--graphics/VectorRenderer.cpp40
-rw-r--r--graphics/VectorRenderer.h99
-rw-r--r--gui/InterfaceManager.cpp8
-rw-r--r--gui/ThemeParser.cpp13
-rw-r--r--gui/ThemeParser.h15
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;
};
}