diff options
author | Vicent Marti | 2008-07-15 18:53:22 +0000 |
---|---|---|
committer | Vicent Marti | 2008-07-15 18:53:22 +0000 |
commit | 47119ee8b136184c39cc6ce1a4b7248702f4c16f (patch) | |
tree | 09b85ea7e88329a34fec74d717527e9ce616349d /gui | |
parent | b44b37d4ca4f0bbfe2b578dc72d84ba71286cc92 (diff) | |
download | scummvm-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.cpp | 18 | ||||
-rw-r--r-- | gui/ThemeParser.cpp | 5 | ||||
-rw-r--r-- | gui/ThemeRenderer.cpp | 46 | ||||
-rw-r--r-- | gui/ThemeRenderer.h | 3 |
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, |