[GTK+] cairo: Zeichnen in mehreren Regionen

OP #7883262
Lesenswert?
• ▲
▼

In meinem Toplevel Window gibt es mehrere 'GtkDrawingArea'. Auf diese möchte ich zeichnen. Im Timerinterrupt (50ms) wird eine Schnittstelle abgefragt und bei entsprechenden Daten sollen dies Regionen neu gezeichnet werden (siehe Anhang). Mit einer 'GtkDrawingArea' klappt das auch ganz gut, nehme ich die zweite dazu, stürzt das Programm ab:

GdK-CRITICAL **: The window 0xabc has no drawing context. You must call gdk_window_begin_draw_frame() before calling gdk_window_end_draw_frame().

GdK-CRITICAL **: The window 0xzyx already has a drawing context. You cannot call gdk_window_begin_draw_frame() without calling gdk_window_end_draw_frame() first.

GdK-CRITICAL **: gdk_drawing_context_get_cairo_context: assertion 'GDK_IS_DRAWING_CONTEXT (context)' failed Segmentation fault (core dumped)

Im Grunde genomen will ich die cairo_region nur auf den nächsten Zeichenbereich setzen, aber da fehlt mir die Lösung.

Angehängte Dateien:
OP #7883338
Lesenswert?
• ▲
▼

Vielen Dank für die ausführliche Hilfe!

Die Beschreibung habe ich gelesen und ich denke, weitestgehend verstanden. Auf jeden Fall gibt es zu einem Fenster nur einen cairo_context. Wie mir allerdings an-und abschalten der Doppelpufferung oder das setzen von gtk_widget_set_app_paintable() helfen sollen, ist mir noch nicht ganz klar. Aber macht ja nichts, mein Problem besteht jedenfalls weiterhin.

(Firma: 1984now) #7883817
Lesenswert?
• ▲
▼

Axel V. schrieb:

Gelöst!

Mittlerweile konnte das oben beschriebene Problem durch ingenieurmäßige Evaluierungsmethoden sowie unter massivem Einsatz von NI gelöst werden.

So sollte es sein. Wenn alle Problem auf diese Art gelöst werden würden, hätte wir nicht diese Unmassen mehr oder weniger unbrauchbare Scheiße, die so an Geräten aller Art am Markt ist.

Allerdings: Auch wenn du dein Problem gelöst hast, bringt das anderen rein garnix. Dazu müsstest du hier die Ursache und die Lösung darstellen. Hast du nicht getan. Dafür kann man wohl die sehr wahrscheinliche Begründung annehmen: du hast Mist programmiert und magst den Mist nicht zeigen. Und die Lösung war, es einfach richtig zu machen.

War wohl wie so oft: kaum macht man etwas richtig, schon funktioniert es...

OP #7885425
Lesenswert?
• ▲
▼

(war ein paar Tage im Urlaub, deswegen keine prompte Antwort.)

Wie wohl bereits zu merken war, bin ich im Bereich GTK und Cairo nicht die Konifere. Ich versuche es zu nutzen, ohne ständig damit zu tun zu haben. Ich habe mehere Sachen probiert, so wie ich sie vestanden habe. Letztendlich lief es auf zwei Dinge hinaus:

  • Beim Zeichnen auf mehreren GtkDrawingArea innerhalb eines Fensters gibt es nur einen einzigen cairo context.

  • Es gibt für jede GtkDrawingArea einen drawing context. Außerdem war ein Schreibfehler drin.

Besser kann ich es aus meiner Sicht leider nicht erklären und ich möchte auch meine "Ergebniscode" nicht darstellen, weil das sicher kein Optimum darstellt; ich weiß nicht, ob ich "es jetzt einfach richtig gemacht habe". So, wie der 2. Schreiber getan hat, wäre er wahrscheinlich in der Lage, den Kontext des Problems sauber aufzureißen. Das hätte ich mir jedenfalls gewünscht.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.