• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

C++ Dear ImGui DPI Scaling РЕШЕНО

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
18 Июл 2022
Сообщения
111
Реакции
26
О великие гуру имгуи, нужна ваша помощь!!!11!
Воспользовался этим гайдом " гайд ", обновив последную версию имгуи под копирку отсюда "
Пожалуйста, авторизуйтесь для просмотра ссылки.
", все прекрасно скейлится, но почему-то курсор улетает куда-то вправый нижний угол (когда идет изменения скейла) .
wdnuY-HLj4w.jpg

Также заметил, что когда наступает бездействие в окне рендера, координаты курсора становятся запредельными числами, не знаю с чем связано.
J0cc83AjQlA.jpg

Во второй ссылке не все, что нужно вставить имеется? Или я где-то лоханулся.
Пожалуйста, авторизуйтесь для просмотра ссылки.

VT не знаю зачем нужен, этож сурс епта :roflanPominki:
 
Последнее редактирование:
Заметив еще пару странностей, ТОЛЬКО при выполнении
C++:
Expand Collapse Copy
io.MousePos.x /= dpi_scale;
io.MousePos.y /= dpi_scale;
положение курсора начинает дико косоебить в разные стороны
 
Заметив еще пару странностей, ТОЛЬКО при выполнении
C++:
Expand Collapse Copy
io.MousePos.x /= dpi_scale;
io.MousePos.y /= dpi_scale;
положение курсора начинает дико косоебить в разные стороны
Я не шарю в имгуи но может попробовать умножать, вдруг поможет.
C++:
Expand Collapse Copy
io.MousePos.x *= dpi_scale;
io.MousePos.y *= dpi_scale;
Еще вариант скорее всего: Когда ты получаешь координаты мышки используя
GetCursorPos();
Нужно использовать
ScreenToClient();
 
Последнее редактирование:
Я не шарю в имгуи но может попробовать умножать, вдруг поможет.
Умножение уже до этого пробовал.
UPD:
Я нашел как можно заскейлить. Вот фикс проблемы, если это кому-то нужно, хотя я сомневаюсь...
imgui.cpp
C++:
Expand Collapse Copy
void ImGuiIO::AddMousePosEvent(float x, float y)
{
    ImGuiContext& g = *GImGui;
    IM_ASSERT(&g.IO == this && "Can only add events to current context.");
    if (!AppAcceptingEvents)
        return;

    // Apply same flooring as UpdateMouseInputs()
    ImVec2 pos((x > -FLT_MAX) ? ImFloorSigned(x) : x, (y > -FLT_MAX) ? ImFloorSigned(y) : y);

    // Filter duplicate
    const ImGuiInputEvent* latest_event = FindLatestInputEvent(ImGuiInputEventType_MousePos);
    const ImVec2 latest_pos = latest_event ? ImVec2(latest_event->MousePos.PosX, latest_event->MousePos.PosY) : g.IO.MousePos;
    if (latest_pos.x == pos.x && latest_pos.y == pos.y)
        return;
    ImGuiInputEvent e;
    e.Type = ImGuiInputEventType_MousePos;
    e.Source = ImGuiInputSource_Mouse;
    e.MousePos.PosX = pos.x / DisplayFramebufferScale.x;
    e.MousePos.PosY = pos.y / DisplayFramebufferScale.y;
    g.InputEventsQueue.push_back(e);
}
ебалу с делением координат комментим

C++:
Expand Collapse Copy
        //if (io.MousePos.x != -FLT_MAX && io.MousePos.y != -FLT_MAX)
        //{
        //    io.MousePos.x /= dpi_scale;
        //    io.MousePos.y /= dpi_scale;
        //}
 
Последнее редактирование:
Назад
Сверху Снизу