Описание: Кастомный чекбокс для имгуи (Максимально приближен к оригинальному), однако вместо галочки - квадратик
p.s Цвета использует из стиля (Как и обычный)
Пример использования:
UPD: Добавил возможность менять "окружность"
p.s Цвета использует из стиля (Как и обычный)
Lua:
function fCheckbox(text, bool, size, fill_size, round, fill_round)
local size = size or imgui.GetTextLineHeightWithSpacing() + 1
local fill_size = fill_size or 0.1
local round = round or 1.0
local fill_round = fill_round or 1.0
local p = imgui.GetCursorScreenPos()
if imgui.InvisibleButton('f##'..text, imgui.ImVec2(size + imgui.CalcTextSize(text).x, size)) then
bool.v = not bool.v
end
if imgui.IsItemActive() then
imgui.GetWindowDrawList():AddRectFilled(imgui.ImVec2(p.x, p.y), imgui.ImVec2(p.x + size, p.y + size), imgui.GetColorU32(imgui.GetStyle().Colors[imgui.Col.FrameBgActive]), round)
elseif imgui.IsItemHovered() then
imgui.GetWindowDrawList():AddRectFilled(imgui.ImVec2(p.x, p.y), imgui.ImVec2(p.x + size, p.y + size), imgui.GetColorU32(imgui.GetStyle().Colors[imgui.Col.FrameBgHovered]), round)
else
imgui.GetWindowDrawList():AddRectFilled(imgui.ImVec2(p.x, p.y), imgui.ImVec2(p.x + size, p.y + size), imgui.GetColorU32(imgui.GetStyle().Colors[imgui.Col.FrameBg]), round)
end
if bool.v then imgui.GetWindowDrawList():AddRectFilled(imgui.ImVec2(p.x + size * fill_size, p.y + size * fill_size), imgui.ImVec2(p.x + size - size * fill_size, p.y + size - size * fill_size), imgui.GetColorU32(imgui.GetStyle().Colors[imgui.Col.CheckMark]), fill_round) end
imgui.SameLine()
imgui.SetCursorPosX(imgui.GetCursorPosX() - imgui.CalcTextSize(text).x)
imgui.SetCursorPosY(imgui.GetCursorPosY() + 1 + imgui.GetStyle().ItemSpacing.y / 2)
imgui.Text(text)
imgui.SetCursorPosY(imgui.GetCursorPosY() - imgui.GetStyle().ItemSpacing.y / 2)
end
Lua:
--Вне всего
local imBool = imgui.ImBool(false)
--imgui.OnDrawFrame()
fCheckbox('Default fCheckbox(20, 0.1)', imBool)
fCheckbox('fCheckbox with size 20 and fill_size 0.15', imBool, 20)
fCheckbox('fCheckbox with size 20 and fill_size 0.2', imBool, 20, 0.2, 5)
fCheckbox('fCheckbox with size 20 and fill_size 0.3', imBool, 20, 0.3, 10, 10)
--Сама функция
function fCheckbox(text, bool, size, fill_size, round, fill_round)
local size = size or imgui.GetTextLineHeightWithSpacing() + 1
local fill_size = fill_size or 0.1
local round = round or 1.0
local fill_round = fill_round or 1.0
local p = imgui.GetCursorScreenPos()
if imgui.InvisibleButton('f##'..text, imgui.ImVec2(size + imgui.CalcTextSize(text).x, size)) then
bool.v = not bool.v
end
if imgui.IsItemActive() then
imgui.GetWindowDrawList():AddRectFilled(imgui.ImVec2(p.x, p.y), imgui.ImVec2(p.x + size, p.y + size), imgui.GetColorU32(imgui.GetStyle().Colors[imgui.Col.FrameBgActive]), round)
elseif imgui.IsItemHovered() then
imgui.GetWindowDrawList():AddRectFilled(imgui.ImVec2(p.x, p.y), imgui.ImVec2(p.x + size, p.y + size), imgui.GetColorU32(imgui.GetStyle().Colors[imgui.Col.FrameBgHovered]), round)
else
imgui.GetWindowDrawList():AddRectFilled(imgui.ImVec2(p.x, p.y), imgui.ImVec2(p.x + size, p.y + size), imgui.GetColorU32(imgui.GetStyle().Colors[imgui.Col.FrameBg]), round)
end
if bool.v then imgui.GetWindowDrawList():AddRectFilled(imgui.ImVec2(p.x + size * fill_size, p.y + size * fill_size), imgui.ImVec2(p.x + size - size * fill_size, p.y + size - size * fill_size), imgui.GetColorU32(imgui.GetStyle().Colors[imgui.Col.CheckMark]), fill_round) end
imgui.SameLine()
imgui.SetCursorPosX(imgui.GetCursorPosX() - imgui.CalcTextSize(text).x)
imgui.SetCursorPosY(imgui.GetCursorPosY() + 1 + imgui.GetStyle().ItemSpacing.y / 2)
imgui.Text(text)
imgui.SetCursorPosY(imgui.GetCursorPosY() - imgui.GetStyle().ItemSpacing.y / 2)
end
Последнее редактирование: