Forum: PC-Programmierung [C] GTK/gtk_menu_bar und Cairo


von Andreas F. (bazo)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte mit GTK ein kleines Programm schreiben, das mir aus einem 
Satz Parameter jeweils einen graphisch als Kurve darstellt. Dabei soll 
über den Plot Menüpunkt der jeweilige Parametersatz ausgewählt werden

Das mit dem Menu unter GTK funktioniert dank 
http://www.zetcode.com/tutorials/gtktutorial/menusandtoolbars/ auch, im 
dem angehängten Beispiel ist es zum Testen nur einen Menüpunkt. Die 
entsprechende Callback-Funktion wird aus dem Menü aufgerufen,soweit ist 
das in Ordnung

Nur weiss ich nicht, wie ich in der entsprechende Callback Funktion 
Cairo beibringe, in das Fenster zu zeichenen.

Das Tutorial 
http://zetcode.com/tutorials/cairographicstutorial/cairobackends/, bzw. 
http://zetcode.com/tutorials/cairographicstutorial/basicdrawing/ 
arbeitet aber immer mit on_expose_event, das nützt mir aber nichts, weil 
ich in Abhängigkeit von dem gewählten Menupunkt unterschiedliche 
Ausgaben haben möchte.

Kann mir jemand einen Tipp geben, wie man das in GTK bewerkstelligt, 
über das Menu eine entsprechende Grafik zu erstellen?

von Andreas B. (andreasb)


Lesenswert?

Andreas F. schrieb:
> Kann mir jemand einen Tipp geben, wie man das in GTK bewerkstelligt,
> über das Menu eine entsprechende Grafik zu erstellen?

Garnicht.

Genau genommen geht es schon, jedoch ist beim nächsten Repaint alles 
wider weg, daher der falsche Ansatz.

Du machst dir ein enum oder eine Variable, wie auch immer, in der 
Speicherst du was gezeichnet werden soll.

enum {
  KURVE_1,
  ETWAS_ANDERES
}


Im menu callback weisst du einer Variable den Typ zu:
typ = KURVE_1;
und sagts GTK es soll neu gezeichnet werden
gtk_widget_queue_draw_area(dein_widget);


Im expose event zeichnest du dann deine Kurve.

switch(type) {
   case KURVE_1:
     Zeichenn mit cairo...
     break;
   case ETWAS_ANDERES:
     Zeichenn mit cairo...
     break;
}


Der Expose event tritt öfters auf, z.B. wenn du die Grösse des Fensters 
änderst, minimierst etc.



mfg Andreas

von Andreas F. (bazo)


Lesenswert?

Hallo Andreas,

das sieht jetzt prinzipiell gut aus, danke für die Hilfe.

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.