Bei libcairo https://cairographics.org handelt es sich um eine leistungsfähige low Level Grafikbibliothek, die viele Ausgabeformate unterstützt und auf allen gängigen Plattformen lauffähig ist. Hier interessieren wir uns insbesondere um Rastergrafiken im PNG Format und um Vektorgrafiken im SVG Format als Ausgabe von libcairo und deren Integration in pvbrowser und in normale Webbrowser.
In https://de.wikipedia.org/wiki/Cairo_(Grafikbibliothek) findet man ein kleines Programmierbeispiel in ANSI C für libcairo.
Die folgenden Quellen findet man im Verzeichnis "pvbaddon/template/cairo" des pvbaddon.tar.gz Zusatzpaketes für pvbrowser.
Die Integration von libcairo wird durch die Klasse pvCairo erreicht. Diese bietet die Möglichkeit mit "setSurfaceToUse()" auszuwählen, ob PNG oder SVG Ausgaben erzeugt werden sollen und ob diese für ein pvbrowser QDraw Widget, eine Datei oder eine Antwort auf ein HTTP GET Request sein sollen.
Mit "beginDraw()" erhält man einen cairo_t Kontext, den man für die Aufrufe der Malfunktionen von libcairo benötigt. Mit "endDraw()" werden die Maloperationen beendet und dynamisch zugeordnete Ressourcen freigegeben.
Falls die Ausgabe in eine Datei erfolgt kann PARAM *p=NULL sein, sonst gibt PARAM *p die Netzwerkverbindung an, über die die Ausgabe an ein pvbrowser Widget mit der ID "int id" geschickt wird oder an einen verbundenen Web Browser als Antwort auf ein HTTP GET Request gesendet wird.
Die Methode "sendFileToQDraw()" ist eine Hilfsfunktion mit der PNG oder SVG Dateien an ein QDraw Widget in pvbrowser geschickt werden können. Falls die Zeit rlTime *ftime; Verwendung findet, sendet die Methode nur dann, wenn sich die Modifikationszeit der Datei nicht geändert hat.