Skip to content

gnustep/libs-renaissance

Repository files navigation

Welcome to GNUstep Renaissance!

GNUstep Renaissance is free software (GNU LGPL), and part of the
GNUstep project.  It is a development framework which runs on top of
the GNUstep libraries or on top of the Apple Mac OS X Cocoa
frameworks, providing an opaque layer to write portable applications.

GNUstep Renaissance is mostly useful to:

 - write GUIs for GNUstep and Apple Cocoa in an open, portable format.
   The GUIs are described by an open, simple, human-editable XML file
   which works on GNUstep (GNU/Linux, *BSD), GNUstep (Windows) and
   Apple Cocoa.

 - generate GUIs for GNUstep and Apple Cocoa programmatically.  Have
   your code or scripts generate simple XML data describing your
   windows and GUIs; Renaissance will magically create the GUIs from
   the XML.

 - write GUIs for GNUstep and Apple Cocoa without using Gorm or
   Interface Builder.  You can create a new GUI by writing an XML
   description of your windows using a simple text editor (vi or emacs
   will do).  The XML is extremely simple and is designed to be a
   pleasure to edit by hand.

 - write GUIs for GNUstep and Apple Cocoa that can be translated
   easily in a large number of languages.  Renaissace decouples the
   GUI localization from the GUI design, allowing you to easily
   translate your software in a number of languages, and making easy
   the maintenance of translations.  An end-to-end localization
   toolchain based on gettext is planned for Renaissance 1.0 - which
   will finally allow you to have GNUstep or Apple Cocoa applications
   that are as easy to translate as any other gettext-based system.

In short, GNUstep Renaissance allows you to describe your user
interfaces (that is, the windows in your application, and the buttons,
boxes, textfields, etc in the windows) in simple and intuitive XML
files, using an open, standard format describing the logic of the
interface.  GNUstep Renaissance can then, at run time, generate the
user interfaces (using the native host OpenStep-like libraries) by
reading the XML files.  The connections between the objects created
from the XML files, and the other objects in the application are done
via outlets (as traditionally in OpenStep); a new quick and intuitive
syntax has been developed to make creating outlets as easy as
possible.

GNUstep Renaissance contains quite a few new ideas over previous
technologies.  Some of the main end-user advantages of GNUstep
Renaissance over previous OpenStep-inspired technologies for the same
task are:
          
 - Portability.  User interfaces built using GNUstep Renaissance are
 truly portable.  They simply run without any change on any
 OpenStep-based platform on which Renaissance has been ported
 (currently, at least on both GNUstep and Apple Mac OS X).

 - Open, simple and standard format.  User interfaces built using
 GNUstep Renaissance are saved into open, simple files which can be
 edited and read on any platform using any text editor.  The XML
 format has been designed to be as easy to edit as possible.  We will
 have a specific graphical builder for GNUstep Renaissance, which will
 make editing directly the XML files a rare operation; still, it's a
 great advantage to be able to actually edit and inspect them directly
 whenever needed.  Your user interfaces will no longer be locked in
 binary files which can only be edited using a platform-specific
 application; you will be able to compare different versions of the
 same user interface using diff and cvs diff (you can't get any
 meaningful comparison with binary formats); and your user interfaces
 will be finally stored in a readable format, which you can read even
 from a terminal, making your program easier to check.  The format is
 so nice that I expect many hard hackers will keep creating user
 interfaces directly in XML even when a graphical editor is available!

 - Easy localization.  User interfaces built using GNUstep Renaissance
 are much easier to translate than in all previous technologies.  You
 no longer need to create a new separate interface for the new
 language: you can just provide the translation of the strings in a
 .strings file, and GNUstep Renaissance will automatically replace
 every string in the existing interface with the corresponding
 translation.  Previous technologies can't do this because they don't
 support automatic sizing and layout of widgets.

 - Themeability.  Themes are a problem for traditional OpenStep-like
 technologies, because a change in theme changes all the widgets
 appearances and sizes.  User interfaces built using GNUstep
 Renaissance can survive easily a change in theme, since all sizing
 and layout of widgets is done dynamically at runtime.  Previous
 technologies can't, and you would need to create a different user
 interface for each different theme.
        
GNUstep Renaissance compares favourably to other non-OpenStep
technologies for similar tasks as well:

 - Easy, intuitive integration with the rest of the software.  GNUstep
 Renaissance uses outlets and connections (which are made possible by
 Objective-C) to connect at run time user interface objects to other
 objects in the application.  This is the traditional magic used by
 NIB files (of NeXTstep and OpenStep fame) to integrate user
 interfaces with the rest of the program.  When a file is loaded, you
 can have arbitrary instance variables of objects in your application
 automatically set to point to newly created buttons or other widgets;
 and vice versa, you can have instance variables and properties of
 user interface objects set to point to objects in your application.
 You can control very easily these connections from the file itself.

 - More intelligent autolayout mechanism.  GNUstep Renaissance
 implements new autolayout ideas whereby each object in the interface
 contains enough intelligence to provide an intelligent default
 autoresizing behaviour.  For example, buttons automatically know they
 should not be resizable, while editable textfields automatically know
 they should be resizable horizontally but not vertically.  Containers
 automatically gather all this information, and can automatically
 compute reasonable borders and alignments, and use them to layout
 automatically without programmer's intervention.  The result is that
 you can create a window by just creating objects, and putting them in
 boxes -- without having to spend time setting spacing, borders,
 resizing behaviours -- unless you really need to, in order to get a
 special effect.  In the normal case, you will at most need to set a
 few align flags (left vs center vs right).  This cuts down on
 development time a lot, and also creates better user interfaces,
 since GNUstep Renaissance is following a strict, mechanical logic
 when choosing autolayout behaviours: programmers often pay too little
 attention to sizing and layout flags and details, resulting in user
 interfaces which work but which often have quite a lot inconsistent
 (or simply wrong) sizing and layout details.  This can't happen with
 GNUstep Renaissance.
        
Renaissance is composed of the following blocks:

 - AutoLayout: a collection of autolayout objects (h/v boxes, grids,
 spaces, ...), providing automated runtime widget layout, similar to
 what you find in most other toolkits on the market ... similar, but
 better :-) The missing piece of the AppKit.  Depends on gnustep-gui.

 - Markup: an xml parsing/generating engine.  Depends on gnustep-base.

 - TagLibrary: a standard set of tag objects for use by the xml
 parsing/generating engine in order to read/write gui windows, menus,
 panels, etc.  Depends on the previous parts: AutoLayout and Markup.

        
Renaissance was written by Nicola Pero
(nicola.pero@meta-innovation.com) and is part of the GNUstep project
(http://www.gnustep.org).
        
GNUstep Renaissance home page is at http://www.gnustep.it/Renaissance.