mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-28 09:30:56 +01:00
Split RenderText into RenderTextWrapped for internal uses
Different text functions with different features (usually orthogonal set of features)
This commit is contained in:
parent
b8cd080cdb
commit
cc340e0b81
46
imgui.cpp
46
imgui.cpp
@ -268,6 +268,7 @@
|
|||||||
- columns: user specify columns size
|
- columns: user specify columns size
|
||||||
- combo: turn child handling code into pop up helper
|
- combo: turn child handling code into pop up helper
|
||||||
- combo: layer conflict with other child windows
|
- combo: layer conflict with other child windows
|
||||||
|
- combo: contents should extends to fit label if combo widget is small
|
||||||
- list selection, concept of a selectable "block" (that can be multiple widgets)
|
- list selection, concept of a selectable "block" (that can be multiple widgets)
|
||||||
! menubar, menus
|
! menubar, menus
|
||||||
- tabs
|
- tabs
|
||||||
@ -403,7 +404,8 @@ struct ImGuiAabb;
|
|||||||
static bool ButtonBehaviour(const ImGuiAabb& bb, const ImGuiID& id, bool* out_hovered, bool* out_held, bool allow_key_modifiers, bool repeat = false);
|
static bool ButtonBehaviour(const ImGuiAabb& bb, const ImGuiID& id, bool* out_hovered, bool* out_held, bool allow_key_modifiers, bool repeat = false);
|
||||||
static void LogText(const ImVec2& ref_pos, const char* text, const char* text_end = NULL);
|
static void LogText(const ImVec2& ref_pos, const char* text, const char* text_end = NULL);
|
||||||
|
|
||||||
static void RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true, float wrap_width = 0.0f);
|
static void RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true);
|
||||||
|
static void RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width);
|
||||||
static void RenderTextClipped(ImVec2 pos, const char* text, const char* text_end, const ImVec2* text_size, const ImGuiAabb& clip_aabb);
|
static void RenderTextClipped(ImVec2 pos, const char* text, const char* text_end, const ImVec2* text_size, const ImGuiAabb& clip_aabb);
|
||||||
static void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f);
|
static void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f);
|
||||||
static void RenderCollapseTriangle(ImVec2 p_min, bool opened, float scale = 1.0f, bool shadow = false);
|
static void RenderCollapseTriangle(ImVec2 p_min, bool opened, float scale = 1.0f, bool shadow = false);
|
||||||
@ -2015,6 +2017,7 @@ void ImGui::LogText(const char* fmt, ...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Internal version that takes a position to decide on newline placement and pad items according to their depth.
|
// Internal version that takes a position to decide on newline placement and pad items according to their depth.
|
||||||
|
// We split text into individual lines to add current tree level padding
|
||||||
static void LogText(const ImVec2& ref_pos, const char* text, const char* text_end)
|
static void LogText(const ImVec2& ref_pos, const char* text, const char* text_end)
|
||||||
{
|
{
|
||||||
ImGuiState& g = *GImGui;
|
ImGuiState& g = *GImGui;
|
||||||
@ -2079,9 +2082,9 @@ static float CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x)
|
|||||||
return wrap_width;
|
return wrap_width;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Internal ImGui function to render text (called from ImGui::Text(), ImGui::TextUnformatted(), etc.)
|
// Internal ImGui functions to render text
|
||||||
// RenderText() calls ImDrawList::AddText() calls ImBitmapFont::RenderText()
|
// RenderText***() functions calls ImDrawList::AddText() calls ImBitmapFont::RenderText()
|
||||||
static void RenderText(ImVec2 pos, const char* text, const char* text_end, bool hide_text_after_hash, float wrap_width)
|
static void RenderText(ImVec2 pos, const char* text, const char* text_end, bool hide_text_after_hash)
|
||||||
{
|
{
|
||||||
ImGuiState& g = *GImGui;
|
ImGuiState& g = *GImGui;
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
@ -2103,15 +2106,35 @@ static void RenderText(ImVec2 pos, const char* text, const char* text_end, bool
|
|||||||
if (text_len > 0)
|
if (text_len > 0)
|
||||||
{
|
{
|
||||||
// Render
|
// Render
|
||||||
window->DrawList->AddText(window->Font(), window->FontSize(), pos, window->Color(ImGuiCol_Text), text, text_display_end, wrap_width);
|
window->DrawList->AddText(window->Font(), window->FontSize(), pos, window->Color(ImGuiCol_Text), text, text_display_end);
|
||||||
|
|
||||||
// Log as text. We split text into individual lines to add current tree level padding
|
// Log as text
|
||||||
if (g.LogEnabled)
|
if (g.LogEnabled)
|
||||||
LogText(pos, text, text_display_end);
|
LogText(pos, text, text_display_end);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RenderTextClipped(ImVec2 pos, const char* text, const char* text_end, const ImVec2* text_size_arg, const ImGuiAabb& clip_rect)
|
static void RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width)
|
||||||
|
{
|
||||||
|
ImGuiState& g = *GImGui;
|
||||||
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
|
|
||||||
|
if (!text_end)
|
||||||
|
text_end = text + strlen(text); // FIXME-OPT
|
||||||
|
|
||||||
|
const int text_len = (int)(text_end - text);
|
||||||
|
if (text_len > 0)
|
||||||
|
{
|
||||||
|
// Render
|
||||||
|
window->DrawList->AddText(window->Font(), window->FontSize(), pos, window->Color(ImGuiCol_Text), text, text_end, wrap_width);
|
||||||
|
|
||||||
|
// Log as text
|
||||||
|
if (g.LogEnabled)
|
||||||
|
LogText(pos, text, text_end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void RenderTextClipped(ImVec2 pos, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImGuiAabb& clip_rect)
|
||||||
{
|
{
|
||||||
ImGuiState& g = *GImGui;
|
ImGuiState& g = *GImGui;
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
@ -2121,7 +2144,7 @@ static void RenderTextClipped(ImVec2 pos, const char* text, const char* text_end
|
|||||||
const int text_len = (int)(text_display_end - text);
|
const int text_len = (int)(text_display_end - text);
|
||||||
if (text_len > 0)
|
if (text_len > 0)
|
||||||
{
|
{
|
||||||
const ImVec2 text_size = text_size_arg ? *text_size_arg : ImGui::CalcTextSize(text, text_display_end, false, 0.0f);
|
const ImVec2 text_size = text_size_if_known ? *text_size_if_known : ImGui::CalcTextSize(text, text_display_end, false, 0.0f);
|
||||||
|
|
||||||
// FIMXE-OPT: Perform software clipping at this point instead of pushing a clipping rectangle
|
// FIMXE-OPT: Perform software clipping at this point instead of pushing a clipping rectangle
|
||||||
const bool need_clipping = clip_rect.GetWidth() < text_size.x || clip_rect.GetHeight() < text_size.y;
|
const bool need_clipping = clip_rect.GetWidth() < text_size.x || clip_rect.GetHeight() < text_size.y;
|
||||||
@ -2134,7 +2157,7 @@ static void RenderTextClipped(ImVec2 pos, const char* text, const char* text_end
|
|||||||
if (need_clipping)
|
if (need_clipping)
|
||||||
PopClipRect();
|
PopClipRect();
|
||||||
|
|
||||||
// Log as text. We split text into individual lines to add current tree level padding
|
// Log as text
|
||||||
if (g.LogEnabled)
|
if (g.LogEnabled)
|
||||||
LogText(pos, text, text_display_end);
|
LogText(pos, text, text_display_end);
|
||||||
}
|
}
|
||||||
@ -3619,9 +3642,8 @@ void ImGui::TextUnformatted(const char* text, const char* text_end)
|
|||||||
if (!ItemAdd(bb, NULL))
|
if (!ItemAdd(bb, NULL))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Render
|
// Render (we don't hide text after ## in this end-user function)
|
||||||
// We don't hide text after ## in this end-user function.
|
RenderTextWrapped(bb.Min, text_begin, text_end, wrap_width);
|
||||||
RenderText(bb.Min, text_begin, text_end, false, wrap_width);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user