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; event.type = EVENT_MOUSE_WHEEL;
auto data = MakeUnique<MouseWheelEventData>(); auto data = MakeUnique<MouseWheelEventData>();
data->y = m_private->currentEvent.wheel.y;
if (m_private->currentEvent.wheel.y < 0) // TODO: properly use this value data->x = m_private->currentEvent.wheel.x;
data->dir = WHEEL_DOWN;
else
data->dir = WHEEL_UP;
event.data = std::move(data); event.data = std::move(data);
} }
@ -1175,7 +1172,8 @@ void CApplication::LogEvent(const Event &event)
case EVENT_MOUSE_WHEEL: case EVENT_MOUSE_WHEEL:
{ {
auto data = event.GetData<MouseWheelEventData>(); 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; break;
} }
case EVENT_JOY_AXIS: case EVENT_JOY_AXIS:

View File

@ -648,8 +648,10 @@ struct MouseWheelEventData : public EventData
return MakeUnique<MouseWheelEventData>(*this); return MakeUnique<MouseWheelEventData>(*this);
} }
//! Wheel direction //! Amount scrolled vertically, positive value is away from the user
WheelDirection dir = WHEEL_UP; 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; break;
case EVENT_MOUSE_WHEEL: case EVENT_MOUSE_WHEEL:
EventMouseWheel(event.GetData<MouseWheelEventData>()->dir); EventMouseWheel(event.GetData<MouseWheelEventData>()->y);
break; break;
default: default:
@ -1080,55 +1080,34 @@ bool CCamera::EventMouseMove(const Event &event)
return true; return true;
} }
void CCamera::EventMouseWheel(WheelDirection dir) void CCamera::EventMouseWheel(int dir)
{ {
if (m_type == CAM_TYPE_BACK) if (m_type == CAM_TYPE_BACK)
{ {
if (dir == WHEEL_UP) m_backDist -= 8.0f*dir;
{ if (m_backDist < m_backMin)
m_backDist -= 8.0f; m_backDist = m_backMin;
if (m_backDist < m_backMin) if (m_backDist > 200.0f)
m_backDist = m_backMin; m_backDist = 200.0f;
}
else if (dir == WHEEL_DOWN)
{
m_backDist += 8.0f;
if (m_backDist > 200.0f)
m_backDist = 200.0f;
}
} }
if ( m_type == CAM_TYPE_FIX || if ( m_type == CAM_TYPE_FIX ||
m_type == CAM_TYPE_PLANE ) m_type == CAM_TYPE_PLANE )
{ {
if (dir == WHEEL_UP) m_fixDist -= 8.0f*dir;
{ if (m_fixDist < 10.0f)
m_fixDist -= 8.0f; m_fixDist = 10.0f;
if (m_fixDist < 10.0f) if (m_fixDist > 200.0f)
m_fixDist = 10.0f; m_fixDist = 200.0f;
}
else if (dir == WHEEL_DOWN)
{
m_fixDist += 8.0f;
if (m_fixDist > 200.0f)
m_fixDist = 200.0f;
}
} }
if ( m_type == CAM_TYPE_VISIT ) if ( m_type == CAM_TYPE_VISIT )
{ {
if (dir == WHEEL_UP) m_visitDist -= 8.0f*dir;
{ if (m_visitDist < 20.0f)
m_visitDist -= 8.0f; m_visitDist = 20.0f;
if (m_visitDist < 20.0f) if (m_visitDist > 200.0f)
m_visitDist = 20.0f; m_visitDist = 200.0f;
}
else if (dir == WHEEL_DOWN)
{
m_visitDist += 8.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 //! Changes the camera according to the mouse moved
bool EventMouseMove(const Event &event); bool EventMouseMove(const Event &event);
//! Mouse wheel operation //! Mouse wheel operation
void EventMouseWheel(WheelDirection dir); void EventMouseWheel(int dir);
//! Changes the camera according to the time elapsed //! Changes the camera according to the time elapsed
bool EventFrame(const Event &event); bool EventFrame(const Event &event);
//! Moves the point of view //! Moves the point of view

View File

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

View File

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

View File

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

View File

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

View File

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