aboutsummaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
authorVicent Marti2008-07-07 18:37:22 +0000
committerVicent Marti2008-07-07 18:37:22 +0000
commit92ef8dd7502eb86185989a9e2e2b9d722930ec1e (patch)
tree306ba186fb7855db84635a71eea385f60f62c2ef /gui
parent9b7faedb0de9f9c3bc18bff5bfc0a629142806b5 (diff)
downloadscummvm-rg350-92ef8dd7502eb86185989a9e2e2b9d722930ec1e.tar.gz
scummvm-rg350-92ef8dd7502eb86185989a9e2e2b9d722930ec1e.tar.bz2
scummvm-rg350-92ef8dd7502eb86185989a9e2e2b9d722930ec1e.zip
Rendering pipeline. Bugfixes / debug widgets.
svn-id: r32946
Diffstat (limited to 'gui')
-rw-r--r--gui/ThemeDefaultXML.cpp9
-rw-r--r--gui/ThemeParser.cpp7
-rw-r--r--gui/ThemeRenderer.cpp71
-rw-r--r--gui/ThemeRenderer.h24
4 files changed, 89 insertions, 22 deletions
diff --git a/gui/ThemeDefaultXML.cpp b/gui/ThemeDefaultXML.cpp
index 182535a9c6..fe14fbb403 100644
--- a/gui/ThemeDefaultXML.cpp
+++ b/gui/ThemeDefaultXML.cpp
@@ -57,6 +57,15 @@ bool ThemeRenderer::loadDefaultXML() {
"<drawdata id = 'button_hover' cache = false>"
"<drawstep func = 'roundedsq' radius = '8' fill = 'gradient' gradient_start = '206, 121, 99' gradient_end = '173, 40, 8' size = 'auto' shadow = 3 />"
"</drawdata>"
+
+ "<drawdata id = 'checkbox_disabled' cache = false>"
+ "<drawstep func = 'square' fill = 'gradient' gradient_start = '206, 121, 99' gradient_end = '173, 40, 8' size = 'auto' shadow = 0 />"
+ "</drawdata>"
+
+ "<drawdata id = 'checkbox_enabled' cache = false>"
+ "<drawstep func = 'square' fill = 'gradient' gradient_start = '206, 121, 99' gradient_end = '173, 40, 8' size = 'auto' shadow = 0 />"
+ "<drawstep func = 'circle' radius = 'auto' fill = 'foreground' />"
+ "</drawdata>"
"</render_info>"
"<layout_info>"
diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp
index 2726e15587..463e8c81ea 100644
--- a/gui/ThemeParser.cpp
+++ b/gui/ThemeParser.cpp
@@ -95,6 +95,7 @@ Graphics::DrawStep *ThemeParser::defaultDrawStep() {
step->scale = (1 << 16);
step->shadow = 0;
step->stroke = 1;
+ step->radius = 0xFF;
return step;
}
@@ -341,7 +342,11 @@ bool ThemeParser::parseDrawStep(ParserNode *stepNode, Graphics::DrawStep *drawst
Common::String functionName = stepNode->values["func"];
if (functionName == "roundedsq" || functionName == "circle") {
- __PARSER_ASSIGN_INT(radius, "radius", true)
+ if (stepNode->values.contains("radius") && stepNode->values["radius"] == "auto") {
+ drawstep->radius = 0xFF;
+ } else {
+ __PARSER_ASSIGN_INT(radius, "radius", true);
+ }
}
if (functionName == "bevelsq") {
diff --git a/gui/ThemeRenderer.cpp b/gui/ThemeRenderer.cpp
index 281c02f8f4..bf481fabb8 100644
--- a/gui/ThemeRenderer.cpp
+++ b/gui/ThemeRenderer.cpp
@@ -275,6 +275,7 @@ void ThemeRenderer::drawButton(const Common::Rect &r, const Common::String &str,
// TODO: Add text drawing.
addDirtyRect(r);
+ debugWidgetPosition(r);
}
void ThemeRenderer::drawLineSeparator(const Common::Rect &r, WidgetStateInfo state) {
@@ -283,21 +284,30 @@ void ThemeRenderer::drawLineSeparator(const Common::Rect &r, WidgetStateInfo sta
drawDD(kDDSeparator, r);
addDirtyRect(r);
+
+ debugWidgetPosition(r);
}
void ThemeRenderer::drawCheckbox(const Common::Rect &r, const Common::String &str, bool checked, WidgetStateInfo state) {
if (!ready())
return;
- drawDD(checked ? kDDCheckboxEnabled : kDDCheckboxDisabled, r);
-
Common::Rect r2 = r;
- r2.left += 16; // TODO: add variable for checkbox text offset.
+ int checkBoxSize = getFontHeight();
+
+ if (checkBoxSize > r.height())
+ checkBoxSize = r.height();
+
+ r2.bottom = r2.top + checkBoxSize;
+ r2.right = r2.left + checkBoxSize;
+
+ drawDD(checked ? kDDCheckboxEnabled : kDDCheckboxDisabled, r2);
// TODO: text drawing
// getFont()->drawString(&_screen, str, r2.left, r2.top, r2.width(), getColor(state), Graphics::kTextAlignLeft, 0, false);
addDirtyRect(r);
+ debugWidgetPosition(r);
}
void ThemeRenderer::drawSlider(const Common::Rect &r, int width, WidgetStateInfo state) {
@@ -312,15 +322,68 @@ void ThemeRenderer::drawSlider(const Common::Rect &r, int width, WidgetStateInfo
drawDD(kDDSliderFull, r2);
addDirtyRect(r);
+ debugWidgetPosition(r);
}
void ThemeRenderer::drawScrollbar(const Common::Rect &r, int sliderY, int sliderHeight, ScrollbarState sb_state, WidgetStateInfo state) {
if (!ready())
return;
+
+ debugWidgetPosition(r);
+}
+
+void ThemeRenderer::drawDialogBackground(const Common::Rect &r, uint16 hints, WidgetStateInfo state) {
+ if (!ready())
+ return;
+
+ debugWidgetPosition(r);
+}
+
+void ThemeRenderer::drawCaret(const Common::Rect &r, bool erase, WidgetStateInfo state) {
+ if (!ready())
+ return;
+
+ debugWidgetPosition(r);
+}
+
+void ThemeRenderer::drawPopUpWidget(const Common::Rect &r, const Common::String &sel, int deltax, WidgetStateInfo state, TextAlign align) {
+ if (!ready())
+ return;
+
+ debugWidgetPosition(r);
+}
+
+void ThemeRenderer::drawSurface(const Common::Rect &r, const Graphics::Surface &surface, WidgetStateInfo state, int alpha, bool themeTrans) {
+ if (!ready())
+ return;
+
+ debugWidgetPosition(r);
+}
+
+void ThemeRenderer::drawWidgetBackground(const Common::Rect &r, uint16 hints, WidgetBackground background, WidgetStateInfo state) {
+ if (!ready())
+ return;
+
+ debugWidgetPosition(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;
+
+ debugWidgetPosition(r);
+}
+
+void ThemeRenderer::debugWidgetPosition(const Common::Rect &r) {
+ _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() {
- renderDirtyScreen();
+// renderDirtyScreen();
+ _vectorRenderer->copyWholeFrame(_system);
}
void ThemeRenderer::renderDirtyScreen() {
diff --git a/gui/ThemeRenderer.h b/gui/ThemeRenderer.h
index 56b81b21fc..21fd53bf1d 100644
--- a/gui/ThemeRenderer.h
+++ b/gui/ThemeRenderer.h
@@ -143,18 +143,18 @@ public:
int getCharWidth(byte c, FontStyle font) const { if (_initOk) return _font->getCharWidth(c); return 0; }
/** Widget drawing */
- void drawWidgetBackground(const Common::Rect &r, uint16 hints, WidgetBackground background = kWidgetBackgroundPlain, WidgetStateInfo state = kStateEnabled) {}
+ void drawWidgetBackground(const Common::Rect &r, uint16 hints, WidgetBackground background = kWidgetBackgroundPlain, WidgetStateInfo state = kStateEnabled);
void drawButton(const Common::Rect &r, const Common::String &str, WidgetStateInfo state = kStateEnabled, uint16 hints = 0);
- void drawSurface(const Common::Rect &r, const Graphics::Surface &surface, WidgetStateInfo state = kStateEnabled, int alpha = 256, bool themeTrans = false) {}
+ void drawSurface(const Common::Rect &r, const Graphics::Surface &surface, WidgetStateInfo state = kStateEnabled, int alpha = 256, bool themeTrans = false);
void drawSlider(const Common::Rect &r, int width, WidgetStateInfo state = kStateEnabled);
void drawCheckbox(const Common::Rect &r, const Common::String &str, bool checked, WidgetStateInfo state = kStateEnabled);
- void drawTab(const Common::Rect &r, int tabHeight, int tabWidth, const Common::Array<Common::String> &tabs, int active, uint16 hints, int titleVPad, WidgetStateInfo state = kStateEnabled) {}
+ void drawTab(const Common::Rect &r, int tabHeight, int tabWidth, const Common::Array<Common::String> &tabs, int active, uint16 hints, int titleVPad, WidgetStateInfo state = kStateEnabled);
void drawScrollbar(const Common::Rect &r, int sliderY, int sliderHeight, ScrollbarState, WidgetStateInfo state = kStateEnabled);
- void drawPopUpWidget(const Common::Rect &r, const Common::String &sel, int deltax, WidgetStateInfo state = kStateEnabled, TextAlign align = kTextAlignLeft) {}
- void drawCaret(const Common::Rect &r, bool erase, WidgetStateInfo state = kStateEnabled) {}
+ void drawPopUpWidget(const Common::Rect &r, const Common::String &sel, int deltax, WidgetStateInfo state = kStateEnabled, TextAlign align = kTextAlignLeft);
+ void drawCaret(const Common::Rect &r, bool erase, WidgetStateInfo state = kStateEnabled);
void drawLineSeparator(const Common::Rect &r, WidgetStateInfo state = kStateEnabled);
- void drawDialogBackground(const Common::Rect &r, uint16 hints, WidgetStateInfo state) {}
+ void drawDialogBackground(const Common::Rect &r, uint16 hints, WidgetStateInfo state);
void drawText(const Common::Rect &r, const Common::String &str, WidgetStateInfo state, TextAlign align, bool inverted, int deltax, bool useEllipsis, FontStyle font) {}
void drawChar(const Common::Rect &r, byte ch, const Graphics::Font *font, WidgetStateInfo state) {}
@@ -184,17 +184,6 @@ public:
return _initOk && _themeOk;
}
- // REMOVED: theme name is looked up in NewGUI and passed to the constructor
-/* bool loadTheme() {
- ConfMan.registerDefault("gui_theme", "default");
- Common::String style(ConfMan.get("gui_theme"));
-
- if (style.compareToIgnoreCase("default") == 0)
- style = "modern";
-
- return loadTheme(style);
- } */
-
bool loadTheme(Common::String themeName);
void setGraphicsMode(GraphicsMode mode);
@@ -242,6 +231,7 @@ protected:
void drawCached(DrawData type, const Common::Rect &r);
inline void drawDD(DrawData type, const Common::Rect &r);
+ inline void ThemeRenderer::debugWidgetPosition(const Common::Rect &r);
// TODO
void restoreBackground(Common::Rect r, bool special = false) {}