Blame operations/generated/svg-12-porter-duff.rb

Packit Service 2781ba
#!/usr/bin/env ruby
Packit Service 26c69d
# encoding: utf-8
Packit Service 2781ba
Packit Service 2781ba
copyright = '
Packit Service 2781ba
/* !!!! AUTOGENERATED FILE generated by svg-12-porter-duff.rb !!!!!
Packit Service 2781ba
 *
Packit Service 2781ba
 * This file is an image processing operation for GEGL
Packit Service 2781ba
 *
Packit Service 2781ba
 * GEGL is free software; you can redistribute it and/or
Packit Service 2781ba
 * modify it under the terms of the GNU Lesser General Public
Packit Service 2781ba
 * License as published by the Free Software Foundation; either
Packit Service 2781ba
 * version 3 of the License, or (at your option) any later version.
Packit Service 2781ba
 *
Packit Service 2781ba
 * GEGL is distributed in the hope that it will be useful,
Packit Service 2781ba
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 2781ba
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 2781ba
 * Lesser General Public License for more details.
Packit Service 2781ba
 *
Packit Service 2781ba
 * You should have received a copy of the GNU Lesser General Public
Packit Service 2781ba
 * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
Packit Service 2781ba
 *
Packit Service 2781ba
 *  Copyright 2006, 2007 Øyvind Kolås <pippin@gimp.org>
Packit Service 2781ba
 *            2007 John Marshall
Packit Service 2781ba
 *
Packit Service 2781ba
 * SVG rendering modes; see:
Packit Service 2781ba
 *     http://www.w3.org/TR/SVG12/rendering.html
Packit Service 2781ba
 *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
Packit Service 2781ba
 *
Packit Service 2781ba
 *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
Packit Service 2781ba
 *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
Packit Service 2781ba
 *
Packit Service 2781ba
 * !!!! AUTOGENERATED FILE !!!!!
Packit Service 2781ba
 */'
Packit Service 2781ba
Packit Service 2781ba
a = [
Packit Service 2781ba
      ['clear',         '0.0f',
Packit Service 2781ba
                        '0.0f'],
Packit Service 2781ba
      ['src',           'cA',
Packit Service 2781ba
                        'aA'],
Packit Service 2781ba
      ['dst',           'cB',
Packit Service 2781ba
                        'aB'],
Packit Service 26c69d
#      ['src_over',      'cA + cB * (1.0f - aA)',
Packit Service 26c69d
#                        'aA + aB - aA * aB'],
Packit Service 2781ba
      ['dst_over',      'cB + cA * (1.0f - aB)',
Packit Service 2781ba
                        'aA + aB - aA * aB'],
Packit Service 2781ba
      ['dst_in',        'cB * aA', # <- XXX: typo?
Packit Service 2781ba
                        'aA * aB'],
Packit Service 2781ba
      ['src_out',       'cA * (1.0f - aB)',
Packit Service 2781ba
                        'aA * (1.0f - aB)'],
Packit Service 2781ba
      ['dst_out',       'cB * (1.0f - aA)',
Packit Service 2781ba
                        'aB * (1.0f - aA)'],
Packit Service 2781ba
      ['src_atop',      'cA * aB + cB * (1.0f - aA)',
Packit Service 2781ba
                        'aB'],
Packit Service 2781ba
Packit Service 2781ba
      ['dst_atop',      'cB * aA + cA * (1.0f - aB)',
Packit Service 2781ba
                        'aA'],
Packit Service 2781ba
      ['xor',           'cA * (1.0f - aB)+ cB * (1.0f - aA)',
Packit Service 2781ba
                        'aA + aB - 2.0f * aA * aB'],
Packit Service 2781ba
    ]
Packit Service 2781ba
Packit Service 2781ba
b = [ ['src_in',        'cA * aB',  # the bounding box of this mode is the
Packit Service 2781ba
                        'aA * aB']]  # bounding box of the input only.
Packit Service 2781ba
Packit Service 2781ba
file_head1 = '
Packit Service 2781ba
#include "config.h"
Packit Service 2781ba
#include <glib/gi18n-lib.h>
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
#ifdef GEGL_CHANT_PROPERTIES
Packit Service 2781ba
Packit Service 2781ba
/* no properties */
Packit Service 2781ba
Packit Service 2781ba
#else
Packit Service 2781ba
'
Packit Service 2781ba
Packit Service 2781ba
file_head2 = '
Packit Service 2781ba
static void prepare (GeglOperation *operation)
Packit Service 2781ba
{
Packit Service 2781ba
  const Babl *format = babl_format ("RaGaBaA float");
Packit Service 2781ba
Packit Service 2781ba
  gegl_operation_set_format (operation, "input", format);
Packit Service 2781ba
  gegl_operation_set_format (operation, "aux", format);
Packit Service 2781ba
  gegl_operation_set_format (operation, "output", format);
Packit Service 2781ba
}
Packit Service 2781ba
Packit Service 2781ba
static gboolean
Packit Service 2781ba
process (GeglOperation        *op,
Packit Service 2781ba
          void                *in_buf,
Packit Service 2781ba
          void                *aux_buf,
Packit Service 2781ba
          void                *out_buf,
Packit Service 2781ba
          glong                n_pixels,
Packit Service 2781ba
          const GeglRectangle *roi,
Packit Service 2781ba
          gint                 level)
Packit Service 2781ba
{
Packit Service 2781ba
  gint i;
Packit Service 2781ba
  gfloat * GEGL_ALIGNED in = in_buf;
Packit Service 2781ba
  gfloat * GEGL_ALIGNED aux = aux_buf;
Packit Service 2781ba
  gfloat * GEGL_ALIGNED out = out_buf;
Packit Service 2781ba
Packit Service 2781ba
  if (aux==NULL)
Packit Service 2781ba
    return TRUE;
Packit Service 2781ba
'
Packit Service 2781ba
Packit Service 2781ba
file_tail1 = '
Packit Service 2781ba
Packit Service 2781ba
static void
Packit Service 2781ba
gegl_chant_class_init (GeglChantClass *klass)
Packit Service 2781ba
{
Packit Service 2781ba
  GeglOperationClass              *operation_class;
Packit Service 2781ba
  GeglOperationPointComposerClass *point_composer_class;
Packit Service 2781ba
Packit Service 2781ba
  operation_class      = GEGL_OPERATION_CLASS (klass);
Packit Service 2781ba
  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
Packit Service 2781ba
Packit Service 2781ba
  point_composer_class->process = process;
Packit Service 2781ba
  operation_class->prepare = prepare;
Packit Service 2781ba
Packit Service 2781ba
'
Packit Service 2781ba
Packit Service 2781ba
file_tail2 = ' 
Packit Service 2781ba
Packit Service 2781ba
}
Packit Service 2781ba
Packit Service 2781ba
#endif
Packit Service 2781ba
'
Packit Service 2781ba
Packit Service 2781ba
a.each do
Packit Service 2781ba
    |item|
Packit Service 2781ba
Packit Service 2781ba
    name     = item[0] + ''
Packit Service 2781ba
    name.gsub!(/_/, '-')
Packit Service 2781ba
    filename = name + '.c'
Packit Service 2781ba
Packit Service 2781ba
    puts "generating #{filename}"
Packit Service 2781ba
    file = File.open(filename, 'w')
Packit Service 2781ba
Packit Service 2781ba
    capitalized = name.capitalize
Packit Service 2781ba
    swapcased   = name.swapcase
Packit Service 2781ba
    c_formula   = item[1]
Packit Service 2781ba
    a_formula   = item[2]
Packit Service 2781ba
Packit Service 2781ba
    file.write copyright
Packit Service 2781ba
    file.write file_head1
Packit Service 2781ba
    file.write "
Packit Service 2781ba
#define GEGL_CHANT_TYPE_POINT_COMPOSER
Packit Service 2781ba
#define GEGL_CHANT_C_FILE        \"#{filename}\"
Packit Service 2781ba
Packit Service 2781ba
#include \"gegl-chant.h\"
Packit Service 2781ba
"
Packit Service 2781ba
    file.write file_head2
Packit Service 2781ba
    file.write "
Packit Service 2781ba
  for (i = 0; i < n_pixels; i++)
Packit Service 2781ba
    {
Packit Service 2781ba
      gint   j;
Packit Service 2781ba
      gfloat aA G_GNUC_UNUSED, aB G_GNUC_UNUSED, aD G_GNUC_UNUSED;
Packit Service 2781ba
Packit Service 2781ba
      aB = in[3];
Packit Service 2781ba
      aA = aux[3];
Packit Service 2781ba
      aD = #{a_formula};
Packit Service 2781ba
Packit Service 2781ba
      for (j = 0; j < 3; j++)
Packit Service 2781ba
        {
Packit Service 2781ba
          gfloat cA G_GNUC_UNUSED, cB G_GNUC_UNUSED;
Packit Service 2781ba
Packit Service 2781ba
          cB = in[j];
Packit Service 2781ba
          cA = aux[j];
Packit Service 2781ba
          out[j] = #{c_formula};
Packit Service 2781ba
        }
Packit Service 2781ba
      out[3] = aD;
Packit Service 2781ba
      in  += 4;
Packit Service 2781ba
      aux += 4;
Packit Service 2781ba
      out += 4;
Packit Service 2781ba
    }
Packit Service 2781ba
  return TRUE;
Packit Service 2781ba
}
Packit Service 2781ba
"
Packit Service 2781ba
  file.write file_tail1
Packit Service 2781ba
  file.write "
Packit Service 2781ba
  operation_class->compat_name = \"gegl:#{name}\";
Packit Service 2781ba
  gegl_operation_class_set_keys (operation_class,
Packit Service 2781ba
    \"name\"      , \"svg:#{name}\",
Packit Service 2781ba
    \"categories\", \"compositors:porter-duff\",
Packit Service 2781ba
    \"description\",
Packit Service 2781ba
        _(\"Porter Duff operation #{name} (d = #{c_formula})\"),
Packit Service 2781ba
        NULL);
Packit Service 2781ba
"
Packit Service 2781ba
  file.write file_tail2
Packit Service 2781ba
  file.close
Packit Service 2781ba
end
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
b.each do
Packit Service 2781ba
    |item|
Packit Service 2781ba
Packit Service 2781ba
    name     = item[0] + ''
Packit Service 2781ba
    name.gsub!(/_/, '-')
Packit Service 2781ba
    filename = name + '.c'
Packit Service 2781ba
Packit Service 2781ba
    puts "generating #{filename}"
Packit Service 2781ba
    file = File.open(filename, 'w')
Packit Service 2781ba
Packit Service 2781ba
    capitalized = name.capitalize
Packit Service 2781ba
    swapcased   = name.swapcase
Packit Service 2781ba
    c_formula   = item[1]
Packit Service 2781ba
    a_formula   = item[2]
Packit Service 2781ba
Packit Service 2781ba
    file.write copyright
Packit Service 2781ba
    file.write file_head1
Packit Service 2781ba
    file.write "
Packit Service 2781ba
#define GEGL_CHANT_TYPE_POINT_COMPOSER
Packit Service 2781ba
#define GEGL_CHANT_C_FILE        \"#{filename}\"
Packit Service 2781ba
Packit Service 2781ba
#include \"gegl-chant.h\"
Packit Service 2781ba
"
Packit Service 2781ba
    file.write file_head2
Packit Service 2781ba
    file.write "
Packit Service 2781ba
  for (i = 0; i < n_pixels; i++)
Packit Service 2781ba
    {
Packit Service 2781ba
      gint   j;
Packit Service 2781ba
      gfloat aA G_GNUC_UNUSED, aB G_GNUC_UNUSED, aD G_GNUC_UNUSED;
Packit Service 2781ba
Packit Service 2781ba
      aB = in[3];
Packit Service 2781ba
      aA = aux[3];
Packit Service 2781ba
      aD = #{a_formula};
Packit Service 2781ba
Packit Service 2781ba
      for (j = 0; j < 3; j++)
Packit Service 2781ba
        {
Packit Service 2781ba
          gfloat cA G_GNUC_UNUSED, cB G_GNUC_UNUSED;
Packit Service 2781ba
Packit Service 2781ba
          cB = in[j];
Packit Service 2781ba
          cA = aux[j];
Packit Service 2781ba
          out[j] = #{c_formula};
Packit Service 2781ba
        }
Packit Service 2781ba
      out[3] = aD;
Packit Service 2781ba
      in  += 4;
Packit Service 2781ba
      aux += 4;
Packit Service 2781ba
      out += 4;
Packit Service 2781ba
    }
Packit Service 2781ba
  return TRUE;
Packit Service 2781ba
}
Packit Service 2781ba
Packit Service 2781ba
static GeglRectangle get_bounding_box (GeglOperation *self)
Packit Service 2781ba
{
Packit Service 2781ba
  GeglRectangle *in_rect = gegl_operation_source_get_bounding_box (self, \"input\");
Packit Service 2781ba
  return *in_rect;
Packit Service 2781ba
}
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
"
Packit Service 2781ba
  file.write file_tail1
Packit Service 2781ba
  file.write "
Packit Service 2781ba
  operation_class->compat_name = \"gegl:#{name}\";
Packit Service 2781ba
  gegl_operation_class_set_keys (operation_class,
Packit Service 2781ba
  \"name\"      , \"svg:#{name}\",
Packit Service 2781ba
  \"get_bounding_box\" , get_bounding_box,
Packit Service 2781ba
  \"categories\", \"compositors:porter-duff\",
Packit Service 2781ba
  \"description\" ,
Packit Service 2781ba
        _(\"Porter Duff operation #{name} (d = #{c_formula})\"),
Packit Service 2781ba
        NULL);
Packit Service 2781ba
"
Packit Service 2781ba
  file.write file_tail2
Packit Service 2781ba
  file.close
Packit Service 2781ba
end