Re: Qt bindings and gegl_node_set*

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

 



Hi Jon,

On 06/27/2013 01:46 PM, Jon Nordby wrote:
> which gegl Qt bindings are you referring to?

These ones:
https://git.gnome.org/browse/gegl-qt/

At the moment they mostly consists of the NodeView, but I'd like to
extend them so one could write stuff like this:

Slider { id: brightness }
Slider { id: contrast }
Node {
    Node {
        id: brightnessOp
        operation: "brightness-contrast"
        brightness: brightness.value
        contrast: contrast.value
    }
    Node {
        id: textOp
        operation: "text"
        string: "Hello World!"
    }
    Link {
        input: textOp
        inputPad: "output"
        output: brightnessOp
        outputPad: "input"
    }
}

And then have the output image re-processed whenever the user operates
the brightness or contrast sliders.

So, when defining a QML Node, I don't know in advance which properties
it supports (it depends on the operation, for instance); when the QML
Node sees that a property is changed (or set), it should forward the
information to the underlying GeglNode.
Especially when a QML Node is first constructed, there'll be a bunch of
node properties to be set on the GeglNode at the same time (in the
brightnessOp above, these will be "operation", "brightness" and
"contrast"). So, I wonder, is it fine to set these properties one by
one, or is it better to batch the changes?

>     One thing I'm concerned about is the lack of a gegl_node_setv()-like
>     method, which would allow to set a list of properties on a node at once
>     (I'm aware of gegl_node_set(), but that's unsuitable for language
>     bindings).
>     So the question is: is calling gegl_node_set_property() multiple times
>     exactly equivalent to a single call to gegl_node_set() containing all
>     the properties, or are there performance issues?
>     I see that gegl_node_set_va() calls g_object_{freeze,thaw}_notify(),
>     what is that needed for?
> 
> There is gegl_node_set_valist()

I cannot use *_valist, because I won't have a va_list. All I will get is
a GHashTable of properties-values. A method which takes a GHashTable of
properties would be most convenient (see for instance how libsecret has
secret_password_store() and secret_password_storev()).

>     Does setting a property have any immediate effect on the rendering, or
>     does that happen only when gegl_node_process() is called?
>     Could the order of setting properties have any effect on the rendering
>     results or performance?
> 
> Setting properties on a node in a graph invalidates the graph.
> Computing/rendering the invalidated regions is done as a separate step,
> and it is the application code which controls this. So whether multiple
> invalidation are coalesced or not depends on that code.

Nice. Is the "invalidated" state propagated to all the nodes connected
to the changed node? So, if I expose the "invalidated" signal to QML, I
could do something like:

// this is the final node in the graph
Node {
    onInvalidated: process()
}

and have the changes visible in real-time, right?

Ciao,
  Alberto

-- 
http://blog.mardy.it <- geek in un lingua international!
_______________________________________________
gegl-developer-list mailing list
gegl-developer-list@xxxxxxxxx
https://mail.gnome.org/mailman/listinfo/gegl-developer-list




[Index of Archives]     [Yosemite News]     [Yosemite Photos]     [gtk]     [GIMP Users]     [KDE]     [Gimp's Home]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux