summaryrefslogtreecommitdiff
path: root/src/gui/gui.cpp
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2008-12-05 23:01:54 +0100
committerBjørn Lindeijer <bjorn@lindeijer.nl>2008-12-05 23:04:04 +0100
commit9559fdb347054e945940980efdbbe83615ce9733 (patch)
treeb61c341c3766a962ddd2df253d05018608de2cb9 /src/gui/gui.cpp
parent06d0205bab253ec5d01e8483ab639a092fe117c5 (diff)
downloadmana-9559fdb347054e945940980efdbbe83615ce9733.tar.gz
mana-9559fdb347054e945940980efdbbe83615ce9733.tar.bz2
mana-9559fdb347054e945940980efdbbe83615ce9733.tar.xz
mana-9559fdb347054e945940980efdbbe83615ce9733.zip
Fade out mouse cursor when not used for some time
The mouse cursor will now disappear when not used for 15 seconds. When using OpenGL it will even fade. Requested by doorsman.
Diffstat (limited to 'src/gui/gui.cpp')
-rw-r--r--src/gui/gui.cpp47
1 files changed, 35 insertions, 12 deletions
diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp
index 691cfe2b..96415298 100644
--- a/src/gui/gui.cpp
+++ b/src/gui/gui.cpp
@@ -38,6 +38,7 @@
#include "../graphics.h"
#include "../log.h"
+#include "../resources/image.h"
#include "../resources/imageset.h"
#include "../resources/resourcemanager.h"
#include "../resources/imageloader.h"
@@ -75,6 +76,8 @@ class GuiConfigListener : public ConfigListener
Gui::Gui(Graphics *graphics):
mCustomCursor(false),
mMouseCursors(NULL),
+ mMouseCursorAlpha(1.0f),
+ mMouseInactivityTimer(0),
mCursorType(CURSOR_POINTER)
{
logger->log("Initializing GUI...");
@@ -174,32 +177,47 @@ Gui::~Gui()
delete hitBlueFont;
delete hitYellowFont;
- if (mMouseCursors) {
+ if (mMouseCursors)
mMouseCursors->decRef();
- }
delete mGuiFont;
delete speechFont;
delete viewport;
- delete mTop;
+ delete getTop();
delete guiInput;
}
-void
-Gui::draw()
+void Gui::logic()
+{
+ // Fade out mouse cursor after extended inactivity
+ if (mMouseInactivityTimer < 100 * 15) {
+ ++mMouseInactivityTimer;
+ mMouseCursorAlpha = std::min(1.0f, mMouseCursorAlpha + 0.05f);
+ } else {
+ mMouseCursorAlpha = std::max(0.0f, mMouseCursorAlpha - 0.005f);
+ }
+
+ gcn::Gui::logic();
+}
+
+void Gui::draw()
{
- mGraphics->pushClipArea(mTop->getDimension());
- mTop->draw(mGraphics);
+ mGraphics->pushClipArea(getTop()->getDimension());
+ getTop()->draw(mGraphics);
int mouseX, mouseY;
Uint8 button = SDL_GetMouseState(&mouseX, &mouseY);
- if ((SDL_GetAppState() & SDL_APPMOUSEFOCUS || button & SDL_BUTTON(1)) &&
- mCustomCursor)
+ if ((SDL_GetAppState() & SDL_APPMOUSEFOCUS || button & SDL_BUTTON(1))
+ && mCustomCursor
+ && mMouseCursorAlpha > 0.0f)
{
+ Image *mouseCursor = mMouseCursors->get(mCursorType);
+ mouseCursor->setAlpha(mMouseCursorAlpha);
+
static_cast<Graphics*>(mGraphics)->drawImage(
- mMouseCursors->get(mCursorType),
+ mouseCursor,
mouseX - 15,
mouseY - 17);
}
@@ -207,8 +225,7 @@ Gui::draw()
mGraphics->popClipArea();
}
-void
-Gui::setUseCustomCursor(bool customCursor)
+void Gui::setUseCustomCursor(bool customCursor)
{
if (customCursor != mCustomCursor)
{
@@ -241,3 +258,9 @@ Gui::setUseCustomCursor(bool customCursor)
}
}
}
+
+void Gui::handleMouseMoved(const gcn::MouseInput &mouseInput)
+{
+ gcn::Gui::handleMouseMoved(mouseInput);
+ mMouseInactivityTimer = 0;
+}