mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-28 00:39:02 +08:00
Platform IME: reworked internals to simplify adding new features.
This commit is contained in:
parent
3a90dc3893
commit
2706c9d66e
15
imgui.cpp
15
imgui.cpp
@ -4146,7 +4146,9 @@ void ImGui::NewFrame()
|
|||||||
|
|
||||||
g.MouseCursor = ImGuiMouseCursor_Arrow;
|
g.MouseCursor = ImGuiMouseCursor_Arrow;
|
||||||
g.WantCaptureMouseNextFrame = g.WantCaptureKeyboardNextFrame = g.WantTextInputNextFrame = -1;
|
g.WantCaptureMouseNextFrame = g.WantCaptureKeyboardNextFrame = g.WantTextInputNextFrame = -1;
|
||||||
g.PlatformImePos = ImVec2(1.0f, 1.0f); // OS Input Method Editor showing on top-left of our window by default
|
|
||||||
|
// Platform IME data: reset for the frame
|
||||||
|
g.PlatformImeDataPrev = g.PlatformImeData;
|
||||||
|
|
||||||
// Mouse wheel scrolling, scale
|
// Mouse wheel scrolling, scale
|
||||||
UpdateMouseWheel();
|
UpdateMouseWheel();
|
||||||
@ -4552,14 +4554,9 @@ void ImGui::EndFrame()
|
|||||||
|
|
||||||
ErrorCheckEndFrameSanityChecks();
|
ErrorCheckEndFrameSanityChecks();
|
||||||
|
|
||||||
// Notify OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME)
|
// Notify Platform/OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME)
|
||||||
if (g.IO.SetPlatformImeDataFn && (g.PlatformImeLastPos.x == FLT_MAX || ImLengthSqr(g.PlatformImeLastPos - g.PlatformImePos) > 0.0001f))
|
if (g.IO.SetPlatformImeDataFn && memcmp(&g.PlatformImeData, &g.PlatformImeDataPrev, sizeof(ImGuiPlatformImeData)) != 0)
|
||||||
{
|
g.IO.SetPlatformImeDataFn(GetMainViewport(), &g.PlatformImeData);
|
||||||
ImGuiPlatformImeData data;
|
|
||||||
data.InputPos = g.PlatformImePos;
|
|
||||||
g.IO.SetPlatformImeDataFn(GetMainViewport(), &data);
|
|
||||||
g.PlatformImeLastPos = g.PlatformImePos;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Hide implicit/fallback "Debug" window if it hasn't been used
|
// Hide implicit/fallback "Debug" window if it hasn't been used
|
||||||
g.WithinFrameScopeWithImplicitWindow = false;
|
g.WithinFrameScopeWithImplicitWindow = false;
|
||||||
|
@ -1705,8 +1705,8 @@ struct ImGuiContext
|
|||||||
ImVector<ImGuiID> MenusIdSubmittedThisFrame; // A list of menu IDs that were rendered at least once
|
ImVector<ImGuiID> MenusIdSubmittedThisFrame; // A list of menu IDs that were rendered at least once
|
||||||
|
|
||||||
// Platform support
|
// Platform support
|
||||||
ImVec2 PlatformImePos; // Cursor position request & last passed to the OS Input Method Editor
|
ImGuiPlatformImeData PlatformImeData; // Data updated by current frame
|
||||||
ImVec2 PlatformImeLastPos;
|
ImGuiPlatformImeData PlatformImeDataPrev; // Previous frame data (when changing we will call io.SetPlatformImeDataFn
|
||||||
char PlatformLocaleDecimalPoint; // '.' or *localeconv()->decimal_point
|
char PlatformLocaleDecimalPoint; // '.' or *localeconv()->decimal_point
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
@ -1870,7 +1870,8 @@ struct ImGuiContext
|
|||||||
TooltipOverrideCount = 0;
|
TooltipOverrideCount = 0;
|
||||||
TooltipSlowDelay = 0.50f;
|
TooltipSlowDelay = 0.50f;
|
||||||
|
|
||||||
PlatformImePos = PlatformImeLastPos = ImVec2(FLT_MAX, FLT_MAX);
|
PlatformImeData.InputPos = ImVec2(0.0f, 0.0f);
|
||||||
|
PlatformImeDataPrev.InputPos = ImVec2(-1.0f, -1.0f); // Different to ensure initial submission
|
||||||
PlatformLocaleDecimalPoint = '.';
|
PlatformLocaleDecimalPoint = '.';
|
||||||
|
|
||||||
SettingsLoaded = false;
|
SettingsLoaded = false;
|
||||||
|
@ -4760,7 +4760,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
|
|||||||
|
|
||||||
// Notify OS of text input position for advanced IME (-1 x offset so that Windows IME can cover our cursor. Bit of an extra nicety.)
|
// Notify OS of text input position for advanced IME (-1 x offset so that Windows IME can cover our cursor. Bit of an extra nicety.)
|
||||||
if (!is_readonly)
|
if (!is_readonly)
|
||||||
g.PlatformImePos = ImVec2(cursor_screen_pos.x - 1.0f, cursor_screen_pos.y - g.FontSize);
|
g.PlatformImeData.InputPos = ImVec2(cursor_screen_pos.x - 1.0f, cursor_screen_pos.y - g.FontSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user