【问题标题】:Simple Cairo/Quartz C++ example简单的 Cairo/Quartz C++ 示例
【发布时间】:2018-12-01 19:18:33
【问题描述】:

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

我觉得问这个真的很傻,但我似乎无法在网上找到一个简单的例子。一切都使用 Cocoa(即 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)

【问题讨论】:

    标签: c++ macos quartz-graphics cairo


    【解决方案1】:

    Cairo 不知道窗口或事件循环。它只知道如何绘制“表面”,其中一个表面在某种程度上被圆形定义为“开罗可以绘制的东西”。它可以创建各种独立于系统的表面,如内存中的位图、PDF 和 PostScript 文件,它可以围绕一些依赖于系统的绘图目标包裹表面,如 Quartz CGContext、Windows HDC 或X11Drawable.

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

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

    或者你可以使用跨平台的Qt系统进行交互,使用cairo_qt_surface_createcairo_surface_t包裹在QPainter周围。 Qt 是一个 C++ 系统,所以这可能是您最简单的解决方案。

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-25
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 2014-01-17
      • 2011-10-12
      • 2011-08-20
      相关资源
      最近更新 更多