Авторазмер imgui.BeginChild

ChаtGPT

Активный
Автор темы
368
90
Версия MoonLoader
.026-beta
Здравствуйте, как сделать адекватный авторазмер для дочернего окна?
Необходимо, чтобы дочернее окно подстраивалось под контент внутри его, в моем случае текст.
Пробовал указывать флаг imgui.WindowFlags.AlwaysAutoResize, менял размер на imgui.ImVec2(0, 0) или imgui.ImVec2(-1, -1), но это удет брать размер самого imgui окна, мне нужно именно контента внутри дочернего окна, как такое сделать? Есть секретный способ, или придётся костылить?


Lua:
imgui.Begin('Main Window', renderWindow)
    imgui.BeginChild('content', imgui.ImVec2(0, 0), true, imgui.WindowFlags.AlwaysAutoResize)
        imgui.Text('AlwaysAutoResize')
    imgui.EndChild()
imgui.End()
 
Решение
эта возможность появилась в имгуи 1.90, в старых версиях нельзя такое сделать
Из вариантов отказаться от дочернего окна и сделать примитив.
Получилось:
1715083760454.png

Lua:
imgui.Begin('Main Window', renderWindow)
    local DL = imgui.GetWindowDrawList()
    local pd = 3
            
    imgui.BeginGroup()
        imgui.Text('AlwaysAutoResize')
        DL:AddRect(
            imgui.ImVec2(imgui.GetItemRectMin().x - pd, imgui.GetItemRectMin().y - pd),
            imgui.ImVec2(imgui.GetItemRectMax().x + pd, imgui.GetItemRectMax().y + pd),
            -1
        )
    imgui.EndGroup()
imgui.End()
Это решение моей проблемы(его нашёл здесь), но буду рад увидеть варианты и получше.

ChаtGPT

Активный
Автор темы
368
90
эта возможность появилась в имгуи 1.90, в старых версиях нельзя такое сделать
Из вариантов отказаться от дочернего окна и сделать примитив.
Получилось:
1715083760454.png

Lua:
imgui.Begin('Main Window', renderWindow)
    local DL = imgui.GetWindowDrawList()
    local pd = 3
            
    imgui.BeginGroup()
        imgui.Text('AlwaysAutoResize')
        DL:AddRect(
            imgui.ImVec2(imgui.GetItemRectMin().x - pd, imgui.GetItemRectMin().y - pd),
            imgui.ImVec2(imgui.GetItemRectMax().x + pd, imgui.GetItemRectMax().y + pd),
            -1
        )
    imgui.EndGroup()
imgui.End()
Это решение моей проблемы(его нашёл здесь), но буду рад увидеть варианты и получше.
 
Последнее редактирование:
  • Нравится
Реакции: MLycoris