Zeichnen mit Cairo unter GTK

#2001484
Lesenswert?

Muss für mein Studium ein kleines GUI schreiben, in dem ich einen 
empfangenen Wert mittels Balkenanzeige darstellen will.
Ich habe mir eine Funktion geschrieben, welche mir mit Cairo die 
Balkenanzeige je nach Übergabewert zeichnet.
Jetzt steh ich vor dem Problem, dass ich die Anzeige bei Wertänderung 
aktualisieren will. Wie geht das?
Hab jetzt lange gegoogelt und außer der Funktion "queue_draw()" nichts 
gefunden. Die Funktion hört sich ja viel versprechend an, nur find ich 
kein Example, wie man sie einsetzt.

Kann mir dabei jemand helfen?
#2001489
Lesenswert?

Dominik W. schrieb:
> Hab jetzt lange gegoogelt und außer der Funktion "queue_draw()" nichts
> gefunden. Die Funktion hört sich ja viel versprechend an, nur find ich
> kein Example, wie man sie einsetzt.
>
> Kann mir dabei jemand helfen?

Deine Malfunktion sollte an das "expose-event" signal connected werden. 
Dann wird sie immer aufgerufen, wenn ein Bereich des Widgets 
wiederhergestellt werden muss.

Mit queue_draw() wird dann einfach ein neuer expose-event für die 
gesamte Widget-Fläche eingequeued und beim Durchlaufen der Mainloop 
abgearbeitet (d.h. deine Malfunktion wird aufgerufen).

Viele Grüße,
        Simon
#2001530
Lesenswert?

Dominik W. schrieb:
> Wie verwendet man queue_draw() im Code?
> Habe vor zwei Tagen mit GTK und gestern mit Cairo angefangen, kenn mich
> daher noch nicht wirklich gut aus.

Ich habe im Moment nur ein Python-Beispiel parat, das kannst Du unter 
http://www.home.unix-ag.org/simon/files/bahnhofsuhr.py runterladen und 
angucken. Wichtig ist hier, dass die "update_time" Funktion immer wieder 
mal aufgerufen wird und eigentlich nichts weiter macht, als eben das 
queue_draw(). Die Uhrzeigerposition, an die der Zeiger letztlich gemalt 
werden soll, wird dann im expose-handler bestimmt.

In C ist das ganze etwas lästiger, weil C keine bequeme Syntax für 
Methodenaufrufe hat. Da sieht das dann etwa so aus:

gtk_widget_queue_draw (GTK_WIDGET (mywidget));

Je nach Datentyp kann man sich das Typechecking-Cast-Makro 
("GTK_WIDGET()") auch schenken.

Viele Grüße,
        Simon

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren