wxOSX / Carbon: смещение мыши wxGLCanvas в классах неплавающего окна - PullRequest
0 голосов
/ 21 марта 2010

Я в основном программирую плагины, используя wxWidgets в комплекте Carbon, который загружается во время выполнения. Хост-приложения, в которых запущены мои плагины предоставить собственный дескриптор окна (WindowRef), который я могу использовать, чтобы добавить свой пользовательский, GUI-классы на основе wxWidgets.

Чтобы использовать дескриптор собственного окна с wxWidgets классы, я должен был написать wxTopLevelWindow класс-обертку, который делает все WindowRef инкапсуляция. Пока что это работает довольно хорошо, но под некоторыми обстоятельства, я получил вертикальные смещения мыши в пределах wxGLCanvas, если окно класс дескриптора собственного окна не относится к типу "kFloatingWindowClass". Я могу обойти проблему, если отображаю информационную панель (wxPanel) поверх целое wxGlCanvas и если пользователь скрывает информационную панель, то смещение мыши ушел.

Теперь мои вопросы:

  1. Есть ли "простое" объяснение этого поведения?
  2. Можно ли использовать определенные вызовы методов для имитации эффекта информационной панели без использования самой панели? Я пробовал несколько комбинаций Update() и Refresh() вызовы всех задействованных компонентов, но пока ни один из них не работал. Даже использование wxSizer здесь не могло помочь.

Иерархия окон, используемая подключаемыми приложениями:

wxCustomTopLevelWindow (WindowRef provided by host-application)
 wxPanel (parent window for all application panel)
  wxPanel (application info panel)
  wxPanel (application main panel)
   wxPanel (opengl main panel)
    wxGlCanvas (main opengl canvas)

Есть идеи? Любая помощь очень ценится.

1 Ответ

0 голосов
/ 22 марта 2010

Это несоответствие системы координат?Некоторые API Mac OS X используют верхний левый угол в качестве источника (положительный y понижается), тогда как другие используют нижний левый (положительный y повышается).

Это может показаться прерывистым, поскольку ошибка будетмаленький рядом с вертикальным центром экрана;дальше от центра координата будет выглядеть неточно (на самом деле она находится на противоположной стороне экрана).

Я смогу обойти проблему, если отобразил информационную панель(wxPanel) по всей wxGlCanvas, и если пользователь скрывает информационную панель, смещение мыши исчезает.

Это может быть красная сельдь, если вы открываете эту панель всередина экрана и закрытие его мышью.

...