[C] GTK/gtk_menu_bar und Cairo

#2638754
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?
Angehängte Dateien:
#2640420
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

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