Reordered initialization lists to kill a ton of warnings.

svn-id: r34892
This commit is contained in:
Nicola Mettifogo 2008-11-04 05:29:53 +00:00
parent f12b76b7fb
commit 33b6bc4215
4 changed files with 286 additions and 286 deletions

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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); }
};