Klappt leider nicht.
Ich hab mal ein wenig in der Online Hilfe von Cairo geschmökert und - was ich vorher nicht wusste - es werden bei den beiden Funktionen lediglich Zeiger auf bestimmte Strukturen gesetzt, keine Images o.ä. angelegt (wie ich annahm).
Wie auch immer, mit dieser Erkenntnis hab ich mir dann zwei Prozeduren geschrieben die einfach vor und nach einer Cairo - Zeichenoperation aufgerufen werden. Sozusagen ein StartDrawing und StopDrawing Ersatz. Mit dieser Lösung kann ich durchaus leben.
Hier mal ein Codeschnipsel wie man das anwendet:
Code: Alles auswählen
XIncludeFile "cairo180.pbi"
Enumeration
#Win
#Canvas
EndEnumeration
;================================================================================
; Diese Prozedur ist vor jeder Cairo Zeichenoperation aufzurufen
;================================================================================
Procedure cairo_startdrawing( canvas )
Protected su.i, cr.i
su = cairo_win32_surface_create( StartDrawing( CanvasOutput( canvas ) ) )
cr = cairo_create( su )
cairo_surface_destroy( su )
ProcedureReturn cr
EndProcedure
;================================================================================
; Diese Prozedur ist nach einer Cairo Zeichenoperation aufzurufen
;================================================================================
Procedure cairo_stopdrawing(cr)
StopDrawing()
cairo_destroy( cr )
EndProcedure
If OpenWindow( #Win, 0, 0, 800, 600, "Cairo-Canvas", #PB_Window_SystemMenu | #PB_Window_ScreenCentered )
CanvasGadget( #canvas, 0, 0, 640, 480 )
;Zeichne was
cr = cairo_startdrawing( #canvas )
;cls
cairo_set_source_rgb (cr, 1, 1, 1)
cairo_paint (cr)
cairo_set_source_rgb (cr, 0, 0, 0)
cairo_move_to (cr, 128.0, 25.6)
cairo_line_to (cr, 230.4, 230.4)
cairo_rel_line_to (cr, -102.4, 0.0)
cairo_curve_to (cr, 51.2, 230.4, 51.2, 128.0, 128.0, 128.0)
cairo_close_path (cr)
cairo_move_to (cr, 64.0, 25.6)
cairo_rel_line_to (cr, 51.2, 51.2)
cairo_rel_line_to (cr, -51.2, 51.2)
cairo_rel_line_to (cr, -51.2, -51.2)
cairo_close_path (cr)
cairo_set_line_width (cr, 10.0)
cairo_set_source_rgb (cr, 0, 0, 1)
cairo_fill_preserve (cr)
cairo_set_source_rgb (cr, 0, 0, 0)
cairo_stroke (cr)
cairo_stopdrawing(cr)
;Zeichne nochmal was
cr = cairo_startdrawing( #canvas )
cairo_set_source_rgb (cr, 1, 0, 0)
xc = 128.0
yc = 128.0
Dim tdashes.d(4)
tdashes(0) = 50
tdashes(1) = 10.0
tdashes(2) = 10.0
tdashes(3) = 10.0
ndash = 4
offset = -50.0
cairo_set_dash (cr, @tdashes(0), ndash, offset);
cairo_set_line_width (cr, 2.0)
cairo_move_to (cr, 428.5, 25.5)
cairo_line_to (cr, 228.5, 128.5)
cairo_rel_line_to (cr, -102.4, 0.0)
cairo_curve_to (cr, 51.2, 230.4, 51.2, 128.0, 128.0, 128.0)
cairo_stroke (cr)
cairo_StopDrawing(cr)
Repeat
events = WaitWindowEvent()
Select events
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
Case #PB_Event_CloseWindow
quit = 1
EndSelect
Until quit = 1
EndIf
Vielen Dank.