Commit 99e84fda authored by bitplane's avatar bitplane

Implemented more button states for sprite banks, patch submitted by RdR



git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@4033 dfc29bdd-3216-0410-991c-e03cc46cb475
parent bd72b79d
...@@ -22,7 +22,7 @@ CGUIButton::CGUIButton(IGUIEnvironment* environment, IGUIElement* parent, ...@@ -22,7 +22,7 @@ CGUIButton::CGUIButton(IGUIEnvironment* environment, IGUIElement* parent,
: IGUIButton(environment, parent, id, rectangle), : IGUIButton(environment, parent, id, rectangle),
SpriteBank(0), OverrideFont(0), Image(0), PressedImage(0), SpriteBank(0), OverrideFont(0), Image(0), PressedImage(0),
ClickTime(0), IsPushButton(false), Pressed(false), ClickTime(0), IsPushButton(false), Pressed(false),
UseAlphaChannel(false), DrawBorder(true), ScaleImage(false) UseAlphaChannel(false), DrawBorder(true), ScaleImage(false), ButtonState(EGBS_BUTTON_UP)
{ {
#ifdef _DEBUG #ifdef _DEBUG
setDebugName("CGUIButton"); setDebugName("CGUIButton");
...@@ -155,6 +155,17 @@ bool CGUIButton::OnEvent(const SEvent& event) ...@@ -155,6 +155,17 @@ bool CGUIButton::OnEvent(const SEvent& event)
{ {
if (event.GUIEvent.Caller == this && !IsPushButton) if (event.GUIEvent.Caller == this && !IsPushButton)
setPressed(false); setPressed(false);
ButtonState = EGBS_BUTTON_NOT_FOCUSED;
}
else if (event.GUIEvent.EventType == EGET_ELEMENT_HOVERED)
{
if (event.GUIEvent.Caller == this)
ButtonState = EGBS_BUTTON_MOUSE_OVER;
}
else if (event.GUIEvent.EventType == EGET_ELEMENT_LEFT)
{
if (event.GUIEvent.Caller == this)
ButtonState = EGBS_BUTTON_UP;
} }
break; break;
case EET_MOUSE_INPUT_EVENT: case EET_MOUSE_INPUT_EVENT:
...@@ -245,12 +256,12 @@ void CGUIButton::draw() ...@@ -245,12 +256,12 @@ void CGUIButton::draw()
ImageRect, &AbsoluteClippingRect, ImageRect, &AbsoluteClippingRect,
0, UseAlphaChannel); 0, UseAlphaChannel);
} }
if (SpriteBank && ButtonSprites[EGBS_BUTTON_UP].Index != -1) if (SpriteBank && ButtonSprites[ButtonState].Index != -1)
{ {
// draw pressed sprite // draw pressed sprite
SpriteBank->draw2DSprite(ButtonSprites[EGBS_BUTTON_UP].Index, spritePos, SpriteBank->draw2DSprite(ButtonSprites[ButtonState].Index, spritePos,
&AbsoluteClippingRect, ButtonSprites[EGBS_BUTTON_UP].Color, ClickTime, os::Timer::getTime(), &AbsoluteClippingRect, ButtonSprites[ButtonState].Color, ClickTime, os::Timer::getTime(),
ButtonSprites[EGBS_BUTTON_UP].Loop, true); ButtonSprites[ButtonState].Loop, true);
} }
} }
else else
...@@ -263,7 +274,7 @@ void CGUIButton::draw() ...@@ -263,7 +274,7 @@ void CGUIButton::draw()
core::position2d<s32> pos = spritePos; core::position2d<s32> pos = spritePos;
pos.X -= PressedImageRect.getWidth() / 2; pos.X -= PressedImageRect.getWidth() / 2;
pos.Y -= PressedImageRect.getHeight() / 2; pos.Y -= PressedImageRect.getHeight() / 2;
// patch by Alan Tyndall/Jonas Petersen
if (Image == PressedImage && PressedImageRect == ImageRect) if (Image == PressedImage && PressedImageRect == ImageRect)
{ {
pos.X += 1; pos.X += 1;
...@@ -407,6 +418,8 @@ void CGUIButton::setPressed(bool pressed) ...@@ -407,6 +418,8 @@ void CGUIButton::setPressed(bool pressed)
{ {
ClickTime = os::Timer::getTime(); ClickTime = os::Timer::getTime();
Pressed = pressed; Pressed = pressed;
if (Pressed)
ButtonState = EGBS_BUTTON_DOWN;
} }
} }
......
...@@ -122,6 +122,8 @@ namespace gui ...@@ -122,6 +122,8 @@ namespace gui
video::ITexture* Image; video::ITexture* Image;
video::ITexture* PressedImage; video::ITexture* PressedImage;
EGUI_BUTTON_STATE ButtonState;
core::rect<s32> ImageRect; core::rect<s32> ImageRect;
core::rect<s32> PressedImageRect; core::rect<s32> PressedImageRect;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment