<!DOCTYPE Article PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.0//EN"[
]>

<Article id="index">
 <artheader>
  <authorgroup>
   <author>
    <firstname>David C.</firstname>
    <surname>Mason</surname>
    <affiliation>
     <orgname>Red Hat, Inc.</orgname>
     <address>
     <email>dcm@redhat.com</email>
     </address>
    </affiliation>
   </author>
  </authorgroup>
  <copyright>
    <year>1999</year>
    <holder>Red Hat, Inc.</holder>
   </copyright>
  <title>GNOME Technologies</title>
  <subtitle>A Brief Description of The Technology Behind GNOME</subtitle>
 </artheader>

<!-- #################### INTRODUCTION #################### -->

 <sect1 id="intro">
  <title>Introduction</title>
  <para>
   GNOME provides the user with a rich, mature desktop environment in
   which they can use their applications. Behind the graphical front
   end of this environment is a robust ''structure'' that allows
   developers to create applications in less time while still using
   tools that allow their applications to remain on the forefront of
   computer technology. 
  </para>
  <para> 
   This paper will briefly detail the base technologies that
   GNOME provides for application developers. For all of these
   technologies there are whitepapers and reference documentation
   available that go into greater detail. You can find this
   documentation and other resources at <ulink
   url="http://www.gnome.org">http://www.gnome.org</ulink>.
  </para>
  <para>
   The technologies detailed in this paper are: GTK+, the relationship
   between GNOME and window managers, CORBA and ORBit, and the GNOME
   Imaging Architecture.
  </para>
</sect1>


<!-- ###################### GTK+ - SECTION ########################### -->


<sect1 id="gtk">
 <title>GTK+</title> 
  <para> 
   GTK+<footnote><para><ulink
   url="http://www.gtk.org">GTK+ homepage</ulink></para> </footnote> is a
   mature, efficient widget set. It provides a modern look-and-feel
   while remaining flexible and efficient. GTK+ provides the application
   developer with a powerful object system that has the ability to
   dynamically query and modify objects and widgets at run&mdash;time. GTK+ is
   an extensible toolkit; for example, GNOME has built-in, high-level
   widgets to speed up the GNOME application development cycle. The user
   will enjoy GTK+ because of the powerful theme engine that allows them
   to change the look of all GTK+ applications with one easy-to-use
   tool.
  </para>
  <para>
   There are several reasons to use GTK+ including the licensing, the
   language bindings, internationalization, and the drag and drop
   support. Each of these are explored in more detail here. 
  </para>
  <formalpara>
   <title>The License</title>
   <para>
    The license covering the GTK+ widget set is the Library General
    Public License (LGPL)<footnote><para><ulink
    url="http://www.gnu.org">The GNU
    hompage</ulink></para></footnote>. This license is very similar to
    the General Public License (GPL)<footnote><para><ulink
    url="http://www.gnu.org">The GNU
    hompage</ulink></para></footnote>, except that you
    may link any application to the widget set no matter
    if that application is free or proprietary software.
   </para>
   </formalpara>
   <formalpara>
  <title>Language Bindings</title>
  <para>
   Because of the open nature of GTK+ development, many people have
   contributed language bindings for GTK+. There are already many
   languages besides C that can be used to create a GTK+
   application. These languages include: C++, Perl, Python, Pascal,
   Objective C, Guile, and Ada.
  </para>
  </formalpara>
  <formalpara>
  <title>Internationalization</title>
   <para>
    GTK+ supports international<footnote><para><ulink
    url="http://www.gnome.org/white-papers/i18n/gtki18n/">GTK+
    Internationalization whitepaper</ulink></para></footnote> text
    display and input by utilizing the X Input Method
    extension. Because of such support, your applications can
    immediately be used with languages that require non-Roman
    character sets, such as those in Asia.
   </para>
   </formalpara>
   <formalpara>
   <title>Drag and Drop</title>
  <para>
   GTK's drag and drop<footnote><para><ulink
   url="http://www.gnome.org/white-papers/DND/DND/">GTK+ Drag and Drop
   Whitepaper</ulink></para></footnote> functionality supports both the
   Xdnd<footnote><para><ulink
   url="http://www.cco.caltech.edu/~jafl/xdnd/">The Xdnd
   protocol</ulink></para></footnote>and Motif<footnote><para><ulink
   url="http://www.opengroup.org/desktop/">Motif</ulink></para></footnote>drag
   and drop protocols which allow for use of drag and drop
   functionality with other widget sets that support these
   protocols. Applications written in widget sets such as Motif or Qt
   that correctly support these protocols will also be able to share
   drag and drop functionality with GTK+ applications. This support is
   a breakthrough in providing the user backwards compatibility with
   their older applications.
  </para>
  </formalpara>
 </sect1>


<!-- ##################### GNOME, WM, X ##############################-->

 <sect1 id="gwmx">
  <title>GNOME, the Window Manager, and X</title>
  <para>
   One aspect of GNOME that new users have a hard time understanding is
   the relationship between GNOME and the window manager and GNOME and
   X. To understand this relationship you must break down the three
   components.
  </para>
  <para>
   The X Window System is the software that allows graphical elements
   to be drawn to the screen. This is the base of the whole system and
   provides the libraries and technologies to make the graphical
   display possible.
  </para>
  <para>
   The window manager is the software that essentially defines the way
   windows are placed on the screen and how the window borders look and
   act. 
  </para>
  <para>
   GNOME is a desktop environment that runs on top of the X Window
   System and a window manager. GNOME was designed to not be dependent
   on any one window manager. Therefore, the user can have a choice in
   which window manager to use. GNOME provides a number of
   ''hints'' to let the window
   manager to work with it in a seamless manner. If a window manager
   contains these hints it is considered ''GNOME Compliant.<footnote><para><ulink
   url="http://www.gnome.org/devel/gnomewm/book1.html">GNOME Window
   Manager Compliance</ulink></para></footnote>'' Currently
   there are a few window managers with all or some GNOME compliancy.
  </para>
  <figure float="1" id="x-wm">
      <title>
       GNOME, X, and the Window Manager working together.
      </title>
      <graphic fileref="x-wm" format="PNG"></graphic>
    </figure>  
 </sect1>
 
<!-- #################### CORBA/ORBit - SECTION ######################-->

<sect1 id="corba-orbit"
 <title>CORBA in GNOME</title>
   <para>
    GNOME provides intercommunication for applications through
    CORBA. CORBA (Common Object Request Broker Architecture) was
    started by the Object Management Group <footnote><para><ulink
    url="http://www.omg.org">OMG
    homepage</ulink></para></footnote>(OMG) to
    allow interoperability among the many available hardware and
    software products.
   </para>
   <para>
    CORBA is designed to allow applications to communicate with each
    other, no matter where they are located (local or network) or how
    they were implemented (language/operating system).   
   </para>  
   <para>
    For example, a program written in the C language running on a
    Linux system would be able to use CORBA to send a request to a
    program written in Python running on a Windows system, without
    ever having to worry about the programming language or operating
    system in use.
   </para>
   <para>
    For this communication to work there is an important piece that
    has to be present&mdash;the Object Request Broker (ORB). Simply
    stated, the ORB is the middleware that allows the communication to
    occur between the two applications.
  </para>
  <formalpara>
  <title>ORBit</title>
  <para>
   ORBit <footnote><para><ulink
   url="http://www.labs.redhat.com/orbit/">ORBit</ulink></para></footnote>is
   an ORB that was adopted by the GNOME project. When the decision was
   first made that CORBA would be implemented in GNOME, there were a
   few ORBs that could have been used. Most ORBs had licensing
   problems and were quickly left out.
  </para>
  </formalpara>
  <para>
   Then, a couple of hackers wrote a small, lightweight ORB called
   ORBit. ORBit has developed rapidly, and once there was a stable
   release, many GNOME applications started to take advantage of it.   
  </para> 
  <para>
   ORBit fit well into the GNOME project primarily because it does not
   have any licensing problems. Like GTK+, it is licensed under the
   GNU LGPL.
  </para>
  <para>
   Secondly, ORBit is resource-friendly. It is a very fast
   implementation of CORBA and has proven to be one of the lightest
   ORBs available in terms of system resource usage.
  </para>
  <para>
   Finally, because ORBit is a free software project, the development
   has been rapid enough to quickly meet the needs of the GNOME
   project.
  </para> 
</sect1>

<!-- ################## GNOME IMAGING ARCHITECTURE - SECTION ################ -->

<sect1 id="imaging">
 <title>GNOME Imaging Architecture</title>
  <para>
   The GNOME imaging architecture provides developers with tools for
   creating interactive graphics displays, high-quality
   printing, and typographic-quality fonts. There are four
   components in the GNOME Imaging Architecture, and although not all of
   them are completed, they promise a development environment that has
   never been offered in the Linux and UNIX worlds. 
 </para>
 <para>
  The four components of the GNOME Imaging Architecture are: the
  Canvas, Libart, GNOME Print, and GNOME Fonts. At the writing of this
  paper the canvas and Libart are complete and GNOME Print and
  GNOME Fonts are still being developed.
 </para>
  <formalpara>
  <title>GNOME Canvas</title>
   <para>
    The GNOME canvas<footnote><para><ulink
    url="http://www.gnome.org/white-papers/Canvas/canvas/">GNOME Canvas
    whitepaper</ulink></para></footnote> is a high-level display engine
    for creating structured graphics. A canvas displays collections of
    items that can be lines, rectangles, elipses, and text.
   </para>
   </formalpara>
   <para>
    The canvas is an extensible, high-level, object-oriented drawing
    widget. Applications can use the basic drawing primitives in the
    canvas to create interactive displays, or define their custom
    canvas item types for complex displays.
   </para>
   <para>
    The GNOME Canvas can render the images in two different modes. One
    mode uses Xlib to render in a fast but lower quality method. The
    second mode uses Libart to render a very high quality image, but
    requires more system resources to do so.  
   </para>
  <formalpara>
  <title>Libart</title>
    <para>
     Libart is a rendering engine that provides a superset of the
     PostScript imaging model, with the addition of alpha transparency
     and native anti-aliasing. Libart is a high-quality rendering
     engine that uses a combination of rendering technologies to
     enhance performance; for example, microtile arrays and sorted
     vector paths.
    </para>
    </formalpara>
    <para>
     A microtile array is a grid-like data structure that lets the
     canvas keep an efficient representation of the regions that need
     to be repainted.   
    </para>
    <para>
     With Libart, the programmer can create a vector path or a
     B&eacute;zier path, and later ask the library to create a sorted
     vector path for performance. A sorted vector path is a vector
     path whose segments have been sorted in a
     monotonically-increasing Y order. This allows for more efficient
     rasterization or scan conversion.
    </para>
    <para>
     Libart also utilizes GdkRGB, which creates a 24 bit rendering
     space for all images, no matter what bit depth the final display
     will be. If the image needs to be displayed in a lower bit depth
     it will still be calculated in a 24 bit, RGB space prior to
     display. The image then goes through a conversion to adjust it to
     the X visual depth. Using this method increases the performance
     in rendering. Performing the calculations in 24 bit depth allows
     for the highest quality image available to the user.
    </para>
</sect1>

<!-- ################# CONCLUSION - SECTION ################## -->

<sect1 id="conclusion">
  <title>Conclusion</title>
  <para>
   The GNOME Desktop Environment is more than just a way of displaying
   your applications within nice looking graphics. GNOME provides a
   firm foundation for application developers.
  </para>
  <para>
   From the widgets provided by GTK+ to the intercommunication
   provided by CORBA, GNOME allows developers to create applications
   that can be on the front edge of Linux and UNIX technologies.
  </para>
 </sect1>

</article>