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

Reply via email to