开罗与GDK有什么关系?

nia*_*agr 2 x11 drawing cairo gdk drawing2d

GDK库的确切功能是什么?Cairo如何适应?它们是竞争技术还是互补技术?他们中的一个是否以任何方式依赖另一个?

sle*_*ske 5

TL; DR:

在最新版本中,GDK是GTK +的平台抽象层。它还为Cairo提供了一些平台集成(例如,用于显示使用Cairo创建的图像),但与此无关。

较长版本:

GDK最初是作为Xlib的包装,Xlib是X Window系统的客户端库。它支持GTK +所需的X Windows API的所有部分,包括绘图操作。

当GTK +移植到其他窗口系统(例如Windows)时,GDK演变为平台抽象层。然后发现,从Xlib“继承”的绘图API存在问题-它使移植变得困难并且受到限制(例如,对透明性的支持很少)。因此,不赞成使用GDK的绘图功能,并在GTK + 3中将其删除(请参阅从GTK + 2.x迁移到GTK + 3:使用cairo进行绘图)。

因此GDK最初是作为一个平台抽象层,包括一个绘图后端。在最新版本中,Cairo是GTK +使用的图形后端,GDK与Cairo并存,用于处理平台创建和输入处理等平台方面。

GDK有一些使用开罗的功能,但是这些功能仅允许与开罗进行互操作。例如,gdk_cairo_create ()允许您为窗口创建一个Cairo曲面,该曲面允许使用Cairo绘制到该窗口。