Menu (ToggleButton)

Забаненный
Участник
Статус
Оффлайн
Регистрация
23 Сен 2019
Сообщения
1,021
Реакции[?]
190
Поинты[?]
0
У меня есть код
C++:
bool ImGui::ToggleButton(const char* label, bool* v, const ImVec2& size_arg)
{

    ImGuiWindow* window = ImGui::GetCurrentWindow();
    if (window->SkipItems)
        return false;

    int flags = 0;
    ImGuiContext& g = *GImGui;
    const ImGuiStyle& style = g.Style;
    const ImGuiID id = window->GetID(label);
    const ImVec2 label_size = ImGui::CalcTextSize(label, NULL, true);

    ImVec2 pos = window->DC.CursorPos;
    ImVec2 size = ImGui::CalcItemSize(size_arg, label_size.x + style.FramePadding.x * 2.0f, label_size.y + style.FramePadding.y * 2.0f);

    const ImRect bb(pos, pos + size);
    ImGui::ItemSize(bb, style.FramePadding.y);
    if (!ImGui::ItemAdd(bb, id))
        return false;

    if (window->DC.ItemFlags & ImGuiItemFlags_ButtonRepeat) flags |= ImGuiButtonFlags_Repeat;
    bool hovered, held;
    bool pressed = ImGui::ButtonBehavior(bb, id, &hovered, &held, flags);

    // Render
    const ImU32 col = ImGui::GetColorU32((hovered && held || *v) ? ImGuiCol_ButtonActive : (hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button));
    ImGui::RenderFrame(bb.Min, bb.Max, col, true, style.FrameRounding);
    ImGui::RenderTextClipped(bb.Min + style.FramePadding, bb.Max - style.FramePadding, label, NULL, &label_size, style.ButtonTextAlign, &bb);
    if (pressed)
        * v = !*v;

    return pressed;
}
ошибка заключается в том, что
const ImRect bb(pos, pos + size);
и
ImGui::RenderTextClipped(bb.Min + style.FramePadding, bb.Max - style.FramePadding, label, NULL, &label_size, style.ButtonTextAlign, &bb);
вызывают ошибку с знаками + и -
текст ошибки
1>E:\cheats\Xesa-Internal-master\Xesa-Internal\Menu.cpp(366,27): error C2676: бинарный "+": "ImVec2" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
1>E:\cheats\Xesa-Internal-master\Xesa-Internal\Menu.cpp(366,34): error C2664: "ImRect::ImRect(ImRect &&)": невозможно преобразовать аргумент 1 из "ImVec2" в "const ImVec4 &"
1>E:\cheats\Xesa-Internal-master\Xesa-Internal\Menu.cpp(366,34): message : Причина: невозможно преобразовать "ImVec2" в "const ImVec4"
1>E:\cheats\Xesa-Internal-master\Xesa-Internal\Menu.cpp(366,18): message : Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
1>E:\cheats\Xesa-Internal-master\Xesa-Internal\imgui\imgui_internal.h(488,5): message : см. объявление "ImRect::ImRect"
1>E:\cheats\Xesa-Internal-master\Xesa-Internal\Menu.cpp(378,34): error C2676: бинарный "+": "const ImVec2" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
1>E:\cheats\Xesa-Internal-master\Xesa-Internal\Menu.cpp(378,63): error C2676: бинарный "-": "const ImVec2" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
Похоже, что у тебя не работают операторы сложения и вычитания для ImVec2.
По умолчанию в ImGui они отключены для пользователя, а сам ImGui выставляет IMGUI_DEFINE_MATH_OPERATORS чтобы включать их.
Попробуй в Menu.cpp перед включением чего либо (в самом начале) выставить #define IMGUI_DEFINE_MATH_OPERATORS
 
Забаненный
Участник
Статус
Оффлайн
Регистрация
23 Сен 2019
Сообщения
1,021
Реакции[?]
190
Поинты[?]
0
Похоже, что у тебя не работают операторы сложения и вычитания для ImVec2.
По умолчанию в ImGui они отключены для пользователя, а сам ImGui выставляет IMGUI_DEFINE_MATH_OPERATORS чтобы включать их.
Попробуй в Menu.cpp перед включением чего либо (в самом начале) выставить #define IMGUI_DEFINE_MATH_OPERATORS
Спасибо
 
Похожие темы
Сверху Снизу