События мыши в контексте Каира

Я разрабатываю приложение на C ++ и GTK3, но я застрял. Я создал визуальное приложение с glade, которое имеет три столбца, и один из них, средний, — это DrawingArea. В этом DrawingArea я хочу нарисовать несколько кругов в точке, которую я хочу, после нажатия кнопки, и иметь различные события мыши на этих кругах (например, перетаскивание, двойной щелчок, щелчок правой кнопкой мыши …). Я сделал первое (нарисуйте круг после нажатия кнопки) после официальная документация, но проблема в том, что я не знаю, как делать события мыши, но я подумал об этом, и у меня есть несколько разных решений (я не знаю, являются ли они лучшими решениями или, может быть, есть и лучшие):

  1. Я думаю, что лучший способ — создать сигнал для контекста cairomm, но я ничего не видел для этого. Может быть, можно было бы создать поверхность Каира или что-то в этом роде.

  2. Каждый раз, когда я нажимаю, чтобы создать круг, мне нужно будет создать виджет gtk, в котором я могу обрабатывать события мыши. Проблема здесь в том, что виджет должен иметь круглую форму и должен быть нарисованным. Можно ли создать круговую DrawingArea? Это может быть лучшим. Я видел способ создания пользовательских виджетов Вот.

  3. Используйте goocanvasmm. Проблема в том, что у goocanvasmm есть немного документации (извините, я не могу опубликовать более двух ссылок из-за своей репутации), и я думаю, что это не лучшее решение, я предпочитаю использовать cairomm.

Это приложение было написано на C с использованием GTK2, а круги были нарисованы с использованием gnomecanvas, добавляя сигналы простым способом в каждый круг; и теперь я перевожу это приложение на C ++ и GTK3, чтобы обновить его.

Я очень новичок в GTK (и графических интерфейсах в целом), но я искал решения в течение нескольких часов, и я не знаю, как лучше всего продолжать работу.

Спасибо за помощь 🙂

2

Решение

Для этого лучше всего использовать библиотеку canvas, такую ​​как GooCanvas. Выполнение этого только с помощью cairo потребует от вас прослушивания событий мыши во всей области рисования и отслеживания того, где находятся круги, чтобы решить, к какому кругу относится событие мыши — именно та проблема, для которой библиотека холста уже решила вы.

Если у вас возникли проблемы с документацией goocanvasmm, посмотрите на документация для C API GooCanvas в сочетании со знанием того, как C API переводит на C ++, обычно будет достаточно. Хотя Документация GooCanvasmm кажется довольно обширным для меня.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector