Anton Berezin <tobez@plab.ku.dk> - Dmitry Karasik <dk@plab.ku.dk> - Vadim Belman <voland@plab.ku.dk> - Vladimir Berezin <berezin@plab.ku.dk> - Elisabeth Bock <bock@plab.ku.dk>
All widgets and supplementary objects in PRIMA have a common root class Prima::Object. The explicit goal was to be able to freely intermix methods of PRIMA classes written in C with methods written in Perl. Due to this, PRIMA does not use the h2xs preprocessor. Instead, a special Perl script named gencls produces a C code and headers for thunks. Any method can be written in C and then overridden in Perl in a derived class, and vice versa.
A specification of a self-sufficient C-level API for graphics and windowing was developed and implemented to facilitate the development of the part of PRIMA code written in C in a platform-independent manner. This API is more than just the common subset of supported platforms APIs.
There is no concept of graphics contexts or presentation spaces in PRIMA: graphics is drawn directly on PRIMA widgets. In a way, any PRIMA widget by itself represents a graphics context, with attributes like a current drawing color and a logical raster operation attached.
Only a few basic classes have parts written in C. Standard widgets: buttons, input lines, checkboxes etc. are currently written exclusively in Perl.
PRIMA toolkit is under the BSD-style license (without clauses 3 and 4). It has been used extensively for implementing image processing applications at the Protein Laboratory, University of Copenhagen.