GUI: Use in-place Surface conversion in widget code.

This commit is contained in:
Johannes Schickel 2012-08-28 02:25:14 +02:00
parent eeb3959259
commit a1e56adad8
2 changed files with 30 additions and 38 deletions

View file

@ -376,7 +376,7 @@ void ButtonWidget::wantTickle(bool tickled) {
PicButtonWidget::PicButtonWidget(GuiObject *boss, int x, int y, int w, int h, const char *tooltip, uint32 cmd, uint8 hotkey) PicButtonWidget::PicButtonWidget(GuiObject *boss, int x, int y, int w, int h, const char *tooltip, uint32 cmd, uint8 hotkey)
: ButtonWidget(boss, x, y, w, h, "", tooltip, cmd, hotkey), : ButtonWidget(boss, x, y, w, h, "", tooltip, cmd, hotkey),
_gfx(new Graphics::Surface()), _alpha(256), _transparency(false) { _gfx(), _alpha(256), _transparency(false) {
setFlags(WIDGET_ENABLED/* | WIDGET_BORDER*/ | WIDGET_CLEARBG); setFlags(WIDGET_ENABLED/* | WIDGET_BORDER*/ | WIDGET_CLEARBG);
_type = kButtonWidget; _type = kButtonWidget;
@ -384,18 +384,17 @@ PicButtonWidget::PicButtonWidget(GuiObject *boss, int x, int y, int w, int h, co
PicButtonWidget::PicButtonWidget(GuiObject *boss, const Common::String &name, const char *tooltip, uint32 cmd, uint8 hotkey) PicButtonWidget::PicButtonWidget(GuiObject *boss, const Common::String &name, const char *tooltip, uint32 cmd, uint8 hotkey)
: ButtonWidget(boss, name, "", tooltip, cmd, hotkey), : ButtonWidget(boss, name, "", tooltip, cmd, hotkey),
_gfx(new Graphics::Surface()), _alpha(256), _transparency(false) { _gfx(), _alpha(256), _transparency(false) {
setFlags(WIDGET_ENABLED/* | WIDGET_BORDER*/ | WIDGET_CLEARBG); setFlags(WIDGET_ENABLED/* | WIDGET_BORDER*/ | WIDGET_CLEARBG);
_type = kButtonWidget; _type = kButtonWidget;
} }
PicButtonWidget::~PicButtonWidget() { PicButtonWidget::~PicButtonWidget() {
_gfx->free(); _gfx.free();
delete _gfx;
} }
void PicButtonWidget::setGfx(const Graphics::Surface *gfx) { void PicButtonWidget::setGfx(const Graphics::Surface *gfx) {
_gfx->free(); _gfx.free();
if (!gfx || !gfx->pixels) if (!gfx || !gfx->pixels)
return; return;
@ -411,7 +410,7 @@ void PicButtonWidget::setGfx(const Graphics::Surface *gfx) {
return; return;
} }
_gfx->copyFrom(*gfx); _gfx.copyFrom(*gfx);
} }
void PicButtonWidget::setGfx(int w, int h, int r, int g, int b) { void PicButtonWidget::setGfx(int w, int h, int r, int g, int b) {
@ -422,29 +421,26 @@ void PicButtonWidget::setGfx(int w, int h, int r, int g, int b) {
const Graphics::PixelFormat &requiredFormat = g_gui.theme()->getPixelFormat(); const Graphics::PixelFormat &requiredFormat = g_gui.theme()->getPixelFormat();
_gfx->free(); _gfx.free();
_gfx->create(w, h, requiredFormat); _gfx.create(w, h, requiredFormat);
_gfx->fillRect(Common::Rect(0, 0, w, h), _gfx->format.RGBToColor(r, g, b)); _gfx.fillRect(Common::Rect(0, 0, w, h), _gfx.format.RGBToColor(r, g, b));
} }
void PicButtonWidget::drawWidget() { void PicButtonWidget::drawWidget() {
g_gui.theme()->drawButton(Common::Rect(_x, _y, _x+_w, _y+_h), "", _state, getFlags()); g_gui.theme()->drawButton(Common::Rect(_x, _y, _x+_w, _y+_h), "", _state, getFlags());
if (_gfx->pixels) { if (_gfx.pixels) {
// Check whether the set up surface needs to be converted to the GUI // Check whether the set up surface needs to be converted to the GUI
// color format. // color format.
const Graphics::PixelFormat &requiredFormat = g_gui.theme()->getPixelFormat(); const Graphics::PixelFormat &requiredFormat = g_gui.theme()->getPixelFormat();
if (_gfx->format != requiredFormat) { if (_gfx.format != requiredFormat) {
Graphics::Surface *converted = _gfx->convertTo(requiredFormat); _gfx.convertToInPlace(requiredFormat);
_gfx->free();
delete _gfx;
_gfx = converted;
} }
const int x = _x + (_w - _gfx->w) / 2; const int x = _x + (_w - _gfx.w) / 2;
const int y = _y + (_h - _gfx->h) / 2; const int y = _y + (_h - _gfx.h) / 2;
g_gui.theme()->drawSurface(Common::Rect(x, y, x + _gfx->w, y + _gfx->h), *_gfx, _state, _alpha, _transparency); g_gui.theme()->drawSurface(Common::Rect(x, y, x + _gfx.w, y + _gfx.h), _gfx, _state, _alpha, _transparency);
} }
} }
@ -632,24 +628,23 @@ int SliderWidget::posToValue(int pos) {
#pragma mark - #pragma mark -
GraphicsWidget::GraphicsWidget(GuiObject *boss, int x, int y, int w, int h, const char *tooltip) GraphicsWidget::GraphicsWidget(GuiObject *boss, int x, int y, int w, int h, const char *tooltip)
: Widget(boss, x, y, w, h, tooltip), _gfx(new Graphics::Surface()), _alpha(256), _transparency(false) { : Widget(boss, x, y, w, h, tooltip), _gfx(), _alpha(256), _transparency(false) {
setFlags(WIDGET_ENABLED | WIDGET_CLEARBG); setFlags(WIDGET_ENABLED | WIDGET_CLEARBG);
_type = kGraphicsWidget; _type = kGraphicsWidget;
} }
GraphicsWidget::GraphicsWidget(GuiObject *boss, const Common::String &name, const char *tooltip) GraphicsWidget::GraphicsWidget(GuiObject *boss, const Common::String &name, const char *tooltip)
: Widget(boss, name, tooltip), _gfx(new Graphics::Surface()), _alpha(256), _transparency(false) { : Widget(boss, name, tooltip), _gfx(), _alpha(256), _transparency(false) {
setFlags(WIDGET_ENABLED | WIDGET_CLEARBG); setFlags(WIDGET_ENABLED | WIDGET_CLEARBG);
_type = kGraphicsWidget; _type = kGraphicsWidget;
} }
GraphicsWidget::~GraphicsWidget() { GraphicsWidget::~GraphicsWidget() {
_gfx->free(); _gfx.free();
delete _gfx;
} }
void GraphicsWidget::setGfx(const Graphics::Surface *gfx) { void GraphicsWidget::setGfx(const Graphics::Surface *gfx) {
_gfx->free(); _gfx.free();
if (!gfx || !gfx->pixels) if (!gfx || !gfx->pixels)
return; return;
@ -664,7 +659,7 @@ void GraphicsWidget::setGfx(const Graphics::Surface *gfx) {
return; return;
} }
_gfx->copyFrom(*gfx); _gfx.copyFrom(*gfx);
} }
void GraphicsWidget::setGfx(int w, int h, int r, int g, int b) { void GraphicsWidget::setGfx(int w, int h, int r, int g, int b) {
@ -675,27 +670,24 @@ void GraphicsWidget::setGfx(int w, int h, int r, int g, int b) {
const Graphics::PixelFormat &requiredFormat = g_gui.theme()->getPixelFormat(); const Graphics::PixelFormat &requiredFormat = g_gui.theme()->getPixelFormat();
_gfx->free(); _gfx.free();
_gfx->create(w, h, requiredFormat); _gfx.create(w, h, requiredFormat);
_gfx->fillRect(Common::Rect(0, 0, w, h), _gfx->format.RGBToColor(r, g, b)); _gfx.fillRect(Common::Rect(0, 0, w, h), _gfx.format.RGBToColor(r, g, b));
} }
void GraphicsWidget::drawWidget() { void GraphicsWidget::drawWidget() {
if (_gfx->pixels) { if (_gfx.pixels) {
// Check whether the set up surface needs to be converted to the GUI // Check whether the set up surface needs to be converted to the GUI
// color format. // color format.
const Graphics::PixelFormat &requiredFormat = g_gui.theme()->getPixelFormat(); const Graphics::PixelFormat &requiredFormat = g_gui.theme()->getPixelFormat();
if (_gfx->format != requiredFormat) { if (_gfx.format != requiredFormat) {
Graphics::Surface *converted = _gfx->convertTo(requiredFormat); _gfx.convertToInPlace(requiredFormat);
_gfx->free();
delete _gfx;
_gfx = converted;
} }
const int x = _x + (_w - _gfx->w) / 2; const int x = _x + (_w - _gfx.w) / 2;
const int y = _y + (_h - _gfx->h) / 2; const int y = _y + (_h - _gfx.h) / 2;
g_gui.theme()->drawSurface(Common::Rect(x, y, x + _gfx->w, y + _gfx->h), *_gfx, _state, _alpha, _transparency); g_gui.theme()->drawSurface(Common::Rect(x, y, x + _gfx.w, y + _gfx.h), _gfx, _state, _alpha, _transparency);
} }
} }

View file

@ -230,7 +230,7 @@ public:
protected: protected:
void drawWidget(); void drawWidget();
Graphics::Surface *_gfx; Graphics::Surface _gfx;
int _alpha; int _alpha;
bool _transparency; bool _transparency;
}; };
@ -358,7 +358,7 @@ public:
protected: protected:
void drawWidget(); void drawWidget();
Graphics::Surface *_gfx; Graphics::Surface _gfx;
int _alpha; int _alpha;
bool _transparency; bool _transparency;
}; };