diff options
author | Nicola Mettifogo | 2008-11-04 05:29:53 +0000 |
---|---|---|
committer | Nicola Mettifogo | 2008-11-04 05:29:53 +0000 |
commit | 33b6bc4215fd7fbd94ea0a879b3d8e8ace3d0ab0 (patch) | |
tree | cc57c475d12c01b278688e62dfbab244ff2c64cc | |
parent | f12b76b7fba51a25c363bd59e9918a0605a8774c (diff) | |
download | scummvm-rg350-33b6bc4215fd7fbd94ea0a879b3d8e8ace3d0ab0.tar.gz scummvm-rg350-33b6bc4215fd7fbd94ea0a879b3d8e8ace3d0ab0.tar.bz2 scummvm-rg350-33b6bc4215fd7fbd94ea0a879b3d8e8ace3d0ab0.zip |
Reordered initialization lists to kill a ton of warnings.
svn-id: r34892
-rw-r--r-- | graphics/VectorRenderer.h | 64 | ||||
-rw-r--r-- | gui/ThemeEngine.cpp | 218 | ||||
-rw-r--r-- | gui/ThemeEngine.h | 206 | ||||
-rw-r--r-- | gui/ThemeLayout.h | 84 |
4 files changed, 286 insertions, 286 deletions
diff --git a/graphics/VectorRenderer.h b/graphics/VectorRenderer.h index b4c2099da8..f072e5d01e 100644 --- a/graphics/VectorRenderer.h +++ b/graphics/VectorRenderer.h @@ -44,7 +44,7 @@ namespace Graphics { class VectorRenderer; struct DrawStep { - struct Color { + struct Color { uint8 r, g, b; bool set; }; @@ -57,7 +57,7 @@ struct DrawStep { bool autoWidth, autoHeight; int16 x, y, w, h; /**< width, height and position, if not measured automatically. negative values mean counting from the opposite direction */ - + enum VectorAlignment { kVectorAlignManual, kVectorAlignLeft, @@ -92,7 +92,7 @@ VectorRenderer *createRenderer(int mode); * * When specifying define DISABLE_FANCY_THEMES eye candy related code * gets stripped off. This is especially useful for small devices like NDS. - * Also note that if you specify DISABLE_FANCY_THEMES, you'll need to + * Also note that if you specify DISABLE_FANCY_THEMES, you'll need to * specify a forced overlay bit format via VECTOR_RENDERER_FORMAT define. * The value looks like 'XYZ' for RXGYBZ mode, so R5G5B5 would be specified * via: @@ -105,9 +105,9 @@ VectorRenderer *createRenderer(int mode); */ class VectorRenderer { public: - VectorRenderer() : _shadowOffset(0), _fillMode(kFillDisabled), - _activeSurface(NULL), _strokeWidth(1), _gradientFactor(1), _disableShadows(false) { - + VectorRenderer() : _activeSurface(NULL), _fillMode(kFillDisabled), _shadowOffset(0), + _disableShadows(false), _strokeWidth(1), _gradientFactor(1) { + } virtual ~VectorRenderer() {} @@ -127,7 +127,7 @@ public: kTriangleLeft, kTriangleRight }; - + #ifndef DISABLE_FANCY_THEMES enum ConvolutionData { kConvolutionSoftBlur, @@ -138,7 +138,7 @@ public: kConvolutionEdgeDetect, kConvolutionMAX }; - + struct ConvolutionDataSet { int matrix[3][3]; int divisor; @@ -212,7 +212,7 @@ public: * @param bevel Amount of bevel. Must be positive. */ virtual void drawBeveledSquare(int x, int y, int w, int h, int bevel) = 0; - + /** * Draws a tab-like shape, specially thought for the Tab widget. * If a radius is given, the tab will have rounded corners. Otherwise, @@ -225,8 +225,8 @@ public: * @param r Radius of the corners of the tab (0 for squared tabs). */ virtual void drawTab(int x, int y, int r, int w, int h) = 0; - - + + /** * Simple helper function to draw a cross. */ @@ -282,7 +282,7 @@ public: * @param b value of the blue color byte */ virtual void setBgColor(uint8 r, uint8 g, uint8 b) = 0; - + virtual void setBevelColor(uint8 r, uint8 g, uint8 b) = 0; /** @@ -356,7 +356,7 @@ public: if (offset >= 0) _shadowOffset = offset; } - + virtual void setBevel(int amount) { if (amount >= 0) _bevel = amount; @@ -386,7 +386,7 @@ public: int stepGetRadius(const DrawStep &step, const Common::Rect &area); /** - * DrawStep callback functions for each drawing feature + * DrawStep callback functions for each drawing feature */ void drawCallback_CIRCLE(const Common::Rect &area, const DrawStep &step) { uint16 x, y, w, h, radius; @@ -430,19 +430,19 @@ public: stepGetPositions(step, area, x, y, w, h); drawBeveledSquare(x, y, w, h, _bevel); } - + void drawCallback_TAB(const Common::Rect &area, const DrawStep &step) { uint16 x, y, w, h; stepGetPositions(step, area, x, y, w, h); drawTab(x, y, stepGetRadius(step, area), w, h); } - + void drawCallback_BITMAP(const Common::Rect &area, const DrawStep &step) { uint16 x, y, w, h; stepGetPositions(step, area, x, y, w, h); blitAlphaBitmap(step.blitSrc, Common::Rect(x, y, x + w, y + h)); } - + void drawCallback_CROSS(const Common::Rect &area, const DrawStep &step) { uint16 x, y, w, h; stepGetPositions(step, area, x, y, w, h); @@ -453,7 +453,7 @@ public: /** * Draws the specified draw step on the screen. - * + * * @see DrawStep * @param area Zone to paint on * @param step Pointer to a DrawStep struct. @@ -467,9 +467,9 @@ public: * @param r Zone of the surface to copy into the overlay. */ virtual void copyFrame(OSystem *sys, const Common::Rect &r) = 0; - + /** - * Copies the current surface to the system overlay + * Copies the current surface to the system overlay * * @param sys Pointer to the global System class */ @@ -480,7 +480,7 @@ public: * * Note that the source surface and the active * surface are expected to be of the same size, hence the area delimited - * by "r" in the source surface will be blitted into the area delimited by + * by "r" in the source surface will be blitted into the area delimited by * "r" on the current surface. * * If you wish to blit a smaller surface into the active drawing area, use @@ -490,7 +490,7 @@ public: * @param r Position in the active drawing surface to do the blitting. */ virtual void blitSurface(const Graphics::Surface *source, const Common::Rect &r) = 0; - + /** * Blits a given graphics surface into a small area of the current drawing surface. * @@ -499,24 +499,24 @@ public: * blitted into the active surface, at the position specified by "r". */ virtual void blitSubSurface(const Graphics::Surface *source, const Common::Rect &r) = 0; - + virtual void blitAlphaBitmap(const Graphics::Surface *source, const Common::Rect &r) = 0; - + /** * Draws a string into the screen. Wrapper for the Graphics::Font string drawing * method. */ - virtual void drawString(const Graphics::Font *font, const Common::String &text, - const Common::Rect &area, GUI::Theme::TextAlign alignH, + virtual void drawString(const Graphics::Font *font, const Common::String &text, + const Common::Rect &area, GUI::Theme::TextAlign alignH, GUI::Theme::TextAlignVertical alignV, int deltax, bool useEllipsis) = 0; - + /** * Allows to temporarily enable/disable all shadows drawing. * i.e. for performance issues, blitting, etc */ virtual void disableShadows() { _disableShadows = true; } virtual void enableShadows() { _disableShadows = false; } - + #ifndef DISABLE_FANCY_THEMES /** * Applies a convolution matrix on the given surface area. @@ -531,7 +531,7 @@ public: * @param offset Offset on the convolution area. */ virtual void areaConvolution(const Common::Rect &area, const int filter[3][3], int filterDiv, int offset) = 0; - + /** * Applies one of the predefined convolution effects on the given area. * @@ -544,7 +544,7 @@ public: areaConvolution(area, _convolutionData[id].matrix, _convolutionData[id].divisor, _convolutionData[id].offset); } #endif - + /** * Applies a whole-screen shading effect, used before opening a new dialog. * Currently supports screen dimmings and luminance (b&w). @@ -555,7 +555,7 @@ protected: Surface *_activeSurface; /**< Pointer to the surface currently being drawn */ FillMode _fillMode; /**< Defines in which way (if any) are filled the drawn shapes */ - + int _shadowOffset; /**< offset for drawn shadows */ int _bevel; /**< amount of fake bevel */ bool _disableShadows; /**< Disables temporarily shadow drawing for overlayed images. */ @@ -564,7 +564,7 @@ protected: int _gradientFactor; /**< Multiplication factor of the active gradient */ int _gradientBytes[3]; /**< Color bytes of the active gradient, used to speed up calculation */ - + #ifndef DISABLE_FANCY_THEMES static const ConvolutionDataSet _convolutionData[kConvolutionMAX]; #endif diff --git a/gui/ThemeEngine.cpp b/gui/ThemeEngine.cpp index e85c714e22..df3f3af4f4 100644 --- a/gui/ThemeEngine.cpp +++ b/gui/ThemeEngine.cpp @@ -55,7 +55,7 @@ const ThemeEngine::Renderer ThemeEngine::_rendererModes[] = { const uint ThemeEngine::_rendererModesSize = ARRAYSIZE(ThemeEngine::_rendererModes); -const ThemeEngine::GraphicsMode ThemeEngine::_defaultRendererMode = +const ThemeEngine::GraphicsMode ThemeEngine::_defaultRendererMode = #ifndef DISABLE_FANCY_THEMES ThemeEngine::kGfxAntialias16bit; #else @@ -96,14 +96,14 @@ void ThemeItemDrawData::drawSelf(bool draw, bool restore) { for (step = _data->_steps.begin(); step != _data->_steps.end(); ++step) _engine->renderer()->drawStep(_area, *step, _dynamicData); } - + _engine->addDirtyRect(extendedRect); } void ThemeItemTextData::drawSelf(bool draw, bool restore) { if (_restoreBg || restore) _engine->restoreBackground(_area); - + if (draw) { _engine->renderer()->setFgColor(_data->_color.r, _data->_color.g, _data->_color.b); _engine->renderer()->drawString(_data->_fontPtr, _text, _area, _alignH, _alignV, _deltax, _ellipsis); @@ -160,10 +160,10 @@ const ThemeEngine::DrawDataInfo ThemeEngine::kDrawDataDefaults[] = { {kDDTabBackground, "tab_background", true, kDDNone}, {kDDScrollbarBase, "scrollbar_base", true, kDDNone}, - + {kDDScrollbarButtonIdle, "scrollbar_button_idle", true, kDDNone}, {kDDScrollbarButtonHover, "scrollbar_button_hover", false, kDDScrollbarButtonIdle}, - + {kDDScrollbarHandleIdle, "scrollbar_handle_idle", false, kDDNone}, {kDDScrollbarHandleHover, "scrollbar_handle_hover", false, kDDScrollbarBase}, @@ -188,20 +188,20 @@ const ThemeEngine::TextDataInfo ThemeEngine::kTextDataDefaults[] = { /********************************************************** * ThemeEngine class *********************************************************/ -ThemeEngine::ThemeEngine(Common::String fileName, GraphicsMode mode) : - _vectorRenderer(0), _system(0), _graphicsMode(kGfxDisabled), _font(0), - _screen(0), _backBuffer(0), _bytesPerPixel(0), _initOk(false), - _themeOk(false), _enabled(false), _buffering(false), _cursor(0) { +ThemeEngine::ThemeEngine(Common::String fileName, GraphicsMode mode) : + _system(0), _vectorRenderer(0), _screen(0), _backBuffer(0), + _buffering(false), _bytesPerPixel(0), _graphicsMode(kGfxDisabled), + _font(0), _initOk(false), _themeOk(false), _enabled(false), _cursor(0) { _system = g_system; _parser = new ThemeParser(this); _themeEval = new GUI::ThemeEval(); - + _useCursor = false; for (int i = 0; i < kDrawDataMAX; ++i) { _widgets[i] = 0; } - + for (int i = 0; i < kTextDataMAX; ++i) { _texts[i] = 0; } @@ -219,7 +219,7 @@ ThemeEngine::~ThemeEngine() { delete _parser; delete _themeEval; delete[] _cursor; - + for (ImagesMap::iterator i = _bitmaps.begin(); i != _bitmaps.end(); ++i) ImageMan.unregisterSurface(i->_key); } @@ -238,7 +238,7 @@ bool ThemeEngine::init() { clearAll(); resetDrawArea(); } - + if (_screen->w >= 400 && _screen->h >= 300) { _font = FontMan.getFontByUsage(Graphics::FontManager::kBigGUIFont); } else { @@ -270,17 +270,17 @@ void ThemeEngine::unloadTheme() { delete _widgets[i]; _widgets[i] = 0; } - + for (int i = 0; i < kTextDataMAX; ++i) { delete _texts[i]; _texts[i] = 0; } - + for (ImagesMap::iterator i = _bitmaps.begin(); i != _bitmaps.end(); ++i) ImageMan.unregisterSurface(i->_key); ImageMan.removeArchive(_themeFileName); - + _themeEval->reset(); _themeOk = false; } @@ -297,7 +297,7 @@ void ThemeEngine::refresh() { init(); if (_enabled) { _system->showOverlay(); - + if (_useCursor) { CursorMan.replaceCursorPalette(_cursorPal, 0, MAX_CURS_COLORS); CursorMan.replaceCursor(_cursor, _cursorWidth, _cursorHeight, _cursorHotspotX, _cursorHotspotY, 255, _cursorTargetScale); @@ -308,10 +308,10 @@ void ThemeEngine::refresh() { void ThemeEngine::enable() { init(); resetDrawArea(); - + if (_useCursor) setUpCursor(); - + _system->showOverlay(); clearAll(); _enabled = true; @@ -319,26 +319,26 @@ void ThemeEngine::enable() { void ThemeEngine::disable() { _system->hideOverlay(); - + if (_useCursor) { CursorMan.popCursorPalette(); CursorMan.popCursor(); } - + _enabled = false; } -template<typename PixelType> +template<typename PixelType> void ThemeEngine::screenInit(bool backBuffer) { uint32 width = _system->getOverlayWidth(); uint32 height = _system->getOverlayHeight(); - + if (backBuffer) { freeBackbuffer(); _backBuffer = new Surface; _backBuffer->create(width, height, sizeof(PixelType)); } - + freeScreen(); _screen = new Surface; _screen->create(width, height, sizeof(PixelType)); @@ -366,7 +366,7 @@ void ThemeEngine::setGraphicsMode(GraphicsMode mode) { bool ThemeEngine::isWidgetCached(DrawData type, const Common::Rect &r) { return _widgets[type] && _widgets[type]->_cached && - _widgets[type]->_surfaceCache->w == r.width() && + _widgets[type]->_surfaceCache->w == r.width() && _widgets[type]->_surfaceCache->h == r.height(); } @@ -377,11 +377,11 @@ void ThemeEngine::drawCached(DrawData type, const Common::Rect &r) { void ThemeEngine::calcBackgroundOffset(DrawData type) { uint maxShadow = 0; - for (Common::List<Graphics::DrawStep>::const_iterator step = _widgets[type]->_steps.begin(); + for (Common::List<Graphics::DrawStep>::const_iterator step = _widgets[type]->_steps.begin(); step != _widgets[type]->_steps.end(); ++step) { - if ((step->autoWidth || step->autoHeight) && step->shadow > maxShadow) + if ((step->autoWidth || step->autoHeight) && step->shadow > maxShadow) maxShadow = step->shadow; - + if (step->drawingCall == &Graphics::VectorRenderer::drawCallback_BEVELSQ && step->bevel > maxShadow) maxShadow = step->bevel; } @@ -402,7 +402,7 @@ void ThemeEngine::restoreBackground(Common::Rect r, bool special) { *********************************************************/ void ThemeEngine::addDrawStep(const Common::String &drawDataId, Graphics::DrawStep step) { DrawData id = getDrawDataId(drawDataId); - + assert(_widgets[id] != 0); _widgets[id]->_steps.push_back(step); } @@ -413,25 +413,25 @@ bool ThemeEngine::addTextData(const Common::String &drawDataId, const Common::St if (id == -1 || textId == -1 || !_widgets[id]) return false; - + _widgets[id]->_textDataId = textId; _widgets[id]->_textAlignH = alignH; - _widgets[id]->_textAlignV = alignV; + _widgets[id]->_textAlignV = alignV; return true; } bool ThemeEngine::addFont(const Common::String &fontId, const Common::String &file, int r, int g, int b) { TextData textId = getTextDataId(fontId); - + if (textId == -1) return false; - + if (_texts[textId] != 0) delete _texts[textId]; - + _texts[textId] = new TextDrawData; - + if (file == "default") { _texts[textId]->_fontPtr = _font; } else { @@ -439,29 +439,29 @@ bool ThemeEngine::addFont(const Common::String &fontId, const Common::String &fi if (!_texts[textId]->_fontPtr) { _texts[textId]->_fontPtr = loadFont(file); - + if (!_texts[textId]->_fontPtr) error("Couldn't load %s font '%s'", fontId.c_str(), file.c_str()); FontMan.assignFontToName(file, _texts[textId]->_fontPtr); } } - + _texts[textId]->_color.r = r; _texts[textId]->_color.g = g; _texts[textId]->_color.b = b; return true; - + } bool ThemeEngine::addBitmap(const Common::String &filename) { if (_bitmaps.contains(filename)) { ImageMan.unregisterSurface(filename); } - + ImageMan.registerSurface(filename, 0); _bitmaps[filename] = ImageMan.getSurface(filename); - + return _bitmaps[filename] != 0; } @@ -470,7 +470,7 @@ bool ThemeEngine::addDrawData(const Common::String &data, bool cached) { if (data_id == -1) return false; - + if (_widgets[data_id] != 0) delete _widgets[data_id]; @@ -498,7 +498,7 @@ bool ThemeEngine::loadTheme(Common::String fileName) { error("Could not load default embedded theme"); } else if (!loadThemeXML(fileName)) { warning("Could not parse custom theme '%s'. Falling back to default theme", fileName.c_str()); - + if (!loadDefaultXML()) // if we can't load the embedded theme, this is a complete failure error("Could not load default embedded theme"); } @@ -513,13 +513,13 @@ bool ThemeEngine::loadTheme(Common::String fileName) { if (_widgets[i]->_cached) {} } } - + _themeOk = true; return true; } bool ThemeEngine::loadDefaultXML() { - + // The default XML theme is included on runtime from a pregenerated // file inside the themes directory. // Use the Python script "makedeftheme.py" to convert a normal XML theme @@ -530,16 +530,16 @@ bool ThemeEngine::loadDefaultXML() { const char *defaultXML = #include "themes/default.inc" ; - + if (!_parser->loadBuffer((const byte*)defaultXML, strlen(defaultXML), false)) return false; - + _themeName = "ScummVM Classic Theme (Builtin Version)"; _themeFileName = "builtin"; result = _parser->parse(); _parser->close(); - + return result; #else warning("The built-in theme is not enabled in the current build. Please load an external theme"); @@ -550,7 +550,7 @@ bool ThemeEngine::loadDefaultXML() { bool ThemeEngine::loadThemeXML(const Common::String &themeName) { assert(_parser); _themeName.clear(); - + FSNode node(themeName); if (!node.exists() || !node.isReadable()) return false; @@ -568,7 +568,7 @@ bool ThemeEngine::loadThemeXML(const Common::String &themeName) { warning("Failed to open Zip archive '%s'.", themeName.c_str()); return false; } - + #endif } else if (node.isDirectory()) { archive = new Common::FSDirectory(node); @@ -608,14 +608,14 @@ bool ThemeEngine::loadThemeXML(const Common::String &themeName) { _parser->close(); return false; } - + if (_parser->parse() == false) { delete archive; warning("Failed to parse STX file '%s'", (*i)->getName().c_str()); _parser->close(); return false; } - + _parser->close(); } @@ -632,19 +632,19 @@ bool ThemeEngine::loadThemeXML(const Common::String &themeName) { void ThemeEngine::queueDD(DrawData type, const Common::Rect &r, uint32 dynamic) { if (_widgets[type] == 0) return; - + Common::Rect area = r; area.clip(_screen->w, _screen->h); ThemeItemDrawData *q = new ThemeItemDrawData(this, _widgets[type], area, dynamic); - + if (_buffering) { if (_widgets[type]->_buffer) { - _bufferQueue.push_back(q); + _bufferQueue.push_back(q); } else { if (kDrawDataDefaults[type].parent != kDDNone && kDrawDataDefaults[type].parent != type) queueDD(kDrawDataDefaults[type].parent, r); - + _screenQueue.push_back(q); } } else { @@ -655,7 +655,7 @@ void ThemeEngine::queueDD(DrawData type, const Common::Rect &r, uint32 dynamic) void ThemeEngine::queueDDText(TextData type, const Common::Rect &r, const Common::String &text, bool restoreBg, bool ellipsis, TextAlign alignH, TextAlignVertical alignV, int deltax) { - + if (_texts[type] == 0) return; @@ -663,8 +663,8 @@ void ThemeEngine::queueDDText(TextData type, const Common::Rect &r, const Common area.clip(_screen->w, _screen->h); ThemeItemTextData *q = new ThemeItemTextData(this, _texts[type], area, text, alignH, alignV, ellipsis, restoreBg, deltax); - - if (_buffering) { + + if (_buffering) { _screenQueue.push_back(q); } else { q->drawSelf(true, false); @@ -678,7 +678,7 @@ void ThemeEngine::queueBitmap(const Graphics::Surface *bitmap, const Common::Rec area.clip(_screen->w, _screen->h); ThemeItemBitmap *q = new ThemeItemBitmap(this, area, bitmap, alpha); - + if (_buffering) { _bufferQueue.push_back(q); } else { @@ -695,7 +695,7 @@ void ThemeEngine::queueBitmap(const Graphics::Surface *bitmap, const Common::Rec void ThemeEngine::drawButton(const Common::Rect &r, const Common::String &str, WidgetStateInfo state, uint16 hints) { if (!ready()) return; - + DrawData dd = kDDButtonIdle; if (state == kStateEnabled) @@ -722,13 +722,13 @@ void ThemeEngine::drawCheckbox(const Common::Rect &r, const Common::String &str, Common::Rect r2 = r; DrawData dd = kDDCheckboxDefault; - + if (checked) dd = kDDCheckboxSelected; - + if (state == kStateDisabled) dd = kDDCheckboxDisabled; - + TextData td = (state == kStateHighlight) ? kTextDataHover : getTextData(dd); const int checkBoxSize = MIN((int)r.height(), getFontHeight()); @@ -736,19 +736,19 @@ void ThemeEngine::drawCheckbox(const Common::Rect &r, const Common::String &str, r2.right = r2.left + checkBoxSize; queueDD(dd, r2); - + r2.left = r2.right + checkBoxSize; r2.right = r.right; - + queueDDText(td, r2, str, false, false, _widgets[kDDCheckboxDefault]->_textAlignH, _widgets[dd]->_textAlignV); } void ThemeEngine::drawSlider(const Common::Rect &r, int width, WidgetStateInfo state) { if (!ready()) return; - + DrawData dd = kDDSliderFull; - + if (state == kStateHighlight) dd = kDDSliderHover; else if (state == kStateDisabled) @@ -759,7 +759,7 @@ void ThemeEngine::drawSlider(const Common::Rect &r, int width, WidgetStateInfo s // r2.top++; r2.bottom--; r2.left++; r2.right--; drawWidgetBackground(r, 0, kWidgetBackgroundSlider, kStateEnabled); - + if (width > r.width() * 5 / 100) queueDD(dd, r2); } @@ -767,46 +767,46 @@ void ThemeEngine::drawSlider(const Common::Rect &r, int width, WidgetStateInfo s void ThemeEngine::drawScrollbar(const Common::Rect &r, int sliderY, int sliderHeight, ScrollbarState scrollState, WidgetStateInfo state) { if (!ready()) return; - + queueDD(kDDScrollbarBase, r); - + Common::Rect r2 = r; const int buttonExtra = (r.width() * 120) / 100; - + r2.bottom = r2.top + buttonExtra; queueDD(scrollState == kScrollbarStateUp ? kDDScrollbarButtonHover : kDDScrollbarButtonIdle, r2, Graphics::VectorRenderer::kTriangleUp); - + r2.translate(0, r.height() - r2.height()); queueDD(scrollState == kScrollbarStateDown ? kDDScrollbarButtonHover : kDDScrollbarButtonIdle, r2, Graphics::VectorRenderer::kTriangleDown); - + r2 = r; r2.left += 1; r2.right -= 1; r2.top += sliderY; r2.bottom = r2.top + sliderHeight - 1; - + r2.top += r.width() / 5; - r2.bottom -= r.width() / 5; + r2.bottom -= r.width() / 5; queueDD(scrollState == kScrollbarStateSlider ? kDDScrollbarHandleHover : kDDScrollbarHandleIdle, r2); } void ThemeEngine::drawDialogBackground(const Common::Rect &r, DialogBackground bgtype, WidgetStateInfo state) { if (!ready()) return; - + switch (bgtype) { case kDialogBackgroundMain: queueDD(kDDMainDialogBackground, r); break; - + case kDialogBackgroundSpecial: queueDD(kDDSpecialColorBackground, r); break; - + case kDialogBackgroundPlain: queueDD(kDDPlainColorBackground, r); break; - + case kDialogBackgroundDefault: queueDD(kDDDefaultBackground, r); break; @@ -816,7 +816,7 @@ void ThemeEngine::drawDialogBackground(const Common::Rect &r, DialogBackground b void ThemeEngine::drawCaret(const Common::Rect &r, bool erase, WidgetStateInfo state) { if (!ready()) return; - + if (erase) { restoreBackground(r); addDirtyRect(r); @@ -827,11 +827,11 @@ void ThemeEngine::drawCaret(const Common::Rect &r, bool erase, WidgetStateInfo s void ThemeEngine::drawPopUpWidget(const Common::Rect &r, const Common::String &sel, int deltax, WidgetStateInfo state, TextAlign align) { if (!ready()) return; - + DrawData dd = (state == kStateHighlight) ? kDDPopUpHover : kDDPopUpIdle; - + queueDD(dd, r); - + if (!sel.empty()) { Common::Rect text(r.left, r.top, r.right - 16, r.bottom); queueDDText(getTextData(dd), text, sel, false, false, _widgets[dd]->_textAlignH, _widgets[dd]->_textAlignV, deltax); @@ -841,27 +841,27 @@ void ThemeEngine::drawPopUpWidget(const Common::Rect &r, const Common::String &s void ThemeEngine::drawSurface(const Common::Rect &r, const Graphics::Surface &surface, WidgetStateInfo state, int alpha, bool themeTrans) { if (!ready()) return; - + queueBitmap(&surface, r, themeTrans); } void ThemeEngine::drawWidgetBackground(const Common::Rect &r, uint16 hints, WidgetBackground background, WidgetStateInfo state) { if (!ready()) return; - + switch (background) { case kWidgetBackgroundBorderSmall: queueDD(kDDWidgetBackgroundSmall, r); break; - + case kWidgetBackgroundEditText: queueDD(kDDWidgetBackgroundEditText, r); break; - + case kWidgetBackgroundSlider: queueDD(kDDWidgetBackgroundSlider, r); break; - + default: queueDD(kDDWidgetBackgroundDefault, r); break; @@ -871,21 +871,21 @@ void ThemeEngine::drawWidgetBackground(const Common::Rect &r, uint16 hints, Widg void ThemeEngine::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 = 2; tabWidth -= tabOffset; - + queueDD(kDDTabBackground, Common::Rect(r.left, r.top, r.right, r.top + tabHeight)); - + for (int i = 0; i < (int)tabs.size(); ++i) { if (i == active) continue; - + Common::Rect tabRect(r.left + i * (tabWidth + tabOffset), r.top, r.left + i * (tabWidth + tabOffset) + tabWidth, r.top + tabHeight); queueDD(kDDTabInactive, tabRect); queueDDText(getTextData(kDDTabInactive), tabRect, tabs[i], false, false, _widgets[kDDTabInactive]->_textAlignH, _widgets[kDDTabInactive]->_textAlignV); } - + if (active >= 0) { Common::Rect tabRect(r.left + active * (tabWidth + tabOffset), r.top, r.left + active * (tabWidth + tabOffset) + tabWidth, r.top + tabHeight); const uint16 tabLeft = active * (tabWidth + tabOffset); @@ -897,19 +897,19 @@ void ThemeEngine::drawTab(const Common::Rect &r, int tabHeight, int tabWidth, co void ThemeEngine::drawText(const Common::Rect &r, const Common::String &str, WidgetStateInfo state, TextAlign align, bool inverted, int deltax, bool useEllipsis, FontStyle font) { if (!ready()) - return; - + return; + if (inverted) { queueDD(kDDTextSelectionBackground, r); queueDDText(kTextDataInverted, r, str, false, useEllipsis, align, kTextAlignVCenter, deltax); return; } - + switch (font) { case kFontStyleNormal: queueDDText(kTextDataNormalFont, r, str, true, useEllipsis, align, kTextAlignVCenter, deltax); return; - + default: break; } @@ -918,11 +918,11 @@ void ThemeEngine::drawText(const Common::Rect &r, const Common::String &str, Wid case kStateDisabled: queueDDText(kTextDataDisabled, r, str, true, useEllipsis, align, kTextAlignVCenter, deltax); return; - + case kStateHighlight: queueDDText(kTextDataHover, r, str, true, useEllipsis, align, kTextAlignVCenter, deltax); return; - + case kStateEnabled: queueDDText(kTextDataDefault, r, str, true, useEllipsis, align, kTextAlignVCenter, deltax); return; @@ -937,7 +937,7 @@ void ThemeEngine::drawChar(const Common::Rect &r, byte ch, const Graphics::Font charArea.clip(_screen->w, _screen->h); uint32 color = _system->RGBToColor(_texts[kTextDataDefault]->_color.r, _texts[kTextDataDefault]->_color.g, _texts[kTextDataDefault]->_color.b); - + restoreBackground(charArea); font->drawChar(_screen, ch, charArea.left, charArea.top, color); addDirtyRect(charArea); @@ -959,28 +959,28 @@ void ThemeEngine::debugWidgetPosition(const char *name, const Common::Rect &r) { void ThemeEngine::updateScreen() { if (!_bufferQueue.empty()) { _vectorRenderer->setSurface(_backBuffer); - + for (Common::List<ThemeItem*>::iterator q = _bufferQueue.begin(); q != _bufferQueue.end(); ++q) { (*q)->drawSelf(true, false); delete *q; } - + _vectorRenderer->setSurface(_screen); _vectorRenderer->blitSurface(_backBuffer, Common::Rect(0, 0, _screen->w, _screen->h)); _bufferQueue.clear(); } - + if (!_screenQueue.empty()) { _vectorRenderer->disableShadows(); for (Common::List<ThemeItem*>::iterator q = _screenQueue.begin(); q != _screenQueue.end(); ++q) { (*q)->drawSelf(true, false); delete *q; } - + _vectorRenderer->enableShadows(); _screenQueue.clear(); } - + renderDirtyScreen(); } @@ -996,14 +996,14 @@ void ThemeEngine::renderDirtyScreen() { _vectorRenderer->copyFrame(_system, *i); } - + _dirtyScreen.clear(); } void ThemeEngine::openDialog(bool doBuffer, ShadingStyle style) { if (doBuffer) _buffering = true; - + if (style != kShadingNone) { _vectorRenderer->applyScreenShading(style); addDirtyRect(Common::Rect(0, 0, _screen->w, _screen->h)); @@ -1023,12 +1023,12 @@ void ThemeEngine::setUpCursor() { bool ThemeEngine::createCursor(const Common::String &filename, int hotspotX, int hotspotY, int scale) { if (!_system->hasFeature(OSystem::kFeatureCursorHasPalette)) return true; - + // Try to locate the specified file among all loaded bitmaps const Surface *cursor = _bitmaps[filename]; if (!cursor) return false; - + // Set up the cursor parameters _cursorHotspotX = hotspotX; _cursorHotspotY = hotspotY; diff --git a/gui/ThemeEngine.h b/gui/ThemeEngine.h index c36fe0828d..f164b8831c 100644 --- a/gui/ThemeEngine.h +++ b/gui/ThemeEngine.h @@ -47,8 +47,8 @@ class ThemeEval; struct TextDrawData { const Graphics::Font *_fontPtr; - - struct { + + struct { uint8 r, g, b; } _color; }; @@ -56,13 +56,13 @@ struct TextDrawData { struct WidgetDrawData { /** List of all the steps needed to draw this widget */ Common::List<Graphics::DrawStep> _steps; - + int _textDataId; GUI::Theme::TextAlign _textAlignH; GUI::Theme::TextAlignVertical _textAlignV; /** Extra space that the widget occupies when it's drawn. - E.g. when taking into account rounded corners, drop shadows, etc + E.g. when taking into account rounded corners, drop shadows, etc Used when restoring the widget background */ uint16 _backgroundOffset; @@ -84,22 +84,22 @@ struct WidgetDrawData { }; class ThemeItem { - + public: - ThemeItem(ThemeEngine *engine, const Common::Rect &area) : + ThemeItem(ThemeEngine *engine, const Common::Rect &area) : _engine(engine), _area(area) {} virtual ~ThemeItem() {} virtual void drawSelf(bool doDraw, bool doRestore) = 0; protected: - Common::Rect _area; ThemeEngine *_engine; + Common::Rect _area; }; class ThemeItemDrawData : public ThemeItem { public: - ThemeItemDrawData(ThemeEngine *engine, const WidgetDrawData *data, const Common::Rect &area, uint32 dynData) : + ThemeItemDrawData(ThemeEngine *engine, const WidgetDrawData *data, const Common::Rect &area, uint32 dynData) : ThemeItem(engine, area), _dynamicData(dynData), _data(data) {} void drawSelf(bool draw, bool restore); @@ -113,8 +113,8 @@ class ThemeItemTextData : public ThemeItem { public: ThemeItemTextData(ThemeEngine *engine, const TextDrawData *data, const Common::Rect &area, const Common::String &text, GUI::Theme::TextAlign alignH, GUI::Theme::TextAlignVertical alignV, - bool ellipsis, bool restoreBg, int deltaX) : - ThemeItem(engine, area), _data(data), _text(text), _alignH(alignH), _alignV(alignV), + bool ellipsis, bool restoreBg, int deltaX) : + ThemeItem(engine, area), _data(data), _text(text), _alignH(alignH), _alignV(alignV), _ellipsis(ellipsis), _restoreBg(restoreBg), _deltax(deltaX) {} void drawSelf(bool draw, bool restore); @@ -131,7 +131,7 @@ protected: class ThemeItemBitmap : public ThemeItem { public: - ThemeItemBitmap(ThemeEngine *engine, const Common::Rect &area, const Graphics::Surface *bitmap, bool alpha) : + ThemeItemBitmap(ThemeEngine *engine, const Common::Rect &area, const Graphics::Surface *bitmap, bool alpha) : ThemeItem(engine, area), _bitmap(bitmap), _alpha(alpha) {} void drawSelf(bool draw, bool restore); @@ -148,11 +148,11 @@ protected: friend class GUI::Dialog; friend class GUI::GuiObject; - + /** Sets whether backcaching is enabled */ static const bool kEnableBackCaching = true; - /** + /** * DrawData sets enumeration. * Each DD set corresponds to the actual looks * of a widget in a given state. @@ -163,7 +163,7 @@ protected: kDDPlainColorBackground, kDDDefaultBackground, kDDTextSelectionBackground, - + kDDWidgetBackgroundDefault, kDDWidgetBackgroundSmall, kDDWidgetBackgroundEditText, @@ -193,13 +193,13 @@ protected: kDDPopUpIdle, kDDPopUpHover, - + kDDCaret, kDDSeparator, kDrawDataMAX, kDDNone = -1 }; - + /** * Default values for each DrawData item. * @see kDrawDataDefaults[] for implementation. @@ -210,8 +210,8 @@ protected: bool buffer; /** Sets whether this item is buffered on the backbuffer or drawn directly to the screen. */ DrawData parent; /** Parent DrawData item, for items that overlay. E.g. kButtonIdle -> kButtonHover */ } kDrawDataDefaults[]; - - + + enum TextData { kTextDataNone = -1, kTextDataDefault = 0, @@ -223,13 +223,13 @@ protected: kTextDataNormalFont, kTextDataMAX }; - + static const struct TextDataInfo { TextData id; const char *name; } kTextDataDefaults[]; - - + + public: /** Graphics mode enumeration. * Each item represents a set of BPP and Renderer modes for a given @@ -243,7 +243,7 @@ public: /** Constant value to expand dirty rectangles, to make sure they are fully copied */ static const int kDirtyRectangleThreshold = 1; - + struct Renderer { const char *name; const char *cfg; @@ -257,13 +257,13 @@ public: static GraphicsMode findMode(const Common::String &cfg); static const char *findModeConfigName(GraphicsMode mode); - + /** Default constructor */ ThemeEngine(Common::String fileName, GraphicsMode mode); /** Default destructor */ ~ThemeEngine(); - + /** * VIRTUAL METHODS * This is the implementation of the GUI::Theme API to allow @@ -278,7 +278,7 @@ public: void refresh(); void enable(); void disable(); - + /** * Implementation of the GUI::Theme API. Called when a * new dialog is opened. Note that the boolean parameter @@ -289,7 +289,7 @@ public: * until disabled. */ void openDialog(bool enableBuffering, ShadingStyle shading = kShadingNone); - + /** * The updateScreen() method is called every frame. * It processes all the drawing queues and then copies dirty rects @@ -297,86 +297,86 @@ public: */ void updateScreen(); - /** Since the rendering pipeline changes, closing all dialogs causes no effect + /** Since the rendering pipeline changes, closing all dialogs causes no effect TODO: remove this from the original GUI::Theme API */ void closeAllDialogs() {} - + /** Drawing area has been removed: it was too hackish. A workaround is on the works. TODO: finish the workaround for the credits dialog TODO: remove this from the original GUI::Theme API */ void resetDrawArea() {} - + /** * FONT MANAGEMENT METHODS */ - + TextData fontStyleToData(FontStyle font) const { switch (font) { case kFontStyleNormal: return kTextDataNormalFont; - + default: return kTextDataDefault; } } - + const Graphics::Font *getFont(FontStyle font) const { return _texts[fontStyleToData(font)]->_fontPtr; } - - int getFontHeight(FontStyle font = kFontStyleBold) const { + + int getFontHeight(FontStyle font = kFontStyleBold) const { return ready() ? _texts[fontStyleToData(font)]->_fontPtr->getFontHeight() : 0; } - + int getStringWidth(const Common::String &str, FontStyle font) const { return ready() ? _texts[fontStyleToData(font)]->_fontPtr->getStringWidth(str) : 0; } - - int getCharWidth(byte c, FontStyle font) const { - return ready() ? _texts[fontStyleToData(font)]->_fontPtr->getCharWidth(c) : 0; + + int getCharWidth(byte c, FontStyle font) const { + return ready() ? _texts[fontStyleToData(font)]->_fontPtr->getCharWidth(c) : 0; } /** * WIDGET DRAWING METHODS */ - void drawWidgetBackground(const Common::Rect &r, uint16 hints, + void drawWidgetBackground(const Common::Rect &r, uint16 hints, WidgetBackground background = kWidgetBackgroundPlain, WidgetStateInfo state = kStateEnabled); - - void drawButton(const Common::Rect &r, const Common::String &str, + + 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, + + 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, + + void drawSlider(const Common::Rect &r, int width, WidgetStateInfo state = kStateEnabled); - - void drawCheckbox(const Common::Rect &r, const Common::String &str, + + 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, + + 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, + + void drawScrollbar(const Common::Rect &r, int sliderY, int sliderHeight, ScrollbarState, WidgetStateInfo state = kStateEnabled); - - void drawPopUpWidget(const Common::Rect &r, const Common::String &sel, + + 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, + + 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, DialogBackground type, WidgetStateInfo state); - - void drawText(const Common::Rect &r, const Common::String &str, + + 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, + + void drawChar(const Common::Rect &r, byte ch, const Graphics::Font *font, WidgetStateInfo state); - + /** * Actual implementation of a Dirty Rect drawing routine. * Dirty rectangles are queued on a list and are later merged/calculated @@ -409,7 +409,7 @@ public: return kDDNone; } - + TextData getTextDataId(const Common::String &name) { for (int i = 0; i < kTextDataMAX; ++i) if (name.compareToIgnoreCase(kTextDataDefaults[i].name) == 0) @@ -428,7 +428,7 @@ public: * @param step The actual DrawStep struct to be added. */ void addDrawStep(const Common::String &drawDataId, Graphics::DrawStep step); - + /** * Interfacefor the ThemeParser class: Parsed DrawData sets are added via this function. * The goal of the function is to initialize each DrawData set before their DrawSteps can @@ -437,10 +437,10 @@ public: * * @param data The representing DrawData name, as found on Theme Description XML files. * @param cached Whether this DD set will be cached beforehand. - */ + */ bool addDrawData(const Common::String &data, bool cached); - - + + /** * Interface for the ThemeParser class: Loads a font to use on the GUI from the given * filename. @@ -450,8 +450,8 @@ public: * @param r, g, b Color of the font. */ bool addFont(const Common::String &fontName, const Common::String &file, int r, int g, int b); - - + + /** * Interface for the ThemeParser class: Loads a bitmap file to use on the GUI. * The filename is also used as its identifier. @@ -459,9 +459,9 @@ public: * @param filename Name of the bitmap file. */ bool addBitmap(const Common::String &filename); - + /** - * Adds a new TextStep from the ThemeParser. This will be deprecated/removed once the + * Adds a new TextStep from the ThemeParser. This will be deprecated/removed once the * new Font API is in place. */ bool addTextData(const Common::String &drawDataId, const Common::String &textDataId, TextAlign alignH, TextAlignVertical alignV); @@ -478,7 +478,7 @@ public: /** Custom implementation of the GUI::Theme API, changed to use the XML parser. */ bool loadTheme(Common::String themeName); - + /** * Changes the active graphics mode of the GUI; may be used to either * initialize the GUI or to change the mode while the GUI is already running. @@ -492,26 +492,26 @@ public: */ void finishBuffering() { _buffering = false; } void startBuffering() { _buffering = true; } - + ThemeEval *getEvaluator() { return _themeEval; } VectorRenderer *renderer() { return _vectorRenderer; } - + bool supportsImages() const { return true; } bool ownCursor() const { return _useCursor; } - + Graphics::Surface *getBitmap(const Common::String &name) { return _bitmaps.contains(name) ? _bitmaps[name] : 0; } - + const Graphics::Surface *getImageSurface(const kThemeImages n) const { if (n == kImageLogo) return _bitmaps.contains("logo.bmp") ? _bitmaps["logo.bmp"] : 0; else if (n == kImageLogoSmall) return _bitmaps.contains("logo_small.bmp") ? _bitmaps["logo_small.bmp"] : 0; - + return 0; } - + /** * Interface for the Theme Parser: Creates a new cursor by loading the given * bitmap and sets it as the active cursor. @@ -546,7 +546,7 @@ protected: const Common::String &getThemeName() const { return _themeName; } const Common::String &getThemeFileName() const { return _themeFileName; } int getGraphicsMode() const { return _graphicsMode; } - + /** * Initializes the drawing screen surfaces, _screen and _backBuffer. * If the surfaces already exist, they are cleared and re-initialized. @@ -565,7 +565,7 @@ protected: * @returns true if the theme was successfully loaded. */ bool loadThemeXML(const Common::String &themeName); - + /** * Loads the default theme file (the embedded XML file found * in ThemeDefaultXML.cpp). @@ -586,7 +586,7 @@ protected: void screenChange() { error("Screen Changes are not supported yet. Fix this!"); } - + /** * Actual Dirty Screen handling function. * Handles all the dirty squares in the list, merges and optimizes @@ -602,7 +602,7 @@ protected: delete _vectorRenderer; _vectorRenderer = 0; } - + /** * Frees the Back buffer surface, only if it's available. */ @@ -624,11 +624,11 @@ protected: _screen = 0; } } - + TextData getTextData(DrawData ddId) { return _widgets[ddId] ? (TextData)_widgets[ddId]->_textDataId : kTextDataNone; } - + /** * Draws a cached widget directly on the screen. Currently deprecated. * @@ -636,7 +636,7 @@ protected: * @param r Position on screen to draw the widget. */ void drawCached(DrawData type, const Common::Rect &r); - + /** * Calculates the background threshold offset of a given DrawData item. * After fully loading all DrawSteps of a DrawData item, this function must be @@ -647,7 +647,7 @@ protected: * @param type DrawData type of the widget. */ void calcBackgroundOffset(DrawData type); - + /** * Generates a DrawQueue item and enqueues it so it's drawn to the screen * when the drawing queue is processed. @@ -663,13 +663,13 @@ protected: void queueDDText(TextData type, const Common::Rect &r, const Common::String &text, bool restoreBg, bool elipsis, TextAlign alignH = kTextAlignLeft, TextAlignVertical alignV = kTextAlignVTop, int deltax = 0); void queueBitmap(const Graphics::Surface *bitmap, const Common::Rect &r, bool alpha); - + /** * DEBUG: Draws a white square around the given position and writes the given next to it. */ void debugWidgetPosition(const char *name, const Common::Rect &r); - + /** * Default values from GUI::Theme */ @@ -677,29 +677,29 @@ protected: int getTabPadding() const { return 3; } OSystem *_system; /** Global system object. */ - + /** Vector Renderer object, does the actual drawing on screen */ Graphics::VectorRenderer *_vectorRenderer; - + /** XML Parser, does the Theme parsing instead of the default parser */ GUI::ThemeParser *_parser; - + /** Theme getEvaluator (changed from GUI::Eval to add functionality) */ GUI::ThemeEval *_themeEval; /** Main screen surface. This is blitted straight into the overlay. */ Graphics::Surface *_screen; - + /** Backbuffer surface. Stores previous states of the screen to blit back */ Graphics::Surface *_backBuffer; - - /** Sets whether the current drawing is being buffered (stored for later + + /** Sets whether the current drawing is being buffered (stored for later processing) or drawn directly to the screen. */ - bool _buffering; + bool _buffering; /** Bytes per pixel of the Active Drawing Surface (i.e. the screen) */ int _bytesPerPixel; - + /** Current graphics mode */ GraphicsMode _graphicsMode; @@ -710,18 +710,18 @@ protected: /** Array of all the DrawData elements than can be drawn to the screen. Must be full so the renderer can work. */ WidgetDrawData *_widgets[kDrawDataMAX]; - + /** Array of all the text fonts that can be drawn. */ TextDrawData *_texts[kTextDataMAX]; - + ImagesMap _bitmaps; - + /** List of all the dirty screens that must be blitted to the overlay. */ Common::List<Common::Rect> _dirtyScreen; - + /** Queue with all the drawing that must be done to the Back Buffer */ Common::List<ThemeItem*> _bufferQueue; - + /** Queue with all the drawing that must be done to the screen */ Common::List<ThemeItem*> _screenQueue; @@ -731,10 +731,10 @@ protected: Common::String _themeName; /** Name of the currently loaded theme */ Common::String _themeFileName; - + /** Custom Cursor Management */ void setUpCursor(); - + bool _useCursor; int _cursorHotspotX, _cursorHotspotY; int _cursorTargetScale; diff --git a/gui/ThemeLayout.h b/gui/ThemeLayout.h index 0c4b65a1a8..2d119023ad 100644 --- a/gui/ThemeLayout.h +++ b/gui/ThemeLayout.h @@ -37,30 +37,30 @@ public: kLayoutHorizontal, kLayoutWidget }; - - ThemeLayout(ThemeLayout *p, const Common::String &name) : + + ThemeLayout(ThemeLayout *p, const Common::String &name) : _parent(p), _name(name), _x(0), _y(0), _w(-1), _h(-1), - _paddingLeft(0), _paddingRight(0), _paddingTop(0), _paddingBottom(0), + _paddingLeft(0), _paddingRight(0), _paddingTop(0), _paddingBottom(0), _centered(false), _defaultW(-1), _defaultH(-1) { } - + virtual ~ThemeLayout() { for (uint i = 0; i < _children.size(); ++i) delete _children[i]; } - + virtual void reflowLayout() = 0; - + virtual void resetLayout() { _x = 0; _y = 0; _w = _defaultW; _h = _defaultH; } - + void addChild(ThemeLayout *child) { _children.push_back(child); } - + void setPadding(int8 left, int8 right, int8 top, int8 bottom) { _paddingLeft = left; _paddingRight = right; _paddingTop = top; _paddingBottom = bottom; } - + void setSpacing(int8 spacing) { _spacing = spacing; } @@ -73,22 +73,22 @@ public: int16 getY() { return _y; } int16 getWidth() { return _w; } int16 getHeight() { return _h; } - + void setX(int newX) { _x += newX; for (uint i = 0; i < _children.size(); ++i) _children[i]->setX(newX); } - + void setY(int newY) { _y += newY; for (uint i = 0; i < _children.size(); ++i) _children[i]->setY(newY); } - + void setWidth(int16 width) { _w = width; } void setHeight(int16 height) { _h = height; } - + #ifdef LAYOUT_DEBUG_DIALOG void debugDraw(Graphics::Surface *screen, const Graphics::Font *font) { uint16 color = 0xFFFF; @@ -102,10 +102,10 @@ public: _children[i]->debugDraw(screen, font); } #endif - + virtual LayoutType getLayoutType() = 0; virtual const char *getName() { return _name.c_str(); } - + virtual bool getWidgetData(const Common::String &name, int16 &x, int16 &y, uint16 &w, uint16 &h); virtual bool getDialogData(int16 &x, int16 &y, uint16 &w, uint16 &h) { @@ -114,19 +114,19 @@ public: w = _w; h = _h; return true; } - + virtual ThemeLayout *makeClone() = 0; void importLayout(ThemeLayout *layout); - + protected: + ThemeLayout *_parent; + Common::String _name; int16 _x, _y, _w, _h; - int16 _defaultW, _defaultH; - int8 _paddingTop, _paddingBottom, _paddingLeft, _paddingRight; + int8 _paddingLeft, _paddingRight, _paddingTop, _paddingBottom; int8 _spacing; Common::Array<ThemeLayout*> _children; - ThemeLayout *_parent; bool _centered; - Common::String _name; + int16 _defaultW, _defaultH; }; class ThemeLayoutMain : public ThemeLayout { @@ -138,22 +138,22 @@ public: _y = _defaultY = y; } void reflowLayout(); - + void resetLayout() { ThemeLayout::resetLayout(); _x = _defaultX; _y = _defaultY; } - + const char *getName() { return "Global Layout"; } LayoutType getLayoutType() { return kLayoutMain; } - + ThemeLayout *makeClone() { assert(!"Do not copy Main Layouts!"); return 0; } - + protected: int16 _defaultX; int16 _defaultY; -}; +}; class ThemeLayoutVertical : public ThemeLayout { public: @@ -162,40 +162,40 @@ public: _spacing = spacing; _centered = center; } - + void reflowLayout(); const char *getName() { return "Vertical Layout"; } LayoutType getLayoutType() { return kLayoutVertical; } - - - ThemeLayout *makeClone() { + + + ThemeLayout *makeClone() { ThemeLayoutVertical *n = new ThemeLayoutVertical(*this); - + for (uint i = 0; i < n->_children.size(); ++i) n->_children[i] = n->_children[i]->makeClone(); - + return n; } }; class ThemeLayoutHorizontal : public ThemeLayout { public: - ThemeLayoutHorizontal(ThemeLayout *p, int spacing, bool center) : + ThemeLayoutHorizontal(ThemeLayout *p, int spacing, bool center) : ThemeLayout(p, "") { _spacing = spacing; _centered = center; } - + void reflowLayout(); const char *getName() { return "Horizontal Layout"; } LayoutType getLayoutType() { return kLayoutHorizontal; } - - ThemeLayout *makeClone() { + + ThemeLayout *makeClone() { ThemeLayoutHorizontal *n = new ThemeLayoutHorizontal(*this); - + for (uint i = 0; i < n->_children.size(); ++ i) n->_children[i] = n->_children[i]->makeClone(); - + return n; } }; @@ -206,11 +206,11 @@ public: _w = _defaultW = w; _h = _defaultH = h; } - + bool getWidgetData(const Common::String &name, int16 &x, int16 &y, uint16 &w, uint16 &h); void reflowLayout() {} LayoutType getLayoutType() { return kLayoutWidget; } - + ThemeLayout *makeClone() { return new ThemeLayoutWidget(*this); } }; @@ -225,12 +225,12 @@ public: _h = _defaultH = size; } } - + bool getWidgetData(const Common::String &name, int16 &x, int16 &y, uint16 &w, uint16 &h) { return false; } void reflowLayout() {} LayoutType getLayoutType() { return kLayoutWidget; } const char *getName() { return "SPACE"; } - + ThemeLayout *makeClone() { return new ThemeLayoutSpacing(*this); } }; |