[Gtk-sharp-list] Problems with Gdk.Pixmap

Lee Mallabone gnome@fonicmonkey.net
14 Mar 2003 21:39:43 +0000

Content-Type: text/plain
Content-Transfer-Encoding: 7bit

Hi all,

I'm trying to write a custom widget in Gtk# with Gtk.DrawingArea.

I basically want to draw a huge Pixmap and then have my DrawingArea's
expose method draw a small bit of the Pixmap, depending on various

However, only garbled pixels get rendered to my Pixmap. I've attached
the simplest test case I could write that demonstrates this.

Could someone take a look at my attached code and see if it "should
work"? I've not used Gdk very much, so I might just be using Pixmap
wrong. However, I tried to follow Miguel's mlist example to get the
right idea...

If anyone can verify I'm doing The Right Thing, I'll open a bug for



Content-Disposition: attachment; filename=pixmaptest.cs
Content-Type: text/plain; name=pixmaptest.cs; charset=ANSI_X3.4-1968
Content-Transfer-Encoding: 7bit

using Gtk;
using Gdk;
using Pango;
using GtkSharp;

public class PixmapTest: Gtk.DrawingArea
	private const int WIDTH = 60;
	private const int HEIGHT = 400;
	private Pango.Layout textRenderer;

	public PixmapTest()
		SetSizeRequest(WIDTH, HEIGHT);
		textRenderer = new Pango.Layout(PangoContext);
		textRenderer.FontDescription = Pango.FontDescription.FromString("Tahoma 7");
		ExposeEvent += new ExposeEventHandler(ExposeHandler);

	private Gdk.Pixmap image;
	private void CreateBigPixmap(Gdk.Window win)
		image = new Pixmap(win, WIDTH, HEIGHT, -1);	
		if (image == null)
			throw new System.Exception("Pixmap did not initialize!");
		int wide, high;
		image.GetSize(out wide, out high);
		// Draw the background
		win.DrawRectangle (Style.WhiteGC, 1, 0, 0, wide, high);
		// Draw a line and some text
		textRenderer.SetText("TESTING TESTING 123! Testing Pixmap!");
		win.DrawLine(Style.BlackGC, 0, 5, wide, 5);
		win.DrawLayout(Style.BlackGC, 0, 20, textRenderer);
	private void ExposeHandler(object source, ExposeEventArgs args)
		if (image == null)
		args.Event.window.DrawDrawable(Style.BlackGC, image, 10, 10, 
						 0, 0, WIDTH, HEIGHT);
		//args.RetVal = true;

	public static void Main()
		Gtk.Window win = new Gtk.Window("Pixmap test");
		DrawingArea zone = new PixmapTest();