xo-reader2/xo-imgui/example/ex4/GenerationLayout.cpp

42 lines
1.4 KiB
C++

/* GenerationLayout.cpp */
#include "GenerationLayout.hpp"
GenerationLayout::GenerationLayout(const GcGenerationDescription & gendescr,
const ImRect & br,
bool with_labels)
: gendescr_{gendescr}, bounding_rect_{br}, with_labels_{with_labels}
{
this->text_dy_ = ImGui::CalcTextSize("SAMPLE TEXT").y;
if (with_labels_) {
snprintf(this->rh_text_.data(), rh_text_.capacity(),
"%s: %luk",
gendescr_.mnemonic_,
std::max(gendescr_.gc_threshold_, gendescr_.committed_) / 1024);
rh_text_.ensure_final_null();
auto textz = ImGui::CalcTextSize(rh_text_.c_str());
/* allow margin between rh edge of mem range and beginning of label */
this->rh_text_dx_ = 5 + textz.x;
} else {
this->rh_text_dx_ = 0.0;
}
if (with_labels_) {
this->chart_withlabel_rect_ = bounding_rect_.within_top_margin(text_dy_ + 2);
this->chart_nolabel_rect_ = chart_withlabel_rect_.within_right_margin(rh_text_dx_);
} else {
this->chart_withlabel_rect_ = bounding_rect_;
this->chart_nolabel_rect_ = bounding_rect_;
}
this->mem_rect_from_ = chart_nolabel_rect_.top_fraction(0.45);
this->mem_rect_to_ = chart_nolabel_rect_.bottom_fraction(0.45);
if (gendescr_.polarity_ == 1)
std::swap(this->mem_rect_from_, this->mem_rect_to_);
}
/* GenerationLayout.cpp */