protected override bool OnExposeEvent (Gdk.EventExpose e) { // base.OnExposeEvent (e); if(!IsRealized) { return false; } Cairo.Context cr = Gdk.CairoHelper.Create(GdkWindow); foreach(Gdk.Rectangle rect in e.Region.GetRectangles()) { Console.WriteLine ("Drawing at {0},{1} {2}x{3}", rect.X, rect.Y, rect.Width, rect.Height); cr.Rectangle(rect.X, rect.Y, rect.Width, rect.Height); cr.Clip(); Draw(cr); } ((IDisposable)cr).Dispose(); return false; } private void Draw (Cairo.Context cr) { cr.Color = new Cairo.Color (1.0, 1.0, 1.0, 1.0); cr.Rectangle ((double) 40, (double) 40, (double) 100, (double) 100); cr.Fill (); cr.Stroke (); Console.WriteLine ("Done drawing"); }