|
|
|
@ -101,24 +101,46 @@ static void ImGui_ImplSdl_SetClipboardText(const char* text) |
|
|
|
|
SDL_SetClipboardText(text); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ImGui_ImplSdl_KeyCallback(int key, bool down) |
|
|
|
|
bool ImGui_ImplSdl_EventCallback(const SDL_Event& event) |
|
|
|
|
{ |
|
|
|
|
ImGuiIO& io = ImGui::GetIO(); |
|
|
|
|
if (down) |
|
|
|
|
io.KeysDown[key] = true; |
|
|
|
|
else |
|
|
|
|
io.KeysDown[key] = false; |
|
|
|
|
|
|
|
|
|
io.KeyShift = ((SDL_GetModState() & KMOD_SHIFT) != 0); |
|
|
|
|
io.KeyCtrl = ((SDL_GetModState() & KMOD_CTRL) != 0); |
|
|
|
|
io.KeyAlt = ((SDL_GetModState() & KMOD_ALT) != 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ImGui_ImplSdl_CharCallback(unsigned int c) |
|
|
|
|
{ |
|
|
|
|
ImGuiIO& io = ImGui::GetIO(); |
|
|
|
|
if (c > 0 && c < 0x10000) |
|
|
|
|
io.AddInputCharacter((unsigned short)c); |
|
|
|
|
switch (event.type) |
|
|
|
|
{ |
|
|
|
|
case SDL_MOUSEWHEEL: |
|
|
|
|
{ |
|
|
|
|
if (event.wheel.y > 0) |
|
|
|
|
g_MouseWheel = 1; |
|
|
|
|
if (event.wheel.y < 0) |
|
|
|
|
g_MouseWheel = -1; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
case SDL_MOUSEBUTTONDOWN: |
|
|
|
|
{ |
|
|
|
|
if (event.button.button == SDL_BUTTON_LEFT) g_MousePressed[0] = true; |
|
|
|
|
if (event.button.button == SDL_BUTTON_RIGHT) g_MousePressed[1] = true; |
|
|
|
|
if (event.button.button == SDL_BUTTON_MIDDLE) g_MousePressed[2] = true; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
case SDL_TEXTINPUT: |
|
|
|
|
{ |
|
|
|
|
ImGuiIO& io = ImGui::GetIO(); |
|
|
|
|
unsigned int c = event.text.text[0]; |
|
|
|
|
if (c > 0 && c < 0x10000) |
|
|
|
|
io.AddInputCharacter((unsigned short)c); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
case SDL_KEYDOWN: |
|
|
|
|
case SDL_KEYUP: |
|
|
|
|
{ |
|
|
|
|
int key = event.key.keysym.sym & ~SDLK_SCANCODE_MASK; |
|
|
|
|
io.KeysDown[key] = (event.type == SDL_KEYDOWN); |
|
|
|
|
io.KeyShift = ((SDL_GetModState() & KMOD_SHIFT) != 0); |
|
|
|
|
io.KeyCtrl = ((SDL_GetModState() & KMOD_CTRL) != 0); |
|
|
|
|
io.KeyAlt = ((SDL_GetModState() & KMOD_ALT) != 0); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool ImGui_ImplSdl_CreateDeviceObjects() |
|
|
|
@ -164,6 +186,8 @@ bool ImGui_ImplSdl_Init(SDL_Window *window) |
|
|
|
|
io.KeyMap[ImGuiKey_RightArrow] = SDL_SCANCODE_RIGHT; |
|
|
|
|
io.KeyMap[ImGuiKey_UpArrow] = SDL_SCANCODE_UP; |
|
|
|
|
io.KeyMap[ImGuiKey_DownArrow] = SDL_SCANCODE_DOWN; |
|
|
|
|
io.KeyMap[ImGuiKey_PageUp] = SDL_SCANCODE_PAGEUP; |
|
|
|
|
io.KeyMap[ImGuiKey_PageDown] = SDL_SCANCODE_PAGEDOWN; |
|
|
|
|
io.KeyMap[ImGuiKey_Home] = SDL_SCANCODE_HOME; |
|
|
|
|
io.KeyMap[ImGuiKey_End] = SDL_SCANCODE_END; |
|
|
|
|
io.KeyMap[ImGuiKey_Delete] = SDLK_DELETE; |
|
|
|
@ -197,47 +221,13 @@ void ImGui_ImplSdl_Shutdown() |
|
|
|
|
ImGui::Shutdown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool ImGui_ImplSdl_NewFrame(SDL_Window *window) |
|
|
|
|
void ImGui_ImplSdl_NewFrame(SDL_Window *window) |
|
|
|
|
{ |
|
|
|
|
if (!g_FontTexture) |
|
|
|
|
ImGui_ImplSdl_CreateDeviceObjects(); |
|
|
|
|
|
|
|
|
|
ImGuiIO& io = ImGui::GetIO(); |
|
|
|
|
|
|
|
|
|
bool done = false; |
|
|
|
|
SDL_Event event; |
|
|
|
|
while (SDL_PollEvent(&event)) |
|
|
|
|
{ |
|
|
|
|
switch (event.type) |
|
|
|
|
{ |
|
|
|
|
case SDL_QUIT: |
|
|
|
|
done = true; |
|
|
|
|
break; |
|
|
|
|
case SDL_MOUSEWHEEL: |
|
|
|
|
if (event.wheel.y > 0) |
|
|
|
|
g_MouseWheel = 1; |
|
|
|
|
if (event.wheel.y < 0) |
|
|
|
|
g_MouseWheel = -1; |
|
|
|
|
break; |
|
|
|
|
case SDL_MOUSEBUTTONDOWN: |
|
|
|
|
if (event.button.button == SDL_BUTTON_LEFT) g_MousePressed[0] = true; |
|
|
|
|
if (event.button.button == SDL_BUTTON_RIGHT) g_MousePressed[1] = true; |
|
|
|
|
if (event.button.button == SDL_BUTTON_MIDDLE) g_MousePressed[2] = true; |
|
|
|
|
break; |
|
|
|
|
case SDL_TEXTINPUT: |
|
|
|
|
ImGui_ImplSdl_CharCallback(event.text.text[0]); |
|
|
|
|
break; |
|
|
|
|
case SDL_KEYUP: |
|
|
|
|
ImGui_ImplSdl_KeyCallback(event.key.keysym.sym&~SDLK_SCANCODE_MASK, false); |
|
|
|
|
break; |
|
|
|
|
case SDL_KEYDOWN: |
|
|
|
|
ImGui_ImplSdl_KeyCallback(event.key.keysym.sym&~SDLK_SCANCODE_MASK, true); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Setup display size (every frame to accommodate for window resizing)
|
|
|
|
|
int w, h; |
|
|
|
|
SDL_GetWindowSize(window, &w, &h); |
|
|
|
@ -273,5 +263,4 @@ bool ImGui_ImplSdl_NewFrame(SDL_Window *window) |
|
|
|
|
|
|
|
|
|
// Start the frame
|
|
|
|
|
ImGui::NewFrame(); |
|
|
|
|
return done; |
|
|
|
|
} |
|
|
|
|