static void gimp_operation_hardlight_mode_class_init (GimpOperationHardlightModeClass *klass) { GeglOperationClass *operation_class; GeglOperationPointComposer3Class *point_class; operation_class = GEGL_OPERATION_CLASS (klass); point_class = GEGL_OPERATION_POINT_COMPOSER3_CLASS (klass); gegl_operation_class_set_keys (operation_class, "name", "gimp:hardlight-mode", "description", "GIMP hardlight mode operation", NULL); operation_class->prepare = gimp_operation_hardlight_mode_prepare; point_class->process = gimp_operation_hardlight_mode_process; }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationPointComposerClass *point_composer_class; operation_class = GEGL_OPERATION_CLASS (klass); point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass); point_composer_class->process = process; operation_class->prepare = prepare; operation_class->name = "gegl:subtract"; operation_class->categories = "compositors:math"; operation_class->description = _("Math operation subtract (c = c - value)"); }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; operation_class = GEGL_OPERATION_CLASS (klass); operation_class->process = process; operation_class->get_bounding_box = get_bounding_box; operation_class->detect = detect; operation_class->no_cache = TRUE; gegl_operation_class_set_keys (operation_class, "name", "gegl:clone", "description", _("Clone a buffer"), "categories", "core", NULL); }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationPointComposerClass *point_composer_class; operation_class = GEGL_OPERATION_CLASS (klass); point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass); point_composer_class->process = process; operation_class->prepare = prepare; operation_class->name = "gegl:average"; operation_class->categories = "compositors:blend"; operation_class->description = _("Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)"); }
static void gimp_operation_anti_erase_mode_class_init (GimpOperationAntiEraseModeClass *klass) { GeglOperationClass *operation_class; GeglOperationPointComposer3Class *point_class; operation_class = GEGL_OPERATION_CLASS (klass); point_class = GEGL_OPERATION_POINT_COMPOSER3_CLASS (klass); gegl_operation_class_set_keys (operation_class, "name", "gimp:anti-erase-mode", "description", "GIMP anti erase mode operation", NULL); operation_class->prepare = gimp_operation_anti_erase_mode_prepare; point_class->process = gimp_operation_anti_erase_mode_process; }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationPointComposerClass *point_composer_class; operation_class = GEGL_OPERATION_CLASS (klass); point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass); point_composer_class->process = process; operation_class->prepare = prepare; operation_class->name = "gegl:svg-multiply"; operation_class->description = _("SVG blend operation svg-multiply (<tt>d = cA * cB + cA * (1 - aB) + cB * (1 - aA)</tt>)"); operation_class->categories = "compositors:svgfilter"; }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationPointComposerClass *point_composer_class; operation_class = GEGL_OPERATION_CLASS (klass); point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass); point_composer_class->process = process; operation_class->prepare = prepare; operation_class->name = "gegl:soft-light"; operation_class->description = _("SVG blend operation soft-light (<tt>if 2 * cA < aA: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 * cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB == 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = (aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA)</tt>)"); operation_class->categories = "compositors:svgfilter"; }
static void gegl_op_class_init (GeglOpClass *klass) { GeglOperationClass *operation_class; operation_class = GEGL_OPERATION_CLASS (klass); operation_class->attach = attach; gegl_operation_class_set_keys (operation_class, "name", "gegl:high-pass", "title", _("High Pass Filter"), "categories", "frequency", "description", _("Enhances fine details."), NULL); }
const gchar * gegl_operation_get_key (const gchar *operation_name, const gchar *key_name) { GType type; GObjectClass *klass; const gchar *ret = NULL; type = gegl_operation_gtype_from_name (operation_name); if (!type) { return NULL; } klass = g_type_class_ref (type); ret = gegl_operation_class_get_key (GEGL_OPERATION_CLASS (klass), key_name); g_type_class_unref (klass); return ret; }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationPointFilterClass *point_filter_class; operation_class = GEGL_OPERATION_CLASS (klass); point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass); point_filter_class->process = process; operation_class->prepare = prepare; operation_class->name = "gegl:dt-gamma"; operation_class->categories = "compositors:math"; operation_class->description = _("Linear/Gamma conversion curve."); }
static gboolean gimp_operation_normal_parent_process (GeglOperation *operation, GeglOperationContext *context, const gchar *output_prop, const GeglRectangle *result, gint level) { const GeglRectangle *in_extent = NULL; const GeglRectangle *aux_extent = NULL; GObject *input; GObject *aux; /* get the raw values this does not increase the reference count */ input = gegl_operation_context_get_object (context, "input"); aux = gegl_operation_context_get_object (context, "aux"); /* pass the input/aux buffers directly through if they are not * overlapping */ if (input) in_extent = gegl_buffer_get_abyss (GEGL_BUFFER (input)); if (! input || (aux && ! gegl_rectangle_intersect (NULL, in_extent, result))) { gegl_operation_context_set_object (context, "output", aux); return TRUE; } if (aux) aux_extent = gegl_buffer_get_abyss (GEGL_BUFFER (aux)); if (! aux || (input && ! gegl_rectangle_intersect (NULL, aux_extent, result))) { gegl_operation_context_set_object (context, "output", input); return TRUE; } /* chain up, which will create the needed buffers for our actual * process function */ return GEGL_OPERATION_CLASS (parent_class)->process (operation, context, output_prop, result, level); }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationPointFilterClass *point_filter_class; operation_class = GEGL_OPERATION_CLASS (klass); point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass); point_filter_class->process = process; gegl_operation_class_set_keys (operation_class, "name" , "gegl:unpremul", "categories" , "color", "description" , "Unpremultiplies a buffer that contains pre-multiplied colors (but is marked as not having it)", NULL); }
static void gimp_operation_grain_merge_mode_class_init (GimpOperationGrainMergeModeClass *klass) { GeglOperationClass *operation_class; GeglOperationPointComposer3Class *point_class; operation_class = GEGL_OPERATION_CLASS (klass); point_class = GEGL_OPERATION_POINT_COMPOSER3_CLASS (klass); gegl_operation_class_set_keys (operation_class, "name", "gimp:grain-merge-mode", "description", "GIMP grain merge mode operation", NULL); operation_class->prepare = gimp_operation_grain_merge_mode_prepare; point_class->process = gimp_operation_grain_merge_mode_process; }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationPointComposerClass *point_composer_class; operation_class = GEGL_OPERATION_CLASS (klass); point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass); point_composer_class->process = process; operation_class->prepare = prepare; operation_class->name = "gegl:weighted-blend"; operation_class->categories = "compositors:blend"; operation_class->description = _("blend two images using alpha values as weights"); }
/* Fast paths */ static gboolean operation_process (GeglOperation *operation, GeglOperationContext *context, const gchar *output_prop, const GeglRectangle *result, gint level) { GeglOperationClass *operation_class; gpointer input, aux; operation_class = GEGL_OPERATION_CLASS (gegl_chant_parent_class); /* get the raw values this does not increase the reference count */ input = gegl_operation_context_get_object (context, "input"); aux = gegl_operation_context_get_object (context, "aux"); /* pass the input/aux buffers directly through if they are alone*/ { const GeglRectangle *in_extent = NULL; const GeglRectangle *aux_extent = NULL; if (input) in_extent = gegl_buffer_get_abyss (input); if ((!input || (aux && !gegl_rectangle_intersect (NULL, in_extent, result)))) { gegl_operation_context_take_object (context, "output", g_object_ref (aux)); return TRUE; } if (aux) aux_extent = gegl_buffer_get_abyss (aux); if (!aux || (input && !gegl_rectangle_intersect (NULL, aux_extent, result))) { gegl_operation_context_take_object (context, "output", g_object_ref (input)); return TRUE; } } /* chain up, which will create the needed buffers for our actual * process function */ return operation_class->process (operation, context, output_prop, result, level); }
static void gegl_op_class_init (GeglOpClass *klass) { GeglOperationClass *operation_class; GeglOperationFilterClass *filter_class; operation_class = GEGL_OPERATION_CLASS (klass); filter_class = GEGL_OPERATION_FILTER_CLASS (klass); filter_class->process = process; operation_class->prepare = prepare; gegl_operation_class_set_keys (operation_class, "name" , "gegl:kuwahara", "categories" , "misc", "description" , _("Edge preserving blur"), NULL); }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationPointFilterClass *point_filter_class; operation_class = GEGL_OPERATION_CLASS (klass); point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass); operation_class->prepare = prepare; point_filter_class->process = process; gegl_operation_class_set_keys (operation_class, "name", "gegl:noise-cie-lch", "categories", "noise", "description", _("Randomize lightness, chroma and hue independently"), NULL); }
static void gimp_operation_softlight_mode_class_init (GimpOperationSoftlightModeClass *klass) { GeglOperationClass *operation_class; GeglOperationPointComposer3Class *point_class; operation_class = GEGL_OPERATION_CLASS (klass); point_class = GEGL_OPERATION_POINT_COMPOSER3_CLASS (klass); gegl_operation_class_set_keys (operation_class, "name", "gimp:softlight-mode", "description", "GIMP softlight mode operation", "reference-image", "soft-light-mode.png", "reference-composition", reference_xml, NULL); point_class->process = gimp_operation_softlight_mode_process; }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationPointComposerClass *point_composer_class; operation_class = GEGL_OPERATION_CLASS (klass); point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass); point_composer_class->process = process; operation_class->prepare = prepare; operation_class->name = "gegl:dst-in"; operation_class->description = _("Porter Duff operation dst-in (d = cB * aA)"); operation_class->categories = "compositors:porter-duff"; }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationFilterClass *filter_class; operation_class = GEGL_OPERATION_CLASS (klass); filter_class = GEGL_OPERATION_FILTER_CLASS (klass); filter_class->process = process; operation_class->prepare = prepare; operation_class->categories = "blur"; operation_class->name = "gegl:gaussian-blur"; operation_class->description = _("Performs an averaging of neighbouring pixels with the " "normal distribution as weighting."); }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationFilterClass *filter_class; operation_class = GEGL_OPERATION_CLASS (klass); filter_class = GEGL_OPERATION_FILTER_CLASS (klass); filter_class->process = process; operation_class->prepare = prepare; gegl_operation_class_set_keys (operation_class, "categories" , "distort", "name" , "gegl:ripple", "description", _("Transform the buffer with a ripple pattern"), NULL); }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationFilterClass *filter_class; operation_class = GEGL_OPERATION_CLASS (klass); filter_class = GEGL_OPERATION_FILTER_CLASS (klass); filter_class->process = process; operation_class->prepare = prepare; operation_class->name = "gegl:box-percentile"; operation_class->categories = "misc"; operation_class->description = _("Sets the target pixel to the color corresponding to a given percentile " "when colors are sorted by luminance."); }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationFilterClass *filter_class; operation_class = GEGL_OPERATION_CLASS (klass); filter_class = GEGL_OPERATION_FILTER_CLASS (klass); filter_class->process = process; operation_class->prepare = prepare; gegl_operation_class_set_keys (operation_class, "categories" , "distort", "name" , "gegl:emboss", "description", _("Simulates an image created by embossing"), NULL); }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationPointFilterClass *point_filter_class; operation_class = GEGL_OPERATION_CLASS (klass); point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass); operation_class->prepare = prepare; point_filter_class->process = process; gegl_operation_class_set_keys (operation_class, "name" , "gegl:max-rgb", "categories" , "color", "description" , _("Reduce image to pure red, green, and blue"), NULL); }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationFilterClass *filter_class; operation_class = GEGL_OPERATION_CLASS (klass); filter_class = GEGL_OPERATION_FILTER_CLASS (klass); filter_class->process = process; operation_class->prepare = prepare; operation_class->get_bounding_box = get_bounding_box; operation_class->get_required_for_output = get_required_for_output; operation_class->categories = "enhance"; operation_class->name = "gegl:deinterlace"; operation_class->description = _("Performs deinterlace on the image."); }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationFilterClass *filter_class; operation_class = GEGL_OPERATION_CLASS (klass); filter_class = GEGL_OPERATION_FILTER_CLASS (klass); operation_class->prepare = prepare; filter_class->process = process; gegl_operation_class_set_keys (operation_class, "name", "gegl:waves", "categories", "distort", "description", _("Distort the image with waves"), NULL); }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationPointFilterClass *point_filter_class; operation_class = GEGL_OPERATION_CLASS (klass); point_filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass); operation_class->prepare = prepare; point_filter_class->process = process; gegl_operation_class_set_keys (operation_class, "name" , "gegl:color-exchange", "categories" , "colors/map", "description" , _("Exchanges one color with another."), NULL); }
static void gimp_operation_lch_chroma_mode_class_init (GimpOperationLchChromaModeClass *klass) { GeglOperationClass *operation_class; GeglOperationPointComposer3Class *point_class; operation_class = GEGL_OPERATION_CLASS (klass); point_class = GEGL_OPERATION_POINT_COMPOSER3_CLASS (klass); operation_class->want_in_place = FALSE; gegl_operation_class_set_keys (operation_class, "name", "gimp:lch-chroma-mode", "description", "GIMP LCH chroma mode operation", NULL); point_class->process = gimp_operation_lch_chroma_mode_process; }
static void gegl_chant_class_init (GeglChantClass *klass) { GeglOperationClass *operation_class; GeglOperationPointComposerClass *point_composer_class; operation_class = GEGL_OPERATION_CLASS (klass); point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass); point_composer_class->process = process; operation_class->prepare = prepare; operation_class->compat_name = "gegl:overlay"; operation_class->name = "svg:overlay"; operation_class->description = _("SVG blend operation overlay (<tt>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</tt>)"); operation_class->categories = "compositors:svgfilter"; }
static void gegl_op_class_init (GeglOpClass *klass) { GeglOperationClass *operation_class; GeglOperationPointFilterClass *filter_class; operation_class = GEGL_OPERATION_CLASS (klass); filter_class = GEGL_OPERATION_POINT_FILTER_CLASS (klass); operation_class->prepare = prepare; filter_class->process = process; gegl_operation_class_set_keys (operation_class, "categories", "color", "name", "gegl:color-rotate", "description", _("Replace a range of colors with another"), NULL); }