Re: [Gegl-developer] Transforming types

On Fri, Dec 1, 2017 at 12:06 AM, Tom Lechner <tomscoding gmail com> wrote:
I'm trying to figure out how to translate various data types for use with
gegl. For instance, I want to set a GeglColor on a property. The example
sdl-draw.c uses GeglColor directly in gegl_node_new_child(), but if I try to
do this with gegl_node_set_property(node, "color", GeglColor*), compiler
complains about it not being a GValue.

What is the proper way to convert back and forth between GeglColor and
GValue, or otherwise use gegl_node_set_property() starting with non-GValue
data? (no, I don't really understand the GValue/GObject system at the
moment, hints welcome).

First perhaps try calling gegl_node_set (node, "color", color_value,
NULL) instead?

The gegl_node_set_property call is normally needed mostly for either
language binding implementations for user interfaces implementing
their own equivalent of gegl_node_set or UI toolkit integration.

For setting a property on a node from C you would most commonly use
gegl_node_set rather than gegl_node_set_property, gegl_node_set takes
a NULL terminated list
of key/value pairs as varargs, and determines the expected type of the
argument based on data registered for the property. With this you can
also set multiple properties in
one go:

GeglColor *col;
gegl_node_set (text, "size", 16.0,
                                  "color", col,
                                  "string", "hello there",

I can set things by manually constructing GValues for simple things like
int, strings, but I'm kind of a loss for how to deal with the multitude of
other types that Gegl uses in properties.

If you really want to do this manually the code is more verbose:

  GValue value_color = {0,};
  g_value_init (&value_color, G_TYPE_OBJECT);
  g_value_set_object (&value_color, col);
  gegl_node_set_property (text, "color", &value_color);

For further details I would refer to gobject documentation, as a
starting point there,
gobject has the similar calls working the same way in the g_object_set
/ g_object_set_property calls.

pippin -

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