我试图用C#在Mono的GTK 2.12中绘制DrawingArea。但是,当我调用QueueDrawArea()并发送当前点时,DrawingArea的Expose事件中不存在点值。
我的想法是绘制一个矩形,我会在这个区域放置一些东西,但我不想重绘整个区域。
drawarea.DragDrop += new DragDropHandler (delegate(object o, DragDropArgs args) {
Console.WriteLine(args.X + ", " + args.Y); //correct drop coords shown here
drawarea.QueueDrawArea(args.X, args.Y, 10, 10);
});
ExposeEvent for drawarea:
protected override bool OnExposeEvent(Gdk.EventExpose args)
{
Console.WriteLine (args.Area.X + ", " + args.Area.Y); //(0, 0)
context = Gdk.CairoHelper.Create(args.Window);
context.SetSource(mainSurface);
Cairo.Color color = new Cairo.Color(0.4, 0.8, 0, 1);
context.Antialias = Antialias.None;
context.SetSourceRGBA(color.R, color.G, color.B, color.A);
context.LineCap = LineCap.Round;
context.Rectangle(args.Area.X, args.Area.Y, 50, 50);
context.LineWidth = 10;
context.Clip();
context.Paint();
return true;
}
我一直无法找到为什么会发生这种情况,或者在调用QueueDrawArea()和使用脏区域的值触发Draw事件之间缺少什么潜在的链接。