After an Intuition comes a Feelin.
-- FEELIN -------------------------------------------------------------------
Feelin is an open-source object-oriented framework for the AmigaOS and
its friends (AROS, MOS and AOS4). It provides a core API available as a
shared library, and an extensible system of classes mainly used to
create and maintain applications. Feelin is made of an intuitive concept
of classes and objects familiar to Amiga developers as well as its own
concepts such as shared objects, Dynamic IDs, XML Applications, an open
and dynamic preference system, a crash free invokation mecanism, its
very own memmory managements system, a message logging system...
My goad, creating Feelin, was to offer a free, easy to use, modern and
secure object-oriented framework that can evolves on its own and be
available to all of our scattered community.
-- HISTORY -- since 20060207 -----------------------------------------------
Although this new release is a MAJOR update, it's still very far from my
goals. A huge set of features was added, mainly related to styles, but
unfortunately I had to disable the preference system and some classes in
order to push a release.
This version introduce Atoms, which associate a unique numeric
representation to a string, making string comparison child play. I
was previously using a Hash tables for this purpose, this method is
far more better.
The preferences were already stored in CSS files since last release,
but it was a "stupid" implementation. This updated one is still very
limited, since it doesn't support selectors, but it finaly
introduces pseudo classes and *real* inheritence.
Previsouly inheritence was granted because classes attributes where
overriting one another, which is stupid and *very* limited. Now a
'style-cache' is created based on an object's true class and its
inheritence. The 'style-cache' has the same properties as the
previous 'associated data' technique: the style of an object 'type'
if decoded only once and shared *a lot*. For example, if you have
1000 buttons in a window, their style is decoded once then cached
and shared with the 999 others.
More over, there is now a *clear* distinction between attributes and
style properties. For example, there is no longer any
"FA_Area_Background" attribute, but a "background" property.
Most attributes have been replaced with their CSS conterparts:
"background", "border", "padding", "min-width", "max-height"... This
version also introduce the "margin" property, which can now be used
to add invisible space around objects.
Obviously as in HTML you can use multiple classes as style class:
"button confirm warn".
ELEMENT / AREA / WIDGET
Because of the new 'styles' support, the Area class has to be
rewritten. It is now a subclass of the Element class. Its sole
purpose is to handle low level graphics such as backgrounds,
palettes, fonds... All 'event' implementation has been moved into
the new Widget class.
CSS definitions where alreay used to define colors, but it was
limited to hex values (#FF00FF), HTML keywords (aqua, black...) and
Feelin keywords (shine, fill). With this update colors definitions
are complete since the functionnal rgb() is now available !
Image specifications where defined using XML format, which was nice
at the time, but I realize it was stupid and to much of a job ! Now
images are simply defined as CSS does, with some extentions.
Obviously you can create solid background using the "red" keyword,
but you can create a two color gradient using "red blue", a three
color gradient using "red green blue", and an 'aqua style' gradient
using four colors. Additionally you can define the angle of the
gradient: "red blue 45°".
Brushes are currently disabled, but you can use pictures instead,
and it's as simple as this: "url(logo.png") ! CSS 'positionning' is
completely handled as well as 'repeat'. I've exented specification
which the 'multiple' keyword, which can be used to split an image in
four states: normal, touch, focus and ghost. Finaly, you can also
'tint' a transparent image by simple adding a color specification if
the declaration: "url(logo.png) red".