gpt4 book ai didi

c++ - 简单的 Cairo/Quartz C++ 示例

转载 作者:行者123 更新时间:2023-11-28 04:28:41 28 4
gpt4 key购买 nike

我需要在 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)

最佳答案

Cairo 不知道窗口或事件循环。它只知道如何绘制到“表面”,其中表面有点圆形地定义为“Cairo 可以绘制的东西”。它可以创建各种与系统无关的表面,如内存位图、PDF 和 PostScript 文件,它可以将表面包裹在一些与系统相关的绘图目标周围,如 Quartz CGContext、Windows HDC,或 X11 Drawable

如果你想创建一个交互式应用程序,你需要使用一些其他系统来创建一个屏幕上的绘图目标并响应用户输入。然后,您可以将系统的屏幕绘图目标包装在 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 一起使用 helper 。

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

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

关于c++ - 简单的 Cairo/Quartz C++ 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53574254/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com