[gegl] transform-core: use the GeglSamplerType instead of a string



commit 9b06f7f72a41d7e75b81ad8e38728cb29b2a107f
Author: Michael Muré <batolettre gmail com>
Date:   Tue Jun 4 22:12:38 2013 +0200

    transform-core: use the GeglSamplerType instead of a string
    
    Also, renamme the parameter from filter to sampler

 bin/gegl.c                                  |    2 +-
 operations/transform/transform-core.c       |   60 +++++++++++----------------
 operations/transform/transform-core.h       |    2 +-
 tests/compositions/affine-with-negative.xml |    4 +-
 tests/compositions/clones.xml               |   10 ++--
 tests/compositions/composite-transform.xml  |    2 +-
 tests/compositions/simple-scale.xml         |    2 +-
 tests/compositions/transform.xml            |    2 +-
 tests/xml/data/rgb-params.xml               |    2 +-
 9 files changed, 37 insertions(+), 49 deletions(-)
---
diff --git a/bin/gegl.c b/bin/gegl.c
index 7f973a3..7f82016 100644
--- a/bin/gegl.c
+++ b/bin/gegl.c
@@ -43,7 +43,7 @@
 #endif
 
 #define DEFAULT_COMPOSITION \
-"<?xml version='1.0' encoding='UTF-8'?> <gegl> <node operation='gegl:crop'> <params> <param 
name='x'>0</param> <param name='y'>0</param> <param name='width'>395</param> <param name='height'>200</param> 
</params> </node> <node operation='gegl:over'> <node operation='gegl:translate'> <params> <param 
name='x'>80</param> <param name='y'>162</param> </params> </node> <node operation='gegl:opacity'> <params> 
<param name='value'>0.5</param> </params> </node> <node name='text' operation='gegl:text'> <params> <param 
name='string'>2000-2011 © Various contributors</param> <param name='font'>Sans</param> <param 
name='size'>12</param> <param name='color'>rgb(0.0000, 0.0000, 0.0000)</param> <param name='wrap'>628</param> 
<param name='alignment'>0</param> <param name='width'>622</param> <param name='height'>40</param> </params> 
</node> </node> <node operation='gegl:over'> <node operation='gegl:translate'> <params> <param 
name='x'>20</param> <param name='y'>50</param> </params> </node> <no
 de operation='gegl:over'> <node operation='gegl:translate'> <params> <param name='x'>0</param> <param 
name='y'>0</param> </params> </node> <node operation='gegl:dropshadow'> <params> <param 
name='opacity'>1.2</param> <param name='x'>0</param> <param name='y'>0</param> <param name='radius'>8</param> 
</params> </node> <gegl:fill-path d='M0,50 C0,78 24,100 50,100 C77,100 100,78 100,50 C100,45 99,40 98,35 
C82,35 66,35 50,35 C42,35 35,42 35,50 C35,58 42,65 50,65 C56,65 61,61 64,56 C67,51 75,55 73,60 C69,69 60,75 
50,75 C36,75 25,64 25,50 C25,36 36,25 50,25 L93,25 C83,9 67,0 49,0 C25,0 0,20 0,50 z' color='white'/> </node> 
<node operation='gegl:over'> <node operation='gegl:translate'> <params> <param name='x'>88</param> <param 
name='y'>0</param> </params> </node> <node operation='gegl:dropshadow'> <params> <param 
name='opacity'>1.2</param> <param name='x'>0</param> <param name='y'>0</param> <param name='radius'>8</param> 
</params> </node> <node operation='gegl:fill-path'> <params> <
 param name='d'>M50,0 C23,0 0,22 0,50 C0,77 22,100 50,100 C68,100 85,90 93,75 L40,75 C35,75 35,65 40,65 
L98,65 C100,55 100,45 98,35 L40,35 C35,35 35,25 40,25 L93,25 C84,10 68,0 50,0 z</param> <param 
name='color'>rgb(1.0000, 1.0000, 1.0000)</param> </params> </node> </node> <node operation='gegl:over'> <node 
operation='gegl:translate'> <params> <param name='x'>176</param> <param name='y'>0</param> </params> </node> 
<node operation='gegl:dropshadow'> <params> <param name='opacity'>1.2</param> <param name='x'>0</param> 
<param name='y'>0</param> <param name='radius'>8</param> </params> </node> <node operation='gegl:fill-path'> 
<params> <param name='d'>M0,50 C0,78 24,100 50,100 C77,100 100,78 100,50 C100,45 99,40 98,35 C82,35 66,35 
50,35 C42,35 35,42 35,50 C35,58 42,65 50,65 C56,65 61,61 64,56 C67,51 75,55 73,60 C69,69 60,75 50,75 C36,75 
25,64 25,50 C25,36 36,25 50,25 L93,25 C83,9 67,0 49,0 C25,0 0,20 0,50 z</param> <param 
name='color'>rgb(1.0000, 1.0000, 1.0000)</param> </params>
  </node> </node> <node operation='gegl:translate'> <params> <param name='x'>264</param> <param 
name='y'>0</param> </params> </node> <node operation='gegl:dropshadow'> <params> <param 
name='opacity'>1.2</param> <param name='x'>0</param> <param name='y'>0</param> <param name='radius'>8</param> 
</params> </node> <node operation='gegl:fill-path'> <params> <param name='d'>M30,4 C12,13 0,30 0,50 C0,78 
23,100 50,100 C71,100 88,88 96,71 L56,71 C42,71 30,59 30,45 L30,4 z</param> <param name='color'>rgb(1.0000, 
1.0000, 1.0000)</param> </params> </node> </node> <node operation='gegl:rotate'> <params> <param 
name='origin-x'>0</param> <param name='origin-y'>0</param> <param name='filter'>linear</param>  <param 
name='degrees'>42</param> </params> </node> <node operation='gegl:checkerboard'> <params> <param 
name='x'>43</param> <param name='y'>44</param> <param name='x-offset'>0</param> <param 
name='y-offset'>0</param> <param name='color1'>rgb(0.7097, 0.7097, 0.7097)</param> <param name='co
 lor2'>rgb(0.7661, 0.7661, 0.7661)</param> </params> </node> </gegl>"
+"<?xml version='1.0' encoding='UTF-8'?> <gegl> <node operation='gegl:crop'> <params> <param 
name='x'>0</param> <param name='y'>0</param> <param name='width'>395</param> <param name='height'>200</param> 
</params> </node> <node operation='gegl:over'> <node operation='gegl:translate'> <params> <param 
name='x'>80</param> <param name='y'>162</param> </params> </node> <node operation='gegl:opacity'> <params> 
<param name='value'>0.5</param> </params> </node> <node name='text' operation='gegl:text'> <params> <param 
name='string'>2000-2011 © Various contributors</param> <param name='font'>Sans</param> <param 
name='size'>12</param> <param name='color'>rgb(0.0000, 0.0000, 0.0000)</param> <param name='wrap'>628</param> 
<param name='alignment'>0</param> <param name='width'>622</param> <param name='height'>40</param> </params> 
</node> </node> <node operation='gegl:over'> <node operation='gegl:translate'> <params> <param 
name='x'>20</param> <param name='y'>50</param> </params> </node> <no
 de operation='gegl:over'> <node operation='gegl:translate'> <params> <param name='x'>0</param> <param 
name='y'>0</param> </params> </node> <node operation='gegl:dropshadow'> <params> <param 
name='opacity'>1.2</param> <param name='x'>0</param> <param name='y'>0</param> <param name='radius'>8</param> 
</params> </node> <gegl:fill-path d='M0,50 C0,78 24,100 50,100 C77,100 100,78 100,50 C100,45 99,40 98,35 
C82,35 66,35 50,35 C42,35 35,42 35,50 C35,58 42,65 50,65 C56,65 61,61 64,56 C67,51 75,55 73,60 C69,69 60,75 
50,75 C36,75 25,64 25,50 C25,36 36,25 50,25 L93,25 C83,9 67,0 49,0 C25,0 0,20 0,50 z' color='white'/> </node> 
<node operation='gegl:over'> <node operation='gegl:translate'> <params> <param name='x'>88</param> <param 
name='y'>0</param> </params> </node> <node operation='gegl:dropshadow'> <params> <param 
name='opacity'>1.2</param> <param name='x'>0</param> <param name='y'>0</param> <param name='radius'>8</param> 
</params> </node> <node operation='gegl:fill-path'> <params> <
 param name='d'>M50,0 C23,0 0,22 0,50 C0,77 22,100 50,100 C68,100 85,90 93,75 L40,75 C35,75 35,65 40,65 
L98,65 C100,55 100,45 98,35 L40,35 C35,35 35,25 40,25 L93,25 C84,10 68,0 50,0 z</param> <param 
name='color'>rgb(1.0000, 1.0000, 1.0000)</param> </params> </node> </node> <node operation='gegl:over'> <node 
operation='gegl:translate'> <params> <param name='x'>176</param> <param name='y'>0</param> </params> </node> 
<node operation='gegl:dropshadow'> <params> <param name='opacity'>1.2</param> <param name='x'>0</param> 
<param name='y'>0</param> <param name='radius'>8</param> </params> </node> <node operation='gegl:fill-path'> 
<params> <param name='d'>M0,50 C0,78 24,100 50,100 C77,100 100,78 100,50 C100,45 99,40 98,35 C82,35 66,35 
50,35 C42,35 35,42 35,50 C35,58 42,65 50,65 C56,65 61,61 64,56 C67,51 75,55 73,60 C69,69 60,75 50,75 C36,75 
25,64 25,50 C25,36 36,25 50,25 L93,25 C83,9 67,0 49,0 C25,0 0,20 0,50 z</param> <param 
name='color'>rgb(1.0000, 1.0000, 1.0000)</param> </params>
  </node> </node> <node operation='gegl:translate'> <params> <param name='x'>264</param> <param 
name='y'>0</param> </params> </node> <node operation='gegl:dropshadow'> <params> <param 
name='opacity'>1.2</param> <param name='x'>0</param> <param name='y'>0</param> <param name='radius'>8</param> 
</params> </node> <node operation='gegl:fill-path'> <params> <param name='d'>M30,4 C12,13 0,30 0,50 C0,78 
23,100 50,100 C71,100 88,88 96,71 L56,71 C42,71 30,59 30,45 L30,4 z</param> <param name='color'>rgb(1.0000, 
1.0000, 1.0000)</param> </params> </node> </node> <node operation='gegl:rotate'> <params> <param 
name='origin-x'>0</param> <param name='origin-y'>0</param> <param name='sampler'>linear</param>  <param 
name='degrees'>42</param> </params> </node> <node operation='gegl:checkerboard'> <params> <param 
name='x'>43</param> <param name='y'>44</param> <param name='x-offset'>0</param> <param 
name='y-offset'>0</param> <param name='color1'>rgb(0.7097, 0.7097, 0.7097)</param> <param name='c
 olor2'>rgb(0.7661, 0.7661, 0.7661)</param> </params> </node> </gegl>"
 
 #define STDIN_BUF_SIZE 128
 
diff --git a/operations/transform/transform-core.c b/operations/transform/transform-core.c
index da4fc69..4c41779 100644
--- a/operations/transform/transform-core.c
+++ b/operations/transform/transform-core.c
@@ -44,10 +44,9 @@ enum
 {
   PROP_ORIGIN_X = 1,
   PROP_ORIGIN_Y,
-  PROP_FILTER
+  PROP_SAMPLER
 };
 
-static void          gegl_transform_finalize                     (GObject              *object);
 static void          gegl_transform_get_property                 (GObject              *object,
                                                                   guint                 prop_id,
                                                                   GValue               *value,
@@ -155,7 +154,6 @@ op_transform_class_init (OpTransformClass *klass)
 
   gobject_class->set_property         = gegl_transform_set_property;
   gobject_class->get_property         = gegl_transform_get_property;
-  gobject_class->finalize             = gegl_transform_finalize;
 
   op_class->get_invalidated_by_change =
     gegl_transform_get_invalidated_by_change;
@@ -186,23 +184,17 @@ op_transform_class_init (OpTransformClass *klass)
                                      -G_MAXDOUBLE, G_MAXDOUBLE,
                                      0.,
                                      G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
-  g_object_class_install_property (gobject_class, PROP_FILTER,
-                                   g_param_spec_string (
-                                     "filter",
-                                     _("Filter"),
-                      _("Filter type (nearest, linear, cubic, nohalo, lohalo)"),
-                                     "linear",
+  g_object_class_install_property (gobject_class, PROP_SAMPLER,
+                                   g_param_spec_enum (
+                                     "sampler",
+                                     _("Sampler"),
+                                     _("Sampler used internally"),
+                                     gegl_sampler_type_get_type (),
+                                     GEGL_SAMPLER_LINEAR,
                                      G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
 }
 
 static void
-gegl_transform_finalize (GObject *object)
-{
-  g_free (OP_TRANSFORM (object)->filter);
-  G_OBJECT_CLASS (op_transform_parent_class)->finalize (object);
-}
-
-static void
 op_transform_init (OpTransform *self)
 {
 }
@@ -223,8 +215,8 @@ gegl_transform_get_property (GObject    *object,
     case PROP_ORIGIN_Y:
       g_value_set_double (value, self->origin_y);
       break;
-    case PROP_FILTER:
-      g_value_set_string (value, self->filter);
+    case PROP_SAMPLER:
+      g_value_set_enum (value, self->sampler);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -248,9 +240,8 @@ gegl_transform_set_property (GObject      *object,
     case PROP_ORIGIN_Y:
       self->origin_y = g_value_get_double (value);
       break;
-    case PROP_FILTER:
-      g_free (self->filter);
-      self->filter = g_value_dup_string (value);
+    case PROP_SAMPLER:
+      self->sampler = g_value_get_enum (value);
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -375,8 +366,7 @@ gegl_transform_is_intermediate_node (OpTransform *transform)
 
       sink = gegl_connection_get_sink_node (connections->data)->operation;
 
-      if (! IS_OP_TRANSFORM (sink) ||
-          strcmp (transform->filter, OP_TRANSFORM (sink)->filter))
+      if (! IS_OP_TRANSFORM (sink) || transform->sampler != OP_TRANSFORM (sink)->sampler)
         return FALSE;
     }
   while ((connections = g_slist_next (connections)));
@@ -398,8 +388,7 @@ gegl_transform_is_composite_node (OpTransform *transform)
 
   source = gegl_connection_get_source_node (connections->data)->operation;
 
-  return (IS_OP_TRANSFORM (source) &&
-          ! strcmp (transform->filter, OP_TRANSFORM (source)->filter));
+  return (IS_OP_TRANSFORM (source) && transform->sampler == OP_TRANSFORM (source)->sampler);
 }
 
 static void
@@ -550,10 +539,9 @@ gegl_transform_get_required_for_output (GeglOperation       *op,
       gegl_matrix3_is_identity (&inverse))
     return requested_rect;
 
-  sampler =
-    gegl_buffer_sampler_new (NULL,
-                             babl_format("RaGaBaA float"),
-                             gegl_sampler_type_from_string (transform->filter));
+  sampler = gegl_buffer_sampler_new (NULL,
+                                     babl_format("RaGaBaA float"),
+                                     transform->sampler);
   context_rect = *gegl_sampler_get_context_rect (sampler);
   g_object_unref (sampler);
 
@@ -630,8 +618,9 @@ gegl_transform_get_invalidated_by_change (GeglOperation       *op,
    * allow for round off error (for "safety")?
    */
 
-  sampler = gegl_buffer_sampler_new (NULL, babl_format("RaGaBaA float"),
-      gegl_sampler_type_from_string (transform->filter));
+  sampler = gegl_buffer_sampler_new (NULL,
+                                     babl_format("RaGaBaA float"),
+                                     transform->sampler);
   context_rect = *gegl_sampler_get_context_rect (sampler);
   g_object_unref (sampler);
 
@@ -1124,7 +1113,7 @@ gegl_transform_process (GeglOperation        *operation,
     }
   else if (gegl_transform_matrix3_allow_fast_translate (&matrix) ||
            (gegl_matrix3_is_translate (&matrix) &&
-            ! strcmp (transform->filter, "nearest")))
+            transform->sampler == GEGL_SAMPLER_NEAREST))
     {
       /*
        * Buffer shifting trick (enhanced nop). Do it if it is a
@@ -1163,10 +1152,9 @@ gegl_transform_process (GeglOperation        *operation,
       input  = gegl_operation_context_get_source (context, "input");
       output = gegl_operation_context_get_target (context, "output");
 
-      sampler =
-        gegl_buffer_sampler_new (input,
-                                 babl_format("RaGaBaA float"),
-                             gegl_sampler_type_from_string (transform->filter));
+      sampler = gegl_buffer_sampler_new (input,
+                                         babl_format("RaGaBaA float"),
+                                         transform->sampler);
 
       if (gegl_matrix3_is_affine (&matrix))
         transform_affine  (output, input, &matrix, sampler, context->level);
diff --git a/operations/transform/transform-core.h b/operations/transform/transform-core.h
index b2bf995..a1782c8 100644
--- a/operations/transform/transform-core.h
+++ b/operations/transform/transform-core.h
@@ -20,7 +20,7 @@ struct _OpTransform
   GeglOperationFilter parent_instance;
   gdouble             origin_x;
   gdouble             origin_y;
-  gchar              *filter;
+  GeglSamplerType     sampler;
 };
 
 typedef struct _OpTransformClass OpTransformClass;
diff --git a/tests/compositions/affine-with-negative.xml b/tests/compositions/affine-with-negative.xml
index 86268fe..904d175 100644
--- a/tests/compositions/affine-with-negative.xml
+++ b/tests/compositions/affine-with-negative.xml
@@ -22,7 +22,7 @@
   </node>
   <node operation='gegl:scale'>
     <params>
-      <param name='filter'>'linear'</param>
+      <param name='sampler'>linear</param>
       <param name='x'>-4</param>
       <param name='y'>-4</param>
     </params>
@@ -40,4 +40,4 @@
       <param name='value'>#777</param>
     </params>
   </node>
-</gegl>
\ No newline at end of file
+</gegl>
diff --git a/tests/compositions/clones.xml b/tests/compositions/clones.xml
index 5ce40fb..7aa378e 100644
--- a/tests/compositions/clones.xml
+++ b/tests/compositions/clones.xml
@@ -11,7 +11,7 @@
           <params>
             <param name='origin-x'>0.000000</param>
             <param name='origin-y'>0.000000</param>
-            <param name='filter'>linear</param>
+            <param name='sampler'>linear</param>
             <param name='x'>0.200000</param>
             <param name='y'>0.200000</param>
           </params>
@@ -43,7 +43,7 @@
           <params>
             <param name='origin-x'>0.000000</param>
             <param name='origin-y'>0.000000</param>
-            <param name='filter'>linear</param>
+            <param name='sampler'>linear</param>
             <param name='x'>0.200000</param>
             <param name='y'>0.200000</param>
           </params>
@@ -63,7 +63,7 @@
           <params>
             <param name='origin-x'>0.000000</param>
             <param name='origin-y'>0.000000</param>
-            <param name='filter'>linear</param>
+            <param name='sampler'>linear</param>
             <param name='x'>0.200000</param>
             <param name='y'>0.200000</param>
           </params>
@@ -86,7 +86,7 @@
           <params>
             <param name='origin-x'>0.000000</param>
             <param name='origin-y'>0.000000</param>
-            <param name='filter'>linear</param>
+            <param name='sampler'>linear</param>
             <param name='x'>0.200000</param>
             <param name='y'>0.200000</param>
           </params>
@@ -156,7 +156,7 @@
           <params>
             <param name='origin-x'>0.000000</param>
             <param name='origin-y'>0.000000</param>
-            <param name='filter'>linear</param>
+            <param name='sampler'>linear</param>
             <param name='x'>0.500000</param>
             <param name='y'>0.500000</param>
           </params>
diff --git a/tests/compositions/composite-transform.xml b/tests/compositions/composite-transform.xml
index 25b97a4..43c92d6 100644
--- a/tests/compositions/composite-transform.xml
+++ b/tests/compositions/composite-transform.xml
@@ -13,7 +13,7 @@
           <params>
             <param name='origin-x'>0.000000</param>
             <param name='origin-y'>0.000000</param>
-            <param name='filter'>linear</param>
+            <param name='sampler'>linear</param>
             <param name='x'>0.500000</param>
             <param name='y'>0.500000</param>
         </params>
diff --git a/tests/compositions/simple-scale.xml b/tests/compositions/simple-scale.xml
index 246310c..dfff358 100644
--- a/tests/compositions/simple-scale.xml
+++ b/tests/compositions/simple-scale.xml
@@ -2,7 +2,7 @@
 <gegl>
   <node operation='gegl:scale'>
     <params>
-      <param name='filter'>cubic</param>
+      <param name='sampler'>cubic</param>
       <param name='x'>0.5</param>
       <param name='y'>0.5</param>
     </params>
diff --git a/tests/compositions/transform.xml b/tests/compositions/transform.xml
index 23b28dd..7191099 100644
--- a/tests/compositions/transform.xml
+++ b/tests/compositions/transform.xml
@@ -5,7 +5,7 @@
           <params>
             <param name='origin-x'>0.000000</param>
             <param name='origin-y'>0.000000</param>
-            <param name='filter'>linear</param>
+            <param name='sampler'>linear</param>
             <param name='x'>0.500000</param>
             <param name='y'>0.500000</param>
         </params>
diff --git a/tests/xml/data/rgb-params.xml b/tests/xml/data/rgb-params.xml
index a5fd5fc..db7eb55 100644
--- a/tests/xml/data/rgb-params.xml
+++ b/tests/xml/data/rgb-params.xml
@@ -5,7 +5,7 @@
           <params>
             <param name='origin-x'>0</param>
             <param name='origin-y'>0</param>
-            <param name='filter'>linear</param>
+            <param name='sampler'>linear</param>
             <param name='x'>5</param>
             <param name='y'>0</param>
           </params>


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