| @@ -170,10 +170,12 @@ void NaClInstance::DrawSelf() | |||||
| void NaClInputData::Tick(float seconds) | void NaClInputData::Tick(float seconds) | ||||
| { | { | ||||
| UNUSED(seconds); | UNUSED(seconds); | ||||
| if (!IsViewportSizeValid()) | |||||
| InitViewportSize(); | |||||
| //Init cursor position, if mouse didn't move. | //Init cursor position, if mouse didn't move. | ||||
| ivec2 mousepos = m_mouse->GetCursorPixelPos(0); | ivec2 mousepos = m_mouse->GetCursorPixelPos(0); | ||||
| vec2 mousepos_prev = vec2(mousepos); | vec2 mousepos_prev = vec2(mousepos); | ||||
| /* Handle keyboard and WM events */ | /* Handle keyboard and WM events */ | ||||
| for (int i = 0; i < m_input_events.Count(); ++i) | for (int i = 0; i < m_input_events.Count(); ++i) | ||||
| { | { | ||||
| @@ -184,14 +186,15 @@ void NaClInputData::Tick(float seconds) | |||||
| case PP_INPUTEVENT_TYPE_MOUSEUP: | case PP_INPUTEVENT_TYPE_MOUSEUP: | ||||
| { | { | ||||
| pp::MouseInputEvent em = pp::MouseInputEvent(e); | pp::MouseInputEvent em = pp::MouseInputEvent(e); | ||||
| m_mouse->SetKey(em.GetButton() - 1, em.GetType() == PP_INPUTEVENT_TYPE_MOUSEDOWN); | |||||
| //Debug::DrawBox(vec3(-1.f), vec3(1.f), vec4(1.f, 0.f, 0.f, 1.f)) | |||||
| //Show probably do a switch. | |||||
| if (em.GetButton() != PP_INPUTEVENT_MOUSEBUTTON_NONE) | |||||
| m_mouse->SetKey(em.GetButton(), em.GetType() == PP_INPUTEVENT_TYPE_MOUSEDOWN); | |||||
| break; | break; | ||||
| } | } | ||||
| case PP_INPUTEVENT_TYPE_MOUSELEAVE: | case PP_INPUTEVENT_TYPE_MOUSELEAVE: | ||||
| case PP_INPUTEVENT_TYPE_MOUSEENTER: | case PP_INPUTEVENT_TYPE_MOUSEENTER: | ||||
| { | { | ||||
| /* TODO: "InScreen" hardcoded, not nice */ | |||||
| /* TODO: "InScreen" idx hardcoded, not nice */ | |||||
| pp::MouseInputEvent em = pp::MouseInputEvent(e); | pp::MouseInputEvent em = pp::MouseInputEvent(e); | ||||
| m_mouse->SetKey(3, em.GetType() == PP_INPUTEVENT_TYPE_MOUSELEAVE); | m_mouse->SetKey(3, em.GetType() == PP_INPUTEVENT_TYPE_MOUSELEAVE); | ||||
| break; | break; | ||||
| @@ -224,18 +227,21 @@ void NaClInputData::Tick(float seconds) | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| m_input_events.Empty(); | |||||
| /* Handle mouse input */ | /* Handle mouse input */ | ||||
| if (IsViewportSizeValid()) | if (IsViewportSizeValid()) | ||||
| { | { | ||||
| if (mousepos.x >= 0 && mousepos.x < m_app.x && mousepos.y >= 0 && mousepos.y < m_app.y) | if (mousepos.x >= 0 && mousepos.x < m_app.x && mousepos.y >= 0 && mousepos.y < m_app.y) | ||||
| { | { | ||||
| //We need the max if we want coherent mouse speed between axis | |||||
| float max_screen_size = lol::max(m_screen.x, m_screen.y); | |||||
| vec2 vmousepos = vec2(mousepos); | vec2 vmousepos = vec2(mousepos); | ||||
| m_mouse->SetCursor(0, vmousepos / m_app, mousepos); | m_mouse->SetCursor(0, vmousepos / m_app, mousepos); | ||||
| // Note: 100.0f is an arbitrary value that makes it feel about the same than an xbox controller joystick | // Note: 100.0f is an arbitrary value that makes it feel about the same than an xbox controller joystick | ||||
| m_mouse->SetAxis(0, (vmousepos.x - mousepos_prev.x) * 100.0f / m_screen.x); | |||||
| // Y Axis is also negated to match the usual joystick Y axis (negatives values are for the upper direction) | |||||
| m_mouse->SetAxis(1,-(vmousepos.y - mousepos_prev.y) * 100.0f / m_screen.y); | |||||
| m_mouse->SetAxis(0, (vmousepos.x - mousepos_prev.x) * 100.0f / max_screen_size); | |||||
| // Unlike SDL, no need to negate Y axis. | |||||
| m_mouse->SetAxis(1, (vmousepos.y - mousepos_prev.y) * 100.0f / max_screen_size); | |||||
| } | } | ||||
| if (m_mousecapture) | if (m_mousecapture) | ||||