- Статус
- Оффлайн
- Регистрация
- 7 Фев 2018
- Сообщения
- 2,223
- Реакции
- 714
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Собственно, решил я имгуи не обновлять и пожалел об этом. Имгуи у меня годовой давности, проблема в том, что тут не пофикшен баг с child window. То есть - нельзя грабнуть child и двигать сразу весь window, так вот. Прошу знающих помочь в этой ситуации, ибо я очень заебался что нельзя двигать за child
(Обновить возможности ImGui нет, т.к оно частично переделанное, а терять это не хочется)
Мой код :
Также я пытался :
(Обновить возможности ImGui нет, т.к оно частично переделанное, а терять это не хочется)
Мой код :
Код:
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;
}
Также я пытался :
Код:
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;
}


