diff options
author | Björn Steinbrink <B.Steinbrink@gmx.de> | 2005-08-28 17:41:05 +0000 |
---|---|---|
committer | Björn Steinbrink <B.Steinbrink@gmx.de> | 2005-08-28 17:41:05 +0000 |
commit | b05cbc7df24019efd9b2d1dae046c4cf6eed2390 (patch) | |
tree | 3dfc1fc9a400b62c32ca1bd3c347e8d711370c1c /src/gui/window.cpp | |
parent | 00a698fe8b1babdc323842ee497107d9ed278ebc (diff) | |
download | mana-b05cbc7df24019efd9b2d1dae046c4cf6eed2390.tar.gz mana-b05cbc7df24019efd9b2d1dae046c4cf6eed2390.tar.bz2 mana-b05cbc7df24019efd9b2d1dae046c4cf6eed2390.tar.xz mana-b05cbc7df24019efd9b2d1dae046c4cf6eed2390.zip |
Create a static ConfigListener for the Window class.
Diffstat (limited to 'src/gui/window.cpp')
-rw-r--r-- | src/gui/window.cpp | 54 |
1 files changed, 33 insertions, 21 deletions
diff --git a/src/gui/window.cpp b/src/gui/window.cpp index 0fe941bc..acb23cd4 100644 --- a/src/gui/window.cpp +++ b/src/gui/window.cpp @@ -26,6 +26,7 @@ #include "window.h" #include "windowcontainer.h" +#include "../configlistener.h" #include "../configuration.h" #include "../graphics.h" #include "../log.h" @@ -35,11 +36,35 @@ #include "../resources/image.h" #include "../resources/resourcemanager.h" +ConfigListener *Window::windowConfigListener = NULL; WindowContainer *Window::windowContainer = NULL; int Window::instances = 0; ImageRect Window::border; Image *Window::resizeGrip; +class WindowConfigListener : public ConfigListener +{ + public: + /** + * Called when an config option changes. + */ + void optionChanged(const std::string &name) + { + if (name == "guialpha") + { + float guiAlpha = config.getValue("guialpha", 0.8); + + for (int i = 0; i < 9; i++) + { + if (Window::border.grid[i]->getAlpha() != guiAlpha) + { + Window::border.grid[i]->setAlpha(guiAlpha); + } + } + } + } +}; + Window::Window(const std::string& caption, bool modal, Window *parent): gcn::Window(caption), parent(parent), @@ -75,6 +100,10 @@ Window::Window(const std::string& caption, bool modal, Window *parent): border.grid[8] = dBorders->getSubImage(7, 15, 4, 4); resizeGrip = resman->getImage("graphics/gui/resize.png"); dBorders->decRef(); + windowConfigListener = new WindowConfigListener(); + // Send GUI alpha changed for initialization + windowConfigListener->optionChanged("guialpha"); + config.addListener("guialpha", windowConfigListener); } instances++; @@ -91,10 +120,6 @@ Window::Window(const std::string& caption, bool modal, Window *parent): // Add this window to the window container windowContainer->add(this); - // Send GUI alpha changed for initialization - optionChanged("guialpha"); - config.addListener("guialpha", this); - if (modal) { requestModalFocus(); @@ -109,6 +134,10 @@ Window::~Window() if (instances == 0) { + config.removeListener("guialpha", windowConfigListener); + delete windowConfigListener; + windowConfigListener = NULL; + // Clean up static resources delete border.grid[0]; delete border.grid[1]; @@ -122,7 +151,6 @@ Window::~Window() resizeGrip->decRef(); } - config.removeListener("guialpha", this); delete chrome; } @@ -371,22 +399,6 @@ void Window::mouseRelease(int x, int y, int button) } } -void Window::optionChanged(const std::string &name) -{ - if (name == "guialpha") - { - float guiAlpha = config.getValue("guialpha", 0.8); - - for (int i = 0; i < 9; i++) - { - if (border.grid[i]->getAlpha() != guiAlpha) - { - border.grid[i]->setAlpha(guiAlpha); - } - } - } -} - gcn::Rectangle Window::getGripDimension () { return gcn::Rectangle(getWidth() - resizeGrip->getWidth(), getHeight() - resizeGrip->getHeight(), getWidth(), |