summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/slider.cpp76
-rw-r--r--src/gui/slider.h10
2 files changed, 60 insertions, 26 deletions
diff --git a/src/gui/slider.cpp b/src/gui/slider.cpp
index 85fcf2d7..1a4482a5 100644
--- a/src/gui/slider.cpp
+++ b/src/gui/slider.cpp
@@ -25,6 +25,10 @@
#include "../resources/resourcemanager.h"
#include "../graphics.h"
+Image *Slider::hStart, *Slider::hMid, *Slider::hEnd, *Slider::hGrip;
+Image *Slider::vStart, *Slider::vMid, *Slider::vEnd, *Slider::vGrip;
+int Slider::mInstances = 0;
+
Slider::Slider(double scaleEnd):
gcn::Slider(scaleEnd)
{
@@ -37,36 +41,60 @@ Slider::Slider(double scaleStart, double scaleEnd):
init();
}
+Slider::~Slider()
+{
+ mInstances--;
+
+ if (mInstances == 0)
+ {
+ delete hStart;
+ delete hMid;
+ delete hEnd;
+ delete hGrip;
+ delete vStart;
+ delete vMid;
+ delete vEnd;
+ delete vGrip;
+ }
+}
+
void Slider::init()
{
int x, y, w, h,o1,o2;
setBorderSize(0);
// Load resources
- ResourceManager *resman = ResourceManager::getInstance();
- Image *slider = resman->getImage("graphics/gui/slider.png");
-
- x = 0; y = 0;
- w = 15; h = 6;
- o1 = 4; o2 = 11;
- hStart = slider->getSubImage(x, y, o1 - x, h);
- hMid = slider->getSubImage(o1, y, o2 - o1, h);
- hEnd = slider->getSubImage(o2, y, w - o2 + x, h);
-
- x = 0; y = 6;
- w = 6; h = 21;
- o1 = 10; o2 = 18;
- vStart = slider->getSubImage(x, y, w, o1 - y);
- vMid = slider->getSubImage(x, o1, w, o2 - o1);
- vEnd = slider->getSubImage(x, o2, w, h - o2 + y);
-
- x = 6; y = 8;
- w = 9; h = 10;
- vGrip = slider->getSubImage(x, y, w, h);
-
- x = 6; y = 8;
- w = 9; h = 10;
- hGrip = slider->getSubImage(x, y, w, h);
+ if (mInstances == 0)
+ {
+ ResourceManager *resman = ResourceManager::getInstance();
+ Image *slider = resman->getImage("graphics/gui/slider.png");
+
+ x = 0; y = 0;
+ w = 15; h = 6;
+ o1 = 4; o2 = 11;
+ hStart = slider->getSubImage(x, y, o1 - x, h);
+ hMid = slider->getSubImage(o1, y, o2 - o1, h);
+ hEnd = slider->getSubImage(o2, y, w - o2 + x, h);
+
+ x = 6; y = 8;
+ w = 9; h = 10;
+ hGrip = slider->getSubImage(x, y, w, h);
+
+ x = 0; y = 6;
+ w = 6; h = 21;
+ o1 = 10; o2 = 18;
+ vStart = slider->getSubImage(x, y, w, o1 - y);
+ vMid = slider->getSubImage(x, o1, w, o2 - o1);
+ vEnd = slider->getSubImage(x, o2, w, h - o2 + y);
+
+ x = 6; y = 8;
+ w = 9; h = 10;
+ vGrip = slider->getSubImage(x, y, w, h);
+
+ slider->decRef();
+ }
+
+ mInstances++;
setMarkerLength(hGrip->getWidth());
}
diff --git a/src/gui/slider.h b/src/gui/slider.h
index 4e3c799c..dcfc8005 100644
--- a/src/gui/slider.h
+++ b/src/gui/slider.h
@@ -45,6 +45,11 @@ class Slider : public gcn::Slider {
Slider(double scaleStart, double scaleEnd);
/**
+ * Destructor.
+ */
+ ~Slider();
+
+ /**
* Draws the slider.
*/
void draw(gcn::Graphics *graphics);
@@ -60,8 +65,9 @@ class Slider : public gcn::Slider {
*/
void init();
- Image *hStart, *hMid, *hEnd, *hGrip;
- Image *vStart, *vMid, *vEnd, *vGrip;
+ static Image *hStart, *hMid, *hEnd, *hGrip;
+ static Image *vStart, *vMid, *vEnd, *vGrip;
+ static int mInstances;
};
#endif