%include "default.mgp" %default 1 xfont utopia-bold-r, size 5, fore "black", back "#001144", bimage "bg.jpg", prefix " " %default 2 xfont utopia-bold-r, size 3, fore "black", back "#001144" %default 3 xfont utopia-bold-r, size 5, fore "black", back "#001144" %default 4 xfont utopia-bold-r, size 5, fore "black", back "#001144" %page %back "rgb:8f8f/8282/7070" %bimage "bg.jpg" %nodefault %fore "yellow", size 7 %center, fore "black" %image "gnome-logo-border.jpg" The GNOME Architecture %size 5 Federico Mena-Quintero %size 4 Red Hat Advanced Development Labs %page Overview What is in GNOME? Architecture in detail GNOME programming guidelines %page What is in GNOME? (1) Graphical desktop environment GTK+ as the GUI library and object system Standard GUI Consistent look and feel Drag and drop Application framework High-level widgets for applications Internationalization (all 20 letters) Session management Configuration back-end %page What is in GNOME? (2) Imaging architecture The GNOME canvas Libart imaging model Printing system Font system Component model CORBA as the backend Bonobo component model Interfaces for (lack of) Unix services %page What is in GNOME? (3) Miscellaneous backend libraries libxml - XML loading/saving/parsing gnome-db - Generic database API libglade - GUI builder library gnome-mailer - Mail API libgtop - System information zvt - Fast terminal emulation widget %page GTK+ and Glib Glib Data structures Utility functions Main loop abstraction Portability functions Threads and mutexes GTK+ Gdk wraps Xlib GTK+ provides objects and widgets %page Glib (1) Data structures Lists Trees Hash tables Resizable arrays Strings Relations (N-way mappings) Generic cache %page Glib (2) Utility functions Memory allocation and memory chunks Assertions for correctness Logging and debugging Datasets and hooks Date functions A lexical scanner %page Glib (3) Main loop abstraction Data sources for select(2) functionality I/O channel abstraction Timers Idle functions Portability functions All sorts of weird string functions Byte-swapping functions Useful macros Thread and mutex abstraction %page Gdk General Drawing Kit Thin wrapper over Xlib Makes operations less hard (or easier) Ported to Win32 as well Port{ed,able} to exotic window systems %page GTK+ GIMP Toolkit Object and type system Single inheritance Signal/slot mechanism Dataset mechanism Dynamic type registration Widget system Widgets and containers Geometry negotiation Signals for notification %page GTK+ Widget Organization Base GtkWidget class Signals for events Signals for map, unmap, realize, unrealize, etc. Base GtkContainer class Containers are widgets They manage their children's geometry Request/allocate size negotiation policy %page GTK+ Drag and Drop Xdnd and Motif protocols Xdnd adopted by others as well Motif is buggy and undocumented But you already knew that %size 5 Transparent protocol GTK+ can switch protocols in mid-drag Operations abstracted by a single API Based on MIME-types %page Imlib Raster's image loading/rendering library Image loading with fallbacks Color reduction and dithering Image/pixmap cache %page GdkRGB and GdkPixbuf GdkRGB Raph Levien's image dithering library Raster vs. Raph in faster-than-thou High-quality dithering Part of Gdk GdkPixbuf Replacement for gdk_imlib Separates loading, caching, and rendering Uses GdkRGB %page Programmers need coffee Go get some Cookies/biscuits, too, if you want Don't forget to come back %page Core GNOME libraries Libgnome for UI-independent stuff Configuration file handling Metadata for files MIME-type handling URL and Mozilla-remote handling High score handling Desktop entry files Libgnomeui for GUI framework High-level widgets Session management client The GNOME canvas %page Libgnome features Metadata information for files Icons images, positions Stored in a db2 database Per-user and systemwide metadata MIME-types Basic data typing system Files are typified via a regex or file(1)-like match Actions bound to MIME-types URLs, scores, desktop entries %page Libgnomeui features High-level widgets Toplevel application window Menus and toolbars Stock icons Property dialogs GnomeDruid (wizards) Multiple document interface (MDI) The GNOME canvas Session management client Implemented as a GtkObject Signals for SM requests %page Internationalization and Localization I18N and L10N for lazy typists Message catalogs GNU gettext Team of GNOME translators Unicode and bi-directional text Wait for the next version of GTK+ %page Bonobo Component Model (1) %center %image "bonobos.jpg" %page Bonobo Component Model (2) Based on MS COM/OLE/ActiveX CORBA as the backend Base object operations Reference counting ::query_interface() %page Bonobo Component Model (3) Linking and embedding Components must provide a views In-place components are X windows Nested canvases in the future Persistence To files To storages and streams Miscellanea Menu/toolbar negotiation Verbs for actions %page Lack of Services in Unix No way to send mail popen("/usr/lib/sendmail") ??? Qmail or FunnyMail break everything No way to get mail /var/spool/mail is not standard "I get my mail on a socket in /tmp" No way to frob the print queue Lpr is not standard No way to add users/groups %page Works in progress gnome-db, a database backend Based on ODBC Postgres, Oracle, MySQL backends gnome-mailer, a mail API Based on Java mail API Virtual folders in the client High-volume mail reading gnome-font, a font system libhnj for typographical stuff High-quality text %page Other GNOME libraries Zvt Fast terminal widget libxml With gdome DOM layer Glade/libglade GUI builder Library for loading GUIs libgtop System information %page Programmers really need coffee You know what to do %page GNOME Programming Guidelines Free software programmers Are a scarce resource May come and go and any time So code must be good Readable/maintainable/extensible No hacks or quick workarounds Correct and secure code %page Future directions Font system Bonobo everywhere System services via CORBA %page That's all, folks! Questions?