2010-05-03 10 views
7

Mi piacerebbe costruire una GUI in cui ogni singolo pixel è sotto il mio controllo (ad esempio non utilizzando i widget standard che fornisce qualcosa come GTK +). Renoise è un buon esempio di ciò che sto cercando di produrre.Come si costruisce una GUI "pixel perfect" su Linux?

Si sta passando al livello Xlib o XCB il modo migliore per andare, oppure è possibile raggiungere questo obiettivo con framework di livello superiore come GTK + (forse anche PyGTK)? Dovrei guardare il Cairo per il disegno?

Mi piacerebbe lavorare in Python o Ruby se possibile, ma anche C va bene.

risposta

7

Con il toolkit Clutter (o qualche altro widget/toolkit di canvas) è possibile creare tale interfaccia. Non consiglierei di passare al livello di Xlib/XCB o DrawingArea perché richiederebbe molte delle funzionalità generiche già presenti nelle tele.

+0

Wow! Clutter sembra fantastico! Grazie Dmitry! C'è qualche ragione per cui * non dovrei * usarlo? – splicer

3

Probabilmente vorrai qualcosa come pygame allora.

1

GTK e PyGTK sono probabilmente gli strumenti sbagliati da utilizzare. Non è impossibile, perché la tua intera applicazione potrebbe essere un grande gtk.DrawingArea (un esempio di ciò in cui ha effettivamente senso è Gargoyle) ma per qualsiasi tipo di complicata interfaccia grafica impazzirebbe.

1

In termini più semplici, è necessario qualcosa che ti dia un rettangolo di confine e un regno libero per attingervi tutto ciò che desideri. Tali oggetti sono comunemente chiamati "tele". Ho fatto questo prima (in Ruby) usando la classe FXCanvas disponibile attraverso il Fox toolkit, ma ce ne sono anche altri disponibili (wxWidgets, ad esempio, ma non ho esperienza personale con questo toolkit).

Attenzione però. Interfacce di basso livello come questa offrono molta flessibilità, ma richiedono anche molto più lavoro da parte vostra.

5

In X c'è un problema con questo approccio che potresti non aver preso in considerazione. La dimensione del carattere è misurata in punti (un punto è 1/72 di pollice) e quindi varia in dimensioni (pixel) con risoluzione e dimensioni del monitor. Le stringhe di testo avranno anche una lunghezza variabile a seconda della lingua, quindi non è davvero possibile determinare quanti pulsanti grandi e quali debbano essere. I comuni toolkit GUI per X sono progettati pensando a questo. A parte questo, sarebbe facile scrivere il proprio motore tema per GTK che disegna tutti i widget esattamente come li vuoi (usando Cairo [1] o GDK [2]) e fai in modo che la tua applicazione utilizzi sempre quel tema. Forse sarebbe anche possibile per la tua applicazione impostare la dimensione predefinita del carattere (in punti) basata sul DPI per ottenere sempre la stessa dimensione in pixel (e ovviamente non rendere la tua traduzione traducibile).

Ci sono almeno un paio di GUI che utilizzano questo approccio pixel perfetto basato su SDL [3], ad esempio AGAR [4], PicoGUI [5] e Guichan [6]. Molti di questi sono scritti in C++ e alcuni in C e per quanto ne so nessuno di loro ha legami per Python e Ruby. Quindi usando SDL puoi avere solo una finestra di livello superiore che significa che la tua applicazione (o il toolkit GUI che usi) deve fare la propria finestra per gestire varie finestre di dialogo e così via. Ma immagino che fosse quello che intendevi comunque.

[1] cairographics.org/
[2] library.gnome.org/devel/gdk/unstable/index.html
[3] www.libsdl.org/
[4] libagar.org/
[5] picogui.org/
[6] guichan.sourceforge.net/wiki/index.php/Main_Page

+1

La risposta giusta! – Joshua

Problemi correlati