Ich würde gerne benutzerdefinierte Zeichnung innerhalb einer Gtk::Layout verwenden. Das heißt, ich verwende die C++ - Bindungen für Gtk3 (GTKmm 3.14.0
), und ich habe eingebettete Widgets auf der "Leinwand" über meiner benutzerdefinierten Zeichnung platziert. Grundsätzlich funktioniert das gut.Scrollbare Zeichnung in Gtk :: Layout
Jetzt hängt das Problem mit dem Scrollen zusammen. Gtk::Layout
kann in eine Gtk::ScrolledWindow
platziert werden, und wenn der scrollbare Bereich auf etwas größer als die sichtbare Zuordnung festgelegt ist, werden Bildlaufleisten angezeigt. Leider beeinflussen diese Bildlaufleisten nur die Platzierung der eingebetteten Widgets, während meine benutzerdefinierte Zeichnung an einer festen Position innerhalb des Fensters bleibt.
Das bedeutet, dass sowohl der Gtk::Allocation
als auch der Kairo-Kontext genau mit dem sichtbaren Bereich zu tun haben, nicht mit dem erweiterten virtuellen "Canvas". Ich kann durch den Zugriff auf die Einstellungen von den Scrollbalken um dieses Problem zu umgehen und dann den kairo Kontext entsprechend übersetzen ...
Meine Frage ist:
- ist dies der richtige Weg, solch eine scrollbare Zeichnung zu behandeln?
- oder gibt es eine Möglichkeit, das Framework für mich arbeiten zu lassen?
ich das richtig verstehen Sie: Sie in dem 'Gtk zeichnen :: Layout- 'direkt? Ich glaube nicht, dass Sie das tun sollten. Wenn Sie etwas zeichnen wollen, sollten Sie verwenden https://developer.gnome.org/gtkmm/unstable/classGtk_1_1DrawingArea.html –
nicht anzunehmen? Bitte lesen Sie die Dokumentation – Ichthyo
Zitat von https://developer.gnome.org/gtkmm/unstable/classGtk_1_1Layout.html#details Gtk :: Layout: Infinite scrollbaren Bereich mit Kind Widgets und/oder benutzerdefinierte Zeichnung. Gtk :: Das Layout ist ähnlich wie Gtk :: DrawingArea, dass es ein „unbeschriebenes Blatt“ ist und nicht alles tun, aber einen leeren Hintergrund standardmäßig malen. Es ist anders, dass es nativ unterstützt das Scrollen (Sie können es hinzufügen, direkt mit einem Gtk :: ScrolledWindow), und es kann Kind-Widgets enthalten, da es ein Gtk :: Container ist. Wenn Sie jedoch nur zeichnen, ist ein Gtk :: DrawingArea die bessere Wahl, da der Overhead geringer ist. – Ichthyo