19 namespace visualization {
23 static int g_next_button_id = 1;
38 impl_->id_ = std::string(
"##button") +
std::to_string(g_next_button_id++);
39 impl_->title_ = title;
43 impl_->image_ =
image;
53 return impl_->padding_horizontal_em_;
57 return impl_->padding_vertical_em_;
61 impl_->padding_horizontal_em_ = horiz_ems;
62 impl_->padding_vertical_em_ = vert_ems;
72 if (impl_->is_toggleable_) {
73 impl_->is_on_ = is_on;
78 impl_->on_clicked_ = on_clicked;
83 auto em = float(
context.theme.font_size);
84 auto padding_horiz = int(
std::ceil(impl_->padding_horizontal_em_ * em));
85 auto padding_vert = int(
std::ceil(impl_->padding_vertical_em_ * em));
87 auto size = impl_->image_->CalcPreferredSize(
context, constraints);
88 return Size(
size.width + 2 * padding_horiz,
89 size.height + 2 * padding_vert);
91 auto font = ImGui::GetFont();
92 auto imguiVertPadding = ImGui::GetTextLineHeightWithSpacing() -
93 ImGui::GetTextLineHeight();
94 auto size = font->CalcTextSizeA(
float(
context.theme.font_size),
95 float(constraints.
width), 10000,
96 impl_->title_.c_str());
110 int(
std::ceil(ImGui::GetTextLineHeight() + imguiVertPadding)) +
119 ImGui::SetCursorScreenPos(
120 ImVec2(
float(
frame.x),
float(
frame.y) - ImGui::GetScrollY()));
122 bool was_on = impl_->is_on_;
124 ImGui::PushStyleColor(ImGuiCol_Text,
126 ImGui::PushStyleColor(ImGuiCol_Button,
128 ImGui::PushStyleColor(
129 ImGuiCol_ButtonHovered,
131 ImGui::PushStyleColor(
132 ImGuiCol_ButtonActive,
136 bool pressed =
false;
139 ImTextureID image_id =
140 reinterpret_cast<ImTextureID
>(
params.texture.GetId());
141 pressed = ImGui::ImageButton(
145 pressed = ImGui::Button(
146 (impl_->title_ + impl_->id_).c_str(),
150 if (impl_->is_toggleable_) {
151 impl_->is_on_ = !impl_->is_on_;
153 if (impl_->on_clicked_) {
154 impl_->on_clicked_();
161 ImGui::PopStyleColor(4);
std::shared_ptr< core::Tensor > image
cmdLineReadable * params[]
MiniVec< float, N > ceil(const MiniVec< float, N > &a)
ImVec4 colorToImgui(const Color &color)
Generic file read and write utility for python interface.
std::string to_string(const T &n)