Refactored mouse wheel

dev-time-step
krzys-h 2015-09-25 22:54:48 +02:00
parent 0c64e62979
commit 07df35ca01
9 changed files with 70 additions and 101 deletions

View File

@ -1069,11 +1069,8 @@ Event CApplication::ProcessSystemEvent()
event.type = EVENT_MOUSE_WHEEL;
auto data = MakeUnique<MouseWheelEventData>();
if (m_private->currentEvent.wheel.y < 0) // TODO: properly use this value
data->dir = WHEEL_DOWN;
else
data->dir = WHEEL_UP;
data->y = m_private->currentEvent.wheel.y;
data->x = m_private->currentEvent.wheel.x;
event.data = std::move(data);
}
@ -1175,7 +1172,8 @@ void CApplication::LogEvent(const Event &event)
case EVENT_MOUSE_WHEEL:
{
auto data = event.GetData<MouseWheelEventData>();
l->Trace(" dir = %s\n", (data->dir == WHEEL_DOWN) ? "WHEEL_DOWN" : "WHEEL_UP");
l->Trace(" y = %d\n", data->y);
l->Trace(" x = %d\n", data->x);
break;
}
case EVENT_JOY_AXIS:

View File

@ -648,8 +648,10 @@ struct MouseWheelEventData : public EventData
return MakeUnique<MouseWheelEventData>(*this);
}
//! Wheel direction
WheelDirection dir = WHEEL_UP;
//! Amount scrolled vertically, positive value is away from the user
signed int y = 0;
//! Amount scrolled horizontally (if the mouse supports it), positive value is to the right
signed int x = 0;
};
/**

View File

@ -1065,7 +1065,7 @@ bool CCamera::EventProcess(const Event &event)
break;
case EVENT_MOUSE_WHEEL:
EventMouseWheel(event.GetData<MouseWheelEventData>()->dir);
EventMouseWheel(event.GetData<MouseWheelEventData>()->y);
break;
default:
@ -1080,55 +1080,34 @@ bool CCamera::EventMouseMove(const Event &event)
return true;
}
void CCamera::EventMouseWheel(WheelDirection dir)
void CCamera::EventMouseWheel(int dir)
{
if (m_type == CAM_TYPE_BACK)
{
if (dir == WHEEL_UP)
{
m_backDist -= 8.0f;
if (m_backDist < m_backMin)
m_backDist = m_backMin;
}
else if (dir == WHEEL_DOWN)
{
m_backDist += 8.0f;
if (m_backDist > 200.0f)
m_backDist = 200.0f;
}
m_backDist -= 8.0f*dir;
if (m_backDist < m_backMin)
m_backDist = m_backMin;
if (m_backDist > 200.0f)
m_backDist = 200.0f;
}
if ( m_type == CAM_TYPE_FIX ||
m_type == CAM_TYPE_PLANE )
{
if (dir == WHEEL_UP)
{
m_fixDist -= 8.0f;
if (m_fixDist < 10.0f)
m_fixDist = 10.0f;
}
else if (dir == WHEEL_DOWN)
{
m_fixDist += 8.0f;
if (m_fixDist > 200.0f)
m_fixDist = 200.0f;
}
m_fixDist -= 8.0f*dir;
if (m_fixDist < 10.0f)
m_fixDist = 10.0f;
if (m_fixDist > 200.0f)
m_fixDist = 200.0f;
}
if ( m_type == CAM_TYPE_VISIT )
{
if (dir == WHEEL_UP)
{
m_visitDist -= 8.0f;
if (m_visitDist < 20.0f)
m_visitDist = 20.0f;
}
else if (dir == WHEEL_DOWN)
{
m_visitDist += 8.0f;
if (m_visitDist > 200.0f)
m_visitDist = 200.0f;
}
m_visitDist -= 8.0f*dir;
if (m_visitDist < 20.0f)
m_visitDist = 20.0f;
if (m_visitDist > 200.0f)
m_visitDist = 200.0f;
}
}

View File

@ -226,7 +226,7 @@ protected:
//! Changes the camera according to the mouse moved
bool EventMouseMove(const Event &event);
//! Mouse wheel operation
void EventMouseWheel(WheelDirection dir);
void EventMouseWheel(int dir);
//! Changes the camera according to the time elapsed
bool EventFrame(const Event &event);
//! Moves the point of view

View File

@ -254,14 +254,7 @@ bool CEdit::EventProcess(const Event &event)
Detect(event.mousePos))
{
auto data = event.GetData<MouseWheelEventData>();
if (data->dir == WHEEL_UP)
{
Scroll(m_lineFirst - 3, true);
}
else
{
Scroll(m_lineFirst + 3, true);
}
Scroll(m_lineFirst - data->y, true);
return true;
}

View File

@ -184,20 +184,11 @@ bool CEditValue::EventProcess(const Event &event)
}
if (event.type == EVENT_MOUSE_WHEEL &&
event.GetData<MouseWheelEventData>()->dir == WHEEL_UP &&
Detect(event.mousePos))
{
float value = GetValue()+m_stepValue;
if ( value > m_maxValue ) value = m_maxValue;
SetValue(value, true);
HiliteValue(event);
}
if ( event.type == EVENT_MOUSE_WHEEL &&
event.GetData<MouseWheelEventData>()->dir == WHEEL_DOWN &&
Detect(event.mousePos))
{
float value = GetValue()-m_stepValue;
float value = GetValue() + (m_stepValue * event.GetData<MouseWheelEventData>()->y);
if ( value < m_minValue ) value = m_minValue;
if ( value > m_maxValue ) value = m_maxValue;
SetValue(value, true);
HiliteValue(event);
}

View File

@ -280,16 +280,11 @@ bool CList::EventProcess(const Event &event)
if (event.type == EVENT_MOUSE_WHEEL && Detect(event.mousePos))
{
auto data = event.GetData<MouseWheelEventData>();
if (data->dir == WHEEL_UP)
{
if (m_firstLine > 0)
m_firstLine--;
}
else
{
if (m_firstLine < m_totalLine - m_displayLine)
m_firstLine++;
}
m_firstLine -= data->y;
if (m_firstLine < 0)
m_firstLine = 0;
if (m_firstLine > m_totalLine - m_displayLine)
m_firstLine = m_totalLine - m_displayLine;
UpdateScroll();
UpdateButton();
@ -855,4 +850,3 @@ void CList::MoveScroll()
} // namespace Ui

View File

@ -273,18 +273,25 @@ bool CScroll::EventProcess(const Event &event)
}
if (event.type == EVENT_MOUSE_WHEEL &&
event.GetData<MouseWheelEventData>()->dir == WHEEL_UP &&
Detect(event.mousePos) &&
m_buttonUp != nullptr)
Detect(event.mousePos))
{
m_event->AddEvent(Event(m_buttonUp->GetEventType()));
}
if (event.type == EVENT_MOUSE_WHEEL &&
event.GetData<MouseWheelEventData>()->dir == WHEEL_DOWN &&
Detect(event.mousePos) &&
m_buttonDown != nullptr)
{
m_event->AddEvent(Event(m_buttonDown->GetEventType()));
auto data = event.GetData<MouseWheelEventData>();
if (data->y > 0)
{
if (m_buttonUp != nullptr)
{
for (int i = 0; i < data->y; i++)
m_event->AddEvent(Event(m_buttonUp->GetEventType()));
}
}
else
{
if (m_buttonDown != nullptr)
{
for (int i = 0; i < -(data->y); i++)
m_event->AddEvent(Event(m_buttonDown->GetEventType()));
}
}
}
return true;
@ -443,4 +450,3 @@ float CScroll::GetArrowStep()
}
} // namespace Ui

View File

@ -338,19 +338,25 @@ bool CSlider::EventProcess(const Event &event)
}
if (event.type == EVENT_MOUSE_WHEEL &&
event.GetData<MouseWheelEventData>()->dir == WHEEL_UP &&
Detect(event.mousePos) &&
m_buttonLeft != nullptr)
Detect(event.mousePos))
{
m_event->AddEvent(Event(m_buttonLeft->GetEventType()));
}
if (event.type == EVENT_MOUSE_WHEEL &&
event.GetData<MouseWheelEventData>()->dir == WHEEL_DOWN &&
Detect(event.mousePos) &&
m_buttonRight != nullptr)
{
m_event->AddEvent(Event(m_buttonRight->GetEventType()));
auto data = event.GetData<MouseWheelEventData>();
if (data->y > 0)
{
if (m_buttonLeft != nullptr)
{
for (int i = 0; i < data->y; i++)
m_event->AddEvent(Event(m_buttonLeft->GetEventType()));
}
}
else
{
if (m_buttonRight != nullptr)
{
for (int i = 0; i < -(data->y); i++)
m_event->AddEvent(Event(m_buttonRight->GetEventType()));
}
}
}
return true;