2016-12-30 4 views
4

Можно ли получить доступ и изменить контекст GtkDrawingArea за пределами его draw_callback? Если да, я был бы очень рад, если бы вы представили короткий пример (на любом языке) или указать мне, где я должен смотреть. Все примеры, которые я нашел до сих пор, рисуют внутри обратного вызова, поэтому я допрашиваю эту возможность.Доступ к каирскому контексту Вне GtkDrawingArea draw_callback

ответ

3

В GTK + 2 это было возможно с помощью взаимодействия GDK и Cairo, чтобы получить контекст Каира из GdkWindow. В GTK + 3, что, скорее всего, о чем вы спрашиваете, вы все равно можете сделать это с помощью this и this.

Это звучит как классическое проявление проблемы XY. С каирским взаимодействием GTK + 3 вы можете теперь just queue a draw signal for only the specific clip region you want. Просто напишите обратный вызов draw в целом и нарисуйте только то, что необходимо в обрезанной области.

Я надеюсь, что документов будет достаточно, но если нет, сообщите мне. У меня просто нет времени, чтобы подготовить пример в этот момент.

2

Ответ на этот вопрос немного странный, но я столкнулся с подобной проблемой, так что вот мои два цента за задним числом.

Обычно вы не хотите выдавать команды Каира контексту DrawingArea вне обратного вызова ::draw. В то же время вы обычно хотите нарисовать материал за пределами обработчика ::draw (например, длительные вычисления чертежей). Если это ваш случай, тогда вы должны создать дополнительный каирский контекст (внеэкранный) и нарисовать его (возможно, в другом потоке, если вы делаете что-то долгое время). Затем внутри обработчика ::draw с использованием этого внеэкранного контекста в качестве поверхности (надеюсь, моя терминология правильна в отношении контекста, поверхности, живописи, рисунка, но вы получаете эту идею).

Хороший пример того, что есть в документации GTK + на custom drawing, посмотрите на функцию draw_cb.

Смежные вопросы