Re: Raster operations



Hi Asela,

On Tue, 2006-07-11 at 11:45 +0900, Asela Leelaratne wrote:
Hello List members,
[snip]
The problem is I need to do some raster operations like ROP2, ROP3,
Porter and Duff etc... Are there any api's in Gtk(or Gdk) to achive it?
If not is there a library or something that I can use(C language)?
If both the above is not possible is there a standard method to do the
above operations(C language, GDK and Gtk widgets)?

There is support for Porter/Duff operations in cairo. Check the cairo
documentation on cairo_operator_t .

It supports all 12 Porter/Duff operations plus 'add' and 'saturate'.

typedef enum _cairo_operator {
    CAIRO_OPERATOR_CLEAR,
    CAIRO_OPERATOR_SOURCE,
    CAIRO_OPERATOR_OVER,
    CAIRO_OPERATOR_IN,
    CAIRO_OPERATOR_OUT,
    CAIRO_OPERATOR_ATOP,
    CAIRO_OPERATOR_DEST,
    CAIRO_OPERATOR_DEST_OVER,
    CAIRO_OPERATOR_DEST_IN,
    CAIRO_OPERATOR_DEST_OUT,
    CAIRO_OPERATOR_DEST_ATOP,
    CAIRO_OPERATOR_XOR,

    CAIRO_OPERATOR_ADD,
    CAIRO_OPERATOR_SATURATE
} cairo_operator_t;

You just need to set the operator with cairo_set_operator(cairo_t,
cairo_operator_t) and it will be used on subsequent drawing operators.

To pick the cairo context from a GdkDrawable you may use 
cairo_t*  gdk_cairo_create (GdkDrawable *drawable);

Once you aquired the cairo context, you can start to use the cairo API
on it.

// ...
cairo_t ct;
GtkWidget* widget;

widget = gtk_drawing_area_new();
ct = gdk_cairo_create (widget->window);
cairo_set_operator(ct, CAIRO_OPERATOR_DEST_OVER);
// ...

This is available as for GTK+2.8.
-- 
Iago Rubio




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]