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); }
static void attach (GeglOperation *operation) { GeglNode *gegl, *input, *output, *invert, *blur, *opacity, *over, *contrast; gegl = operation->node; input = gegl_node_get_input_proxy (gegl, "input"); output = gegl_node_get_output_proxy (gegl, "output"); invert = gegl_node_new_child (gegl, "operation", "gegl:invert-linear", NULL); blur = gegl_node_new_child (gegl, "operation", "gegl:gaussian-blur", NULL); opacity = gegl_node_new_child (gegl, "operation", "gegl:opacity", "value", 0.5, NULL); over = gegl_node_new_child (gegl, "operation", "gegl:over", NULL); contrast = gegl_node_new_child (gegl, "operation", "gegl:brightness-contrast", NULL); gegl_node_link_many (input, invert, blur, opacity, NULL); gegl_node_connect_to (opacity, "output", over, "aux"); gegl_node_link_many (input, over, contrast, output, NULL); 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_redirect (operation, "contrast", contrast, "contrast"); gegl_operation_meta_watch_nodes (operation, invert, blur, opacity, over, contrast, NULL); }
static void photos_operation_insta_hefe_attach (GeglOperation *operation) { PhotosOperationInstaHefe *self = PHOTOS_OPERATION_INSTA_HEFE (operation); GeglNode *curve; GeglNode *multiply; self->input = gegl_node_get_output_proxy (operation->node, "input"); self->output = gegl_node_get_output_proxy (operation->node, "output"); curve = gegl_node_new_child (operation->node, "operation", "photos:insta-hefe-curve", NULL); multiply = gegl_node_new_child (operation->node, "operation", "photos:svg-multiply", "srgb", TRUE, NULL); self->vignette = gegl_node_new_child (operation->node, "operation", "photos:insta-hefe-vignette", NULL); gegl_node_connect_to (self->vignette, "output", multiply, "aux"); gegl_node_link_many (self->input, multiply, curve, self->output, NULL); gegl_operation_meta_watch_nodes (operation, curve, multiply, self->vignette, NULL); }
static void attach (GeglOperation *operation) { /** * <input (BG)> <aux (FG)> * |"output" "output"| * | | * | "input" "aux" | * +-----> <seamless-clone> <----+ * | "output"| * | | * | "input" "aux" | * +---> <overlay> <---+ * |"output" * v * <output> */ GeglNode *gegl = operation->node; GeglNode *input, *aux, *seamless, *overlay, *output; input = gegl_node_get_input_proxy (gegl, "input"); aux = gegl_node_get_input_proxy (gegl, "aux"); seamless = gegl_node_new_child (gegl, "operation", "gegl:seamless-clone", NULL); /* Don't use a regular gegl:over, since we want the alpha to be set * by the background buffer - we need this for area which had opacity * which was more than half but not fulll. */ overlay = gegl_node_new_child (gegl, "operation", "svg:src-atop", NULL); output = gegl_node_get_output_proxy (gegl, "output"); gegl_node_connect_to (input, "output", seamless, "input"); gegl_node_connect_to (aux, "output", seamless, "aux"); gegl_node_connect_to (input, "output", overlay, "input"); gegl_node_connect_to (seamless, "output", overlay, "aux"); gegl_node_connect_to (overlay, "output", output, "input"); gegl_operation_meta_redirect (operation, "max-refine-scale", seamless, "max-refine-scale"); gegl_operation_meta_redirect (operation, "xoff", seamless, "xoff"); gegl_operation_meta_redirect (operation, "yoff", seamless, "yoff"); gegl_operation_meta_redirect (operation, "error-msg", seamless, "error-msg"); gegl_operation_meta_watch_nodes (operation, seamless, overlay, 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); }