LINUX.ORG.RU

Отрисовка собственных виджетов

 ,


0

1

Начал писать граф. редактор на python и gtk3. Решил использовать GtkLayout и размещать на нём кучу GtkDrawingArea.

Обнаружилать проблема с отрисовкой фона (координатная сетка) на этом самом layout'е: при прокрутке не происходит перерисовка.

Код здесь: https://github.com/andy128k/easy-embroidery/blob/master/editor/editor.py#L4

★★★

Ответ на: комментарий от baverman

А почему она должна происходить?

Думаю, потому, что GtkLayout реализует интерфейс GtkScrollable и должен это учитывать. Если это не так, то как сделать правильно?

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

А вообще, я бы просто считал смещение сетки, в зависимости от скролов, чем эту огроменную холстину каждый раз рисовать.

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

надо рисовать в bin_window

Как это согласуется с тем, что cairo-контекст уже создан и передаётся в draw?

Я полагаю, что этот контекст уже связан с bin_window. gtk_cairo_should_draw_window должна это проверять http://git.gnome.org/browse/gtk /tree/gtk/gtklayout.c?h=gtk-3-4#n1026

Ваш вариант отрисовывает только видимую область. При прокрутке видно, что остальная часть не прорисовывается.

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

отрисовывает только видимую область.

Есно, width и height равны алокейшону окна GtkLayout. Всовывай туда размеры «виртуального» холста — получишь результат.

Как это согласуется с тем, что cairo-контекст уже создан и передаётся в draw?

Не знаю, я gtk3 досконально не теребил, но, AFAIK, это обычный контекст, ничего не должно мешать создать свой.

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

Я полагаю, что этот контекст уже связан с bin_window.

С чего это? Твой обработчик вызывается первым.

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

Есно, width и height равны алокейшону окна GtkLayout.

Вот жеж я тормоз! Спасибо.

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