Native GTK2 D Bindings
Jacob Carlborg
doob at me.com
Tue Jan 24 12:03:22 PST 2012
On 2012-01-24 17:09, Artur Skawina wrote:
> On 01/24/12 12:15, Kagamin wrote:
>> On Sunday, 22 January 2012 at 21:56:24 UTC, Artur Skawina wrote:
>>>
>>>
>>> Native GTK2 bindings for D.
>>>
>>>
>>> "Native" for two reasons:
>>>
>>> 1. Uses the C API directly. No class wrappers and no function wrappers.
>>> 2. OO interface, giving a native D look and feel.
>>
>> Once again. Is it direct C bindings OR OO interface OR both?
>
> Both.
>
> There are basically three parts:
>
> 1) data type definitions - ie structs, aliases (typedefs), and enums (constants)
> 2) C prototypes; this, plus (1) above, let's you use the C API directly
> 3) "methods", which are actually disguised GTK functions.
>
> An example:
>
> struct Rectangle {
> int x, y, width, height;
>
> // Calculates the intersection of two rectangles. It is allowed for
> // do not intersect, @dest's width and height is set to 0 and its x
> // and y values are undefined. If you are only interested in whether
> // the rectangles intersect, but not in the intersecting area itself,
> // pass %NULL for @dest.
> // RETURNS: %TRUE if the rectangles intersect.
> //<src2>: a #GdkRectangle
> //<dest>: return location for the intersection of @src1 and @src2, or %NULL
> int intersect(Rectangle* src2, /*out*/ Rectangle* dest=null) {
> return gdk_rectangle_intersect(&this, src2, dest);
> }
>
> // Calculates the union of two rectangles.
> // The union of rectangles @src1 and @src2 is the smallest rectangle which
> // includes both @src1 and @src2 within it.
> // It is allowed for @dest to be the same as either @src1 or @src2.
> //<src2>: a #GdkRectangle
> //<dest>: return location for the union of @src1 and @src2
> void union_(Rectangle* src2, /*out*/ Rectangle* dest) {
> gdk_rectangle_union(&this, src2, dest);
> }
> }
>
> So instead of:
>
>> gdk_rectangle_union(&dirtyRect,&event.area,&dirtyRect);
>
> you can write:
>
>> dirtyRect.union_(&event.area,&dirtyRect);
>
> and, once i add the (forgotten) overload:
>
>> dirtyRect.union_(&event.area);
>
> and all of these will result in identical code being emitted.
>
>
> All of the gtk2/*.d files are browsable online:
> http://repo.or.cz/w/girtod.git/tree/refs/heads/gtk2:/gtk2
>
>
> And, yes, this is probably suitable for Deimos, iff part #3 is.
> (I see no advantage in splitting out the trivial "methods")
>
> artur
So what's the difference compared to gtkD:
http://dsource.org/projects/gtkd
--
/Jacob Carlborg
More information about the Digitalmars-d-announce
mailing list