1
0
forked from 0ad/0ad
0ad/source/gui/IGUIScrollBar.cpp
Gee e21ebb37f5 Major updates
This was SVN commit r141.
2003-12-27 06:26:03 +00:00

92 lines
1.7 KiB
C++
Executable File

/*
IGUIScrollBar
by Gustav Larsson
gee@pyro.nu
*/
//#include "stdafx.h"
#include "GUI.h"
using namespace std;
//-------------------------------------------------------------------
// IGUIScrollBar
//-------------------------------------------------------------------
IGUIScrollBar::IGUIScrollBar() : m_pStyle(NULL), m_X(300), m_Y(300), m_Length(200), m_Width(20), m_BarSize(0.5), m_Pos(0.5)
{
}
IGUIScrollBar::~IGUIScrollBar()
{
}
const SGUIScrollBarStyle & IGUIScrollBar::GetStyle() const
{
if (!m_pHostObject)
return SGUIScrollBarStyle();
return m_pHostObject->GetScrollBarStyle(m_ScrollBarStyle);
}
void IGUIScrollBar::UpdatePosBoundaries()
{
if (m_Pos > 1.f)
m_Pos = 1.f;
else
if (m_Pos < 0.f)
m_Pos = 0.f;
}
bool IGUIScrollBar::HandleMessage(const SGUIMessage &Message)
{
switch (Message.type)
{
case GUIM_MOUSE_MOTION:
if (m_BarPressed)
{
SetPosFromMousePos(m_pHostObject->GetMouseX(), m_pHostObject->GetMouseY());
UpdatePosBoundaries();
}
break;
case GUIM_MOUSE_PRESS_LEFT:
{
if (!m_pHostObject)
break;
int mouse_x = m_pHostObject->GetMouseX(),
mouse_y = m_pHostObject->GetMouseY();
// if bar is pressed
if (mouse_x >= GetBarRect().left &&
mouse_x <= GetBarRect().right &&
mouse_y >= GetBarRect().top &&
mouse_y <= GetBarRect().bottom)
{
m_BarPressed = true;
m_BarPressedAtX = mouse_x;
m_BarPressedAtY = mouse_y;
m_PosWhenPressed = m_Pos;
}
else
// if button-minus is pressed
if (HoveringButtonMinus(mouse_x, mouse_y))
{
ScrollMinus();
}
else
// if button-plus is pressed
if (HoveringButtonPlus(mouse_x, mouse_y))
{
ScrollPlus();
}
}
break;
default:
return false;
}
return true;
}