Fixed backspace handling on MacOS (fixed https://github.com/ocornut/imgui/issues/2817).

Allow null view passing as parameter to ImGui_ImplOSX_NewFrame
This commit is contained in:
Egor Yusov 2019-09-30 21:16:30 -07:00 committed by omar
parent bf746c4215
commit 378035c6ff
2 changed files with 8 additions and 5 deletions

View File

@ -13,5 +13,5 @@
IMGUI_API bool ImGui_ImplOSX_Init(); IMGUI_API bool ImGui_ImplOSX_Init();
IMGUI_API void ImGui_ImplOSX_Shutdown(); IMGUI_API void ImGui_ImplOSX_Shutdown();
IMGUI_API void ImGui_ImplOSX_NewFrame(NSView *_Nonnull view); IMGUI_API void ImGui_ImplOSX_NewFrame(NSView *_Nullable view);
IMGUI_API bool ImGui_ImplOSX_HandleEvent(NSEvent *_Nonnull event, NSView *_Nullable view); IMGUI_API bool ImGui_ImplOSX_HandleEvent(NSEvent *_Nonnull event, NSView *_Nullable view);

View File

@ -150,9 +150,12 @@ void ImGui_ImplOSX_NewFrame(NSView* view)
{ {
// Setup display size // Setup display size
ImGuiIO& io = ImGui::GetIO(); ImGuiIO& io = ImGui::GetIO();
const float dpi = [view.window backingScaleFactor]; if (view)
io.DisplaySize = ImVec2((float)view.bounds.size.width, (float)view.bounds.size.height); {
io.DisplayFramebufferScale = ImVec2(dpi, dpi); const float dpi = [view.window backingScaleFactor];
io.DisplaySize = ImVec2((float)view.bounds.size.width, (float)view.bounds.size.height);
io.DisplayFramebufferScale = ImVec2(dpi, dpi);
}
// Setup time step // Setup time step
if (g_Time == 0.0) if (g_Time == 0.0)
@ -250,7 +253,7 @@ bool ImGui_ImplOSX_HandleEvent(NSEvent* event, NSView* view)
for (int i = 0; i < len; i++) for (int i = 0; i < len; i++)
{ {
int c = [str characterAtIndex:i]; int c = [str characterAtIndex:i];
if (!io.KeyCtrl && !(c >= 0xF700 && c <= 0xFFFF)) if (!io.KeyCtrl && !((c >= 0xF700 && c <= 0xFFFF) || c == 127))
io.AddInputCharacter((unsigned int)c); io.AddInputCharacter((unsigned int)c);
// We must reset in case we're pressing a sequence of special keys while keeping the command pressed // We must reset in case we're pressing a sequence of special keys while keeping the command pressed