Properly matched the managed binding at the class and object level
to MaigreStyle (native) and Maigre.Style (managed). When the native
class_init is called, the class is also configured statically on
the managed side. When the native init is called, the object is
configured on the managed side.
The GType is now configured on the managed class, so it can be
a full binding. Essentially Maigre.Style complements the only partial
binding of the stock Gtk.Style, but is fully compatible now in
existing managed code.
The binding generator now fully generates the native and managed side of
the GtkStyle implementation. All methods and properties are fully
automatically defined and bound on both sides.
On the managed side, the Maigre.Theme class is now an abstract class,
and new themes should subclass it. If one wishes to override a drawing
function, which are now proper virtual methods on Maigre.Theme, then the
method will be invoked for drawing. If a drawing method is not
overridden, the base GtkStyle drawing call will be made. Additionally
calling base.DrawFoo from the managed side will invoke the GtkStyle
parent method if desired.
All drawing arguments are presented as properties directly on the theme
object and are cleared and updated before each Draw call. Properties
that are not applicable to the current draw call will contain a default
value (e.g. null).
This implementation is much safer, since it's fully generated directly
from gtkstyle.h, smaller because there is less manual code, faster
because the native drawing context is blitted and directly marshalled
from native to managed (no more field_set calls), and properly object
oriented.
All Draw methods now take a single argument, DrawContext. This structure
contains properties for all possible Draw methods. Only properties valid
to the current Draw method will be set to non-default values.