簡體   English   中英

簡單的Cairo / Quartz C ++示例

[英]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_datacairo_image_surface_create_for_data包裹cairo_surface_t圖周圍。

或者,對於可以導入簡單RGB位圖的任何框架,都可以使用cairo_image_surface_create創建位圖,然后使用系統的API將其交給系統。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM