[maemo-developers] Hildon-thumbnail's API
From: Philip Van Hoof spam at pvanhoof.beDate: Tue Aug 5 11:18:44 EEST 2008
- Previous message: Standardization of packages version name in the extra repositories
- Next message: Autobuilder for OS2006 wanted?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Dear Hildon developers,
* When you specify a callback, please try to always set "user_data" as
last argument.
This makes generating language bindings for it far more easy
For example for Vala bindings instead of using a generated binding, the
glue developer needs to change this:
[CCode (cheader_filename = "hildon-thumbnail.h")]
public static delegate void ThumbnailFactoryFinishedCallback
(Hildon.ThumbnailFactoryHandle handle, void* user_data, Gdk.Pixbuf
thumbnail, GLib.Error error);
Into this:
[CCode (instance_pos = 1.1)]
public delegate void ThumbnailFactoryFinishedCallback
(Hildon.ThumbnailFactoryHandle handle, Gdk.Pixbuf? thumbnail,
GLib.Error error);
And that's just because Vala is very easy to write a binding for. With
things like PyGTK I guess you have to wrap each user of that callback
into a normal one, and call the actual callback in the abnormal way from
that wrap. Quite cumbersome and hard if everybody would write APIs like
that.
* When you make an API, please always use a real GObject instead of
"typedef gpointer HildonThumbnailFactoryHandle" stuff.
This makes generating language bindings for it far more easy.
Far far more easy, actually.
* When you make a type, please try to be consistent with naming header
files and give them the same name as your type's name. For example
hildon-thumbnail-factory-handle.h if the type is called like
HildonThumbnailFactoryHandle
Not hildon-thumbnail-factory.h unless you call it HildonThumbnailFactory,
which would have been, by the way, a fine name too (I don't know why
adding "Handle" to the type's name makes any sense, but okay).
This makes generating language bindings for it far more easy
* When writing gtk-doc comments, please include all arguments:
Not this:
/**
* hildon_thumbnail_factory_load_custom:
* @flags: #HildonThumbnailFlags indicating which flags to use to create the thumbnail
*
* ...
**/
But this:
/**
* hildon_thumbnail_factory_load_custom:
* @uri: Thumbnail will be created for this URI
* @mime_type: MIME type of the resource the URI points to
* @width: Desired thumbnail width
* @height: Desired thumbnail height
* @callback: Function to call when thumbnail creation finished or there was an error
* @user_data: Optional data passed to the callback
* @flags: #HildonThumbnailFlags indicating which flags to use to create the thumbnail
*
**/
And given what I recommended above, don't put the flags as last, like
how this API ended up becoming, put it in front of user_data or right
after the self.
If the method is a getter for a singleton, GObject libraries usually
call the method something like:
hildon_thumbnail_factory_get or hildon_thumbnail_factory_get_instance
HildonThumbnailFactory*
hildon_thumbnail_factory_get_instance (const gchar *uri,
const gchar *mime_type,
guint width, guint height,
HildonThumbnailFactoryFinishedCallback callback,
gpointer user_data);
* If you make a GObject-like API, any API, always include the self
pointer:
Not this:
void hildon_thumbnail_factory_move(const gchar *src_uri,
const gchar *dest_uri);
But this:
void hildon_thumbnail_factory_move(HildonThumbnailFactory *self,
const gchar *src_uri,
const gchar *dest_uri);
* Etc etc etc
--
Philip Van Hoof, freelance software developer
home: me at pvanhoof dot be
gnome: pvanhoof at gnome dot org
http://pvanhoof.be/blog
http://codeminded.be
- Previous message: Standardization of packages version name in the extra repositories
- Next message: Autobuilder for OS2006 wanted?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
