Как захватить курсор gtk'шным окном подобно "захвату" курсора приложениям на glut? Т.е. изображение курсора мыши должно исчезнуть, а перемещение мыши должно всегда отдавать новые координаты (x,y), независимо от размера окна и экрана.
gdk_pointer_grab не позволяет реализовать задуманное, т.к. при выходе указателя за границу окна, координаты его перестают изменяться.
Захват курсора в gtk (наподобие захвату в openGL)
Модератор: Модераторы разделов
-
eddy
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Захват курсора в gtk
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
-
/dev/random
- Администратор
- Сообщения: 5489
- ОС: Gentoo
Re: Захват курсора в gtk
eddy писал(а): ↑10.04.2011 17:58Как захватить курсор gtk'шным окном подобно "захвату" курсора приложениям на glut? Т.е. изображение курсора мыши должно исчезнуть, а перемещение мыши должно всегда отдавать новые координаты (x,y), независимо от размера окна и экрана.
gdk_pointer_grab не позволяет реализовать задуманное, т.к. при выходе указателя за границу окна, координаты его перестают изменяться.
gdk_pointer_grab, а затем после каждого движения мыши возвращать курсор в центр с помощью gdk_display_warp_pointer.
-
eddy
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Захват курсора в gtk
Спасибо. Работает (почти). Правда, пришлось вводить статическую переменную, чтобы обрабатывать данные о движении мыши через раз (т.к. gdk_display_warp_pointer тоже генерирует событие движения). И осталась проблема краев (курсор возвращаю в то место, где изначально был сделан щелчок).
Может, есть какой-то способ узнать координаты центра экрана, чтобы при щелчке мышью сразу устанавливать курсор туда?
Может, есть какой-то способ узнать координаты центра экрана, чтобы при щелчке мышью сразу устанавливать курсор туда?
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
-
/dev/random
- Администратор
- Сообщения: 5489
- ОС: Gentoo
-
eddy
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Захват курсора в gtk
Ага, спасибо. Вот что получилось на щелчок мышкой:
А вот - на движение:
Код: Выделить всё
GdkDisplay *disp = gdk_display_get_default();
GdkScreen* screen = gdk_display_get_default_screen(disp);
oldXscreen = gdk_screen_get_width(screen) / 2;
oldYscreen = gdk_screen_get_height(screen) / 2;
gdk_display_warp_pointer(disp, screen,
oldXscreen, oldYscreen);
CursorWasMoved = TRUE;А вот - на движение:
Код: Выделить всё
if(CursorWasMoved){
CursorWasMoved = FALSE;
oldXbtn = event->x;
oldYbtn = event->y;
return FALSE;
}
window->Xangle += (event->x - oldXbtn)/1000.;
window->Zangle += (event->y - oldYbtn)/1000.;
GdkDisplay *disp = gdk_display_get_default();
gdk_display_warp_pointer(disp, gdk_display_get_default_screen(disp),
oldXscreen, oldYscreen);
CursorWasMoved = TRUE;
force_redraw(window->drawingArea);RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка