Захват курсора в gtk (наподобие захвату в openGL)

Модератор: Модераторы разделов

Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Захват курсора в gtk

Сообщение eddy »

Как захватить курсор gtk'шным окном подобно "захвату" курсора приложениям на glut? Т.е. изображение курсора мыши должно исчезнуть, а перемещение мыши должно всегда отдавать новые координаты (x,y), независимо от размера окна и экрана.
gdk_pointer_grab не позволяет реализовать задуманное, т.к. при выходе указателя за границу окна, координаты его перестают изменяться.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5489
ОС: Gentoo

Re: Захват курсора в gtk

Сообщение /dev/random »

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

Сообщение eddy »

Спасибо. Работает (почти). Правда, пришлось вводить статическую переменную, чтобы обрабатывать данные о движении мыши через раз (т.к. gdk_display_warp_pointer тоже генерирует событие движения). И осталась проблема краев (курсор возвращаю в то место, где изначально был сделан щелчок).
Может, есть какой-то способ узнать координаты центра экрана, чтобы при щелчке мышью сразу устанавливать курсор туда?
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5489
ОС: Gentoo

Re: Захват курсора в gtk

Сообщение /dev/random »

eddy писал(а):
10.04.2011 18:38
Может, есть какой-то способ узнать координаты центра экрана, ...

gdk_screen_get_width и gdk_screen_get_height (поделить на 2)
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Захват курсора в gtk

Сообщение eddy »

Ага, спасибо. Вот что получилось на щелчок мышкой:

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

        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 - патриотичная кодировка Изображение
Спасибо сказали: