LINUX.ORG.RU

Gtk и координаты мыши.


0

0

Если виджет, пусть это будет GtkDrawingArea.. Оно получает событие "clicked".

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

Никто не подскажет как?

★★★★★

А, да.. Если это принципиально, то пишу на Си.

mono ★★★★★
() автор топика

Если координаты нажатия, то ловишь сигнал button-press-event, записываешь куда-нибудь координаты, извлекая их из структуры GdkEventButton, потом ловишь сигнал clicked.

Если координаты отпускания, то аналогично с button-release-event

ttnl ★★★★★
()
Ответ на: комментарий от ttnl

Извлекаешь при помощи gdk_device_get_state (event->device, gdk_get_default_root_window(), dev_root, NULL);

gdk_get_default_root_window() - для координат относительно рабочего стола, тебе же на это место надо поставить указатель на Gdk-окно твоего виджета

ttnl ★★★★★
()
Ответ на: комментарий от ttnl

Или такой готовый кусок кода:

gboolean on_Window_button_press_event (GtkWidget *Window, GdkEventButton *event,
                gpointer data)
{
        if (event->button == 1) {
                double dev_root [2];
                int winroot_x, winroot_y;

                gdk_device_get_state (event->device, gdk_get_default_root_window(),
                                dev_root, NULL);
                gtk_window_get_position ((GtkWindow *) Window, &winroot_x, &winroot_y);

                OBTAIN.MouseX = (int)(dev_root [0]) - winroot_x;
                OBTAIN.MouseY = (int)(dev_root [1]) - winroot_y;
        }
        return FALSE;
}

Тут получаются координаты относительно окна (OBTAIN.MouseX). Сейчас заметил, что можно проще.

ttnl ★★★★★
()
Ответ на: комментарий от ttnl

Если нужно чтобы сигнал распространялся, то return TRUE

ttnl ★★★★★
()

Спасибо большое за хороший ответ.. сейчас буду разбираться. =)

mono ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.