Скруглить imgui.Selectable

ChаtGPT

Активный
Автор темы
396
96
Версия MoonLoader
.026-beta
Как? в mimgui style editor уже все ползунки повыкручивал.
 
Решение
Lua:
function imgui.CustomSelectable(label, selected, radius)
    local style = imgui.GetStyle()
    local padding = style.FramePadding
    local pos = imgui.GetCursorScreenPos()
    local windowWidth = imgui.GetWindowContentRegionWidth()
    local size = imgui.CalcTextSize(label)
    size.x = windowWidth
    size.y = size.y + padding.y * 2
    local rectMin = pos
    local rectMax = imgui.ImVec2(pos.x + size.x, pos.y + size.y)
    local isSelected = selected
    local isHovered = imgui.IsMouseHoveringRect(rectMin, rectMax)
    if imgui.InvisibleButton(label, imgui.ImVec2(size.x, size.y)) then
        isSelected = not selected
    end
    local color = imgui.GetColorU32(
        isSelected and imgui.Col.FrameBgActive or
        (isHovered...

chromiusj

Известный
Модератор
5,656
3,959
Lua:
function imgui.CustomSelectable(label, selected, radius)
    local style = imgui.GetStyle()
    local padding = style.FramePadding
    local pos = imgui.GetCursorScreenPos()
    local windowWidth = imgui.GetWindowContentRegionWidth()
    local size = imgui.CalcTextSize(label)
    size.x = windowWidth
    size.y = size.y + padding.y * 2
    local rectMin = pos
    local rectMax = imgui.ImVec2(pos.x + size.x, pos.y + size.y)
    local isSelected = selected
    local isHovered = imgui.IsMouseHoveringRect(rectMin, rectMax)
    if imgui.InvisibleButton(label, imgui.ImVec2(size.x, size.y)) then
        isSelected = not selected
    end
    local color = imgui.GetColorU32(
        isSelected and imgui.Col.FrameBgActive or
        (isHovered and imgui.Col.FrameBgHovered or imgui.Col.FrameBg)
    )
    local drawList = imgui.GetWindowDrawList()
    drawList:AddRectFilled(rectMin, rectMax, color, radius)
    imgui.SetCursorScreenPos(imgui.ImVec2(pos.x + padding.x, pos.y + padding.y))
    imgui.Text(label)
    imgui.SetCursorPosY(imgui.GetCursorPosY() + style.ItemSpacing.y)
    return isSelected
end
1719665810330.png

пример использования:
Lua:
local selectedItem = imgui.new.int(0)
local items = {"что ты выеберешь", "босинаааа", "бромо ком"}
local newFrame = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        local resX, resY = getScreenResolution()
        local sizeX, sizeY = 300, 300
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
        if imgui.Begin('BROMO COM', renderWindow) then
            for i = 1, #items do
                if imgui.CustomSelectable(u8(items[i]), selectedItem[0] == i - 1, 5) then
                    selectedItem[0] = i - 1
                end
            end
            imgui.End()
        end
    end
)
 
  • Нравится
Реакции: ChаtGPT и VanoKLR

$Mr.R1ch$

Активный
286
40
Lua:
function imgui.CustomSelectable(label, selected, radius)
    local style = imgui.GetStyle()
    local padding = style.FramePadding
    local pos = imgui.GetCursorScreenPos()
    local windowWidth = imgui.GetWindowContentRegionWidth()
    local size = imgui.CalcTextSize(label)
    size.x = windowWidth
    size.y = size.y + padding.y * 2
    local rectMin = pos
    local rectMax = imgui.ImVec2(pos.x + size.x, pos.y + size.y)
    local isSelected = selected
    local isHovered = imgui.IsMouseHoveringRect(rectMin, rectMax)
    if imgui.InvisibleButton(label, imgui.ImVec2(size.x, size.y)) then
        isSelected = not selected
    end
    local color = imgui.GetColorU32(
        isSelected and imgui.Col.FrameBgActive or
        (isHovered and imgui.Col.FrameBgHovered or imgui.Col.FrameBg)
    )
    local drawList = imgui.GetWindowDrawList()
    drawList:AddRectFilled(rectMin, rectMax, color, radius)
    imgui.SetCursorScreenPos(imgui.ImVec2(pos.x + padding.x, pos.y + padding.y))
    imgui.Text(label)
    imgui.SetCursorPosY(imgui.GetCursorPosY() + style.ItemSpacing.y)
    return isSelected
end
Посмотреть вложение 244886
пример использования:
Lua:
local selectedItem = imgui.new.int(0)
local items = {"что ты выеберешь", "босинаааа", "бромо ком"}
local newFrame = imgui.OnFrame(
    function() return renderWindow[0] end,
    function(player)
        local resX, resY = getScreenResolution()
        local sizeX, sizeY = 300, 300
        imgui.SetNextWindowPos(imgui.ImVec2(resX / 2, resY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(sizeX, sizeY), imgui.Cond.FirstUseEver)
        if imgui.Begin('BROMO COM', renderWindow) then
            for i = 1, #items do
                if imgui.CustomSelectable(u8(items[i]), selectedItem[0] == i - 1, 5) then
                    selectedItem[0] = i - 1
                end
            end
            imgui.End()
        end
    end
)
как в коде убрать функцию, чтобы не выбранные selectable не светились, был только текст
 

ChаtGPT

Активный
Автор темы
396
96
Ну так, стиль это, только я не помню какой

А бля, за кастомный слайдер же.
Вот такая строка есть, если выбран, то цвет будет как FrameBgActive, иначе FrameBg, вместо него можешь указать ingui.ImVec4(0,0,0,0) вроде

local color = imgui.GetColorU32(
isSelected and imgui.Col.FrameBgActive or
(isHovered and imgui.Col.FrameBgHovered or imgui.Col.FrameBg)
)