How about:
- render your charts in an ImageSurface, eventually in a background thread,
save it in a class member
- use it to paint the background of the DrawingArea, perform any additional
drawing on top of it

something like:

static ImageSurface build_Surface(int Width, int Height, Color Color)
{
        Context _context = null;
        try
        {
                ImageSurface _surface = new ImageSurface(Format.Argb32, Width, 
Height);
                        
                _context = new Context(_surface);
                        
                _context.Rectangle(0, 0, Width, Height);
                _context.Color = Color;
                _context.Fill();
                        
                return _surface;
        }
        finally
        {
                if (_context != null) ((IDisposable)_context).Dispose();
        }
}

ImageSurface m_surface = build_Surface(512, 512, new Color(1,0,0,1));

private void onExposeEvent (object o, ExposeEventArgs args)
{
        DateTime _ti = DateTime.Now;
        Context _pContext = null;
        try
        {
                _pContext = Gdk.CairoHelper.Create(this.GdkWindow);
                        
                _pContext.Rectangle(0, 0, this.Allocation.Width, 
this.Allocation.Height);
                _pContext.SetSource(m_surface);
                _pContext.Fill();
                        
                // Any additional rendering here

        }
        finally
        {
                if (_pContext != null) ((IDisposable)_pContext).Dispose();
        }
}


--
View this message in context: 
http://mono.1490590.n4.nabble.com/Gtk-DrawingArea-Double-Buffering-with-Cairo-tp3738337p3761932.html
Sent from the Mono - Gtk# mailing list archive at Nabble.com.
_______________________________________________
Gtk-sharp-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/gtk-sharp-list

Reply via email to