21 namespace visualization {
54 impl_->is_single_line = !(impl_->text_.find(
'\n') != std::string::npos);
67 ImGui::PushFont((ImFont*)
context.fonts.GetFont(impl_->font_id_));
69 auto padding = ImGui::GetStyle().FramePadding;
70 auto* font = ImGui::GetFont();
73 if (impl_->is_single_line) {
74 float wrap_width = float(constraints.
width);
76 font->CalcTextSizeA(font->FontSize,
float(constraints.
width),
77 wrap_width, impl_->text_.c_str());
82 size_t line_start = 0;
83 auto line_end = impl_->text_.find(
'\n');
84 auto em = int(std::round(font->FontSize));
85 float wrap_width = float(
87 float spacing = ImGui::GetTextLineHeightWithSpacing() -
88 ImGui::GetTextLineHeight();
91 if (line_end == std::string::npos) {
92 sz = font->CalcTextSizeA(font->FontSize, FLT_MAX, wrap_width,
93 impl_->text_.c_str() + line_start);
94 line_start = line_end;
96 sz = font->CalcTextSizeA(font->FontSize, FLT_MAX, wrap_width,
97 impl_->text_.c_str() + line_start,
98 impl_->text_.c_str() + line_end);
99 line_start = line_end + 1;
100 line_end = impl_->text_.find(
'\n', line_start);
103 size.y += sz.y + spacing;
104 }
while (line_start != std::string::npos);
117 ImGui::SetCursorScreenPos(
118 ImVec2(
float(
frame.x),
float(
frame.y) - ImGui::GetScrollY()));
119 ImGui::PushItemWidth(
float(
frame.width));
121 if (!is_default_color) {
122 ImGui::PushStyleColor(ImGuiCol_Text,
colorToImgui(impl_->color_));
124 ImGui::PushFont((ImFont*)
context.fonts.GetFont(impl_->font_id_));
126 auto padding = ImGui::GetStyle().FramePadding;
127 float wrapX = ImGui::GetCursorPos().x +
frame.width - padding.x;
128 ImGui::PushTextWrapPos(wrapX);
129 ImGui::TextWrapped(
"%s", impl_->text_.c_str());
130 ImGui::PopTextWrapPos();
133 if (!is_default_color) {
134 ImGui::PopStyleColor();
136 ImGui::PopItemWidth();
static constexpr FontId DEFAULT_FONT_ID
Identifier for font used by default for all UI elements.
const char * GetText() const
void SetText(const char *text)
Sets the text of the label (copies text)
void SetTextColor(const Color &color)
DrawResult Draw(const DrawContext &context) override
Color GetTextColor() const
Label(const char *text=nullptr)
Copies text.
Size CalcPreferredSize(const LayoutContext &context, const Constraints &constraints) const override
void SetFontId(const FontId font_id)
MiniVec< float, N > ceil(const MiniVec< float, N > &a)
static const int PREFERRED_WRAP_WIDTH_EM
static const Color DEFAULT_COLOR(0, 0, 0, 0)
ImVec4 colorToImgui(const Color &color)
Generic file read and write utility for python interface.