Re: [Vala] canberra.vapi
- From: "Michael B. Trausch" <mbt zest trausch us>
- To: Michael 'Mickey' Lauer <mickey vanille-media de>
- Cc: vala-list gnome org
- Subject: Re: [Vala] canberra.vapi
- Date: Sat, 11 Jul 2009 11:49:23 -0400 (EDT)
On Sat, 11 Jul 2009, Michael 'Mickey' Lauer wrote:
Thanks, that's slightly better, still I'd love to have a classical constructor
way of creating a context, like:
var c = new Canberra.Context();
Is this impossible without changes in the library itself?
You can (with a bit of work) create APIs that are more object-oriented. You
have to do a bit of extra work, though, and the function has to return a
pointer to a structure (at least, AFAIK). For example, the xlib function:
Display *XOpenDisplay(char *d);
is a candidate for a constructor call to a Display class:
[CCode(cprefix = "", lower_case_cprefix = "",
cheader_filename = "X11/Xlib.h")]
namespace XLib {
[SimpleType]
[IntegerType]
public struct Window {}
[Compact]
[CCode(cprefix = "", lower_case_cprefix = "",
free_function = "XCloseDisplay", )]
public class Display {
[CCode(cname = "XOpenDisplay")]
public Display(string? name = null);
[CCode(cname = "XDefaultRootWindow")]
public Window get_default_root_window();
}
}
That creates a binding that permits you to do:
XLib.Display d = new XLib.Display();
XLib.Window w = d.get_default_root_window();
In an object-oriented fashion.
Essentially, you can treat any C code in an object-oriented way if it has a
function that initializes a structure and returns a pointer to it, where that
structure's pointer is passed to the functions which are not "public static"
in the compact class definition.
HTH,
Mike
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]