Рисованные материалы теряются при перекрытии окон в GTK # - PullRequest
2 голосов
/ 13 февраля 2011

Я использую Cairo в приложении GTK # для рисования. Когда другое окно покрывает часть нарисованного контента, перекрывающаяся часть нарисованного контента теряется. Есть ли способ сделать его постоянным?

Вот мой упрощенный метод рисования контента:

void UpdateConnectionLines ()
{
    GdkWindow myWindow = GetGdkWindow();
    myWindow.Clear ();
    using (Context g = Gdk.CairoHelper.Create (myWindow))
    {
        g.Save ();
        g.MoveTo (0, 20);
        g.LineTo (100, 20);
        g.Restore ();
        g.Color = new Color (0, 0, 0);
        g.LineWidth = 1;
        g.Stroke();
    }
}

Ответы [ 2 ]

3 голосов
/ 13 февраля 2011

Если вы рисуете непосредственно в форме, то вам нужно сделать это в событии рисования формы, чтобы убедиться, что оно присутствует каждый раз при рисовании формы (т. Е. Когда другое окно закрывает ее, а затем перемещается, когда ее размер изменяется)., ...)

0 голосов
/ 13 февраля 2011

Оценивая ответ Джона Кернера, я нашел решение, которое работает для каждого виджета GTK #. Я использую универсальный WidgetEvent ExposeEvent (спасибо, ptomato) и перерисовать.

Я добавляю свой обработчик событий с помощью

this.ExposeEvent += new global::Gtk.ExposeEventHandler (this.Handle_ExposeEvent);

и тогда обработчик просто вызывает мой метод:

protected virtual void Handle_ExposeEvent (object o, Gtk.ExposeEventArgs args)
{
    UpdateConnectionLines();
}

EDIT:

На самом деле, я не правильно ввел RTF M , так как в нем прямо говорится:

Лучшее место для создания и использования Контекст - это ExposeEvent для данный виджет. Обычно вы хотите используйте Gtk.DrawingArea для этой задачи. Пример реализации Метод выставления события:

...