wxOSX/Carbon: смещение мыши wxGLCanvas в классах с плавающим окном
Я в основном программирую плагины, используя wxWidgets в комплекте Carbon, который загружается во время выполнения. Хост-приложения, в которых запущены мои плагины, предоставляют дескриптор собственного окна (WindowRef
), который я могу использовать для добавления своих пользовательских GUI-классов на основе wxWidgets.
Чтобы использовать собственный дескриптор окна с классами wxWidgets, мне пришлось написать wxTopLevelWindow
класс-обертка, который делает всеWindowRef
инкапсуляция. Пока это работает довольно хорошо, но при некоторых обстоятельствах я получил вертикальные смещения мыши в пределах wxGLCanvas
если класс окна родного дескриптора окна не относится к типу "kFloatingWindowClass
Msgstr "Я могу обойти проблему, если отобразить информационную панель (wxPanel
) в целом wxGlCanvas
и если пользователь скрывает информационную панель, то смещение мыши исчезает.
Теперь мои вопросы:
- Есть ли "простое" объяснение этому поведению?
- Можно ли использовать определенные вызовы методов для имитации эффекта информационной панели, не используя саму панель? Я попробовал несколько комбинаций
Update()
а такжеRefresh()
вызовы всех задействованных компонентов, но пока ни один из них не работал. Даже использованиеwxSizer
не мог помочь здесь
Иерархия окон, используемая плагинами-приложениями:
wxCustomTopLevelWindow (WindowRef предоставляется хост-приложением) wxPanel (родительское окно для всей панели приложения) wxPanel (панель информации о приложении) wxPanel (главная панель приложения) wxPanel (основная панель opengl) wxGlCanvas (основной холст opengl)
Есть идеи? Любая помощь очень ценится.
1 ответ
Это несоответствие системы координат? Некоторые API для Mac OS X используют верхний левый угол в качестве источника (положительный у понижается), в то время как другие используют нижний левый (положительный у повышается).
Это может показаться прерывистым, так как ошибка будет небольшой вблизи вертикального центра экрана; дальше от центра координата будет казаться крайне неточной (на самом деле она находится на противоположной стороне экрана).
Я могу обойти проблему, если я отображаю информационную панель (
wxPanel
) в целомwxGlCanvas
и если пользователь скрывает информационную панель, то смещение мыши исчезает.
Это может быть красная сельдь, если вы открываете эту панель в середине экрана и закрываете ее мышью.