Imgui focus grabbing is now working
This commit is contained in:
parent
12df6e84f9
commit
4ea0189a36
@ -13,7 +13,7 @@
|
|||||||
Input::Input(sf::Window *w) :
|
Input::Input(sf::Window *w) :
|
||||||
m_window(w),
|
m_window(w),
|
||||||
m_closeRequested(false),
|
m_closeRequested(false),
|
||||||
m_imgui_requested_focus(false),
|
m_imgui_enabled(true),
|
||||||
m_mouseGrabbed(false),
|
m_mouseGrabbed(false),
|
||||||
m_mouseWasGrabbed(false)
|
m_mouseWasGrabbed(false)
|
||||||
{
|
{
|
||||||
@ -53,8 +53,7 @@ void Input::setKeysMap(IKeysMap km){
|
|||||||
void Input::updateEvents(){
|
void Input::updateEvents(){
|
||||||
sf::Event event;
|
sf::Event event;
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
KeyBindings kb;
|
KeyBindings kb;
|
||||||
char c;
|
|
||||||
|
|
||||||
/* reset variables */
|
/* reset variables */
|
||||||
m_closeRequested = false;
|
m_closeRequested = false;
|
||||||
@ -72,11 +71,10 @@ void Input::updateEvents(){
|
|||||||
m_actions.clear();
|
m_actions.clear();
|
||||||
|
|
||||||
Action action;
|
Action action;
|
||||||
bool focus_on_imgui = false;
|
|
||||||
if(m_imgui_requested_focus)
|
bool imguiEnabled = !m_mouseGrabbed && m_imgui_enabled;
|
||||||
focus_on_imgui = ImGui::IsWindowFocused(ImGuiFocusedFlags_AnyWindow);
|
bool keyboardEnabled = !(imguiEnabled && io.WantCaptureKeyboard);
|
||||||
if(focus_on_imgui)
|
bool mouseEnabled = !(imguiEnabled && io.WantCaptureMouse);
|
||||||
std::cout << "focused" << std::endl;
|
|
||||||
|
|
||||||
/* event-parsing loop */
|
/* event-parsing loop */
|
||||||
while(m_window->pollEvent(event))
|
while(m_window->pollEvent(event))
|
||||||
@ -96,76 +94,74 @@ void Input::updateEvents(){
|
|||||||
m_mouseGrabbed = m_mouseWasGrabbed;
|
m_mouseGrabbed = m_mouseWasGrabbed;
|
||||||
break;
|
break;
|
||||||
case sf::Event::TextEntered:
|
case sf::Event::TextEntered:
|
||||||
if (focus_on_imgui)
|
if(imguiEnabled)
|
||||||
io.AddInputCharacter(static_cast<ImWchar>(event.text.unicode));
|
io.AddInputCharacter(static_cast<ImWchar>(event.text.unicode));
|
||||||
else
|
if(keyboardEnabled)
|
||||||
sf::Utf32::encodeAnsi(event.text.unicode,std::back_inserter(m_buffer));
|
sf::Utf32::encodeAnsi(event.text.unicode,std::back_inserter(m_buffer));
|
||||||
break;
|
break;
|
||||||
case sf::Event::KeyPressed:
|
case sf::Event::KeyPressed:
|
||||||
if(focus_on_imgui)
|
if(imguiEnabled)
|
||||||
{
|
{
|
||||||
io.KeysDown[event.key.code] = true;
|
io.KeysDown[event.key.code] = true;
|
||||||
io.KeyCtrl = event.key.control;
|
io.KeyCtrl = event.key.control;
|
||||||
io.KeyShift = event.key.shift;
|
io.KeyShift = event.key.shift;
|
||||||
io.KeyAlt = event.key.alt;
|
io.KeyAlt = event.key.alt;
|
||||||
}
|
}
|
||||||
else
|
if(keyboardEnabled)
|
||||||
{
|
{
|
||||||
action = kb.getPressedAction(input::KEYBOARD,event.key.code);
|
action = kb.getPressedAction(input::KEYBOARD,event.key.code);
|
||||||
if(!action.isNull())
|
if(!action.isNull())
|
||||||
m_actions.push_back(action);
|
m_actions.push_back(action);
|
||||||
m_heldKeys.push_back(event.key.code);
|
|
||||||
}
|
}
|
||||||
|
m_heldKeys.push_back(event.key.code);
|
||||||
break;
|
break;
|
||||||
case sf::Event::KeyReleased:
|
case sf::Event::KeyReleased:
|
||||||
if (focus_on_imgui)
|
if(imguiEnabled)
|
||||||
{
|
{
|
||||||
io.KeysDown[event.key.code] = false;
|
io.KeysDown[event.key.code] = false;
|
||||||
io.KeyCtrl = event.key.control;
|
io.KeyCtrl = event.key.control;
|
||||||
io.KeyShift = event.key.shift;
|
io.KeyShift = event.key.shift;
|
||||||
io.KeyAlt = event.key.alt;
|
io.KeyAlt = event.key.alt;
|
||||||
}
|
}
|
||||||
else
|
if(keyboardEnabled)
|
||||||
{
|
{
|
||||||
action = kb.getReleasedAction(input::KEYBOARD,event.key.code);
|
action = kb.getReleasedAction(input::KEYBOARD,event.key.code);
|
||||||
if(!action.isNull())
|
if(!action.isNull())
|
||||||
m_actions.push_back(action);
|
m_actions.push_back(action);
|
||||||
releaseHeldKeys(event.key.code);
|
|
||||||
}
|
}
|
||||||
|
releaseHeldKeys(event.key.code);
|
||||||
break;
|
break;
|
||||||
case sf::Event::MouseWheelScrolled:
|
case sf::Event::MouseWheelScrolled:
|
||||||
if (!focus_on_imgui)
|
if(imguiEnabled)
|
||||||
|
io.MouseWheel += event.mouseWheelScroll.delta;
|
||||||
|
if(mouseEnabled)
|
||||||
{
|
{
|
||||||
if (event.mouseWheelScroll.wheel == sf::Mouse::VerticalWheel)
|
if (event.mouseWheelScroll.wheel == sf::Mouse::VerticalWheel)
|
||||||
m_delta_vertical_scroll = event.mouseWheelScroll.delta;
|
m_delta_vertical_scroll = event.mouseWheelScroll.delta;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
io.MouseWheel += event.mouseWheelScroll.delta;
|
|
||||||
break;
|
break;
|
||||||
case sf::Event::MouseButtonPressed:
|
case sf::Event::MouseButtonPressed:
|
||||||
if (!focus_on_imgui)
|
if(mouseEnabled)
|
||||||
{
|
{
|
||||||
action = kb.getPressedAction(input::MOUSE,event.mouseButton.button);
|
action = kb.getPressedAction(input::MOUSE,event.mouseButton.button);
|
||||||
if(!action.isNull())
|
if(!action.isNull())
|
||||||
m_actions.push_back(action);
|
m_actions.push_back(action);
|
||||||
m_heldMouseButtons.push_back(event.mouseButton.button);
|
|
||||||
}
|
}
|
||||||
|
m_heldMouseButtons.push_back(event.mouseButton.button);
|
||||||
break;
|
break;
|
||||||
case sf::Event::MouseButtonReleased:
|
case sf::Event::MouseButtonReleased:
|
||||||
if(!focus_on_imgui)
|
if(mouseEnabled)
|
||||||
{
|
{
|
||||||
action = kb.getReleasedAction(input::MOUSE,event.mouseButton.button);
|
action = kb.getReleasedAction(input::MOUSE,event.mouseButton.button);
|
||||||
if(!action.isNull())
|
if(!action.isNull())
|
||||||
m_actions.push_back(action);
|
m_actions.push_back(action);
|
||||||
releaseHeldMouseButton(event.mouseButton.button);
|
|
||||||
}
|
}
|
||||||
|
releaseHeldMouseButton(event.mouseButton.button);
|
||||||
break;
|
break;
|
||||||
case sf::Event::MouseMoved:
|
case sf::Event::MouseMoved:
|
||||||
m_mouse_position = sf::Mouse::getPosition(*m_window);
|
if(imguiEnabled)
|
||||||
if (focus_on_imgui)
|
|
||||||
{
|
|
||||||
io.MousePos = ImVec2(m_mouse_position.x, m_mouse_position.y);
|
io.MousePos = ImVec2(m_mouse_position.x, m_mouse_position.y);
|
||||||
}
|
m_mouse_position = sf::Mouse::getPosition(*m_window);
|
||||||
break;
|
break;
|
||||||
case sf::Event::MouseEntered:
|
case sf::Event::MouseEntered:
|
||||||
// action MouseEntered
|
// action MouseEntered
|
||||||
@ -203,16 +199,24 @@ void Input::updateEvents(){
|
|||||||
if(m_mouseGrabbed)
|
if(m_mouseGrabbed)
|
||||||
sf::Mouse::setPosition(m_last_mouse_position, *m_window);
|
sf::Mouse::setPosition(m_last_mouse_position, *m_window);
|
||||||
|
|
||||||
for (auto key: m_heldKeys)
|
if(keyboardEnabled)
|
||||||
m_actions.push_back(kb.getHoldAction(input::KEYBOARD,key));
|
{
|
||||||
|
for (auto key: m_heldKeys)
|
||||||
|
m_actions.push_back(kb.getHoldAction(input::KEYBOARD,key));
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
io.MouseDown[i] = false;
|
io.MouseDown[i] = false;
|
||||||
|
|
||||||
for (int button: m_heldMouseButtons)
|
if(imguiEnabled)
|
||||||
{
|
{
|
||||||
m_actions.push_back(kb.getHoldAction(input::MOUSE, button));
|
for (int button: m_heldMouseButtons)
|
||||||
io.MouseDown[button] = true;
|
io.MouseDown[button] = true;
|
||||||
|
}
|
||||||
|
if(mouseEnabled)
|
||||||
|
{
|
||||||
|
for (int button: m_heldMouseButtons)
|
||||||
|
m_actions.push_back(kb.getHoldAction(input::MOUSE, button));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto heldJoystickButton : m_heldJoystickButtons)
|
for (auto heldJoystickButton : m_heldJoystickButtons)
|
||||||
@ -259,12 +263,12 @@ bool Input::isResized() const
|
|||||||
return m_hasBeenResized;
|
return m_hasBeenResized;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Input::ImguiRequestFocus(){
|
void Input::enableImgui(){
|
||||||
m_imgui_requested_focus = true;
|
m_imgui_enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Input::ImguiReleaseFocus(){
|
void Input::disableImgui(){
|
||||||
m_imgui_requested_focus = false;
|
m_imgui_enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* keyboard-related functions */
|
/* keyboard-related functions */
|
||||||
|
@ -18,7 +18,7 @@ private:
|
|||||||
sf::Window* m_window;
|
sf::Window* m_window;
|
||||||
bool m_closeRequested;
|
bool m_closeRequested;
|
||||||
bool m_hasBeenResized;
|
bool m_hasBeenResized;
|
||||||
bool m_imgui_requested_focus;
|
bool m_imgui_enabled;
|
||||||
|
|
||||||
/* general action-mapping variables */
|
/* general action-mapping variables */
|
||||||
IKeysMap m_keysmap;
|
IKeysMap m_keysmap;
|
||||||
@ -70,8 +70,8 @@ public:
|
|||||||
/* window-related function */
|
/* window-related function */
|
||||||
bool isCloseRequested() const;
|
bool isCloseRequested() const;
|
||||||
bool isResized() const;
|
bool isResized() const;
|
||||||
void ImguiRequestFocus();
|
void enableImgui();
|
||||||
void ImguiReleaseFocus();
|
void disableImgui();
|
||||||
|
|
||||||
/* keyboard-related functions */
|
/* keyboard-related functions */
|
||||||
bool isKeyPressed(int key) const;
|
bool isKeyPressed(int key) const;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user