Розыгрыш Premium и Уникальной юзергруппы на форуме! Перейти


  • УЖЕ ЗАВТРА! Просто зашёл, нажал на кнопку участия и забрал кучу призов уже 30-го декабря: https://yougame.biz/threads/366947/

Вопрос Проблема старого ImGui

  • Автор темы Автор темы A'Kon
  • Дата начала Дата начала
ROAD TO THE LEGEND
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
7 Фев 2018
Сообщения
2,223
Реакции
714
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Собственно, решил я имгуи не обновлять и пожалел об этом. Имгуи у меня годовой давности, проблема в том, что тут не пофикшен баг с child window. То есть - нельзя грабнуть child и двигать сразу весь window, так вот. Прошу знающих помочь в этой ситуации, ибо я очень заебался что нельзя двигать за child
(Обновить возможности ImGui нет, т.к оно частично переделанное, а терять это не хочется)
Мой код :

Код:
Expand Collapse Copy
static bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags)
{
    ImGuiWindow* window = ImGui::GetCurrentWindow();
    ImGuiWindowFlags flags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_ChildWindow;
    ImGuiContext& g = *GImGui;
    ImGuiWindow* parent_window = g.CurrentWindow;
    const ImVec2 content_avail = ImGui::GetContentRegionAvail();
    ImVec2 size = ImFloor(size_arg);
    if (size.x <= 0.0f)
    {
        if (size.x == 0.0f)
            flags |= ImGuiWindowFlags_ChildWindowAutoFitX;
        size.x = ImMax(content_avail.x, 4.0f) - fabsf(size.x); // Arbitrary minimum zero-ish child size of 4.0f (0.0f causing too much issues)
    }
    if (size.y <= 0.0f)
    {
        if (size.y == 0.0f)
            flags |= ImGuiWindowFlags_ChildWindowAutoFitY;
        size.y = ImMax(content_avail.y, 4.0f) - fabsf(size.y);
    }
    if (border)
        flags |= ImGuiWindowFlags_ShowBorders;
    flags |= extra_flags;

    char title[256];
    if (name)
        ImFormatString(title, IM_ARRAYSIZE(title), "%s.%s.%08X", window->Name, name, id);
    else
        ImFormatString(title, IM_ARRAYSIZE(title), "%s.%08X", window->Name, id);

    bool ret = ImGui::Begin(title, NULL, size, -1.0f, flags);

    ImGuiWindow* child_window = g.CurrentWindow;
   


    if (!(window->Flags & ImGuiWindowFlags_ShowBorders))
        ImGui::GetCurrentWindow()->Flags &= ~ImGuiWindowFlags_ShowBorders;

    return ret;
}

Также я пытался :

Код:
Expand Collapse Copy
static bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags)
{
    ImGuiWindow* window = ImGui::GetCurrentWindow();
    ImGuiWindowFlags flags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_ChildWindow;
    ImGuiContext& g = *GImGui;
    ImGuiWindow* parent_window = g.CurrentWindow;
    const ImVec2 content_avail = ImGui::GetContentRegionAvail();
    ImVec2 size = ImFloor(size_arg);
    if (size.x <= 0.0f)
    {
        if (size.x == 0.0f)
            flags |= ImGuiWindowFlags_ChildWindowAutoFitX;
        size.x = ImMax(content_avail.x, 4.0f) - fabsf(size.x); // Arbitrary minimum zero-ish child size of 4.0f (0.0f causing too much issues)
    }
    if (size.y <= 0.0f)
    {
        if (size.y == 0.0f)
            flags |= ImGuiWindowFlags_ChildWindowAutoFitY;
        size.y = ImMax(content_avail.y, 4.0f) - fabsf(size.y);
    }
    if (border)
        flags |= ImGuiWindowFlags_ShowBorders;
    flags |= extra_flags;

    char title[256];
    if (name)
        ImFormatString(title, IM_ARRAYSIZE(title), "%s.%s.%08X", window->Name, name, id);
    else
        ImFormatString(title, IM_ARRAYSIZE(title), "%s.%08X", window->Name, id);

    bool ret = ImGui::Begin(title, NULL, size, -1.0f, flags);

    ImGuiWindow* child_window = g.CurrentWindow;
   


    if (!(window->Flags & ImGuiWindowFlags_ShowBorders))
        ImGui::GetCurrentWindow()->Flags &= ~ImGuiWindowFlags_ShowBorders;

    if (child_window->BeginCount == 1)
        parent_window->DC.CursorPos = child_window->Pos;
    if (g.ActiveId == id)
    {
        ImGui::FocusWindow(child_window);
        //NavInitWindow(child_window, false);
        ImGui::SetActiveID(id + 1, child_window); // Steal ActiveId with a dummy id so that key-press won't activate child item
        g.ActiveIdSource = ImGuiInputSource_Nav;
    }
    return ret;

}
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Но это же не баг:Jebaited:
Мне наоборот не нравится, что в софтах можно двигать меню хоть с середины
Проблема в том что я юзаю прозрачность window на нуле, из-за чего многие пытаются мувнуть child и говорят далее что меню не двигается
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Но это же не баг:Jebaited:
Мне наоборот не нравится, что в софтах можно двигать меню хоть с середины
И да, если это не баг, то нахуя сделан ImGuiWindowFlags_NoMove ?)
Я нашёл топик на гитхабе с этой проблемой, там просто occornut написал что пофиксил и обновил имгуи
 
Проблема в том что я юзаю прозрачность window на нуле, из-за чего многие пытаются мувнуть child и говорят далее что меню не двигается
Даже не представляю, как это может выглядеть и зачем это, есть же титл
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
И да, если это не баг, то нахуя сделан ImGuiWindowFlags_NoMove ?)
Я нашёл топик на гитхабе с этой проблемой, там просто occornut написал что пофиксил и обновил имгуи
Для меня это не баг, ну посмотри, что и как он там это пофиксил и спасти себе
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Нашёл решение
Пожалуйста, авторизуйтесь для просмотра ссылки.


Если не хотите юзайте флаг nomove
 
Назад
Сверху Снизу