GtkSharp:调用IdentityMatrix后滚动DrawingArea渲染异常
GtkSharp DrawingArea滚动渲染异常问题
问题描述
将DrawingArea嵌入ScrolledWindow内,在Drawn事件中绘制一个部分圆盘。当调用args.Cr.IdentityMatrix();代码行时,滚动过程中DrawingArea内部分矩形区域未更新,出现渲染异常;移除该行则显示正常。
测试环境:GtkSharp 3.24.24、.NET 6.0,覆盖Windows 11与Mac系统。
最小复现代码
MinimalExample.cs using Gtk; // GtkSharp (3.24.24.*), .NET 6.0, Windows 11 public class MainWindow : Window { public MainWindow() : base(WindowType.Toplevel) { DrawingArea Area = new DrawingArea(); Area.SetSizeRequest(1000, 1000); Area.Drawn += AreaDrawn; ScrolledWindow Win = new ScrolledWindow { Area }; Win.SetSizeRequest(500, 500); Add(Win); ShowAll(); } void AreaDrawn(object sender, DrawnArgs args) { args.Cr.IdentityMatrix(); args.Cr.SetSourceRGB(1.0, 0.0, 0.0); args.Cr.NewPath(); args.Cr.Arc(120, 120, 120, 0, 5); args.Cr.Fill(); args.Cr.Dispose(); } } class Program { public static void Main() { Application.Init(); Window mainWindow = new MainWindow(); Application.Run(); } }
效果对比
- 预期:ScrolledWindow内的Gtk DrawingArea滚动时渲染正常,完整显示红色部分圆盘
- 实际:滚动时渲染错乱,部分区域未更新
疑问
虽此示例可移除IdentityMatrix调用,但实际项目中必须使用该方法,请问问题出在哪里?
内容的提问来源于stack exchange,提问作者Ivo Rogina
相关产品推荐
相关产品推荐

