简单的Cairo / Quartz C ++示例

时间:2018-12-01 19:18:33

标签: c++ macos quartz-graphics cairo

我需要在MacOS上创建并运行一个简单的交互式C ++ Cairo(图形)应用程序,这大概意味着要使用Quartz后端。

我问这个问题真的很愚蠢,但是我似乎无法在网络上找到一个简单的例子。一切都使用可可(ObjectiveC)或Swift。

到目前为止,这是我所拥有的,它可以正确链接,但是什么也不做...但这是因为我缺少一些我确定的东西:

#include <cairo/cairo-quartz.h>
#include <cairo/cairo.h>

int main()
{
    cairo_surface_t* surface = cairo_quartz_surface_create (
              CAIRO_FORMAT_RGB24
            , 640
            , 480
            );

    cairo_t* cr = cairo_create(surface);

    // What next?  How do I get the window to show up?
    // What do I use for my event loop?
}

构建命令:

clang++ $(pkg-config --cflags --libs cairo) main.cpp

(显然,这是假设您已经正确安装了Cairo)

1 个答案:

答案 0 :(得分:1)

开罗不了解Windows或事件循环。它只知道如何绘制到“表面”中,其中某个表面在某种程度上被定义为“开罗可以绘制的东西”。它可以创建各种与系统无关的表面,例如内存中的位图,PDF和PostScript文件,并且可以将表面围绕一些与系统相关的图形目标,例如Quartz CGContext,Windows {{1} }或X11 HDC

如果要创建交互式应用程序,则需要使用某些其他系统来创建屏幕上的绘图目标并响应用户输入。然后,您可以将系统的屏幕绘制目标包装在Drawable中,然后使用开罗进行绘制。

因此,您可以使用本地macOS Cocoa框架进行交互,并使用cairo_surface_tcairo_quartz_surface_create_for_cg_context包裹在macOS原生cairo_surface_t周围。可可应用程序倾向于在macOS上提供最佳的用户体验。

或者您可以使用跨平台的Qt系统进行交互,并使用CGContextcairo_qt_surface_create包裹在cairo_surface_t周围。 Qt是C ++系统,因此这可能是您最简单的解决方案。

或者您可以将SDL与cairosdl助手一起使用。

或者,对于提供访问简单RGB位图的任何框架,您可以使用QPaintercairo_image_surface_create_for_data包裹在位图周围。

或者,对于任何可以导入简单RGB位图的框架,您可以使用cairo_surface_t创建位图,然后使用系统的API将其交给系统。