aboutsummaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
authorVicent Marti2008-07-15 18:53:22 +0000
committerVicent Marti2008-07-15 18:53:22 +0000
commit47119ee8b136184c39cc6ce1a4b7248702f4c16f (patch)
tree09b85ea7e88329a34fec74d717527e9ce616349d /gui
parentb44b37d4ca4f0bbfe2b578dc72d84ba71286cc92 (diff)
downloadscummvm-rg350-47119ee8b136184c39cc6ce1a4b7248702f4c16f.tar.gz
scummvm-rg350-47119ee8b136184c39cc6ce1a4b7248702f4c16f.tar.bz2
scummvm-rg350-47119ee8b136184c39cc6ce1a4b7248702f4c16f.zip
Tab widget / tab drawing for the renderer. Improved text handling.
svn-id: r33076
Diffstat (limited to 'gui')
-rw-r--r--gui/ThemeDefaultXML.cpp18
-rw-r--r--gui/ThemeParser.cpp5
-rw-r--r--gui/ThemeRenderer.cpp46
-rw-r--r--gui/ThemeRenderer.h3
4 files changed, 52 insertions, 20 deletions
diff --git a/gui/ThemeDefaultXML.cpp b/gui/ThemeDefaultXML.cpp
index db01adb7c3..0561f4b8d1 100644
--- a/gui/ThemeDefaultXML.cpp
+++ b/gui/ThemeDefaultXML.cpp
@@ -61,6 +61,24 @@ bool ThemeRenderer::loadDefaultXML() {
"<drawstep func = 'roundedsq' stroke = 1 radius = 4 fill = 'none' fg_color = '255, 255, 255' />"
"</drawdata>"
+ "<drawdata id = 'tab_active' cache = false>"
+ "<text vertical_align = 'center' horizontal_align = 'center' color = '255, 255, 255' />"
+ "<drawstep func = 'tab' radius = '8' stroke = '0' fill = 'gradient' gradient_start = '206, 121, 99' gradient_end = '173, 40, 8' shadow = 3 />"
+ "</drawdata>"
+
+ "<drawdata id = 'tab_inactive' cache = false>"
+ "<text vertical_align = 'center' horizontal_align = 'center' color = '255, 255, 255' />"
+ "<drawstep func = 'tab' radius = '8' stroke = '0' fill = 'foreground' fg_color = '206, 121, 99' shadow = 3 />"
+ "</drawdata>"
+
+ "<drawdata id = 'slider_empty' cache = false>"
+ "<drawstep func = 'roundedsq' stroke = 1 radius = 8 fill = 'none' fg_color = '0, 0, 0' />"
+ "</drawdata>"
+
+ "<drawdata id = 'slider_full' cache = false>"
+ "<drawstep func = 'roundedsq' stroke = 1 radius = 8 fill = 'gradient' fg_color = '0, 0, 0' gradient_start = '214, 113, 8' gradient_end = '240, 200, 25' />"
+ "</drawdata>"
+
"<drawdata id = 'popup_idle' cache = false>"
"<drawstep func = 'square' stroke = 0 fg_color = '0, 0, 0' fill = 'gradient' gradient_start = '214, 113, 8' gradient_end = '240, 200, 25' shadow = 3 />"
"<drawstep func = 'triangle' fg_color = '0, 0, 0' fill = 'foreground' width = '12' height = '12' xpos = '-16' ypos = 'center' orientation = 'bottom' />"
diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp
index fda291fb04..014ed1fce9 100644
--- a/gui/ThemeParser.cpp
+++ b/gui/ThemeParser.cpp
@@ -57,6 +57,7 @@ ThemeParser::ThemeParser(ThemeRenderer *parent) : XMLParser() {
_drawFunctions["line"] = &Graphics::VectorRenderer::drawCallback_LINE;
_drawFunctions["triangle"] = &Graphics::VectorRenderer::drawCallback_TRIANGLE;
_drawFunctions["fill"] = &Graphics::VectorRenderer::drawCallback_FILLSURFACE;
+ _drawFunctions["tab"] = &Graphics::VectorRenderer::drawCallback_TAB;
_drawFunctions["void"] = &Graphics::VectorRenderer::drawCallback_VOID;
_defaultStepGlobal = defaultDrawStep();
@@ -199,7 +200,7 @@ bool ThemeParser::parserCallback_text() {
step.color.g = green;
step.color.b = blue;
step.color.set = true;
-
+
_theme->addTextStep(parentNode->values["id"], step);
return true;
}
@@ -407,7 +408,7 @@ bool ThemeParser::parseDrawStep(ParserNode *stepNode, Graphics::DrawStep *drawst
assert(stepNode->values.contains("func"));
Common::String functionName = stepNode->values["func"];
- if (functionName == "roundedsq" || functionName == "circle") {
+ if (functionName == "roundedsq" || functionName == "circle" || functionName == "tab") {
if (stepNode->values.contains("radius") && stepNode->values["radius"] == "auto") {
drawstep->radius = 0xFF;
} else {
diff --git a/gui/ThemeRenderer.cpp b/gui/ThemeRenderer.cpp
index 0b3fbe1064..7995c34a40 100644
--- a/gui/ThemeRenderer.cpp
+++ b/gui/ThemeRenderer.cpp
@@ -60,7 +60,8 @@ const char *ThemeRenderer::kDrawDataStrings[] = {
"checkbox_enabled",
"checkbox_disabled",
- "tab",
+ "tab_active",
+ "tab_inactive",
"scrollbar_base",
"scrollbar_handle",
@@ -322,7 +323,6 @@ void ThemeRenderer::drawButton(const Common::Rect &r, const Common::String &str,
drawDDText(dd, r, str);
addDirtyRect(r);
- debugWidgetPosition("BTN", r);
}
void ThemeRenderer::drawLineSeparator(const Common::Rect &r, WidgetStateInfo state) {
@@ -331,8 +331,6 @@ void ThemeRenderer::drawLineSeparator(const Common::Rect &r, WidgetStateInfo sta
drawDD(kDDSeparator, r);
addDirtyRect(r);
-
- debugWidgetPosition("Separator", r);
}
void ThemeRenderer::drawCheckbox(const Common::Rect &r, const Common::String &str, bool checked, WidgetStateInfo state) {
@@ -353,7 +351,6 @@ void ThemeRenderer::drawCheckbox(const Common::Rect &r, const Common::String &st
drawDDText(checked ? kDDCheckboxEnabled : kDDCheckboxDisabled, r2, str);
addDirtyRect(r);
- debugWidgetPosition("Checkbox", r);
}
void ThemeRenderer::drawSlider(const Common::Rect &r, int width, WidgetStateInfo state) {
@@ -368,7 +365,6 @@ void ThemeRenderer::drawSlider(const Common::Rect &r, int width, WidgetStateInfo
drawDD(kDDSliderFull, r2);
addDirtyRect(r);
- debugWidgetPosition("Slider", r);
}
void ThemeRenderer::drawScrollbar(const Common::Rect &r, int sliderY, int sliderHeight, ScrollbarState sb_state, WidgetStateInfo state) {
@@ -376,9 +372,9 @@ void ThemeRenderer::drawScrollbar(const Common::Rect &r, int sliderY, int slider
return;
drawDD(kDDScrollbarBase, r);
+ // TODO: Need to find a scrollbar in the GUI for testing... :p
-
- debugWidgetPosition("SCB", r);
+ addDirtyRect(r);
}
void ThemeRenderer::drawDialogBackground(const Common::Rect &r, uint16 hints, WidgetStateInfo state) {
@@ -395,7 +391,7 @@ void ThemeRenderer::drawDialogBackground(const Common::Rect &r, uint16 hints, Wi
drawDD(kDDDefaultBackground, r);
}
- debugWidgetPosition("Background", r);
+ addDirtyRect(r);
}
void ThemeRenderer::drawCaret(const Common::Rect &r, bool erase, WidgetStateInfo state) {
@@ -403,6 +399,7 @@ void ThemeRenderer::drawCaret(const Common::Rect &r, bool erase, WidgetStateInfo
return;
debugWidgetPosition("Caret", r);
+ addDirtyRect(r);
}
void ThemeRenderer::drawPopUpWidget(const Common::Rect &r, const Common::String &sel, int deltax, WidgetStateInfo state, TextAlign align) {
@@ -418,7 +415,7 @@ void ThemeRenderer::drawPopUpWidget(const Common::Rect &r, const Common::String
drawDDText(dd, text, sel);
}
- debugWidgetPosition("Popup Widget", r);
+ addDirtyRect(r);
}
void ThemeRenderer::drawSurface(const Common::Rect &r, const Graphics::Surface &surface, WidgetStateInfo state, int alpha, bool themeTrans) {
@@ -450,14 +447,29 @@ void ThemeRenderer::drawWidgetBackground(const Common::Rect &r, uint16 hints, Wi
break;
}
- debugWidgetPosition("Widget Background", r);
+ addDirtyRect(r);
}
void ThemeRenderer::drawTab(const Common::Rect &r, int tabHeight, int tabWidth, const Common::Array<Common::String> &tabs, int active, uint16 hints, int titleVPad, WidgetStateInfo state) {
if (!ready())
return;
+
+ const int tabOffset = 1;
+
+ for (int i = 0; i < (int)tabs.size(); ++i) {
+ if (i == active)
+ continue;
- debugWidgetPosition("Tab widget", r);
+ Common::Rect tabRect(r.left + i * (tabWidth + tabOffset), r.top, r.left + i * (tabWidth + tabOffset) + tabWidth, r.top + tabHeight);
+ drawDD(kDDTabInactive, tabRect);
+ drawDDText(kDDTabInactive, tabRect, tabs[i]);
+ }
+
+ if (active >= 0) {
+ Common::Rect tabRect(r.left + active * (tabWidth + tabOffset), r.top, r.left + active * (tabWidth + tabOffset) + tabWidth, r.top + tabHeight);
+ drawDD(kDDTabActive, tabRect);
+ drawDDText(kDDTabActive, tabRect, tabs[active]);
+ }
}
void ThemeRenderer::drawText(const Common::Rect &r, const Common::String &str, WidgetStateInfo state, TextAlign align, bool inverted, int deltax, bool useEllipsis, FontStyle font) {
@@ -470,11 +482,11 @@ void ThemeRenderer::drawText(const Common::Rect &r, const Common::String &str, W
void ThemeRenderer::debugWidgetPosition(const char *name, const Common::Rect &r) {
- // _font->drawString(_screen, name, r.left, r.top, r.width(), 0xFFFF, Graphics::kTextAlignRight, 0, true);
- // _screen->hLine(r.left, r.top, r.right, 0xFFFF);
- // _screen->hLine(r.left, r.bottom, r.right, 0xFFFF);
- // _screen->vLine(r.left, r.top, r.bottom, 0xFFFF);
- // _screen->vLine(r.right, r.top, r.bottom, 0xFFFF);
+ _font->drawString(_screen, name, r.left, r.top, r.width(), 0xFFFF, Graphics::kTextAlignRight, 0, true);
+ _screen->hLine(r.left, r.top, r.right, 0xFFFF);
+ _screen->hLine(r.left, r.bottom, r.right, 0xFFFF);
+ _screen->vLine(r.left, r.top, r.bottom, 0xFFFF);
+ _screen->vLine(r.right, r.top, r.bottom, 0xFFFF);
}
void ThemeRenderer::updateScreen() {
diff --git a/gui/ThemeRenderer.h b/gui/ThemeRenderer.h
index ba6cf633b0..3addda17a7 100644
--- a/gui/ThemeRenderer.h
+++ b/gui/ThemeRenderer.h
@@ -102,7 +102,8 @@ public:
kDDCheckboxEnabled,
kDDCheckboxDisabled,
- kDDTab,
+ kDDTabActive,
+ kDDTabInactive,
kDDScrollbarBase,
kDDScrollbarHandle,