oxygen-style-animated is a branch of trunk/KDE/kdebase/runtime/kstyles/oxygen that introduces smooth animations for the oxygen widget style.

The code is organized as follow:
--------------------------------

oxygen.h and .cpp take derive from KStyle and take care of all the painting.

Animation code is contained in the ./animations and ./transitions subdirectories.

Each animation is structured in the following way:
For each element (e.g. QScrollBar) to be animated there are two classes:

- oxygenscrollbardata: contains the needed information, objects to animate a give QScrollBar instance. This usually consist of one or two QTimeLine, an event filter, and some needed flags + geometrical information.

- oxygenscrollbarengine: contains the list of all Data objects registered for each new instance of the widget that is animated.
This is used by the style to get the relevant data matching a given widget when painting the later.

Additionaly, two "factory" classes, oxygenanimations and oxygentransitions, keep track of all the engines and engine setup. They serve as an interface between the animations and the KStyle painting primitives.

For the animations located in the ./animations subdirectory, how the informations contained by the Data is used to animate a given widget is def in the oxygen KSTyle class. 

For the animations located in the ./transitions subdirectory, handling the animation is performed using a temporary "cover" widget, namely Oxygen::TransitionWidget, and does not necessit any modification to the oxygen.cpp style itself. (In principle, these animations could be used for any style, and not only oxygen).

Remark on the use of QTimeLine:
Right now all animations are handled by a dedicated class OxygenAnimation, that uses QTimeLine internally. This is to be able to compile and test the style with kde4.3 and Qt4.5. However the OxygenAnimation API has been made identical to QPropertyAnimation class, so that switching to Qt Kinetic for kde4.4 and Qt4.6 is straightforward.

Configuration
-------------

A number of options have been added to oxygen.kcfg to handle the animation configurations. 
They are of two types: animation enability, and animation duration. Only the 'enability' options are configurable by the user in KCM. The duration options are hidden. They can be modified manually by editing the file $HOME/.kde/share/config/oxygenrc (or $HOME/.kde4). Look at the bottom of oxygen.kcfg to get the name and default values for the options.
