Benutzerdefinierte FLTK/Wayland/X11-Zeichnung in einem Popup-FensterLinux

Linux verstehen
Anonymous
 Benutzerdefinierte FLTK/Wayland/X11-Zeichnung in einem Popup-Fenster

Post by Anonymous »

Diese Frage bezieht sich auf eine seit langem bestehende Open-Source-Anwendung, die über eine FLTK-Benutzeroberfläche verfügt und Cairo für benutzerdefiniertes Zeichnen an verschiedenen Stellen verwendet. Mit FTLK 1.4 gibt es jetzt ein hybrides Wayland/X11-Backend. Wir haben eine Lösung gefunden, wie wir unseren benutzerdefinierten Zeichencode für Kairo weiterhin verwenden können, unter anderem auch durch eine SO-Frage.
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:

    Code: Select all

    class DynTooltip : private Fl_Menu_Window 
    in der Implementierung

    Code: 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);
    
    Einige weitere interessante Beobachtungen

    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
Mit Offset meine ich, was win->x() und win->y() zurückgibt.
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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post