You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:49:53