summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaximilian Philipps <Turmfalke2007@web.de>2009-08-02 20:15:38 +0200
committerChuck Miller <shadowmil@gmail.com>2009-08-05 15:19:32 -0400
commit1eda598ab8d34e8d2fd3ecf990fcb64d49f518f8 (patch)
tree098001f83da97cc77cb234dc40bc23dae6d8fe95
parent5c578f9d64bfcc0dbd81d9c6bad549a65bd1ad32 (diff)
downloadmana-1eda598ab8d34e8d2fd3ecf990fcb64d49f518f8.tar.gz
mana-1eda598ab8d34e8d2fd3ecf990fcb64d49f518f8.tar.bz2
mana-1eda598ab8d34e8d2fd3ecf990fcb64d49f518f8.tar.xz
mana-1eda598ab8d34e8d2fd3ecf990fcb64d49f518f8.zip
patch for #813, adds mouse over highlight for
radio buttons, tabs, checkboxes, slider and scrollbars
-rw-r--r--data/graphics/gui/Makefile.am8
-rw-r--r--data/graphics/gui/button.pngbin1317 -> 1463 bytes
-rw-r--r--data/graphics/gui/button_disabled.pngbin1280 -> 1463 bytes
-rw-r--r--data/graphics/gui/buttonhi.pngbin1361 -> 1530 bytes
-rw-r--r--data/graphics/gui/buttonpress.pngbin1347 -> 1558 bytes
-rw-r--r--data/graphics/gui/checkbox.pngbin358 -> 537 bytes
-rw-r--r--data/graphics/gui/radioin_highlight.pngbin0 -> 652 bytes
-rw-r--r--data/graphics/gui/radioout_highlight.pngbin0 -> 528 bytes
-rw-r--r--data/graphics/gui/slider_hilight.pngbin0 -> 468 bytes
-rw-r--r--data/graphics/gui/tab.pngbin1189 -> 1352 bytes
-rw-r--r--data/graphics/gui/tab_hilight.pngbin0 -> 1398 bytes
-rw-r--r--data/graphics/gui/tabselected.pngbin1227 -> 1437 bytes
-rw-r--r--data/graphics/gui/vscroll_highlight.pngbin0 -> 446 bytes
-rw-r--r--src/gui/palette.cpp8
-rw-r--r--src/gui/widgets/checkbox.cpp46
-rw-r--r--src/gui/widgets/checkbox.h14
-rw-r--r--src/gui/widgets/radiobutton.cpp47
-rw-r--r--src/gui/widgets/radiobutton.h17
-rw-r--r--src/gui/widgets/scrollarea.cpp47
-rw-r--r--src/gui/widgets/scrollarea.h18
-rw-r--r--src/gui/widgets/slider.cpp85
-rw-r--r--src/gui/widgets/slider.h13
-rw-r--r--src/gui/widgets/tab.cpp12
23 files changed, 266 insertions, 49 deletions
diff --git a/data/graphics/gui/Makefile.am b/data/graphics/gui/Makefile.am
index a2bafb29..b30d00e2 100644
--- a/data/graphics/gui/Makefile.am
+++ b/data/graphics/gui/Makefile.am
@@ -30,6 +30,7 @@ gui_DATA = \
speechbubble.xml \
tab.png \
tabselected.png \
+ tab_hilight.png \
target-cursor-blue-l.png \
target-cursor-blue-m.png \
target-cursor-blue-s.png \
@@ -44,7 +45,12 @@ gui_DATA = \
vscroll_up_default.png \
vscroll_up_highlight.png \
vscroll_up_pressed.png \
- window.png
+ window.png \
+ radioin_highlight.png \
+ radioout_highlight.png \
+ slider_hilight.png \
+ tab_hilight.png \
+ vscroll_highlight.png
EXTRA_DIST = \
$(gui_DATA)
diff --git a/data/graphics/gui/button.png b/data/graphics/gui/button.png
index 2759b2a8..4f6a5a81 100644
--- a/data/graphics/gui/button.png
+++ b/data/graphics/gui/button.png
Binary files differ
diff --git a/data/graphics/gui/button_disabled.png b/data/graphics/gui/button_disabled.png
index 2ed20a7e..2a8fdf43 100644
--- a/data/graphics/gui/button_disabled.png
+++ b/data/graphics/gui/button_disabled.png
Binary files differ
diff --git a/data/graphics/gui/buttonhi.png b/data/graphics/gui/buttonhi.png
index fe376a2e..24c09718 100644
--- a/data/graphics/gui/buttonhi.png
+++ b/data/graphics/gui/buttonhi.png
Binary files differ
diff --git a/data/graphics/gui/buttonpress.png b/data/graphics/gui/buttonpress.png
index 24e66613..d192534a 100644
--- a/data/graphics/gui/buttonpress.png
+++ b/data/graphics/gui/buttonpress.png
Binary files differ
diff --git a/data/graphics/gui/checkbox.png b/data/graphics/gui/checkbox.png
index 7c441c11..b68893fc 100644
--- a/data/graphics/gui/checkbox.png
+++ b/data/graphics/gui/checkbox.png
Binary files differ
diff --git a/data/graphics/gui/radioin_highlight.png b/data/graphics/gui/radioin_highlight.png
new file mode 100644
index 00000000..c020f0ba
--- /dev/null
+++ b/data/graphics/gui/radioin_highlight.png
Binary files differ
diff --git a/data/graphics/gui/radioout_highlight.png b/data/graphics/gui/radioout_highlight.png
new file mode 100644
index 00000000..957a1fa6
--- /dev/null
+++ b/data/graphics/gui/radioout_highlight.png
Binary files differ
diff --git a/data/graphics/gui/slider_hilight.png b/data/graphics/gui/slider_hilight.png
new file mode 100644
index 00000000..8b7d2be6
--- /dev/null
+++ b/data/graphics/gui/slider_hilight.png
Binary files differ
diff --git a/data/graphics/gui/tab.png b/data/graphics/gui/tab.png
index 929ff7ce..689981a9 100644
--- a/data/graphics/gui/tab.png
+++ b/data/graphics/gui/tab.png
Binary files differ
diff --git a/data/graphics/gui/tab_hilight.png b/data/graphics/gui/tab_hilight.png
new file mode 100644
index 00000000..d0585e8f
--- /dev/null
+++ b/data/graphics/gui/tab_hilight.png
Binary files differ
diff --git a/data/graphics/gui/tabselected.png b/data/graphics/gui/tabselected.png
index f5451942..72a48973 100644
--- a/data/graphics/gui/tabselected.png
+++ b/data/graphics/gui/tabselected.png
Binary files differ
diff --git a/data/graphics/gui/vscroll_highlight.png b/data/graphics/gui/vscroll_highlight.png
new file mode 100644
index 00000000..9802044c
--- /dev/null
+++ b/data/graphics/gui/vscroll_highlight.png
Binary files differ
diff --git a/src/gui/palette.cpp b/src/gui/palette.cpp
index 52288d51..ac04d9b5 100644
--- a/src/gui/palette.cpp
+++ b/src/gui/palette.cpp
@@ -82,9 +82,9 @@ Palette::Palette() :
addColor(SHADOW, 0x000000, STATIC, indent + _("Text Shadow"));
addColor(OUTLINE, 0x000000, STATIC, indent + _("Text Outline"));
addColor(PROGRESS_BAR, 0xffffff, STATIC, indent + _("Progress Bar Labels"));
- addColor(BUTTON, 0x000000, STATIC, indent + _("Buttons"));
- addColor(BUTTON_DISABLED, 0x000000, STATIC, indent + _("Disabled Buttons"));
- addColor(TAB, 0x000000, STATIC, indent + _("Tabs"));
+ addColor(BUTTON, 0xc8ad00, STATIC, indent + _("Buttons"));
+ addColor(BUTTON_DISABLED, 0x828282, STATIC, indent + _("Disabled Buttons"));
+ addColor(TAB, 0xc8ad00, STATIC, indent + _("Tabs"));
addColor(BACKGROUND, 0xffffff, STATIC, _("Background"));
@@ -96,7 +96,7 @@ Palette::Palette() :
addColor(CHAT, 0x000000, STATIC, _("Chat"), 'C');
addColor(GM, 0xff0000, STATIC, indent + _("GM"), 'G');
addColor(PLAYER, 0x1fa052, STATIC, indent + _("Player"), 'Y');
- addColor(WHISPER, 0x0000ff, STATIC, indent + _("Whisper"), 'W');
+ addColor(WHISPER, 0x00feaf, STATIC, indent + _("Whisper"), 'W');
addColor(IS, 0xa08527, STATIC, indent + _("Is"), 'I');
addColor(PARTY, 0xf48055, STATIC, indent + _("Party"), 'P');
addColor(SERVER, 0x8415e2, STATIC, indent + _("Server"), 'S');
diff --git a/src/gui/widgets/checkbox.cpp b/src/gui/widgets/checkbox.cpp
index 2e9a234b..dd57f674 100644
--- a/src/gui/widgets/checkbox.cpp
+++ b/src/gui/widgets/checkbox.cpp
@@ -35,9 +35,12 @@ Image *CheckBox::checkBoxNormal;
Image *CheckBox::checkBoxChecked;
Image *CheckBox::checkBoxDisabled;
Image *CheckBox::checkBoxDisabledChecked;
+Image *CheckBox::checkBoxNormalHi;
+Image *CheckBox::checkBoxCheckedHi;
CheckBox::CheckBox(const std::string &caption, bool selected):
- gcn::CheckBox(caption, selected)
+ gcn::CheckBox(caption, selected),
+ mHasMouse(false)
{
if (instances == 0)
{
@@ -47,10 +50,14 @@ CheckBox::CheckBox(const std::string &caption, bool selected):
checkBoxChecked = checkBox->getSubImage(9, 0, 9, 10);
checkBoxDisabled = checkBox->getSubImage(18, 0, 9, 10);
checkBoxDisabledChecked = checkBox->getSubImage(27, 0, 9, 10);
+ checkBoxNormalHi = checkBox->getSubImage(36, 0, 9, 10);
+ checkBoxCheckedHi = checkBox->getSubImage(45, 0, 9, 10);
checkBoxNormal->setAlpha(mAlpha);
checkBoxChecked->setAlpha(mAlpha);
checkBoxDisabled->setAlpha(mAlpha);
checkBoxDisabledChecked->setAlpha(mAlpha);
+ checkBoxNormalHi->setAlpha(mAlpha);
+ checkBoxCheckedHi->setAlpha(mAlpha);
checkBox->decRef();
}
@@ -67,6 +74,8 @@ CheckBox::~CheckBox()
delete checkBoxChecked;
delete checkBoxDisabled;
delete checkBoxDisabledChecked;
+ delete checkBoxNormalHi;
+ delete checkBoxCheckedHi;
}
}
@@ -86,17 +95,22 @@ void CheckBox::drawBox(gcn::Graphics* graphics)
{
Image *box;
- if (isSelected())
- {
- if (isEnabled())
- box = checkBoxChecked;
+ if (isEnabled())
+ if (isSelected())
+ if (mHasMouse)
+ box = checkBoxCheckedHi;
+ else
+ box = checkBoxChecked;
else
- box = checkBoxDisabledChecked;
- }
- else if (isEnabled())
- box = checkBoxNormal;
+ if (mHasMouse)
+ box = checkBoxNormalHi;
+ else
+ box = checkBoxNormal;
else
- box = checkBoxDisabled;
+ if (isSelected())
+ box = checkBoxDisabledChecked;
+ else
+ box = checkBoxDisabled;
if (config.getValue("guialpha", 0.8) != mAlpha)
{
@@ -105,7 +119,19 @@ void CheckBox::drawBox(gcn::Graphics* graphics)
checkBoxChecked->setAlpha(mAlpha);
checkBoxDisabled->setAlpha(mAlpha);
checkBoxDisabledChecked->setAlpha(mAlpha);
+ checkBoxNormal->setAlpha(mAlpha);
+ checkBoxCheckedHi->setAlpha(mAlpha);
}
static_cast<Graphics*>(graphics)->drawImage(box, 2, 2);
}
+
+void CheckBox::mouseEntered(gcn::MouseEvent& event)
+{
+ mHasMouse = true;
+}
+
+void CheckBox::mouseExited(gcn::MouseEvent& event)
+{
+ mHasMouse = false;
+}
diff --git a/src/gui/widgets/checkbox.h b/src/gui/widgets/checkbox.h
index 303782b0..7a7c8674 100644
--- a/src/gui/widgets/checkbox.h
+++ b/src/gui/widgets/checkbox.h
@@ -24,6 +24,7 @@
#include <guichan/widgets/checkbox.hpp>
+
class Image;
/**
@@ -54,13 +55,26 @@ class CheckBox : public gcn::CheckBox
*/
void drawBox(gcn::Graphics* graphics);
+ /**
+ * Called when the mouse enteres the widget area.
+ */
+ void mouseEntered(gcn::MouseEvent& event);
+
+ /**
+ * Called when the mouse leaves the widget area.
+ */
+ void mouseExited(gcn::MouseEvent& event);
+
private:
static int instances;
static float mAlpha;
+ bool mHasMouse;
static Image *checkBoxNormal;
static Image *checkBoxChecked;
static Image *checkBoxDisabled;
static Image *checkBoxDisabledChecked;
+ static Image *checkBoxNormalHi;
+ static Image *checkBoxCheckedHi;
};
#endif
diff --git a/src/gui/widgets/radiobutton.cpp b/src/gui/widgets/radiobutton.cpp
index 6f0ccdbd..9cf49672 100644
--- a/src/gui/widgets/radiobutton.cpp
+++ b/src/gui/widgets/radiobutton.cpp
@@ -33,10 +33,13 @@ Image *RadioButton::radioNormal;
Image *RadioButton::radioChecked;
Image *RadioButton::radioDisabled;
Image *RadioButton::radioDisabledChecked;
+Image *RadioButton::radioNormalHi;
+Image *RadioButton::radioCheckedHi;
RadioButton::RadioButton(const std::string &caption, const std::string &group,
bool marked):
- gcn::RadioButton(caption, group, marked)
+ gcn::RadioButton(caption, group, marked),
+ mHasMouse(false)
{
if (instances == 0)
{
@@ -45,10 +48,14 @@ RadioButton::RadioButton(const std::string &caption, const std::string &group,
radioChecked = resman->getImage("graphics/gui/radioin.png");
radioDisabled = resman->getImage("graphics/gui/radioout.png");
radioDisabledChecked = resman->getImage("graphics/gui/radioin.png");
+ radioNormalHi = resman->getImage("graphics/gui/radioout_highlight.png");
+ radioCheckedHi = resman->getImage("graphics/gui/radioin_highlight.png");
radioNormal->setAlpha(mAlpha);
radioChecked->setAlpha(mAlpha);
radioDisabled->setAlpha(mAlpha);
radioDisabledChecked->setAlpha(mAlpha);
+ radioNormalHi->setAlpha(mAlpha);
+ radioCheckedHi->setAlpha(mAlpha);
}
instances++;
@@ -64,6 +71,8 @@ RadioButton::~RadioButton()
radioChecked->decRef();
radioDisabled->decRef();
radioDisabledChecked->decRef();
+ radioNormalHi->decRef();
+ radioCheckedHi->decRef();
}
}
@@ -76,21 +85,28 @@ void RadioButton::drawBox(gcn::Graphics* graphics)
radioChecked->setAlpha(mAlpha);
radioDisabled->setAlpha(mAlpha);
radioDisabledChecked->setAlpha(mAlpha);
+ radioNormalHi->setAlpha(mAlpha);
+ radioCheckedHi->setAlpha(mAlpha);
}
Image *box = NULL;
- if (isSelected())
- {
- if (isEnabled())
- box = radioChecked;
+ if (isEnabled())
+ if (isSelected())
+ if (mHasMouse)
+ box = radioCheckedHi;
+ else
+ box = radioChecked;
else
- box = radioDisabledChecked;
- }
- else if (isEnabled())
- box = radioNormal;
+ if (mHasMouse)
+ box = radioNormalHi;
+ else
+ box = radioNormal;
else
- box = radioDisabled;
+ if (isSelected())
+ box = radioDisabledChecked;
+ else
+ box = radioDisabled;
if (box)
static_cast<Graphics*>(graphics)->drawImage(box, 2, 2);
@@ -111,3 +127,14 @@ void RadioButton::draw(gcn::Graphics* graphics)
int h = getHeight() + getHeight() / 2;
graphics->drawText(getCaption(), h - 2, 0);
}
+
+void RadioButton::mouseEntered(gcn::MouseEvent& event)
+{
+ mHasMouse = true;
+}
+
+void RadioButton::mouseExited(gcn::MouseEvent& event)
+{
+ mHasMouse = false;
+}
+
diff --git a/src/gui/widgets/radiobutton.h b/src/gui/widgets/radiobutton.h
index 9aec3add..57eb3623 100644
--- a/src/gui/widgets/radiobutton.h
+++ b/src/gui/widgets/radiobutton.h
@@ -26,13 +26,13 @@
class Image;
-/*
+/**
* Guichan based RadioButton with custom look
*/
class RadioButton : public gcn::RadioButton
{
public:
- /*
+ /**
* Constructor.
*/
RadioButton(const std::string &caption,const std::string &group,
@@ -54,13 +54,26 @@ class RadioButton : public gcn::RadioButton
*/
void draw(gcn::Graphics* graphics);
+ /**
+ * Called when the mouse enteres the widget area.
+ */
+ void mouseEntered(gcn::MouseEvent& event);
+
+ /**
+ * Called when the mouse leaves the widget area.
+ */
+ void mouseExited(gcn::MouseEvent& event);
+
private:
static int instances;
static float mAlpha;
+ bool mHasMouse;
static Image *radioNormal;
static Image *radioChecked;
static Image *radioDisabled;
static Image *radioDisabledChecked;
+ static Image *radioNormalHi;
+ static Image *radioCheckedHi;
};
#endif /* RADIOBUTTON_H */
diff --git a/src/gui/widgets/scrollarea.cpp b/src/gui/widgets/scrollarea.cpp
index ff3a23d1..a5ea43a8 100644
--- a/src/gui/widgets/scrollarea.cpp
+++ b/src/gui/widgets/scrollarea.cpp
@@ -33,10 +33,13 @@ int ScrollArea::instances = 0;
float ScrollArea::mAlpha = 1.0;
ImageRect ScrollArea::background;
ImageRect ScrollArea::vMarker;
+ImageRect ScrollArea::vMarkerHi;
Image *ScrollArea::buttons[4][2];
ScrollArea::ScrollArea():
gcn::ScrollArea(),
+ mX(0),
+ mY(0),
mOpaque(true)
{
init();
@@ -44,6 +47,7 @@ ScrollArea::ScrollArea():
ScrollArea::ScrollArea(gcn::Widget *widget):
gcn::ScrollArea(widget),
+ mHasMouse(false),
mOpaque(true)
{
init();
@@ -60,6 +64,7 @@ ScrollArea::~ScrollArea()
{
for_each(background.grid, background.grid + 9, dtor<Image*>());
for_each(vMarker.grid, vMarker.grid + 9, dtor<Image*>());
+ for_each(vMarkerHi.grid, vMarker.grid + 9, dtor<Image*>());
buttons[UP][0]->decRef();
buttons[UP][1]->decRef();
@@ -103,6 +108,8 @@ void ScrollArea::init()
// Load vertical scrollbar skin
Image *vscroll = resman->getImage("graphics/gui/vscroll_grey.png");
+ Image *vscrollHi = resman->getImage("graphics/gui/vscroll_highlight.png");
+
int vsgridx[4] = {0, 4, 7, 11};
int vsgridy[4] = {0, 4, 15, 19};
a = 0;
@@ -115,12 +122,18 @@ void ScrollArea::init()
vsgridx[x], vsgridy[y],
vsgridx[x + 1] - vsgridx[x],
vsgridy[y + 1] - vsgridy[y]);
+ vMarkerHi.grid[a] = vscrollHi->getSubImage(
+ vsgridx[x], vsgridy[y],
+ vsgridx[x + 1] - vsgridx[x],
+ vsgridy[y + 1] - vsgridy[y]);
vMarker.grid[a]->setAlpha(config.getValue("guialpha", 0.8));
+ vMarkerHi.grid[a]->setAlpha(config.getValue("guialpha", 0.8));
a++;
}
}
vscroll->decRef();
+ vscrollHi->decRef();
buttons[UP][0] =
resman->getImage("graphics/gui/vscroll_up_default.png");
@@ -202,6 +215,7 @@ void ScrollArea::draw(gcn::Graphics *graphics)
{
background.grid[a]->setAlpha(mAlpha);
vMarker.grid[a]->setAlpha(mAlpha);
+ vMarkerHi.grid[a]->setAlpha(mAlpha);
}
}
@@ -296,14 +310,39 @@ void ScrollArea::drawVMarker(gcn::Graphics *graphics)
{
gcn::Rectangle dim = getVerticalMarkerDimension();
- static_cast<Graphics*>(graphics)->
- drawImageRect(dim.x, dim.y, dim.width, dim.height, vMarker);
+ if ((mHasMouse) && (mX > (getWidth() - getScrollbarWidth())))
+ static_cast<Graphics*>(graphics)->
+ drawImageRect(dim.x, dim.y, dim.width, dim.height, vMarkerHi);
+ else
+ static_cast<Graphics*>(graphics)->
+ drawImageRect(dim.x, dim.y, dim.width, dim.height,vMarker);
}
void ScrollArea::drawHMarker(gcn::Graphics *graphics)
{
gcn::Rectangle dim = getHorizontalMarkerDimension();
- static_cast<Graphics*>(graphics)->
- drawImageRect(dim.x, dim.y, dim.width, dim.height, vMarker);
+ if ((mHasMouse) && (mY > (getHeight() - getScrollbarWidth())))
+ static_cast<Graphics*>(graphics)->
+ drawImageRect(dim.x, dim.y, dim.width, dim.height, vMarkerHi);
+ else
+ static_cast<Graphics*>(graphics)->
+ drawImageRect(dim.x, dim.y, dim.width, dim.height, vMarker);
}
+
+void ScrollArea::mouseMoved(gcn::MouseEvent& event)
+{
+mX = event.getX();
+mY = event.getY();
+}
+
+void ScrollArea::mouseEntered(gcn::MouseEvent& event)
+{
+ mHasMouse = true;
+}
+
+void ScrollArea::mouseExited(gcn::MouseEvent& event)
+{
+ mHasMouse = false;
+}
+
diff --git a/src/gui/widgets/scrollarea.h b/src/gui/widgets/scrollarea.h
index 700de32b..8fd92b5f 100644
--- a/src/gui/widgets/scrollarea.h
+++ b/src/gui/widgets/scrollarea.h
@@ -83,6 +83,21 @@ class ScrollArea : public gcn::ScrollArea
*/
bool isOpaque() const { return mOpaque; }
+ /**
+ * Called when the mouse moves in the widget area.
+ */
+ void mouseMoved(gcn::MouseEvent& event);
+
+ /**
+ * Called when the mouse enteres the widget area.
+ */
+ void mouseEntered(gcn::MouseEvent& event);
+
+ /**
+ * Called when the mouse leaves the widget area.
+ */
+ void mouseExited(gcn::MouseEvent& event);
+
protected:
enum BUTTON_DIR {
UP,
@@ -110,8 +125,11 @@ class ScrollArea : public gcn::ScrollArea
static float mAlpha;
static ImageRect background;
static ImageRect vMarker;
+ static ImageRect vMarkerHi;
static Image *buttons[4][2];
+ int mX,mY;
+ bool mHasMouse;
bool mOpaque;
};
diff --git a/src/gui/widgets/slider.cpp b/src/gui/widgets/slider.cpp
index 7cd0e54a..6ce5f849 100644
--- a/src/gui/widgets/slider.cpp
+++ b/src/gui/widgets/slider.cpp
@@ -29,17 +29,21 @@
Image *Slider::hStart, *Slider::hMid, *Slider::hEnd, *Slider::hGrip;
Image *Slider::vStart, *Slider::vMid, *Slider::vEnd, *Slider::vGrip;
+Image *Slider::hStartHi, *Slider::hMidHi, *Slider::hEndHi, *Slider::hGripHi;
+Image *Slider::vStartHi, *Slider::vMidHi, *Slider::vEndHi, *Slider::vGripHi;
float Slider::mAlpha = 1.0;
int Slider::mInstances = 0;
Slider::Slider(double scaleEnd):
- gcn::Slider(scaleEnd)
+ gcn::Slider(scaleEnd),
+ mHasMouse(false)
{
init();
}
Slider::Slider(double scaleStart, double scaleEnd):
- gcn::Slider(scaleStart, scaleEnd)
+ gcn::Slider(scaleStart, scaleEnd),
+ mHasMouse(false)
{
init();
}
@@ -58,6 +62,14 @@ Slider::~Slider()
delete vMid;
delete vEnd;
delete vGrip;
+ delete hStartHi;
+ delete hMidHi;
+ delete hEndHi;
+ delete hGripHi;
+ delete vStartHi;
+ delete vMidHi;
+ delete vEndHi;
+ delete vGripHi;
}
}
@@ -71,6 +83,7 @@ void Slider::init()
{
ResourceManager *resman = ResourceManager::getInstance();
Image *slider = resman->getImage("graphics/gui/slider.png");
+ Image *sliderHi = resman->getImage("graphics/gui/slider_hilight.png");
x = 0; y = 0;
w = 15; h = 6;
@@ -78,10 +91,14 @@ void Slider::init()
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);
+ hStartHi = sliderHi->getSubImage(x, y, o1 - x, h);
+ hMidHi = sliderHi->getSubImage(o1, y, o2 - o1, h);
+ hEndHi = sliderHi->getSubImage(o2, y, w - o2 + x, h);
x = 6; y = 8;
w = 9; h = 10;
hGrip = slider->getSubImage(x, y, w, h);
+ hGripHi = sliderHi->getSubImage(x, y, w, h);
x = 0; y = 6;
w = 6; h = 21;
@@ -89,22 +106,35 @@ void Slider::init()
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);
+ vStartHi = sliderHi->getSubImage(x, y, w, o1 - y);
+ vMidHi = sliderHi->getSubImage(x, o1, w, o2 - o1);
+ vEndHi = sliderHi->getSubImage(x, o2, w, h - o2 + y);
x = 6; y = 8;
w = 9; h = 10;
vGrip = slider->getSubImage(x, y, w, h);
+ vGripHi = sliderHi->getSubImage(x, y, w, h);
slider->decRef();
+ sliderHi->decRef();
hStart->setAlpha(mAlpha);
hMid->setAlpha(mAlpha);
hEnd->setAlpha(mAlpha);
hGrip->setAlpha(mAlpha);
+ hStartHi->setAlpha(mAlpha);
+ hMidHi->setAlpha(mAlpha);
+ hEndHi->setAlpha(mAlpha);
+ hGripHi->setAlpha(mAlpha);
vStart->setAlpha(mAlpha);
vMid->setAlpha(mAlpha);
vEnd->setAlpha(mAlpha);
vGrip->setAlpha(mAlpha);
+ vStartHi->setAlpha(mAlpha);
+ vMidHi->setAlpha(mAlpha);
+ vEndHi->setAlpha(mAlpha);
+ vGripHi->setAlpha(mAlpha);
}
mInstances++;
@@ -117,7 +147,7 @@ void Slider::draw(gcn::Graphics *graphics)
int w = getWidth();
int h = getHeight();
int x = 0;
- int y = (h - hStart->getHeight()) / 2;
+ int y = mHasMouse?(h - hStartHi->getHeight()) / 2:(h - hStart->getHeight()) / 2;
if (config.getValue("guialpha", 0.8) != mAlpha)
{
@@ -126,23 +156,45 @@ void Slider::draw(gcn::Graphics *graphics)
hMid->setAlpha(mAlpha);
hEnd->setAlpha(mAlpha);
hGrip->setAlpha(mAlpha);
+ hStartHi->setAlpha(mAlpha);
+ hMidHi->setAlpha(mAlpha);
+ hEndHi->setAlpha(mAlpha);
+ hGripHi->setAlpha(mAlpha);
vStart->setAlpha(mAlpha);
vMid->setAlpha(mAlpha);
vEnd->setAlpha(mAlpha);
vGrip->setAlpha(mAlpha);
+ vStartHi->setAlpha(mAlpha);
+ vMidHi->setAlpha(mAlpha);
+ vEndHi->setAlpha(mAlpha);
+ vGripHi->setAlpha(mAlpha);
}
+ if (!mHasMouse)
+ {
+ static_cast<Graphics*>(graphics)->drawImage(hStart, x, y);
- static_cast<Graphics*>(graphics)->drawImage(hStart, x, y);
+ w -= hStart->getWidth() + hEnd->getWidth();
+ x += hStart->getWidth();
- w -= hStart->getWidth() + hEnd->getWidth();
- x += hStart->getWidth();
+ static_cast<Graphics*>(graphics)->
+ drawImagePattern(hMid, x, y, w, hMid->getHeight());
- static_cast<Graphics*>(graphics)->
- drawImagePattern(hMid, x, y, w, hMid->getHeight());
+ x += w;
+ static_cast<Graphics*>(graphics)->drawImage(hEnd, x, y);
+ } else
+ {
+ static_cast<Graphics*>(graphics)->drawImage(hStartHi, x, y);
- x += w;
- static_cast<Graphics*>(graphics)->drawImage(hEnd, x, y);
+ w -= hStartHi->getWidth() + hEndHi->getWidth();
+ x += hStartHi->getWidth();
+
+ static_cast<Graphics*>(graphics)->
+ drawImagePattern(hMidHi, x, y, w, hMidHi->getHeight());
+
+ x += w;
+ static_cast<Graphics*>(graphics)->drawImage(hEndHi, x, y);
+ }
drawMarker(graphics);
}
@@ -150,5 +202,16 @@ void Slider::draw(gcn::Graphics *graphics)
void Slider::drawMarker(gcn::Graphics *graphics)
{
static_cast<Graphics*>(graphics)->
- drawImage(hGrip, getMarkerPosition(), (getHeight() - hGrip->getHeight()) / 2);
+ drawImage(mHasMouse?hGripHi:hGrip, getMarkerPosition(),
+ (getHeight() - (mHasMouse?hGripHi:hGrip)->getHeight()) / 2);
}
+
+void Slider::mouseEntered(gcn::MouseEvent& event)
+{
+ mHasMouse = true;
+}
+
+void Slider::mouseExited(gcn::MouseEvent& event)
+{
+ mHasMouse = false;
+} \ No newline at end of file
diff --git a/src/gui/widgets/slider.h b/src/gui/widgets/slider.h
index 56ea334a..85fb2633 100644
--- a/src/gui/widgets/slider.h
+++ b/src/gui/widgets/slider.h
@@ -58,6 +58,16 @@ class Slider : public gcn::Slider {
*/
void drawMarker(gcn::Graphics *graphics);
+ /**
+ * Called when the mouse enteres the widget area.
+ */
+ void mouseEntered(gcn::MouseEvent& event);
+
+ /**
+ * Called when the mouse leaves the widget area.
+ */
+ void mouseExited(gcn::MouseEvent& event);
+
private:
/**
* Used to initialize instances.
@@ -66,6 +76,9 @@ class Slider : public gcn::Slider {
static Image *hStart, *hMid, *hEnd, *hGrip;
static Image *vStart, *vMid, *vEnd, *vGrip;
+ static Image *hStartHi, *hMidHi, *hEndHi, *hGripHi;
+ static Image *vStartHi, *vMidHi, *vEndHi, *vGripHi;
+ bool mHasMouse;
static float mAlpha;
static int mInstances;
};
diff --git a/src/gui/widgets/tab.cpp b/src/gui/widgets/tab.cpp
index 26bcc636..3e49263e 100644
--- a/src/gui/widgets/tab.cpp
+++ b/src/gui/widgets/tab.cpp
@@ -55,7 +55,7 @@ struct TabData
static TabData const data[TAB_COUNT] = {
{ "graphics/gui/tab.png", 0, 0 },
- { "graphics/gui/tab.png", 9, 4 },
+ { "graphics/gui/tab_hilight.png", 9, 4 },
{ "graphics/gui/tabselected.png", 16, 19 },
{ "graphics/gui/tab.png", 25, 23 }
};
@@ -123,21 +123,19 @@ void Tab::draw(gcn::Graphics *graphics)
// check which type of tab to draw
if (mTabbedArea)
{
+ mLabel->setForegroundColor(*mTabColor);
if (mTabbedArea->isTabSelected(this))
{
mode = TAB_SELECTED;
// if tab is selected, it doesnt need to highlight activity
- mLabel->setForegroundColor(*mTabColor);
mHighlighted = false;
- }
- else if (mHighlighted)
+ } else if (mHasMouse)
{
mode = TAB_HIGHLIGHTED;
- mLabel->setForegroundColor(guiPalette->getColor(Palette::TAB_HIGHLIGHT));
}
- else
+ if (mHighlighted)
{
- mLabel->setForegroundColor(*mTabColor);
+ mLabel->setForegroundColor(guiPalette->getColor(Palette::TAB_HIGHLIGHT));
}
}