[gegl] transform-core: use the GeglSamplerType instead of a string
- From: Michael Muré <mmure src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] transform-core: use the GeglSamplerType instead of a string
- Date: Thu, 6 Jun 2013 17:57:47 +0000 (UTC)
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]