static void attach (GeglOperation *operation) { GeglNode *gegl, *input, *output, *add, *multiply, *subtract, *blur; gegl = operation->node; input = gegl_node_get_input_proxy (gegl, "input"); output = gegl_node_get_output_proxy (gegl, "output"); add = gegl_node_new_child (gegl, "operation", "gegl:add", NULL); multiply = gegl_node_new_child (gegl, "operation", "gegl:multiply", NULL); subtract = gegl_node_new_child (gegl, "operation", "gegl:subtract", NULL); blur = gegl_node_new_child (gegl, "operation", "gegl:gaussian-blur", NULL); gegl_node_link_many (input, subtract, multiply, NULL); gegl_node_link (input, blur); gegl_node_link_many (multiply, add, output, NULL); gegl_node_connect_from (subtract, "aux", blur, "output"); gegl_node_connect_from (add, "aux", input, "output"); gegl_operation_meta_redirect (operation, "scale", multiply, "value"); gegl_operation_meta_redirect (operation, "std-dev", blur, "std-dev-x"); gegl_operation_meta_redirect (operation, "std-dev", blur, "std-dev-y"); gegl_operation_meta_watch_nodes (operation, add, multiply, subtract, blur, NULL); }
static void attach (GeglOperation *operation) { GeglNode *gegl = operation->node; GeglNode *input, *output, *subtract, *blur1, *blur2; input = gegl_node_get_input_proxy (gegl, "input"); output = gegl_node_get_output_proxy (gegl, "output"); subtract = gegl_node_new_child (gegl, "operation", "gegl:subtract", NULL); blur1 = gegl_node_new_child (gegl, "operation", "gegl:gaussian-blur", NULL); blur2 = gegl_node_new_child (gegl, "operation", "gegl:gaussian-blur", NULL); gegl_node_link_many (input, blur1, subtract, output, NULL); gegl_node_link (input, blur2); gegl_node_connect_from (subtract, "aux", blur2, "output"); gegl_operation_meta_redirect (operation, "radius1", blur1, "std-dev-x"); gegl_operation_meta_redirect (operation, "radius1", blur1, "std-dev-y"); gegl_operation_meta_redirect (operation, "radius2", blur2, "std-dev-x"); gegl_operation_meta_redirect (operation, "radius2", blur2, "std-dev-y"); gegl_operation_meta_watch_nodes (operation, subtract, blur1, blur2, NULL); }
/* in attach we hook into graph adding the needed nodes */ static void attach (GeglOperation *operation) { GeglNode *gegl = operation->node; GeglNode *input, *output, *over, *translate, *opacity, *blur, *darken, *color; GeglColor *black_color = gegl_color_new ("rgb(0.0,0.0,0.0)"); input = gegl_node_get_input_proxy (gegl, "input"); output = gegl_node_get_output_proxy (gegl, "output"); over = gegl_node_new_child (gegl, "operation", "gegl:over", NULL); translate = gegl_node_new_child (gegl, "operation", "gegl:translate", NULL); opacity = gegl_node_new_child (gegl, "operation", "gegl:opacity", NULL); blur = gegl_node_new_child (gegl, "operation", "gegl:gaussian-blur", "clip-extent", FALSE, "abyss-policy", 0, NULL); darken = gegl_node_new_child (gegl, "operation", "gegl:src-in", NULL); color = gegl_node_new_child (gegl, "operation", "gegl:color", "value", black_color, NULL); g_object_unref (black_color); gegl_node_link_many (input, darken, blur, opacity, translate, over, output, NULL); gegl_node_connect_from (over, "aux", input, "output"); gegl_node_connect_from (darken, "aux", color, "output"); gegl_operation_meta_redirect (operation, "radius", blur, "std-dev-x"); gegl_operation_meta_redirect (operation, "radius", blur, "std-dev-y"); gegl_operation_meta_redirect (operation, "x", translate, "x"); gegl_operation_meta_redirect (operation, "y", translate, "y"); gegl_operation_meta_redirect (operation, "color", color, "value"); gegl_operation_meta_redirect (operation, "opacity", opacity, "value"); gegl_operation_meta_watch_nodes (operation, over, translate, opacity, blur, darken, color, NULL); }
static void attach (GeglOperation *operation) { GeglChantO *o = GEGL_CHANT_PROPERTIES (operation); Priv *priv = g_new0 (Priv, 1); o->chant_data = (void*) priv; if (!priv->blur1) { GeglNode *gegl; gegl = operation->node; priv->input = gegl_node_get_input_proxy (gegl, "input"); priv->output = gegl_node_get_output_proxy (gegl, "output"); priv->subtract = gegl_node_new_child (gegl, "operation", "gegl:subtract", NULL); priv->blur1 = gegl_node_new_child (gegl, "operation", "gegl:gaussian-blur", NULL); priv->blur2 = gegl_node_new_child (gegl, "operation", "gegl:gaussian-blur", NULL); gegl_node_link_many (priv->input, priv->blur1, priv->subtract, priv->output, NULL); gegl_node_link (priv->input, priv->blur2); gegl_node_connect_from (priv->subtract, "aux", priv->blur2, "output"); gegl_operation_meta_redirect (operation, "radius1", priv->blur1, "std-dev-x"); gegl_operation_meta_redirect (operation, "radius1", priv->blur1, "std-dev-y"); gegl_operation_meta_redirect (operation, "radius2", priv->blur2, "std-dev-x"); gegl_operation_meta_redirect (operation, "radius2", priv->blur2, "std-dev-y"); } }