Как обнаружить событие наведения для прокручиваемых виджетов ImGui, таких как поле со списком и таблица?C++

Программы на C++. Форум разработчиков
Anonymous
Как обнаружить событие наведения для прокручиваемых виджетов ImGui, таких как поле со списком и таблица?

Сообщение Anonymous »

У меня есть окно, в котором на вкладке виджета вкладки установлен флажок, который включает два разных представления на этой вкладке — представление таблицы и представление поля со списком (см. снимки экрана ниже). Оба показывают список файлов, которые я извлек из определенного каталога (WIP).
Просмотр со списком:
< img alt="введите описание изображения здесь" src="https://i.sstatic.net/pBhhnLWf.png" />
Вид таблицы (показывает только основу каждого файла):
Изображение

Я использую PyGame для управления своим окном, включая обработку пользовательского ввода и контекста OpenGL.
Примечание: Хотя следующая проблема был обнаружен в Python, я не думаю, что он не влияет на базовую версию C++.
Каждый раз, когда пользователь прокручивает колесо мыши, я использую это значение для увеличения и уменьшения масштаба. моя сцена. Однако я, очевидно, не хочу, чтобы это произошло, пока пользователь работает с полем со списком или таблицей (или любым другим виджетом с возможностью прокрутки).
Я попробовал перехватить событие наведения (

Код: Выделить всё

imgui.is_item_hovered()
), но похоже, что событие срабатывает только тогда, когда курсор мыши находится
  • над фактическим списком, а не над раскрывающимся списком его элементов или полоса прокрутки сбоку
  • над заголовком таблицы, а не над ячейками
Кажется, я упущена важная информация о том, как работает наведение в ImGui. Например, в таблице выше есть столбец с флажком. Всякий раз, когда моя мышь находится над одним из них, я получаю событие наведения. Похоже, что не все компоненты всех виджетов имеют эту проблему.
В качестве возможного решения я также попробовал imgui.core.is_window_hovered() для своего окна. Проблема здесь в том, что это не работает при наведении курсора на таблицу или раскрывающийся список. Похоже, что оба считаются вне окна, что не имеет смысла. Я бы проявил некоторое понимание, если бы, например, раскрывающееся меню выходило за пределы окна, в котором расположен виджет со списком (и это действительно мой случай, поскольку мои пути относительно длинные). А ячейки таблицы?
Я рассматриваю возможность использования прямоугольников (каждый из которых будет представлять собой ограничивающую рамку проблемного виджета), чтобы определить, находится ли мышь внутри. Особенно для выпадающего списка это было бы очень хитро. Я бы предпочел не делать такую ​​настройку для того, что я считаю важной частью прокручиваемого виджета.

Подробнее здесь: https://stackoverflow.com/questions/784 ... -and-table

Вернуться в «C++»