Проще говоря, вы не можете. У вас не будет доступа к контексту рисования за пределами обратного вызова onWidgetDraw
.
Что вы можете (и должны) делать - это использовать глобальное состояние, чтобы ваш обратный вызов onWidgetDraw
рисовал разные вещи в зависимости от того, что происходит. Например, если вы хотите нарисовать текст, когда пользователь нажимает стрелку вправо:
- В обратном вызове
onWidgetKeyPressEvent
установите значение в вашем глобальном состоянии, когда пользователь нажимает выбранную клавишу
- В обратном вызове
onWidgetDraw
используйте это значение, чтобы определить, нужно ли рисовать текст или нет.
В идеале, вы должны попытаться вписать свое состояние в монаду штата или что-то подобное - однако, в этом конкретном случае, Gtk не позволяет вводить монадическое состояние само по себе, так что это невозможно напрямую. Вы должны прибегнуть к IORef
s, TVar
s или любому другому эквиваленту.
Удачи! :)