macos — простой пример Cairo / Quartz C ++

Мне нужно создать и запустить простое интерактивное приложение C ++ Cairo (графика) на MacOS, что, по-видимому, означает использование Quartz Backend.

Я чувствую себя очень глупо, спрашивая об этом, но я не могу найти простой пример в Интернете. Все использует Какао (который является 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)

0

Решение

Каир не знает о окнах или циклах событий. Он просто знает, как рисовать на «поверхностях», где поверхность определена по кругу как «то, что Каир может нарисовать». Он может создавать различные независимые от системы поверхности, такие как растровые изображения в памяти, PDF-файлы и файлы PostScript, и может оборачивать поверхность вокруг некоторых системно-зависимых целей рисования, таких как Quartz CGContextWindows HDCили X11 Drawable,

Если вы хотите создать интерактивное приложение, вам нужно использовать какую-то другую систему, чтобы создать экранную цель рисования и реагировать на ввод пользователя. Затем вы можете обернуть экранную цель рисования системы в cairo_surface_t и использовать Каир для рисования.

Таким образом, вы можете использовать собственные платформы MacOS Cocoa для взаимодействия и использовать cairo_quartz_surface_create_for_cg_context обернуть cairo_surface_t вокруг родного macOS CGContext, Какао-приложения, как правило, обеспечивают лучший пользовательский опыт в macOS.

Или вы можете использовать кроссплатформенную систему Qt для взаимодействия, и использовать cairo_qt_surface_create обернуть cairo_surface_t вокруг QPainter, Qt — это система C ++, так что это может быть вашим самым простым решением.

Или вы можете использовать SDL с cairosdl хелперы.

Или для любой среды, которая предоставляет доступ к простым растровым изображениям RGB, вы можете использовать cairo_image_surface_create_for_data обернуть cairo_surface_t вокруг растрового изображения.

Или для любой структуры, которая может импортировать простое растровое изображение RGB, вы можете использовать cairo_image_surface_create создать растровое изображение, а затем передать его системе с помощью системного API.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]