Copyright 2008 Sun Microsystems 1. Introduction 1.1. Project/Component Working Name: sigcpp, glibmm, cairomm, and gtkmm 1.2. Name of Document Author/Supplier: Ghee Teo, Chris Wang, Elaine Xiong, Simon Zheng 1.3. Date of This Document: 01/30/08 1.5. Email Aliases: 1.5.1. Responsible Manager: leo.binchy@sun.com 1.5.2. Responsible Engineer:ghee.teo@sun.com, chris.wang@sun.com, elaine.xiong@sun.com, simon.zheng@sun.com 2. Project Summary 2.1. Project Description: libsigc++ implements a typesafe callback system for use in widget libraries, abstract interfaces, and general programming. It allows users to define signals and to connect those signals to any callback function, either global or a member function, regardless of whether it is static or virtual. It contains adaptor classes for connecting dissimilar callbacks and has an ease of use unmatched by other C++ callback libraries. cairomm is a C++ wrapper for the cairo graphics library. It offers all the power of cairo with an interface familiar to C++ developers, including use of the Standard Template Library where it makes sense. Even though cairomm can be used on its own, it is often used together with the higher level toolkit C++ wrapper, gtkmm. glibmm is a set of C++ bindings for Glib2 Library, including cross-platform APIs such as a std::string-like UTF8 string class, string utility methods, such as a text encoding converter API, file access, and threads. gtkmm is the official C++ interface for the popular GUI library GTK+. Highlights include typesafe callbacks, and a comprehensive set of widgets that are easily extensible via inheritance. You can create user interfaces either in code or with the Glade User Interface designer, using libglademm. There's extensive documentation, including API reference and a tutorial. 2.2. Risks and Assumptions: gtkmm and glibmm follow the official GNOME Platform Bindings release schedule. This guarantees API/ABI-stability and new releases on a predictable schedule, delivering C++ API for the underlying GTK+ and GNOME APIs as soon as possible. The problem we need deal with is that of the different C++ ABIs of Sun Studio CC and GNU g++. Now that Sun Studio is available as a free download it's not such a big problem, but there are modules that won't build with Sun Studio. However Sun Studio C++ has maintained a stable C++ ABI for over a decade. Considering the g++ compiler in Solaris can't build any 64-bit binaries that are actually usable, we only deliver these packages build with Sun Studio. For those modules that won't build with Sun Studio, It is maintainer's responsibility to fix the build problems. 4. Technical Description: 4.1. Details: libsigc++ provides the following Features: - Compile time typesafe callbacks (faster than run time checks) - Typesafety violations report line number correctly with template names (no tracing template failures into headers) - No compiler extensions or meta compilers required - Proper handling of dynamic objects and signals (deleted objects will not cause seg faults) - Extendable API at any level: signal, slot, connection and trackable - Extensions do not require alteration of basic components - User definable accumulators - A variety of adaptors to change the callback signature: bind, hide, retype, compose and lambda call groups - Various compilers and platforms are supported: gcc, cygwin, mingw32, MS .NET 2003, Sun Forte C++, Compaq C++, Intel C++, IBM AIX, Tru64, IRIX MipsPro. cairomm is part of the gtkmm (gtk--) framework to allow developers to make full use of the capabilities of Object Oriented Programming language features as in C++. Cairo is a graphics description and rendering library. Cairomm provides classes that allow the cairo API to be accessed in an Object Oriented constructs. Cairo allow graphics to be created programmatical in its own language and the be rendered onto surfaces of specific target file formats, such as PostScript,PDF and so on. Current supported rendering surfaces are: - Image Surface (memory buffers) - PDF Surface - PostScript Surface - SVG Surface - Xlib Surface (X11 based systems) - Win32 Surface (Windows) - Quartz Surface (MacOS) - Glitz (OpenGL-accelerated, experimental not fully supported) These surfaces can then be augmented with the upper layer of libraries like that of gtkmm to create GUI application. glibmm develivers a tool called gmmproc that can create gtkmm-style wrapper of glib/GObject-based libraries. For example, gtkmm uses this to generate most of its source code, using .defs files that describe the API of C libraries in a lisp format gtkmm provides the following Features: - Use inheritance to derive custom widgets. - Type-safe signal handlers, in standard C++. - Polymorphism. - Use of Standard C++ Library, including strings, containers, and iterators. - Full internationalisation with UTF8. - Complete C++ memory management - Object composition - Automatic deallocation of dynamically allocated widgets. - Full use of C++ namespaces. - No macros. - Cross-platform: Linux (gcc), FreeBSD (gcc), NetBSD (gcc), Solaris (gcc, Forte), Win32 (gcc, MSVC++ .Net 2003), MacOS X (gcc), others Free software and free of cost for both Open Source and proprietary development. - Discussed, designed and implemented in public. 4.5. Interfaces: Exported Interfaces Interface Stability Comments --------------------- ---------------- ---------------------- SUNWsigcpp Uncommitted Package names SUNWsigcpp-devel Uncommitted SUNWcairomm Uncommitted SUNWcairomm-devel Uncommitted SUNWglibmm Uncommitted SUNWglibmm-devel Uncommitted SUNWgtkmm Uncommitted SUNWgtkmm-devel Uncommitted /usr/lib/libsigc-2.0.so Volatile /usr/lib/libcairomm-1.0.so Volatile /usr/lib/libglibmm-2.4.so Volatile /usr/lib/libglibmm_generate_extra_defs-2.4.so Volatile /usr/lib/glibmm-2.4/proc/gmmproc Volatile /usr/liblibatkmm-1.6.so Volatile /usr/lib/libgtkmm-2.4.so Volatile /usr/lib/libgdkmm-2.4.so Volatile /usr/lib/libpangomm-1.4.so Volatile /usr/lib/glibmm-2.4/include/glibmmconfig.h Volatile /usr/lib/sigc++-2.0/include/sigc++config.h Volatile /usr/include/sigc++-2.0 Volatile Directory for hearder files /usr/include/cairomm-1.0 Volatile Directory for header files /usr/include/glibmm-2.4/glibmm Volatile Header files directory /usr/include/glibmm-2.4/glibmm_generate_extra_defs Volatile Header files directory /usr/include/atkmm-1.6 Volatile Directory for atkmm headfiles /usr/include/gtkmm-2.4 Volatile Directory for pangomm headfiles /usr/include/pangomm-1.4 Volatile Directory for gdkmm headfiles /usr/demo/jds/bin/gtkmm-demo Volatile /usr/lib/pkgconfig/atkmm-1.6.pc Volatile /usr/lib/pkgconfig/gtkmm-2.4.pc Volatile /usr/lib/pkgconfig/pangomm-1.4.pc Volatile /usr/lib/pkgconfig/cairomm-1.0.pc Volatile /usr/lib/pkgconfig/sigc++-2.0.pc Volatile /usr/lib/pkgconfig/glibmm-2.4.pc Volatile Imported Interfaces Interface Stability Comments --------------------- ---------------- ---------------------- GNOME Committed Platform Libraries Committed LSARC/2007/520 GNOME 2.20 GTK+ library 4.9. I18N/L10N Impact: The JDS team and the G11N are working together to evaluation and provide I18N/L10N support 4.10. Packaging & Delivery: The project will be delivering the following packages: SUNWgtkmm SUNWgtkmm-devel SUNWglibmm SUNWglibmm-devel SUNWcairomm SUNWcairomm-devel SUNWsigcpp SUNWsigcpp-devel 5. Reference Documents: gtkmm glibmm homepage http://www.gtkmm.org/ cairomm homepage - http://cairographics.org/cairomm cairomm download: http://cairographics.org/releases/ libsigc++ Homepage - http://libsigc.sourceforge.net libsigc++ Tutorial - http://libsigc.sourceforge.net/libsigc2/docs/manual/html/ libsigc++ API Reference - http://libsigc.sourceforge.net/libsigc2/docs/