|
@@ -1178,17 +1178,21 @@ ImGuiIO::ImGuiIO()
|
|
|
// - on Windows you can get those using ToAscii+keyboard state, or via the WM_CHAR message
|
|
|
void ImGuiIO::AddInputCharacter(unsigned int c)
|
|
|
{
|
|
|
- InputQueueCharacters.push_back(c > 0 && c <= IM_UNICODE_CODEPOINT_MAX ? (ImWchar)c : IM_UNICODE_CODEPOINT_INVALID);
|
|
|
+ if (c != 0)
|
|
|
+ InputQueueCharacters.push_back(c <= IM_UNICODE_CODEPOINT_MAX ? (ImWchar)c : IM_UNICODE_CODEPOINT_INVALID);
|
|
|
}
|
|
|
|
|
|
// UTF16 strings use surrogate pairs to encode codepoints >= 0x10000, so
|
|
|
// we should save the high surrogate.
|
|
|
void ImGuiIO::AddInputCharacterUTF16(ImWchar16 c)
|
|
|
{
|
|
|
+ if (c == 0 && InputQueueSurrogate == 0)
|
|
|
+ return;
|
|
|
+
|
|
|
if ((c & 0xFC00) == 0xD800) // High surrogate, must save
|
|
|
{
|
|
|
if (InputQueueSurrogate != 0)
|
|
|
- InputQueueCharacters.push_back(0xFFFD);
|
|
|
+ InputQueueCharacters.push_back(IM_UNICODE_CODEPOINT_INVALID);
|
|
|
InputQueueSurrogate = c;
|
|
|
return;
|
|
|
}
|
|
@@ -1213,7 +1217,7 @@ void ImGuiIO::AddInputCharactersUTF8(const char* utf8_chars)
|
|
|
{
|
|
|
unsigned int c = 0;
|
|
|
utf8_chars += ImTextCharFromUtf8(&c, utf8_chars, NULL);
|
|
|
- if (c > 0)
|
|
|
+ if (c != 0)
|
|
|
InputQueueCharacters.push_back((ImWchar)c);
|
|
|
}
|
|
|
}
|
|
@@ -5419,6 +5423,21 @@ static const ImGuiResizeGripDef resize_grip_def[4] =
|
|
|
{ ImVec2(1,0), ImVec2(-1,+1), 9,12 }, // Upper-right (Unused)
|
|
|
};
|
|
|
|
|
|
+struct ImGuiResizeBorderDef
|
|
|
+{
|
|
|
+ ImVec2 InnerDir;
|
|
|
+ ImVec2 CornerPosN1, CornerPosN2;
|
|
|
+ float OuterAngle;
|
|
|
+};
|
|
|
+
|
|
|
+static const ImGuiResizeBorderDef resize_border_def[4] =
|
|
|
+{
|
|
|
+ { ImVec2(0,+1), ImVec2(0,0), ImVec2(1,0), IM_PI*1.50f }, // Top
|
|
|
+ { ImVec2(-1,0), ImVec2(1,0), ImVec2(1,1), IM_PI*0.00f }, // Right
|
|
|
+ { ImVec2(0,-1), ImVec2(1,1), ImVec2(0,1), IM_PI*0.50f }, // Bottom
|
|
|
+ { ImVec2(+1,0), ImVec2(0,1), ImVec2(0,0), IM_PI*1.00f } // Left
|
|
|
+};
|
|
|
+
|
|
|
static ImRect GetResizeBorderRect(ImGuiWindow* window, int border_n, float perp_padding, float thickness)
|
|
|
{
|
|
|
ImRect rect = window->Rect();
|
|
@@ -5595,19 +5614,6 @@ static void ImGui::RenderWindowOuterBorders(ImGuiWindow* window)
|
|
|
int border_held = window->ResizeBorderHeld;
|
|
|
if (border_held != -1)
|
|
|
{
|
|
|
- struct ImGuiResizeBorderDef
|
|
|
- {
|
|
|
- ImVec2 InnerDir;
|
|
|
- ImVec2 CornerPosN1, CornerPosN2;
|
|
|
- float OuterAngle;
|
|
|
- };
|
|
|
- static const ImGuiResizeBorderDef resize_border_def[4] =
|
|
|
- {
|
|
|
- { ImVec2(0,+1), ImVec2(0,0), ImVec2(1,0), IM_PI*1.50f }, // Top
|
|
|
- { ImVec2(-1,0), ImVec2(1,0), ImVec2(1,1), IM_PI*0.00f }, // Right
|
|
|
- { ImVec2(0,-1), ImVec2(1,1), ImVec2(0,1), IM_PI*0.50f }, // Bottom
|
|
|
- { ImVec2(+1,0), ImVec2(0,1), ImVec2(0,0), IM_PI*1.00f } // Left
|
|
|
- };
|
|
|
const ImGuiResizeBorderDef& def = resize_border_def[border_held];
|
|
|
ImRect border_r = GetResizeBorderRect(window, border_held, rounding, 0.0f);
|
|
|
window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.CornerPosN1) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle - IM_PI*0.25f, def.OuterAngle);
|
|
@@ -15302,8 +15308,8 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
|
// Debugging enums
|
|
|
enum { WRT_OuterRect, WRT_OuterRectClipped, WRT_InnerRect, WRT_InnerClipRect, WRT_WorkRect, WRT_Content, WRT_ContentRegionRect, WRT_Count }; // Windows Rect Type
|
|
|
const char* wrt_rects_names[WRT_Count] = { "OuterRect", "OuterRectClipped", "InnerRect", "InnerClipRect", "WorkRect", "Content", "ContentRegionRect" };
|
|
|
- enum { TRT_OuterRect, TRT_WorkRect, TRT_HostClipRect, TRT_InnerClipRect, TRT_BackgroundClipRect, TRT_ColumnsRect, TRT_ColumnsClipRect, TRT_ColumnsContentHeadersUsed, TRT_ColumnsContentHeadersDesired, TRT_ColumnsContentRowsFrozen, TRT_ColumnsContentRowsUnfrozen, TRT_Count }; // Tables Rect Type
|
|
|
- const char* trt_rects_names[TRT_Count] = { "OuterRect", "WorkRect", "HostClipRect", "InnerClipRect", "BackgroundClipRect", "ColumnsRect", "ColumnsClipRect", "ColumnsContentHeadersUsed", "ColumnsContentHeadersDesired", "ColumnsContentRowsFrozen", "ColumnsContentRowsUnfrozen" };
|
|
|
+ enum { TRT_OuterRect, TRT_WorkRect, TRT_HostClipRect, TRT_InnerClipRect, TRT_BackgroundClipRect, TRT_ColumnsRect, TRT_ColumnsClipRect, TRT_ColumnsContentHeadersUsed, TRT_ColumnsContentHeadersIdeal, TRT_ColumnsContentRowsFrozen, TRT_ColumnsContentRowsUnfrozen, TRT_Count }; // Tables Rect Type
|
|
|
+ const char* trt_rects_names[TRT_Count] = { "OuterRect", "WorkRect", "HostClipRect", "InnerClipRect", "BackgroundClipRect", "ColumnsRect", "ColumnsClipRect", "ColumnsContentHeadersUsed", "ColumnsContentHeadersIdeal", "ColumnsContentRowsFrozen", "ColumnsContentRowsUnfrozen" };
|
|
|
|
|
|
// State
|
|
|
static bool show_windows_rects = false;
|
|
@@ -15658,7 +15664,6 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-
|
|
|
// Tools
|
|
|
if (ImGui::TreeNode("Tools"))
|
|
|
{
|
|
@@ -15747,7 +15752,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
|
Funcs::NodeTable(g.Tables.GetByIndex(n));
|
|
|
ImGui::TreePop();
|
|
|
}
|
|
|
-#endif // #define IMGUI_HAS_TABLE
|
|
|
+#endif // #ifdef IMGUI_HAS_TABLE
|
|
|
|
|
|
// Details for Docking
|
|
|
#ifdef IMGUI_HAS_DOCK
|
|
@@ -15764,7 +15769,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
|
Funcs::NodeDockNode(node, "Node");
|
|
|
ImGui::TreePop();
|
|
|
}
|
|
|
-#endif // #define IMGUI_HAS_DOCK
|
|
|
+#endif // #ifdef IMGUI_HAS_DOCK
|
|
|
|
|
|
// Settings
|
|
|
if (ImGui::TreeNode("Settings"))
|
|
@@ -15803,7 +15808,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
|
Funcs::NodeTableSettings(settings);
|
|
|
ImGui::TreePop();
|
|
|
}
|
|
|
-#endif
|
|
|
+#endif // #ifdef IMGUI_HAS_TABLE
|
|
|
|
|
|
#ifdef IMGUI_HAS_DOCK
|
|
|
if (ImGui::TreeNode("SettingsDocking", "Settings packed data: Docking"))
|
|
@@ -15829,7 +15834,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
|
}
|
|
|
ImGui::TreePop();
|
|
|
}
|
|
|
-#endif
|
|
|
+#endif // #ifdef IMGUI_HAS_DOCK
|
|
|
|
|
|
if (ImGui::TreeNode("SettingsIniData", "Settings unpacked data (.ini): %d bytes", g.SettingsIniData.size()))
|
|
|
{
|
|
@@ -15897,7 +15902,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
|
ImGuiTable* table = g.Tables.GetByIndex(table_n);
|
|
|
}
|
|
|
}
|
|
|
-#endif // #define IMGUI_HAS_TABLE
|
|
|
+#endif // #ifdef IMGUI_HAS_TABLE
|
|
|
|
|
|
#ifdef IMGUI_HAS_DOCK
|
|
|
// Overlay: Display Docking info
|
|
@@ -15925,7 +15930,7 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
|
overlay_draw_list->AddText(NULL, 0.0f, pos, IM_COL32(255, 255, 255, 255), buf);
|
|
|
}
|
|
|
}
|
|
|
-#endif // #define IMGUI_HAS_DOCK
|
|
|
+#endif // #ifdef IMGUI_HAS_DOCK
|
|
|
|
|
|
ImGui::End();
|
|
|
}
|