Diese Lösung funktioniert wie ein Zauber. Aber nicht in einem Popup-Fenster.
- Wir haben ein Popup-Fenster, das verschiedene animierte Diagramme malt. Es ist abgeleitet (privat) von Fl_Menu_Window
- das benutzerdefinierte Zeichnen erfolgt in der überschriebenen Funktion draw(). Aber dort gibt das geerbte window() einen nullptr zurück
- wir können ein Fenster mit Fl_Window::current() abrufen, aber das Zeichnen funktioniert dann nur unter Wayland, aber nicht unter X11, manchmal gibt es an anderer Stelle im selben Fenster eine verstümmelte Zeichnung. In den meisten Fällen erzeugen die Kairoer Zeichenanweisungen jedoch keinen sichtbaren Effekt.
Zusammenfassung im Code:in der ImplementierungCode: Select all
class DynTooltip : private Fl_Menu_WindowEinige weitere interessante BeobachtungenCode: Select all
void DynTooltip::draw() { Fl_Window* top = top_window(); // just for debugging Fl_Window* win = Fl_Window::current(); cairo_t *cr = Fl::cairo_make_current(win); cairo_save(cr); // drawing code... cairo_restore(cr); Fl::cairo_flush(cr);
was top_window() zurückgibt, ist das gleiche Fenster wie Fl_Window::current() - window() gibt nullptr zurück
- das Fenster win hat unter X11 einen seltsamen Offset. Unter Wayland gibt es keinen Offset
Unter +x,+y, noch mit -x,-y.
Außerdem zeigt die Cairo-Matrix, die wir mit cairo_get_matrix() abrufen können, keine seltsamen Werte. Unter Wayland beträgt der Ursprungsversatz in der Kairo-Matrix (.5, .5) – während er unter X11 (0,0) beträgt, beträgt der Maßstab in beiden Fällen 1,0.
Hat jemand eine Ahnung, was hier vor sich geht? Oder haben Sie eine Idee, wie wir in diesen Fällen die Kairo-Oberfläche ordnungsgemäß aus FLTK abrufen oder vielleicht etwas tun können, damit die Zeichnung in X11 angezeigt wird und an der richtigen Stelle ist?
Anmerkung: Mit FLTK
Mobile version