Post by Manlio PerilloInfatti sono quelle che 'uso' attualmente.
'Uso' tra virgolette perche' le ho installate, mi sono letto il
manuale, ma non ho ancora avuto modo di usarle.
Questo non e` un problema, nemmeno io le uso poi molto attivamente, ma
ne seguo lo sviluppo e mi tengo aggiornato su di loro.
Post by Manlio PerilloMi dai qualche link?
Pero' che rammarico sapere che Java ha alle spalle una azienda come
Sun che puo' permettersi queste cose, mentre Python...
http://www.sun.com/software/javadesktopsystem/details.xml
"""
A modern desktop environment, based on GNOME, that provides a colorful
and intuitive user interface that enables users to easily locate
documents, access menus, launch applications, and personalize their work
environment. It comes with an extensive set of tools and utilities. The
desktop will have a new unified, yet distinctive, Sun branded Look and
Feel.
"""
http://www.gnome.org/about/why.html
"""
GNOME is the desktop of choice for industry leaders like IBM, HP, and
Sun. Governments in places as diverse as Kenosha, Wisconsin, in the US,
Extremadura, Spain, and Beijing, China, have selected GNOME for their
desktops. With a large number of users, and a wide range of vendors, you
can be assured of availability and support for a long time to come.
"""
Post by Manlio PerilloIn effetti sono stato troppo avaro!
Allora.
1) XWindows diventasse multipiattaforma, come OpenGL.
Anzi, forse e' una pazzia, ma mi piacerrebbe che il server X (ridotto
di funzionalita') girasse sulla GPU.
E` difficile... XWindows e` un server e grosso e va aggiornato. Girare
sulla GPU e` un suicidio e ridurlo di funzionalita` una pazzia. Inoltre
XWindows e` gia` multi-piattaforma ma per windows, oltre alla versione
in cygwin ne esistono solo a pagamento. Per tutti gli altri OS, ma
proprio tutti, esiste gia`.
Post by Manlio Perillo2) Dato che XWindows non impone una interfaccia utente (per questo mi
piace, Windows in questo caso e' un casino immane), si deve definire
una interfaccia grafica e relativa API.
Nella mia piccola esperienza ho notato che sistemi cone GTK o Motif,
sono troppo ad alto livello. Infatti, prendendo ad esempio GTK,
l'utilizzatore non vede (quasi) piu' i windows message, ma solo slot e
callback.
E questo in che modo sarebbe un problema? Magari e` tra le cose che non
hai letto, ma GTK permette di creare i tuoi segnali personalizzati.
Detto questo, astrarre e` sempre bene, specialmente quando e` fatto
bene.
Post by Manlio PerilloQuello che intendevo era una API come quella di Windows.
Qualcosa che puo' essere implementato in kernel space, insomma.
Questo e` male. La GUI in kernel space e` male, se ne e` gia` parlato
troppo su icod, qua sarebbe OT. Detto questo: al massimo in kernel space
implementi le xlibs, non certo le GTK. Perche` in windows solo GDI e`
nel kernel non le MFC. Ma tutto cio` resta assolutamente inutile.
Post by Manlio Perillo3) Infine il terzo componente e' il sistema di widget.
Avendo alle spalle tutto il lavoro di cui al punto 2), diventa
flessibile scrivere un toolkit interamente in Python, sfruttandone
cosi' tutti i vantaggi.
Anzi, si potrebbe usare Twisted come base...
Sinceramente: Twisted gia` usa glib come reactor ed e` il miglior
reactor tra i vari che supportano toolkit grafici. Inoltre pygtk
permette gia` ora di scrivere nuovi widget usando puro python.
Esempio:
import pygtk
pygtk.require('2.0')
import gobject
import pango
import gtk
from gtk import gdk
if gtk.pygtk_version < (2,3,93):
print "PyGtk 2.3.93 or later required for this example"
raise SystemExit
TEXT = 'A GtkWidget implemented in PyGTK'
BORDER_WIDTH = 10
class PyGtkWidget(gtk.Widget):
__gsignals__ = { 'realize': 'override',
'expose-event' : 'override',
'size-allocate': 'override',
'size-request': 'override',
}
def __init__(self):
gtk.Widget.__init__(self)
self.draw_gc = None
self.layout = self.create_pango_layout(TEXT)
self.layout.set_font_description(pango.FontDescription("sans
serif 16"))
def do_realize(self):
self.set_flags(self.flags() | gtk.REALIZED)
self.window = gdk.Window(self.get_parent_window(),
width=self.allocation.width,
height=self.allocation.height,
window_type=gdk.WINDOW_CHILD,
wclass=gdk.INPUT_OUTPUT,
event_mask=self.get_events() |
gdk.EXPOSURE_MASK)
self.draw_gc = gdk.GC(self.window,
line_width=5,
line_style=gdk.SOLID,
join_style=gdk.JOIN_ROUND)
self.window.set_user_data(self)
self.style.attach(self.window)
self.style.set_background(self.window, gtk.STATE_NORMAL)
def do_size_request(self, requisition):
width, height = self.layout.get_size()
requisition.width = width // pango.SCALE + BORDER_WIDTH*4
requisition.height = height // pango.SCALE + BORDER_WIDTH*4
def do_size_allocate(self, allocation):
self.allocation = allocation
if self.flags() & gtk.REALIZED:
self.window.move_resize(*allocation)
def do_expose_event(self, event):
self.chain(event)
x, y, w, h = self.allocation
self.window.draw_rectangle(self.draw_gc, False,
x + BORDER_WIDTH, y + BORDER_WIDTH,
w - BORDER_WIDTH * 2, h -
BORDER_WIDTH * 2)
fontw, fonth = self.layout.get_pixel_size()
self.style.paint_layout(self.window, self.state, False,
event.area, self, "label",
(w - fontw) / 2, (h - fonth) / 2,
self.layout)
gobject.type_register(PyGtkWidget)
win = gtk.Window()
win.set_title(TEXT)
win.connect('delete-event', gtk.main_quit)
w = PyGtkWidget()
win.add(w)
win.show_all()
gtk.main()
--
Valentino Volonghi aka Dialtone
Now Running MacOSX 10.3.8
Blog: http://vvolonghi.blogspot.com
http://weever.berlios.de