2010-05-03 12 views
7

Me gustaría construir una GUI donde cada píxel esté bajo mi control (es decir, no usar los widgets estándar que ofrece algo como GTK +). Renoise es un buen ejemplo de lo que estoy buscando producir.¿Cómo construiría una GUI "píxel perfecto" en Linux?

¿Está llegando al nivel Xlib o XCB el mejor camino a seguir, o es posible lograr esto con frameworks de nivel superior como GTK + (quizás incluso PyGTK)? ¿Debo estar mirando a El Cairo para el sorteo?

Me gustaría trabajar en Python o Ruby si es posible, pero C también está bien.

Respuesta

7

Con el kit de herramientas Clutter (u otro widget de lienzo/kit de herramientas) puede compilar dicha interfaz. No aconsejaría ir al nivel de Xlib/XCB o DrawingArea porque requeriría implementar gran parte de la funcionalidad genérica ya presente en los lienzos.

+0

¡Guau! Clutter se ve genial! Gracias Dmitry! ¿Hay alguna razón por la que * no debería * usarlo? – splicer

3

Es probable que desee algo como pygame luego.

1

GTK y PyGTK son probablemente las herramientas incorrectas para usar. No es imposible, porque podría hacer que toda su aplicación sea una gran gtk.DrawingArea (un ejemplo de esto donde realmente tiene sentido es Gargoyle), pero para cualquier tipo de interfaz gráfica de usuario complicada se volvería loco.

1

En términos simples, necesitas algo que te brinde un rectángulo delimitador y un reino libre para dibujar en él lo que quieras. Tales objetos son comúnmente llamados "lienzos". He hecho esto antes (en Ruby) usando la clase FXCanvas disponible a través del Fox toolkit, pero también hay otros disponibles (wxWidgets, por ejemplo, pero no tengo experiencia personal con este kit de herramientas).

Tenga cuidado, sin embargo. Las interfaces de bajo nivel como este ofrecen mucha flexibilidad, pero también requieren mucho más trabajo de su parte.

5

En X hay un problema con este enfoque que puede que no haya tenido en cuenta. El tamaño de fuente se mide en puntos (un punto es 1/72 de pulgada) y, por lo tanto, varía en tamaño (píxel) con resolución y tamaño de monitor. Las cadenas de texto también varían en longitud según el idioma, por lo que no es posible determinar qué tan grandes deben ser los botones. Los kits de herramientas GUI comunes para X están diseñados con esto en mente. Aparte de eso, sería fácil simplemente escribir su propio motor de temas para GTK que dibuje todos los widgets exactamente como los desee (usando Cairo [1] o GDK [2]) y haga que su aplicación siempre use ese tema. Quizás también sea posible que su aplicación establezca el tamaño de fuente predeterminado (en puntos) basado en el DPI para obtener siempre el mismo tamaño en píxeles (y, por supuesto, no hacer que su aplicación sea traducible).

Hay al menos un par de GUI que utilizan este enfoque perfecto de píxeles basado en SDL [3], por ejemplo, AGAR [4], PicoGUI [5] y Guichan [6]. La mayoría de ellos están escritos en C++ y algunos en C y, por lo que sé, ninguno de ellos tiene enlaces para Python ni para Ruby. Luego, usando SDL, solo puede tener una ventana de nivel superior, lo que significa que su aplicación (o el kit de herramientas GUI que usa) tiene que hacer su propia ventana de administración para varios cuadros de diálogo y tal. Pero supongo que eso era lo que pretendías de todos modos.

[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 respuesta correcta! – Joshua

Cuestiones relacionadas