Forum: PC-Programmierung Zeichnen mit Cairo unter GTK


von Dominik W. (absurdum)


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?

von Simon B. (nomis)


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

von Dominik W. (absurdum)


Lesenswert?

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.

von Simon B. (nomis)


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

von Stefan Salewski (Gast)


Lesenswert?

@Dominik W.

Ich hatte angefangen mit

http://zetcode.com/tutorials/cairographicstutorial/

von Dominik W. (absurdum)


Lesenswert?

Wie es der Zufall so will bin ich gerade auf diese Tutorial gestossen.
Mein Fehler war, dass die Funktion gtk_widget_queue_draw(widget); heißt.
Manchmal hilft es wirklich eine Nacht drüber zu schlafen.

Aber recht herzlichen Dank!

von KidMoritz (Gast)


Lesenswert?

Das koennte dir evtl weiterhelfen.
Bin heute damit fertig geworden.
Es ist eine Anzeige mit Zeiger.
Der Zeiger bewegt sich, wenn sich der Wert aendert.
In meiner App laeuft der Zeiger aber nur in eine Richtung - wenn der 
Wert groesser wird.

http://www.mikrocontroller.net/attachment/highlight/96884

Gruesse KidMoritz

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.