imgui.InputText | error: too many callbacks

ChаtGPT

Активный
Автор темы
402
96
Версия MoonLoader
.026-beta
Здравствуйте, сделал фильтр для инпута, чтобы можно было вводить только цифры (да, я знаю, что можно использовать imgui.InputInt), но при частом вводе в инпут крашит за частое использование коллбека: too many callbacks.
Что я делаю не так?

Lua:
function imgui.CustomInputText(label, buffer)
    local function filter(data)
        local char = string.char(data.EventChar) -- Получаем символ, который ввели
        if not char:match("%d") then -- Если это не цифра
            return 1 -- Блокируем ввод
        end
        return 0 -- Разрешаем ввод
    end

    local callback = ffi.cast('int (*)(ImGuiInputTextCallbackData* data)', filter)
    imgui.InputText(label, buffer, ffi.sizeof(buffer), imgui.InputTextFlags.CallbackCharFilter, callback)
end

imgui.CustomInputText("##passSelect.range_1", passSelect.range_1)
 
Решение
Lua:
imgui.CustomInputText = (function()
  local callback = ffi.cast("int(*)(ImGuiInputTextCallbackData*)", function(data)
    local result, char = pcall(string.char, data.EventChar)
    return (not result or char:find("%D")) and 1 or 0
  end)

  return function(label, buffer)
    return imgui.InputText(label, buffer, ffi.sizeof(buffer), imgui.InputTextFlags.CallbackCharFilter, callback)
  end
end)()

wojciech?

Известный
Проверенный
366
245
Lua:
imgui.CustomInputText = (function()
  local callback = ffi.cast("int(*)(ImGuiInputTextCallbackData*)", function(data)
    local result, char = pcall(string.char, data.EventChar)
    return (not result or char:find("%D")) and 1 or 0
  end)

  return function(label, buffer)
    return imgui.InputText(label, buffer, ffi.sizeof(buffer), imgui.InputTextFlags.CallbackCharFilter, callback)
  end
end)()
 
  • Нравится
Реакции: Vespan и ChаtGPT