[英]Simple Cairo/Quartz C++ example
我需要在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
(顯然,這假設您已正確安裝了開羅)
開羅不了解Windows或事件循環。 它只知道如何繪制到“表面”中,其中某個表面在某種程度上被定義為“開羅可以繪制的東西”。 它可以創建各種與系統無關的表面,例如內存中的位圖,PDF和PostScript文件,並且可以將表面包裹在一些與系統相關的圖形目標周圍,例如Quartz CGContext
,Windows HDC
或X11 Drawable
。
如果要創建交互式應用程序,則需要使用其他系統來創建屏幕上的繪圖目標並響應用戶輸入。 然后,您可以將系統的屏幕繪制目標包裝在cairo_surface_t
並使用Cairo進行繪制。
所以,你可以使用原生的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_image_surface_create_for_data
包裹cairo_surface_t
圖周圍。
或者,對於可以導入簡單RGB位圖的任何框架,都可以使用cairo_image_surface_create
創建位圖,然后使用系統的API將其交給系統。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.