Как использовать gdk_device_get_position()?

Я пытаюсь получить положение указателя на экране в Gdk и нашел gdk_display_get_pointer(), который отлично работает, но помечен как устаревший и теперь ссылается на gdk_device_get_position().

Но как мне использовать эту функцию? Я не могу получить GdkDevice, так как нет ни фабрики, ни конструктора.


person Kugel    schedule 19.07.2014    source источник


Ответы (2)


используйте Gdk.DeviceManager.

.....
.....
GdkDisplay *display = gdk_display_get_default ();
GdkDeviceManager *device_manager = gdk_display_get_device_manager (display);
GdkDevice *device = gdk_device_manager_get_client_pointer (device_manager);

// do whatever with Gdk.Device, i.e:
int x, y;
gdk_device_get_position (device, NULL, &x, &y);
printf ("x= %d, y=%d", x,y);
person luciomrx    schedule 20.07.2014
comment
Думаю, я мог бы добавить для всех, кто заинтересован в получении позиции курсора в окне, вы можете использовать gdk_window_get_device_position (gtk_widget_get_window(gtk_window), device, &x, &y, NULL); - person jackw11111; 07.05.2019
comment
Стоит ли беспокоиться о скорости вызова этих трех функций? В конце концов мне нужно вызвать gdk_window_get_device_position, как заметил jackw11111, но у меня есть только GtkDrawingArea (виджет). Кажется немного странным, что приходится вызывать gdk_window_get_device_position(gtk_widget_get_window(my_widget), gdk_device_manager_get_client_pointer(gdk_display_get_device_manager(gdk_display_get_default()), &x, &y, NULL); только для того, чтобы получить x и y в моей области рисования :/ - person Carlo Wood; 18.07.2020

Начиная с GTK+ 3.20+, ответ luciomrx становится таким:

GdkDisplay* display = gdk_display_get_default();
GdkSeat* seat = gdk_display_get_default_seat(display);
GdkDevice* pointer = gdk_seat_get_pointer(seat);
person Carlo Wood    schedule 17.07.2020