срочная помощь с imgui

Tema05

Известный
Автор темы
1,474
439
Версия MoonLoader
.026-beta
Как в input text можно получить текст после курсора мыши? Неважно в какой момент можно получить эти данные и в каком месте.
нашёл вроде как то что мне нужно в imgui.lua не пока не пойму как это использовать
C++:
// Shared state of InputText(), passed to callback when a ImGuiInputTextFlags_Callback* flag is used and the corresponding callback is triggered.
struct ImGuiTextEditCallbackData
{
    ImGuiInputTextFlags EventFlag;      // One of ImGuiInputTextFlags_Callback* // Read-only
    ImGuiInputTextFlags Flags;          // What user passed to InputText()      // Read-only
    void*               UserData;       // What user passed to InputText()      // Read-only
    bool                ReadOnly;       // Read-only mode                       // Read-only

    // CharFilter event:
    ImWchar             EventChar;      // Character input                      // Read-write (replace character or set to zero)

    // Completion,History,Always events:
    // If you modify the buffer contents make sure you update 'BufTextLen' and set 'BufDirty' to true.
    ImGuiKey            EventKey;       // Key pressed (Up/Down/TAB)            // Read-only
    char*               Buf;            // Current text buffer                  // Read-write (pointed data only, can't replace the actual pointer)
    int                 BufTextLen;     // Current text length in bytes         // Read-write
    int                 BufSize;        // Maximum text length in bytes         // Read-only
    bool                BufDirty;       // Set if you modify Buf/BufTextLen!!   // Write
    int                 CursorPos;      //                                      // Read-write
    int                 SelectionStart; //                                      // Read-write (== to SelectionEnd when no selection)
    int                 SelectionEnd;   //                                      // Read-write

    // NB: Helper functions for text manipulation. Calling those function loses selection.
    IMGUI_API void    DeleteChars(int pos, int bytes_count);
    IMGUI_API void    InsertChars(int pos, const char* text, const char* text_end = NULL);
    bool    HasSelection() const { return SelectionStart != SelectionEnd; }
};
 
Последнее редактирование:

Tema05

Известный
Автор темы
1,474
439
Смотри исходник Chat MImGui
Возможно проблема в том что у меня imgui а у тебя mimgui.

Lua:
function edit_callback(data)
    sampAddChatMessage('test', -1)
end

imgui.InputText("##text" .. i, userdata.cache[arg1 .. arg2]["lines"][i][1], imgui.InputTextFlags.CallbackHistory, edit_callback)
крашит самп при фокусе
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,656
2,540
Возможно проблема в том что у меня imgui а у тебя mimgui.

Lua:
function edit_callback(data)
    sampAddChatMessage('test', -1)
end

imgui.InputText("##text" .. i, userdata.cache[arg1 .. arg2]["lines"][i][1], imgui.InputTextFlags.CallbackHistory, edit_callback)
крашит самп при фокусе
возможно, проблема в том, что:
  1. пора перейти с мунимгуи на мимгуи
  2. прочесть исходник лучше: local edit_callback = ffi.cast('int (*)(ImGuiInputTextCallbackData* data)', edit_callback)
  3. edit_callback обязан возвращать цифру: 0 всегда, при любых обстоятельствах
 

Tema05

Известный
Автор темы
1,474
439
возможно, проблема в том, что:
  1. пора перейти с мунимгуи на мимгуи
  2. прочесть исходник лучше: local edit_callback = ffi.cast('int (*)(ImGuiInputTextCallbackData* data)', edit_callback)
  3. edit_callback обязан возвращать цифру: 0 всегда, при любых обстоятельствах
1) По мне большинство юзают imgui и пока для себя я не выявил плюсы mimgui
2) не понял
Lua:
function edit_callback(data)
sampAddChatMessage('test', -1)
return 0
end

local edit_callback = ffi.cast('int (*)(ImGuiInputTextCallbackData* data)', edit_callback)
крашит (declaration specifier expected near 'ImGuiInputTextCallbackData')
3) не помогло
Можно просто рабочий пример дальше я сам копать буду.
 
Последнее редактирование:

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,656
2,540
2) не понял
Lua:
function edit_callback(data)
sampAddChatMessage('test', -1)
return 0
end

local edit_callback = ffi.cast('int (*)(ImGuiInputTextCallbackData* data)', edit_callback)
крашит (declaration specifier expected near 'ImGuiInputTextCallbackData')

в старом имгуи название структуры другое, должно работать:
Lua:
function edit_callback(data)
    sampAddChatMessage('test', -1)
    return 0
end

local edit_callback = ffi.cast('int (*)(ImGuiTextEditCallbackData* data)', edit_callback)

1) По мне большинство юзают imgui и пока для себя я не выявил плюсы mimgui
они (плюсы) имеются, и все, кто используют мунимгуи -- показывают, что либо они новички, либо они не умеют изучать что-то без документации.
к слову, в мимгуи мало изменений в части кода, но очень удобные изменения и оптимизация лучше (Проверено)
 

Tema05

Известный
Автор темы
1,474
439
в старом имгуи название структуры другое, должно работать:
Lua:
function edit_callback(data)
    sampAddChatMessage('test', -1)
    return 0
end

local edit_callback = ffi.cast('int (*)(ImGuiTextEditCallbackData* data)', edit_callback)


они (плюсы) имеются, и все, кто используют мунимгуи -- показывают, что либо они новички, либо они не умеют изучать что-то без документации.
к слову, в мимгуи мало изменений в части кода, но очень удобные изменения и оптимизация лучше (Проверено)
Почти всё что я знаю о imgui я узнал из файла и исходников. Документация в основном наводит где нужно копать. В основном сложности так как я не шарю в плюсах.

По поводу перехода я боюсь потратить овер много времяни на переделование 6к+ строк имгуи кода. Ну и мне кажется для Mimgui сложное найти инфу либо примеры.

Есть какие либо причины которые должны сподвигнуть прямо сейчас перейти на mimgui?
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,656
2,540
так как я не шарю в плюсах
и не нужно
всё, что тебе нужно знать -- 1 символ = 1 байт, 1 символ в кириллице = 2 байта
текст длиной: привет будет 12 байтов
текст длиной: привет, how are you? будет 26 байтов
bool[0] = это тот же bool.v
new.bool() это тот же imgui.ImBool()
new.char[x]() это тот же imgui.ImChar(text, x) // не помню как у вас там, давно не писал на мунимгуи
чтение строки из этой фигни выше через ffi.string(val), в отличие от мунимгуи через .v
imgui.ImInt() = new.int(), чтение через [0] в отличие от мунимгуи -- .v
примеры использования мимгуи на https://github.com/THE-FYP/mimgui/blob/master/examples/mimgui-extra-features.lua

что-то непонятное осталось?
 

Tema05

Известный
Автор темы
1,474
439
и не нужно
всё, что тебе нужно знать -- 1 символ = 1 байт, 1 символ в кириллице = 2 байта
текст длиной: привет будет 12 байтов
текст длиной: привет, how are you? будет 26 байтов
bool[0] = это тот же bool.v
new.bool() это тот же imgui.ImBool()
new.char[x]() это тот же imgui.ImChar(text, x) // не помню как у вас там, давно не писал на мунимгуи
чтение строки из этой фигни выше через ffi.string(val), в отличие от мунимгуи через .v
примеры использования мимгуи на https://github.com/THE-FYP/mimgui/blob/master/examples/mimgui-extra-features.lua

что-то непонятное осталось?
Есть причины по которым я должен прямо сейчас перейти на mimgui? Всё что ты перечислил я и так знаю.
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,745
4,826
Есть причины по которым я должен прямо сейчас перейти на mimgui?
Как минимум imgui 1.7 вместо 1.5; Куча фиксов багов, и ни у кого сейчас moonimgui не стоит, все используют mimgui кроме тебя
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,656
2,540
Есть причины по которым я должен прямо сейчас перейти на mimgui?
мунимгуи устарел, у него 1.5х версия имгуи, в отличие мимгуи с его версией 1.72
много изменений в части имгуи, в очень хорошую сторону
Лучше все-таки выделять 6 байт, под 1 символ utf-8
почему это
 

Tema05

Известный
Автор темы
1,474
439
мунимгуи устарел, у него 1.5х версия имгуи, в отличие мимгуи с его версией 1.72
много изменений в части имгуи, в очень хорошую сторону

почему это
Можно парочку примеров очень хороших изменений? И сложно будет переписать imgui на mimgui?
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,745
4,826
мунимгуи устарел, у него 1.5х версия имгуи, в отличие мимгуи с его версией 1.72
много изменений в части имгуи, в очень хорошую сторону

почему это
Символы в utf-8 занимают по 6, просто 2 байта не используются(не определены), поэтому будем считать что 4 байта, кириллица же занимает 2, но вдруг захочется какой-нибудь символ покруче использовать?
 

Tema05

Известный
Автор темы
1,474
439
Символы в utf-8 занимают по 6, просто 2 байта не используются(не определены), поэтому будем считать что 4 байта, кириллица же занимает 2, но вдруг захочется какой-нибудь символ покруче использовать?
Функция получения длинны текста за англ символ даёт 1 единицу, а за русские 2 еденицы. Об этом речь. Я не думаю что кому-то придёт в голову пробовать пишать в скрипт китайские или что там много байт занимает.