t.me/maj0rblog
-
Автор темы
- #1
Всем привет!
Сделал свои первые чекбоксы на ImGui
Хочу знать как вам
Превью :
Сделал свои первые чекбоксы на ImGui
Хочу знать как вам
C++:
bool ImGui::Checkbox(const char* label, bool* v)
{
ImGuiWindow* window = GetCurrentWindow();
if (window->SkipItems)
return false;
ImGuiContext& g = *GImGui;
const ImGuiStyle& style = g.Style;
const ImGuiID id = window->GetID(label);
const ImVec2 label_size = ImGui::CalcTextSize(label, NULL, true);
const float square_sz = ImGui::GetFrameHeight();
const ImVec2 pos = window->DC.CursorPos;
const ImRect total_bb(pos, pos + ImVec2(square_sz + (style.ItemInnerSpacing.x + label_size.x + 0), 0 + label_size.y + style.FramePadding.y * 2));
ItemSize(total_bb, style.FramePadding.y);
ItemAdd(total_bb, id);
bool hovered, held;
bool pressed = ButtonBehavior(total_bb, id, &hovered, &held);
if (hovered || held)
ImGui::SetMouseCursor(0);
if (pressed)
*v = !(*v);
if (*v)
{
window->DrawList->AddCircleFilled(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 10, ImColor(25, 25, 25, 255), 0);
window->DrawList->AddCircle(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 10, ImColor(62, 62, 62, 255), 0, 1.000000);
window->DrawList->AddCircleFilled(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 5, ImColor(cfg.menu.color.r(), cfg.menu.color.g(), cfg.menu.color.b(), 255), 0);
}
else
{
window->DrawList->AddCircleFilled(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 10, ImColor(25, 25, 25, 255), 0);
window->DrawList->AddCircle(ImVec2(total_bb.Min.x + 10, total_bb.Min.y + 10), 10, ImColor(62, 62, 62, 255), 0, 1.000000);
}
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(229 / 255.f, 229 / 255.f, 229 / 255.f, 255 / 255.f));
ImGui::RenderText(ImVec2(total_bb.Min.x + style.ItemInnerSpacing.x + 20, total_bb.Min.y + style.FramePadding.y + 0), label);
ImGui::PopStyleColor();
return pressed;
}