Merge branch 'master' into msvc-support-master

This commit is contained in:
Chun-wei Fan 2011-10-06 12:04:30 +08:00
commit b55656b698
18 changed files with 1433 additions and 949 deletions

View File

@ -96,6 +96,8 @@ ClutterAction *clutter_actor_get_action (ClutterActor *self,
GList * clutter_actor_get_actions (ClutterActor *self); GList * clutter_actor_get_actions (ClutterActor *self);
void clutter_actor_clear_actions (ClutterActor *self); void clutter_actor_clear_actions (ClutterActor *self);
gboolean clutter_actor_has_actions (ClutterActor *self);
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_ACTION_H__ */ #endif /* __CLUTTER_ACTION_H__ */

View File

@ -75,6 +75,8 @@ void _clutter_meta_group_clear_metas (ClutterMetaGroup *group
ClutterActorMeta * _clutter_meta_group_get_meta (ClutterMetaGroup *group, ClutterActorMeta * _clutter_meta_group_get_meta (ClutterMetaGroup *group,
const gchar *name); const gchar *name);
gboolean _clutter_meta_group_has_metas_no_internal (ClutterMetaGroup *group);
GList * _clutter_meta_group_get_metas_no_internal (ClutterMetaGroup *group); GList * _clutter_meta_group_get_metas_no_internal (ClutterMetaGroup *group);
void _clutter_meta_group_clear_metas_no_internal (ClutterMetaGroup *group); void _clutter_meta_group_clear_metas_no_internal (ClutterMetaGroup *group);

View File

@ -552,6 +552,27 @@ _clutter_meta_group_get_metas_no_internal (ClutterMetaGroup *group)
return g_list_reverse (ret); return g_list_reverse (ret);
} }
/*
* _clutter_meta_group_has_metas_no_internal:
* @group: a #ClutterMetaGroup
*
* Returns whether the group has any metas that don't have an internal priority.
*
* Return value: %TRUE if metas without internal priority exist
* %FALSE otherwise
*/
gboolean
_clutter_meta_group_has_metas_no_internal (ClutterMetaGroup *group)
{
GList *l;
for (l = group->meta; l; l = l->next)
if (!_clutter_actor_meta_is_internal (l->data))
return TRUE;
return FALSE;
}
/* /*
* _clutter_meta_group_clear_metas: * _clutter_meta_group_clear_metas:
* @group: a #ClutterMetaGroup * @group: a #ClutterMetaGroup

View File

@ -12452,6 +12452,66 @@ clutter_actor_has_overlaps (ClutterActor *self)
return CLUTTER_ACTOR_GET_CLASS (self)->has_overlaps (self); return CLUTTER_ACTOR_GET_CLASS (self)->has_overlaps (self);
} }
/**
* clutter_actor_has_effects:
* @self: A #ClutterActor
*
* Returns whether the actor has any effects applied.
*
* Return value: %TRUE if the actor has any effects,
* %FALSE otherwise
*
* Since: 1.10
*/
gboolean
clutter_actor_has_effects (ClutterActor *self)
{
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), TRUE);
if (self->priv->effects == NULL)
return FALSE;
return _clutter_meta_group_has_metas_no_internal (self->priv->effects);
}
/**
* clutter_actor_has_constraints:
* @self: A #ClutterActor
*
* Returns whether the actor has any constraints applied.
*
* Return value: %TRUE if the actor has any constraints,
* %FALSE otherwise
*
* Since: 1.10
*/
gboolean
clutter_actor_has_constraints (ClutterActor *self)
{
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), TRUE);
return self->priv->constraints != NULL;
}
/**
* clutter_actor_has_actions:
* @self: A #ClutterActor
*
* Returns whether the actor has any actions applied.
*
* Return value: %TRUE if the actor has any actions,
* %FALSE otherwise
*
* Since: 1.10
*/
gboolean
clutter_actor_has_actions (ClutterActor *self)
{
g_return_val_if_fail (CLUTTER_IS_ACTOR (self), TRUE);
return self->priv->actions != NULL;
}
gint gint
_clutter_actor_get_n_children (ClutterActor *self) _clutter_actor_get_n_children (ClutterActor *self)
{ {

View File

@ -101,6 +101,8 @@ ClutterConstraint *clutter_actor_get_constraint (ClutterActor *s
const gchar *name); const gchar *name);
void clutter_actor_clear_constraints (ClutterActor *self); void clutter_actor_clear_constraints (ClutterActor *self);
gboolean clutter_actor_has_constraints (ClutterActor *self);
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_CONSTRAINT_H__ */ #endif /* __CLUTTER_CONSTRAINT_H__ */

View File

@ -126,6 +126,8 @@ ClutterEffect *clutter_actor_get_effect (ClutterActor *self,
const gchar *name); const gchar *name);
void clutter_actor_clear_effects (ClutterActor *self); void clutter_actor_clear_effects (ClutterActor *self);
gboolean clutter_actor_has_effects (ClutterActor *self);
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_EFFECT_H__ */ #endif /* __CLUTTER_EFFECT_H__ */

View File

@ -44,6 +44,8 @@
* Sets @value to @fixed_. * Sets @value to @fixed_.
* *
* Since: 0.8 * Since: 0.8
*
* Deprecated: 1.10: Use g_value_set_int() instead.
*/ */
void void
clutter_value_set_fixed (GValue *value, clutter_value_set_fixed (GValue *value,
@ -63,6 +65,8 @@ clutter_value_set_fixed (GValue *value,
* Return value: the value inside the passed #GValue * Return value: the value inside the passed #GValue
* *
* Since: 0.8 * Since: 0.8
*
* Deprecated: 1.10: Use g_value_get_int() instead.
*/ */
CoglFixed CoglFixed
clutter_value_get_fixed (const GValue *value) clutter_value_get_fixed (const GValue *value)
@ -164,9 +168,11 @@ clutter_param_fixed_get_type (void)
* *
* Creates a #GParamSpec for properties using #CoglFixed values * Creates a #GParamSpec for properties using #CoglFixed values
* *
* Return value: the newly created #GParamSpec * Return value: (transfer full): the newly created #GParamSpec
* *
* Since: 0.8 * Since: 0.8
*
* Deprecated: 1.10: Use #GParamSpecInt instead.
*/ */
GParamSpec * GParamSpec *
clutter_param_spec_fixed (const gchar *name, clutter_param_spec_fixed (const gchar *name,

View File

@ -34,6 +34,8 @@
G_BEGIN_DECLS G_BEGIN_DECLS
#if !defined(CLUTTER_DISABLE_DEPRECATED) || defined(CLUTTER_COMPILATION)
#define CLUTTER_TYPE_PARAM_FIXED (clutter_param_fixed_get_type ()) #define CLUTTER_TYPE_PARAM_FIXED (clutter_param_fixed_get_type ())
#define CLUTTER_PARAM_SPEC_FIXED(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), CLUTTER_TYPE_PARAM_FIXED, ClutterParamSpecFixed)) #define CLUTTER_PARAM_SPEC_FIXED(pspec) (G_TYPE_CHECK_INSTANCE_CAST ((pspec), CLUTTER_TYPE_PARAM_FIXED, ClutterParamSpecFixed))
#define CLUTTER_IS_PARAM_SPEC_FIXED(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), CLUTTER_TYPE_PARAM_FIXED)) #define CLUTTER_IS_PARAM_SPEC_FIXED(pspec) (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), CLUTTER_TYPE_PARAM_FIXED))
@ -45,6 +47,8 @@ G_BEGIN_DECLS
* Evaluates to %TRUE if @x holds a #CoglFixed . * Evaluates to %TRUE if @x holds a #CoglFixed .
* *
* Since: 0.8 * Since: 0.8
*
* Deprecated: 1.10: Use %G_VALUE_HOLDS_INT instead
*/ */
#define CLUTTER_VALUE_HOLDS_FIXED(x) (G_VALUE_HOLDS ((x), COGL_TYPE_FIXED)) #define CLUTTER_VALUE_HOLDS_FIXED(x) (G_VALUE_HOLDS ((x), COGL_TYPE_FIXED))
@ -59,6 +63,8 @@ typedef struct _ClutterParamSpecFixed ClutterParamSpecFixed;
* #GParamSpec subclass for fixed point based properties * #GParamSpec subclass for fixed point based properties
* *
* Since: 0.8 * Since: 0.8
*
* Deprecated: Use #GParamSpecInt instead
*/ */
struct _ClutterParamSpecFixed struct _ClutterParamSpecFixed
{ {
@ -86,6 +92,8 @@ GParamSpec * clutter_param_spec_fixed (const gchar *name,
GParamFlags flags); GParamFlags flags);
#endif /* DISABLE_DEPRECATED */
G_END_DECLS G_END_DECLS
#endif /* __CLUTTER_FIXED_H__ */ #endif /* __CLUTTER_FIXED_H__ */

View File

@ -77,7 +77,7 @@
* multi-threaded environment is to never access the API from a thread that * multi-threaded environment is to never access the API from a thread that
* did not call clutter_init() and clutter_main().</para> * did not call clutter_init() and clutter_main().</para>
* <para>The common pattern for using threads with Clutter is to use worker * <para>The common pattern for using threads with Clutter is to use worker
* threads to perform blocking operations and then install idle or timeour * threads to perform blocking operations and then install idle or timeout
* sources with the result when the thread finished.</para> * sources with the result when the thread finished.</para>
* <para>Clutter provides thread-aware variants of g_idle_add() and * <para>Clutter provides thread-aware variants of g_idle_add() and
* g_timeout_add() that acquire the Clutter lock before invoking the provided * g_timeout_add() that acquire the Clutter lock before invoking the provided

View File

@ -654,6 +654,9 @@ _clutter_paint_volume_complete (ClutterPaintVolume *pv)
if (pv->is_empty) if (pv->is_empty)
return; return;
if (pv->is_complete)
return;
/* Find the vector that takes us from any vertex on the left face to /* Find the vector that takes us from any vertex on the left face to
* the corresponding vertex on the right face. */ * the corresponding vertex on the right face. */
dx_l2r = pv->vertices[1].x - pv->vertices[0].x; dx_l2r = pv->vertices[1].x - pv->vertices[0].x;

View File

@ -37,36 +37,43 @@
* <refsect2 id="ClutterShaderEffect-implementing"> * <refsect2 id="ClutterShaderEffect-implementing">
* <title>Implementing a ClutterShaderEffect</title> * <title>Implementing a ClutterShaderEffect</title>
* <para>Creating a sub-class of #ClutterShaderEffect requires the * <para>Creating a sub-class of #ClutterShaderEffect requires the
* overriding of the <function>pre_paint()</function> virtual function * overriding of the <function>paint_target()</function> virtual
* from the #ClutterEffect class.</para> * function from the #ClutterOffscreenEffect class as well as the
* <para>The <function>pre_paint()</function> should set the shader's * <function>get_static_shader_source()</function> virtual from the
* source and eventually set the uniforms. The sub-class should call * #ClutterShaderEffect class.</para>
* clutter_shader_effect_set_shader_source() to set the shader source * <para>The <function>get_static_shader_source()</function>
* code, and clutter_shader_effect_set_uniform_value() or * function should return a copy of the shader source to use. This
* clutter_shader_effect_set_uniform() to set the values of the shader * function is only called once per subclass of #ClutterShaderEffect
* uniforms, if any; the sub-class should then chain up to the * regardless of how many instances of the effect are created. The
* #ClutterShaderEffect implementation.</para> * source for the shader is typically stored in a static const
* string which is returned from this function via
* g_strdup().</para>
* <para>The <function>paint_target()</function> should set the
* shader's uniforms if any. This is done by calling
* clutter_shader_effect_set_uniform_value() or
* clutter_shader_effect_set_uniform(). The sub-class should then
* chain up to the #ClutterShaderEffect implementation.</para>
* <example id="ClutterShaderEffect-example-uniforms"> * <example id="ClutterShaderEffect-example-uniforms">
* <title>Setting uniforms on a ClutterShaderEffect</title> * <title>Setting uniforms on a ClutterShaderEffect</title>
* <para>The example below shows a typical implementation of the * <para>The example below shows a typical implementation of the
* <function>pre_paint()</function> phase of a #ClutterShaderEffect * <function>get_static_shader_source()</function> and
* sub-class.</para> * <function>paint_target()</function> phases of a
* #ClutterShaderEffect sub-class.</para>
* <programlisting> * <programlisting>
* static gchar *
* my_effect_get_static_shader_source (ClutterShaderEffect *effect)
* {
* return g_strdup (shader_source);
* }
*
* static gboolean * static gboolean
* my_effect_pre_paint (ClutterEffect *effect) * my_effect_paint_target (ClutterOffscreenEffect *effect)
* { * {
* MyEffect *self = MY_EFFECT (effect); * MyEffect *self = MY_EFFECT (effect);
* ClutterShaderEffect *shader = CLUTTER_SHADER_EFFECT (effect); * ClutterShaderEffect *shader = CLUTTER_SHADER_EFFECT (effect);
* ClutterEffectClass *parent_class; * ClutterEffectClass *parent_class;
* gfloat component_r, component_g, component_b; * gfloat component_r, component_g, component_b;
* *
* /&ast; if the effect is not enabled we can bail out now &ast;/
* if (!clutter_actor_meta_get_enabled (CLUTTER_ACTOR_META (effect)))
* return FALSE;
*
* /&ast; this function is a no-op after the first call &ast;/
* clutter_shader_effect_set_shader_source (shader, shader_source);
*
* /&ast; the "tex" uniform is declared in the shader as: * /&ast; the "tex" uniform is declared in the shader as:
* &ast; * &ast;
* &ast; uniform int tex; * &ast; uniform int tex;
@ -92,8 +99,8 @@
* component_b); * component_b);
* *
* /&ast; chain up to the parent's implementation &ast;/ * /&ast; chain up to the parent's implementation &ast;/
* parent_class = CLUTTER_EFFECT_CLASS (my_effect_parent_class); * parent_class = CLUTTER_OFFSCREEN_EFFECT_CLASS (my_effect_parent_class);
* return parent_class->pre_paint (effect); * return parent_class->paint_target (effect);
* } * }
* </programlisting> * </programlisting>
* </example> * </example>
@ -134,11 +141,18 @@ struct _ClutterShaderEffectPrivate
CoglHandle shader; CoglHandle shader;
GHashTable *uniforms; GHashTable *uniforms;
guint is_compiled : 1;
guint source_set : 1;
}; };
typedef struct _ClutterShaderEffectClassPrivate
{
/* These are the per-class pre-compiled shader and program which is
used when the class implements get_static_shader_source without
calling set_shader_source. They will be shared by all instances
of this class */
CoglHandle program;
CoglHandle shader;
} ClutterShaderEffectClassPrivate;
enum enum
{ {
PROP_0, PROP_0,
@ -150,9 +164,11 @@ enum
static GParamSpec *obj_props[PROP_LAST]; static GParamSpec *obj_props[PROP_LAST];
G_DEFINE_TYPE (ClutterShaderEffect, G_DEFINE_TYPE_WITH_CODE (ClutterShaderEffect,
clutter_shader_effect, clutter_shader_effect,
CLUTTER_TYPE_OFFSCREEN_EFFECT); CLUTTER_TYPE_OFFSCREEN_EFFECT,
g_type_add_class_private (g_define_type_id,
sizeof (ClutterShaderEffectClassPrivate)))
static inline void static inline void
clutter_shader_effect_clear (ClutterShaderEffect *self, clutter_shader_effect_clear (ClutterShaderEffect *self,
@ -160,15 +176,18 @@ clutter_shader_effect_clear (ClutterShaderEffect *self,
{ {
ClutterShaderEffectPrivate *priv = self->priv; ClutterShaderEffectPrivate *priv = self->priv;
if (priv->shader != COGL_INVALID_HANDLE && !priv->is_compiled) if (priv->shader != COGL_INVALID_HANDLE)
{
cogl_handle_unref (priv->shader); cogl_handle_unref (priv->shader);
priv->shader = COGL_INVALID_HANDLE;
}
if (priv->program != COGL_INVALID_HANDLE) if (priv->program != COGL_INVALID_HANDLE)
{ {
cogl_handle_unref (priv->program); cogl_handle_unref (priv->program);
priv->program = COGL_INVALID_HANDLE; priv->program = COGL_INVALID_HANDLE;
priv->shader = COGL_INVALID_HANDLE;
} }
if (reset_uniforms && priv->uniforms != NULL) if (reset_uniforms && priv->uniforms != NULL)
@ -178,8 +197,6 @@ clutter_shader_effect_clear (ClutterShaderEffect *self,
} }
priv->actor = NULL; priv->actor = NULL;
priv->is_compiled = FALSE;
priv->source_set = FALSE;
} }
static void static void
@ -298,52 +315,102 @@ clutter_shader_effect_set_actor (ClutterActorMeta *meta,
G_OBJECT_TYPE_NAME (meta)); G_OBJECT_TYPE_NAME (meta));
} }
static CoglHandle
clutter_shader_effect_create_shader (ClutterShaderEffect *self)
{
ClutterShaderEffectPrivate *priv = self->priv;
switch (priv->shader_type)
{
case CLUTTER_FRAGMENT_SHADER:
return cogl_create_shader (COGL_SHADER_TYPE_FRAGMENT);
break;
case CLUTTER_VERTEX_SHADER:
return cogl_create_shader (COGL_SHADER_TYPE_VERTEX);
break;
default:
g_assert_not_reached ();
}
}
static void
clutter_shader_effect_try_static_source (ClutterShaderEffect *self)
{
ClutterShaderEffectPrivate *priv = self->priv;
ClutterShaderEffectClass *shader_effect_class =
CLUTTER_SHADER_EFFECT_GET_CLASS (self);
if (shader_effect_class->get_static_shader_source != NULL)
{
ClutterShaderEffectClassPrivate *class_priv;
class_priv =
G_TYPE_CLASS_GET_PRIVATE (shader_effect_class,
CLUTTER_TYPE_SHADER_EFFECT,
ClutterShaderEffectClassPrivate);
if (class_priv->shader == COGL_INVALID_HANDLE)
{
gchar *source;
class_priv->shader = clutter_shader_effect_create_shader (self);
source = shader_effect_class->get_static_shader_source (self);
cogl_shader_source (class_priv->shader, source);
g_free (source);
CLUTTER_NOTE (SHADER, "Compiling shader effect");
cogl_shader_compile (class_priv->shader);
if (cogl_shader_is_compiled (class_priv->shader))
{
class_priv->program = cogl_create_program ();
cogl_program_attach_shader (class_priv->program,
class_priv->shader);
cogl_program_link (class_priv->program);
}
else
{
gchar *log_buf = cogl_shader_get_info_log (class_priv->shader);
g_warning ("Unable to compile the GLSL shader: %s", log_buf);
g_free (log_buf);
}
}
priv->shader = cogl_handle_ref (class_priv->shader);
if (class_priv->program != COGL_INVALID_HANDLE)
priv->program = cogl_handle_ref (class_priv->program);
}
}
static void static void
clutter_shader_effect_paint_target (ClutterOffscreenEffect *effect) clutter_shader_effect_paint_target (ClutterOffscreenEffect *effect)
{ {
ClutterShaderEffectPrivate *priv = CLUTTER_SHADER_EFFECT (effect)->priv; ClutterShaderEffect *self = CLUTTER_SHADER_EFFECT (effect);
ClutterShaderEffectPrivate *priv = self->priv;
ClutterOffscreenEffectClass *parent; ClutterOffscreenEffectClass *parent;
CoglHandle material; CoglHandle material;
/* If the source hasn't been set then we'll try to get it from the
static source instead */
if (priv->shader == COGL_INVALID_HANDLE)
clutter_shader_effect_try_static_source (self);
/* we haven't been prepared or we don't have support for /* we haven't been prepared or we don't have support for
* GLSL shaders in Clutter * GLSL shaders in Clutter
*/ */
if (priv->program == COGL_INVALID_HANDLE || if (priv->program == COGL_INVALID_HANDLE)
priv->shader == COGL_INVALID_HANDLE)
goto out; goto out;
if (!priv->source_set)
goto out;
if (!priv->is_compiled)
{
CLUTTER_NOTE (SHADER, "Compiling shader effect");
cogl_shader_compile (priv->shader);
if (!cogl_shader_is_compiled (priv->shader))
{
gchar *log_buf = cogl_shader_get_info_log (priv->shader);
g_warning ("Unable to compile the GLSL shader: %s", log_buf);
g_free (log_buf);
cogl_handle_unref (priv->shader);
priv->shader = COGL_INVALID_HANDLE;
cogl_handle_unref (priv->program);
priv->shader = COGL_INVALID_HANDLE;
goto out;
}
cogl_program_attach_shader (priv->program, priv->shader);
cogl_handle_unref (priv->shader);
cogl_program_link (priv->program);
priv->is_compiled = TRUE;
}
CLUTTER_NOTE (SHADER, "Applying the shader effect of type '%s'", CLUTTER_NOTE (SHADER, "Applying the shader effect of type '%s'",
G_OBJECT_TYPE_NAME (effect)); G_OBJECT_TYPE_NAME (effect));
@ -566,12 +633,6 @@ clutter_shader_effect_add_uniform (ClutterShaderEffect *effect,
else else
shader_uniform_update (uniform, value); shader_uniform_update (uniform, value);
if (priv->is_compiled)
{
uniform->location =
cogl_program_get_uniform_location (priv->program, uniform->name);
}
if (priv->actor != NULL && !CLUTTER_ACTOR_IN_PAINT (priv->actor)) if (priv->actor != NULL && !CLUTTER_ACTOR_IN_PAINT (priv->actor))
clutter_actor_queue_redraw (priv->actor); clutter_actor_queue_redraw (priv->actor);
} }
@ -832,35 +893,32 @@ clutter_shader_effect_set_shader_source (ClutterShaderEffect *effect,
priv = effect->priv; priv = effect->priv;
if (priv->source_set) if (priv->shader != COGL_INVALID_HANDLE)
return TRUE; return TRUE;
if (priv->program == COGL_INVALID_HANDLE) priv->shader = clutter_shader_effect_create_shader (effect);
priv->program = cogl_create_program ();
if (priv->shader == COGL_INVALID_HANDLE)
{
switch (priv->shader_type)
{
case CLUTTER_FRAGMENT_SHADER:
priv->shader = cogl_create_shader (COGL_SHADER_TYPE_FRAGMENT);
break;
case CLUTTER_VERTEX_SHADER:
priv->shader = cogl_create_shader (COGL_SHADER_TYPE_VERTEX);
break;
default:
priv->shader = COGL_INVALID_HANDLE;
break;
}
}
g_assert (priv->shader != COGL_INVALID_HANDLE);
cogl_shader_source (priv->shader, source); cogl_shader_source (priv->shader, source);
priv->source_set = TRUE; CLUTTER_NOTE (SHADER, "Compiling shader effect");
cogl_shader_compile (priv->shader);
if (cogl_shader_is_compiled (priv->shader))
{
priv->program = cogl_create_program ();
cogl_program_attach_shader (priv->program, priv->shader);
cogl_program_link (priv->program);
}
else
{
gchar *log_buf = cogl_shader_get_info_log (priv->shader);
g_warning ("Unable to compile the GLSL shader: %s", log_buf);
g_free (log_buf);
}
return TRUE; return TRUE;
} }

View File

@ -62,6 +62,11 @@ struct _ClutterShaderEffect
/** /**
* ClutterShaderEffectClass: * ClutterShaderEffectClass:
* @get_static_shader_source: Returns the GLSL source code to use for
* instances of this shader effect. Note that this function is only
* called once per subclass of #ClutterShaderEffect regardless of how
* many instances are used. It is expected that subclasses will return
* a copy of a static string from this function.
* *
* The <structname>ClutterShaderEffectClass</structname> structure contains * The <structname>ClutterShaderEffectClass</structname> structure contains
* only private data * only private data
@ -73,13 +78,16 @@ struct _ClutterShaderEffectClass
/*< private >*/ /*< private >*/
ClutterOffscreenEffectClass parent_class; ClutterOffscreenEffectClass parent_class;
/*< public >*/
gchar * (* get_static_shader_source) (ClutterShaderEffect *effect);
/*< private >*/
/* padding */ /* padding */
void (*_clutter_shader1) (void); void (*_clutter_shader1) (void);
void (*_clutter_shader2) (void); void (*_clutter_shader2) (void);
void (*_clutter_shader3) (void); void (*_clutter_shader3) (void);
void (*_clutter_shader4) (void); void (*_clutter_shader4) (void);
void (*_clutter_shader5) (void); void (*_clutter_shader5) (void);
void (*_clutter_shader6) (void);
}; };
GType clutter_shader_effect_get_type (void) G_GNUC_CONST; GType clutter_shader_effect_get_type (void) G_GNUC_CONST;

1551
po/eo.po

File diff suppressed because it is too large Load Diff

184
po/fr.po
View File

@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: clutter 1.3.14\n" "Project-Id-Version: clutter 1.3.14\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?"
"product=clutter&keywords=I18N+L10N&component=general\n" "product=clutter&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2011-09-23 14:34+0000\n" "POT-Creation-Date: 2011-10-01 11:10+0000\n"
"PO-Revision-Date: 2011-09-12 22:43+0200 \n" "PO-Revision-Date: 2011-09-12 22:43+0200 \n"
"Last-Translator: Bruno Brouard <annoa.b@gmail.com>\n" "Last-Translator: Bruno Brouard <annoa.b@gmail.com>\n"
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n" "Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
@ -403,6 +403,14 @@ msgstr "Contraintes"
msgid "Adds a constraint to the actor" msgid "Adds a constraint to the actor"
msgstr "Ajoute une contrainte à l'acteur" msgstr "Ajoute une contrainte à l'acteur"
#: ../clutter/clutter-actor.c:4733
msgid "Effect"
msgstr "Effet"
#: ../clutter/clutter-actor.c:4734
msgid "Add an effect to be applied on the actor"
msgstr "Ajoute un effet à appliquer à l'acteur"
#: ../clutter/clutter-actor-meta.c:193 ../clutter/clutter-child-meta.c:142 #: ../clutter/clutter-actor-meta.c:193 ../clutter/clutter-child-meta.c:142
msgid "Actor" msgid "Actor"
msgstr "Acteur" msgstr "Acteur"
@ -779,7 +787,7 @@ msgid "The layout manager used by the box"
msgstr "Le gestionnaire de disposition utilisé par la boite" msgstr "Le gestionnaire de disposition utilisé par la boite"
#: ../clutter/clutter-box.c:564 ../clutter/clutter-rectangle.c:267 #: ../clutter/clutter-box.c:564 ../clutter/clutter-rectangle.c:267
#: ../clutter/clutter-stage.c:1778 #: ../clutter/clutter-stage.c:1790
msgid "Color" msgid "Color"
msgstr "Couleur" msgstr "Couleur"
@ -974,27 +982,27 @@ msgstr "Teinte"
msgid "The tint to apply" msgid "The tint to apply"
msgstr "La teinte à appliquer" msgstr "La teinte à appliquer"
#: ../clutter/clutter-deform-effect.c:527 #: ../clutter/clutter-deform-effect.c:547
msgid "Horizontal Tiles" msgid "Horizontal Tiles"
msgstr "Tuiles horizontal" msgstr "Tuiles horizontal"
#: ../clutter/clutter-deform-effect.c:528 #: ../clutter/clutter-deform-effect.c:548
msgid "The number of horizontal tiles" msgid "The number of horizontal tiles"
msgstr "Le nombre de tuiles horizontales" msgstr "Le nombre de tuiles horizontales"
#: ../clutter/clutter-deform-effect.c:543 #: ../clutter/clutter-deform-effect.c:563
msgid "Vertical Tiles" msgid "Vertical Tiles"
msgstr "Tuiles verticales" msgstr "Tuiles verticales"
#: ../clutter/clutter-deform-effect.c:544 #: ../clutter/clutter-deform-effect.c:564
msgid "The number of vertical tiles" msgid "The number of vertical tiles"
msgstr "Le nombre de tuiles verticales" msgstr "Le nombre de tuiles verticales"
#: ../clutter/clutter-deform-effect.c:561 #: ../clutter/clutter-deform-effect.c:581
msgid "Back Material" msgid "Back Material"
msgstr "Matériau de l'arrière" msgstr "Matériau de l'arrière"
#: ../clutter/clutter-deform-effect.c:562 #: ../clutter/clutter-deform-effect.c:582
msgid "The material to be used when painting the back of the actor" msgid "The material to be used when painting the back of the actor"
msgstr "Le matériau à utiliser lors du dessin de l'arrière de l'acteur" msgstr "Le matériau à utiliser lors du dessin de l'arrière de l'acteur"
@ -1181,65 +1189,66 @@ msgstr "Gestionnaire"
msgid "The manager that created this data" msgid "The manager that created this data"
msgstr "Le gestionnaire qui a créé ces données" msgstr "Le gestionnaire qui a créé ces données"
#. Translate to default:RTL if you want your widgets #. Translators: Leave this UNTRANSLATED if your language is
#. * to be RTL, otherwise translate to default:LTR. #. * left-to-right. If your language is right-to-left
#. * (e.g. Hebrew, Arabic), translate it to "default:RTL".
#. * #. *
#. * Do *not* translate it to "predefinito:LTR": if it #. * Do NOT translate it to non-English e.g. "predefinito:LTR"! If
#. * it isn't default:LTR or default:RTL it will not work #. * it isn't default:LTR or default:RTL it will not work.
#. #.
#: ../clutter/clutter-main.c:492 #: ../clutter/clutter-main.c:494
msgid "default:LTR" msgid "default:LTR"
msgstr "default:LTR" msgstr "default:LTR"
#: ../clutter/clutter-main.c:1323 #: ../clutter/clutter-main.c:1325
msgid "Show frames per second" msgid "Show frames per second"
msgstr "Afficher le nombre d'images par seconde" msgstr "Afficher le nombre d'images par seconde"
#: ../clutter/clutter-main.c:1325 #: ../clutter/clutter-main.c:1327
msgid "Default frame rate" msgid "Default frame rate"
msgstr "Nombre d'images par seconde par défaut" msgstr "Nombre d'images par seconde par défaut"
#: ../clutter/clutter-main.c:1327 #: ../clutter/clutter-main.c:1329
msgid "Make all warnings fatal" msgid "Make all warnings fatal"
msgstr "Rendre tous les avertissements fatals" msgstr "Rendre tous les avertissements fatals"
#: ../clutter/clutter-main.c:1330 #: ../clutter/clutter-main.c:1332
msgid "Direction for the text" msgid "Direction for the text"
msgstr "Sens des textes" msgstr "Sens des textes"
#: ../clutter/clutter-main.c:1333 #: ../clutter/clutter-main.c:1335
msgid "Disable mipmapping on text" msgid "Disable mipmapping on text"
msgstr "Désactiver le MIP mapping pour le texte" msgstr "Désactiver le MIP mapping pour le texte"
#: ../clutter/clutter-main.c:1336 #: ../clutter/clutter-main.c:1338
msgid "Use 'fuzzy' picking" msgid "Use 'fuzzy' picking"
msgstr "Utiliser la sélection « approximative »" msgstr "Utiliser la sélection « approximative »"
#: ../clutter/clutter-main.c:1339 #: ../clutter/clutter-main.c:1341
msgid "Clutter debugging flags to set" msgid "Clutter debugging flags to set"
msgstr "Drapeau de débogage de Clutter à activer" msgstr "Drapeau de débogage de Clutter à activer"
#: ../clutter/clutter-main.c:1341 #: ../clutter/clutter-main.c:1343
msgid "Clutter debugging flags to unset" msgid "Clutter debugging flags to unset"
msgstr "Drapeau de débogage de Clutter à désactiver" msgstr "Drapeau de débogage de Clutter à désactiver"
#: ../clutter/clutter-main.c:1345 #: ../clutter/clutter-main.c:1347
msgid "Clutter profiling flags to set" msgid "Clutter profiling flags to set"
msgstr "Drapeau de profilage de Clutter à activer" msgstr "Drapeau de profilage de Clutter à activer"
#: ../clutter/clutter-main.c:1347 #: ../clutter/clutter-main.c:1349
msgid "Clutter profiling flags to unset" msgid "Clutter profiling flags to unset"
msgstr "Drapeau de profilage de Clutter à désactiver" msgstr "Drapeau de profilage de Clutter à désactiver"
#: ../clutter/clutter-main.c:1350 #: ../clutter/clutter-main.c:1352
msgid "Enable accessibility" msgid "Enable accessibility"
msgstr "Activer l'accessibilité" msgstr "Activer l'accessibilité"
#: ../clutter/clutter-main.c:1532 #: ../clutter/clutter-main.c:1534
msgid "Clutter Options" msgid "Clutter Options"
msgstr "Options de Clutter" msgstr "Options de Clutter"
#: ../clutter/clutter-main.c:1533 #: ../clutter/clutter-main.c:1535
msgid "Show Clutter Options" msgid "Show Clutter Options"
msgstr "Afficher les options de Clutter" msgstr "Afficher les options de Clutter"
@ -1355,7 +1364,7 @@ msgstr "« Filename » défini"
msgid "Whether the :filename property is set" msgid "Whether the :filename property is set"
msgstr "Indique si la propriété :filename est définie" msgstr "Indique si la propriété :filename est définie"
#: ../clutter/clutter-script.c:449 ../clutter/clutter-texture.c:1081 #: ../clutter/clutter-script.c:449 ../clutter/clutter-texture.c:1067
msgid "Filename" msgid "Filename"
msgstr "Nom de fichier" msgstr "Nom de fichier"
@ -1467,8 +1476,9 @@ msgstr "Durée avant masquage du mot de passe"
#: ../clutter/clutter-settings.c:612 #: ../clutter/clutter-settings.c:612
msgid "How long to show the last input character in hidden entries" msgid "How long to show the last input character in hidden entries"
msgstr "Pendant combien de temps il faut afficher le dernier caractère saisi " msgstr ""
"dans les entrées masquées" "Pendant combien de temps il faut afficher le dernier caractère saisi dans "
"les entrées masquées"
#: ../clutter/clutter-shader.c:255 #: ../clutter/clutter-shader.c:255
msgid "Vertex Source" msgid "Vertex Source"
@ -1511,11 +1521,11 @@ msgstr "Shader vertex"
msgid "Fragment shader" msgid "Fragment shader"
msgstr "Shader fragment" msgstr "Shader fragment"
#: ../clutter/clutter-shader-effect.c:415 #: ../clutter/clutter-shader-effect.c:482
msgid "Shader Type" msgid "Shader Type"
msgstr "Type de shader" msgstr "Type de shader"
#: ../clutter/clutter-shader-effect.c:416 #: ../clutter/clutter-shader-effect.c:483
msgid "The type of shader used" msgid "The type of shader used"
msgstr "Le type de shader utilisé" msgstr "Le type de shader utilisé"
@ -1543,106 +1553,106 @@ msgstr "Le bord de la source qui doit être attrapé"
msgid "The offset in pixels to apply to the constraint" msgid "The offset in pixels to apply to the constraint"
msgstr "Le décalage, en pixels, à appliquer à la contrainte" msgstr "Le décalage, en pixels, à appliquer à la contrainte"
#: ../clutter/clutter-stage.c:1720 #: ../clutter/clutter-stage.c:1732
msgid "Fullscreen Set" msgid "Fullscreen Set"
msgstr "Plein écran renseigné" msgstr "Plein écran renseigné"
#: ../clutter/clutter-stage.c:1721 #: ../clutter/clutter-stage.c:1733
msgid "Whether the main stage is fullscreen" msgid "Whether the main stage is fullscreen"
msgstr "Indique si la scène principale est en plein écran" msgstr "Indique si la scène principale est en plein écran"
#: ../clutter/clutter-stage.c:1737 #: ../clutter/clutter-stage.c:1749
msgid "Offscreen" msgid "Offscreen"
msgstr "Hors écran" msgstr "Hors écran"
#: ../clutter/clutter-stage.c:1738 #: ../clutter/clutter-stage.c:1750
msgid "Whether the main stage should be rendered offscreen" msgid "Whether the main stage should be rendered offscreen"
msgstr "Indique si la scène principale doit être rendue hors écran" msgstr "Indique si la scène principale doit être rendue hors écran"
#: ../clutter/clutter-stage.c:1750 ../clutter/clutter-text.c:3108 #: ../clutter/clutter-stage.c:1762 ../clutter/clutter-text.c:3108
msgid "Cursor Visible" msgid "Cursor Visible"
msgstr "Curseur visible" msgstr "Curseur visible"
#: ../clutter/clutter-stage.c:1751 #: ../clutter/clutter-stage.c:1763
msgid "Whether the mouse pointer is visible on the main stage" msgid "Whether the mouse pointer is visible on the main stage"
msgstr "" msgstr ""
"Indique si le pointeur de la souris est visible sur la scène principale" "Indique si le pointeur de la souris est visible sur la scène principale"
#: ../clutter/clutter-stage.c:1765 #: ../clutter/clutter-stage.c:1777
msgid "User Resizable" msgid "User Resizable"
msgstr "Redimensionnable par l'utilisateur" msgstr "Redimensionnable par l'utilisateur"
#: ../clutter/clutter-stage.c:1766 #: ../clutter/clutter-stage.c:1778
msgid "Whether the stage is able to be resized via user interaction" msgid "Whether the stage is able to be resized via user interaction"
msgstr "" msgstr ""
"Indique si la scène peut être redimensionnée par des interactions de " "Indique si la scène peut être redimensionnée par des interactions de "
"l'utilisateur" "l'utilisateur"
#: ../clutter/clutter-stage.c:1779 #: ../clutter/clutter-stage.c:1791
msgid "The color of the stage" msgid "The color of the stage"
msgstr "La couleur de la scène" msgstr "La couleur de la scène"
#: ../clutter/clutter-stage.c:1793 #: ../clutter/clutter-stage.c:1805
msgid "Perspective" msgid "Perspective"
msgstr "Perspective" msgstr "Perspective"
#: ../clutter/clutter-stage.c:1794 #: ../clutter/clutter-stage.c:1806
msgid "Perspective projection parameters" msgid "Perspective projection parameters"
msgstr "Paramètres de projection de la perspective" msgstr "Paramètres de projection de la perspective"
#: ../clutter/clutter-stage.c:1809 #: ../clutter/clutter-stage.c:1821
msgid "Title" msgid "Title"
msgstr "Titre" msgstr "Titre"
#: ../clutter/clutter-stage.c:1810 #: ../clutter/clutter-stage.c:1822
msgid "Stage Title" msgid "Stage Title"
msgstr "Titre de la scène" msgstr "Titre de la scène"
#: ../clutter/clutter-stage.c:1825 #: ../clutter/clutter-stage.c:1837
msgid "Use Fog" msgid "Use Fog"
msgstr "Utiliser le brouillard" msgstr "Utiliser le brouillard"
#: ../clutter/clutter-stage.c:1826 #: ../clutter/clutter-stage.c:1838
msgid "Whether to enable depth cueing" msgid "Whether to enable depth cueing"
msgstr "Indique s'il faut activer la troncature d'arrière-plan" msgstr "Indique s'il faut activer la troncature d'arrière-plan"
#: ../clutter/clutter-stage.c:1840 #: ../clutter/clutter-stage.c:1852
msgid "Fog" msgid "Fog"
msgstr "Brouillard" msgstr "Brouillard"
#: ../clutter/clutter-stage.c:1841 #: ../clutter/clutter-stage.c:1853
msgid "Settings for the depth cueing" msgid "Settings for the depth cueing"
msgstr "Paramétrages de la troncature d'arrière-plan" msgstr "Paramétrages de la troncature d'arrière-plan"
#: ../clutter/clutter-stage.c:1857 #: ../clutter/clutter-stage.c:1869
msgid "Use Alpha" msgid "Use Alpha"
msgstr "Utiliser l'alpha" msgstr "Utiliser l'alpha"
#: ../clutter/clutter-stage.c:1858 #: ../clutter/clutter-stage.c:1870
msgid "Whether to honour the alpha component of the stage color" msgid "Whether to honour the alpha component of the stage color"
msgstr "S'il faut respecter le composant alpha de la couleur de la scène" msgstr "S'il faut respecter le composant alpha de la couleur de la scène"
#: ../clutter/clutter-stage.c:1874 #: ../clutter/clutter-stage.c:1886
msgid "Key Focus" msgid "Key Focus"
msgstr "Focus clavier" msgstr "Focus clavier"
#: ../clutter/clutter-stage.c:1875 #: ../clutter/clutter-stage.c:1887
msgid "The currently key focused actor" msgid "The currently key focused actor"
msgstr "L'acteur possédant actuellement le focus" msgstr "L'acteur possédant actuellement le focus"
#: ../clutter/clutter-stage.c:1891 #: ../clutter/clutter-stage.c:1903
msgid "No Clear Hint" msgid "No Clear Hint"
msgstr "Aucun indicateur d'effacement" msgstr "Aucun indicateur d'effacement"
#: ../clutter/clutter-stage.c:1892 #: ../clutter/clutter-stage.c:1904
msgid "Whether the stage should clear its contents" msgid "Whether the stage should clear its contents"
msgstr "Indique si la scène doit effacer son contenu" msgstr "Indique si la scène doit effacer son contenu"
#: ../clutter/clutter-stage.c:1905 #: ../clutter/clutter-stage.c:1917
msgid "Accept Focus" msgid "Accept Focus"
msgstr "Accepte le focus" msgstr "Accepte le focus"
#: ../clutter/clutter-stage.c:1906 #: ../clutter/clutter-stage.c:1918
msgid "Whether the stage should accept focus on show" msgid "Whether the stage should accept focus on show"
msgstr "Indique si la scène doit accepter le focus à l'affichage" msgstr "Indique si la scène doit accepter le focus à l'affichage"
@ -1917,21 +1927,21 @@ msgstr "Couleur du texte sélectionné renseignée"
msgid "Whether the selected text color has been set" msgid "Whether the selected text color has been set"
msgstr "Indique si la couleur du texte sélectionné a été renseignée ou non" msgstr "Indique si la couleur du texte sélectionné a été renseignée ou non"
#: ../clutter/clutter-texture.c:995 #: ../clutter/clutter-texture.c:981
msgid "Sync size of actor" msgid "Sync size of actor"
msgstr "Synchronise la taille de l'acteur" msgstr "Synchronise la taille de l'acteur"
#: ../clutter/clutter-texture.c:996 #: ../clutter/clutter-texture.c:982
msgid "Auto sync size of actor to underlying pixbuf dimensions" msgid "Auto sync size of actor to underlying pixbuf dimensions"
msgstr "" msgstr ""
"Synchronisation de la taille de l'acteur avec les dimensions du pixbuf sous-" "Synchronisation de la taille de l'acteur avec les dimensions du pixbuf sous-"
"jacent" "jacent"
#: ../clutter/clutter-texture.c:1003 #: ../clutter/clutter-texture.c:989
msgid "Disable Slicing" msgid "Disable Slicing"
msgstr "Désactive le découpage" msgstr "Désactive le découpage"
#: ../clutter/clutter-texture.c:1004 #: ../clutter/clutter-texture.c:990
msgid "" msgid ""
"Forces the underlying texture to be singular and not made of smaller space " "Forces the underlying texture to be singular and not made of smaller space "
"saving individual textures" "saving individual textures"
@ -1939,72 +1949,72 @@ msgstr ""
"Force la texture sous-jacente à être singulière et non composée de plus " "Force la texture sous-jacente à être singulière et non composée de plus "
"petites sous-textures économes en espace" "petites sous-textures économes en espace"
#: ../clutter/clutter-texture.c:1013 #: ../clutter/clutter-texture.c:999
msgid "Tile Waste" msgid "Tile Waste"
msgstr "Perte de mosaïque" msgstr "Perte de mosaïque"
#: ../clutter/clutter-texture.c:1014 #: ../clutter/clutter-texture.c:1000
msgid "Maximum waste area of a sliced texture" msgid "Maximum waste area of a sliced texture"
msgstr "Zone maximale de perte d'une texture par morceaux" msgstr "Zone maximale de perte d'une texture par morceaux"
#: ../clutter/clutter-texture.c:1022 #: ../clutter/clutter-texture.c:1008
msgid "Horizontal repeat" msgid "Horizontal repeat"
msgstr "Répétition horizontale" msgstr "Répétition horizontale"
#: ../clutter/clutter-texture.c:1023 #: ../clutter/clutter-texture.c:1009
msgid "Repeat the contents rather than scaling them horizontally" msgid "Repeat the contents rather than scaling them horizontally"
msgstr "Répète le contenu plutôt de le redimensionner horizontalement" msgstr "Répète le contenu plutôt de le redimensionner horizontalement"
#: ../clutter/clutter-texture.c:1030 #: ../clutter/clutter-texture.c:1016
msgid "Vertical repeat" msgid "Vertical repeat"
msgstr "Répétition verticale" msgstr "Répétition verticale"
#: ../clutter/clutter-texture.c:1031 #: ../clutter/clutter-texture.c:1017
msgid "Repeat the contents rather than scaling them vertically" msgid "Repeat the contents rather than scaling them vertically"
msgstr "Répète le contenu plutôt de le redimensionner verticalement" msgstr "Répète le contenu plutôt de le redimensionner verticalement"
#: ../clutter/clutter-texture.c:1038 #: ../clutter/clutter-texture.c:1024
msgid "Filter Quality" msgid "Filter Quality"
msgstr "Qualité de filtrage" msgstr "Qualité de filtrage"
#: ../clutter/clutter-texture.c:1039 #: ../clutter/clutter-texture.c:1025
msgid "Rendering quality used when drawing the texture" msgid "Rendering quality used when drawing the texture"
msgstr "La qualité de rendu utilisée lors du dessin de la texture" msgstr "La qualité de rendu utilisée lors du dessin de la texture"
#: ../clutter/clutter-texture.c:1047 #: ../clutter/clutter-texture.c:1033
msgid "Pixel Format" msgid "Pixel Format"
msgstr "Format des pixels" msgstr "Format des pixels"
#: ../clutter/clutter-texture.c:1048 #: ../clutter/clutter-texture.c:1034
msgid "The Cogl pixel format to use" msgid "The Cogl pixel format to use"
msgstr "Le format des pixels Cogl à utiliser" msgstr "Le format des pixels Cogl à utiliser"
#: ../clutter/clutter-texture.c:1056 #: ../clutter/clutter-texture.c:1042
msgid "Cogl Texture" msgid "Cogl Texture"
msgstr "Texture Cogl" msgstr "Texture Cogl"
#: ../clutter/clutter-texture.c:1057 #: ../clutter/clutter-texture.c:1043
msgid "The underlying Cogl texture handle used to draw this actor" msgid "The underlying Cogl texture handle used to draw this actor"
msgstr "L'animateur de texture Cogl sous-jacent utilisé pour tracer cet acteur" msgstr "L'animateur de texture Cogl sous-jacent utilisé pour tracer cet acteur"
#: ../clutter/clutter-texture.c:1064 #: ../clutter/clutter-texture.c:1050
msgid "Cogl Material" msgid "Cogl Material"
msgstr "Matériel Cogl" msgstr "Matériel Cogl"
#: ../clutter/clutter-texture.c:1065 #: ../clutter/clutter-texture.c:1051
msgid "The underlying Cogl material handle used to draw this actor" msgid "The underlying Cogl material handle used to draw this actor"
msgstr "" msgstr ""
"L'animateur de matériel Cogl sous-jacent utilisé pour tracer cet acteur" "L'animateur de matériel Cogl sous-jacent utilisé pour tracer cet acteur"
#: ../clutter/clutter-texture.c:1082 #: ../clutter/clutter-texture.c:1068
msgid "The path of the file containing the image data" msgid "The path of the file containing the image data"
msgstr "Le chemin du fichier contenant les données de l'image" msgstr "Le chemin du fichier contenant les données de l'image"
#: ../clutter/clutter-texture.c:1089 #: ../clutter/clutter-texture.c:1075
msgid "Keep Aspect Ratio" msgid "Keep Aspect Ratio"
msgstr "Conserver le rapport d'affichage" msgstr "Conserver le rapport d'affichage"
#: ../clutter/clutter-texture.c:1090 #: ../clutter/clutter-texture.c:1076
msgid "" msgid ""
"Keep the aspect ratio of the texture when requesting the preferred width or " "Keep the aspect ratio of the texture when requesting the preferred width or "
"height" "height"
@ -2012,22 +2022,22 @@ msgstr ""
"Conserve le rapport d'affichage de la texture au moment d'une requête de " "Conserve le rapport d'affichage de la texture au moment d'une requête de "
"largeur ou hauteur préférée" "largeur ou hauteur préférée"
#: ../clutter/clutter-texture.c:1116 #: ../clutter/clutter-texture.c:1102
msgid "Load asynchronously" msgid "Load asynchronously"
msgstr "Chargement asynchrone" msgstr "Chargement asynchrone"
#: ../clutter/clutter-texture.c:1117 #: ../clutter/clutter-texture.c:1103
msgid "" msgid ""
"Load files inside a thread to avoid blocking when loading images from disk" "Load files inside a thread to avoid blocking when loading images from disk"
msgstr "" msgstr ""
"Charger les fichiers à l'intérieur d'un thread pour éviter un blocage lors " "Charger les fichiers à l'intérieur d'un thread pour éviter un blocage lors "
"du chargement des images à partir du disque" "du chargement des images à partir du disque"
#: ../clutter/clutter-texture.c:1133 #: ../clutter/clutter-texture.c:1119
msgid "Load data asynchronously" msgid "Load data asynchronously"
msgstr "Charger les données de manière asynchrone" msgstr "Charger les données de manière asynchrone"
#: ../clutter/clutter-texture.c:1134 #: ../clutter/clutter-texture.c:1120
msgid "" msgid ""
"Decode image data files inside a thread to reduce blocking when loading " "Decode image data files inside a thread to reduce blocking when loading "
"images from disk" "images from disk"
@ -2035,26 +2045,26 @@ msgstr ""
"Décode les fichiers de données d'image à l'intérieur d'un thread pour éviter " "Décode les fichiers de données d'image à l'intérieur d'un thread pour éviter "
"un blocage lors du chargement des images à partir du disque" "un blocage lors du chargement des images à partir du disque"
#: ../clutter/clutter-texture.c:1158 #: ../clutter/clutter-texture.c:1144
msgid "Pick With Alpha" msgid "Pick With Alpha"
msgstr "Sélection avec alpha" msgstr "Sélection avec alpha"
#: ../clutter/clutter-texture.c:1159 #: ../clutter/clutter-texture.c:1145
msgid "Shape actor with alpha channel when picking" msgid "Shape actor with alpha channel when picking"
msgstr "Acteur de forme avec canal alpha lors d'une sélection" msgstr "Acteur de forme avec canal alpha lors d'une sélection"
#: ../clutter/clutter-texture.c:1557 ../clutter/clutter-texture.c:1967 #: ../clutter/clutter-texture.c:1543 ../clutter/clutter-texture.c:1926
#: ../clutter/clutter-texture.c:2062 ../clutter/clutter-texture.c:2343 #: ../clutter/clutter-texture.c:2020 ../clutter/clutter-texture.c:2301
#, c-format #, c-format
msgid "Failed to load the image data" msgid "Failed to load the image data"
msgstr "Impossible de charger les données de l'image" msgstr "Impossible de charger les données de l'image"
#: ../clutter/clutter-texture.c:1703 #: ../clutter/clutter-texture.c:1689
#, c-format #, c-format
msgid "YUV textures are not supported" msgid "YUV textures are not supported"
msgstr "Les textures YUV ne sont pas prises en charge" msgstr "Les textures YUV ne sont pas prises en charge"
#: ../clutter/clutter-texture.c:1712 #: ../clutter/clutter-texture.c:1698
#, c-format #, c-format
msgid "YUV2 textues are not supported" msgid "YUV2 textues are not supported"
msgstr "Les textures YUV2 ne sont pas prises en charge" msgstr "Les textures YUV2 ne sont pas prises en charge"

View File

@ -75,6 +75,7 @@ units_sources += \
test-pick.c \ test-pick.c \
test-texture-fbo.c \ test-texture-fbo.c \
test-text-cache.c \ test-text-cache.c \
test-shader-effect.c \
$(NULL) $(NULL)
# objects tests # objects tests

View File

@ -134,6 +134,7 @@ main (int argc, char **argv)
TEST_CONFORM_SIMPLE ("/actor", actor_fixed_size); TEST_CONFORM_SIMPLE ("/actor", actor_fixed_size);
TEST_CONFORM_SIMPLE ("/actor", actor_preferred_size); TEST_CONFORM_SIMPLE ("/actor", actor_preferred_size);
TEST_CONFORM_SIMPLE ("/actor", test_offscreen_redirect); TEST_CONFORM_SIMPLE ("/actor", test_offscreen_redirect);
TEST_CONFORM_SIMPLE ("/actor", test_shader_effect);
TEST_CONFORM_SIMPLE ("/invariants", test_initial_state); TEST_CONFORM_SIMPLE ("/invariants", test_initial_state);
TEST_CONFORM_SIMPLE ("/invariants", test_shown_not_parented); TEST_CONFORM_SIMPLE ("/invariants", test_shown_not_parented);

View File

@ -0,0 +1,267 @@
#include <clutter/clutter.h>
#include "test-conform-common.h"
/****************************************************************
Old style shader effect
This uses clutter_shader_effect_set_source
****************************************************************/
static const gchar
old_shader_effect_source[] =
"uniform vec3 override_color;\n"
"\n"
"void\n"
"main ()\n"
"{\n"
" cogl_color_out = vec4 (override_color, 1.0);\n"
"}";
typedef struct _FooOldShaderEffectClass
{
ClutterShaderEffectClass parent_class;
} FooOldShaderEffectClass;
typedef struct _FooOldShaderEffect
{
ClutterShaderEffect parent;
} FooOldShaderEffect;
G_DEFINE_TYPE (FooOldShaderEffect,
foo_old_shader_effect,
CLUTTER_TYPE_SHADER_EFFECT);
static void
foo_old_shader_effect_paint_target (ClutterOffscreenEffect *effect)
{
clutter_shader_effect_set_shader_source (CLUTTER_SHADER_EFFECT (effect),
old_shader_effect_source);
clutter_shader_effect_set_uniform (CLUTTER_SHADER_EFFECT (effect),
"override_color",
G_TYPE_FLOAT, 3,
1.0f, 0.0f, 0.0f);
CLUTTER_OFFSCREEN_EFFECT_CLASS (foo_old_shader_effect_parent_class)->
paint_target (effect);
}
static void
foo_old_shader_effect_class_init (FooOldShaderEffectClass *klass)
{
ClutterOffscreenEffectClass *offscreen_effect_class =
CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
offscreen_effect_class->paint_target = foo_old_shader_effect_paint_target;
}
static void
foo_old_shader_effect_init (FooOldShaderEffect *self)
{
}
/****************************************************************
New style shader effect
This overrides get_static_shader_source()
****************************************************************/
static const gchar
new_shader_effect_source[] =
"uniform vec3 override_color;\n"
"\n"
"void\n"
"main ()\n"
"{\n"
" cogl_color_out = (vec4 (override_color, 1.0) +\n"
" vec4 (0.0, 0.0, 1.0, 0.0));\n"
"}";
typedef struct _FooNewShaderEffectClass
{
ClutterShaderEffectClass parent_class;
} FooNewShaderEffectClass;
typedef struct _FooNewShaderEffect
{
ClutterShaderEffect parent;
} FooNewShaderEffect;
G_DEFINE_TYPE (FooNewShaderEffect,
foo_new_shader_effect,
CLUTTER_TYPE_SHADER_EFFECT);
static gchar *
foo_new_shader_effect_get_static_source (ClutterShaderEffect *effect)
{
static gboolean already_called = FALSE;
/* This should only be called once even though we have two actors
using this effect */
g_assert (!already_called);
already_called = TRUE;
return g_strdup (new_shader_effect_source);
}
static void
foo_new_shader_effect_paint_target (ClutterOffscreenEffect *effect)
{
clutter_shader_effect_set_uniform (CLUTTER_SHADER_EFFECT (effect),
"override_color",
G_TYPE_FLOAT, 3,
0.0f, 1.0f, 0.0f);
CLUTTER_OFFSCREEN_EFFECT_CLASS (foo_new_shader_effect_parent_class)->
paint_target (effect);
}
static void
foo_new_shader_effect_class_init (FooNewShaderEffectClass *klass)
{
ClutterOffscreenEffectClass *offscreen_effect_class =
CLUTTER_OFFSCREEN_EFFECT_CLASS (klass);
ClutterShaderEffectClass *shader_effect_class =
CLUTTER_SHADER_EFFECT_CLASS (klass);
offscreen_effect_class->paint_target = foo_new_shader_effect_paint_target;
shader_effect_class->get_static_shader_source =
foo_new_shader_effect_get_static_source;
}
static void
foo_new_shader_effect_init (FooNewShaderEffect *self)
{
}
/****************************************************************
Another new style shader effect
This is the same but with a different shader. This is just
sanity check that each class gets its own copy of the private
data
****************************************************************/
static const gchar
another_new_shader_effect_source[] =
"\n"
"void\n"
"main ()\n"
"{\n"
" cogl_color_out = vec4 (1.0, 0.0, 1.0, 1.0);\n"
"}";
typedef struct _FooAnotherNewShaderEffectClass
{
ClutterShaderEffectClass parent_class;
} FooAnotherNewShaderEffectClass;
typedef struct _FooAnotherNewShaderEffect
{
ClutterShaderEffect parent;
} FooAnotherNewShaderEffect;
G_DEFINE_TYPE (FooAnotherNewShaderEffect,
foo_another_new_shader_effect,
CLUTTER_TYPE_SHADER_EFFECT);
static gchar *
foo_another_new_shader_effect_get_static_source (ClutterShaderEffect *effect)
{
return g_strdup (another_new_shader_effect_source);
}
static void
foo_another_new_shader_effect_class_init (FooAnotherNewShaderEffectClass *klass)
{
ClutterShaderEffectClass *shader_effect_class =
CLUTTER_SHADER_EFFECT_CLASS (klass);
shader_effect_class->get_static_shader_source =
foo_another_new_shader_effect_get_static_source;
}
static void
foo_another_new_shader_effect_init (FooAnotherNewShaderEffect *self)
{
}
/****************************************************************/
static ClutterActor *
make_actor (GType shader_type)
{
ClutterActor *rect;
const ClutterColor white = { 0xff, 0xff, 0xff, 0xff };
rect = clutter_rectangle_new ();
clutter_rectangle_set_color (CLUTTER_RECTANGLE (rect), &white);
clutter_actor_set_size (rect, 50, 50);
clutter_actor_add_effect (rect, g_object_new (shader_type, NULL));
return rect;
}
static guint32
get_pixel (int x, int y)
{
guint8 data[4];
cogl_read_pixels (x, y, 1, 1,
COGL_READ_PIXELS_COLOR_BUFFER,
COGL_PIXEL_FORMAT_RGBA_8888_PRE,
data);
return (((guint32) data[0] << 16) |
((guint32) data[1] << 8) |
data[2]);
}
static void
paint_cb (ClutterActor *stage)
{
/* old shader effect */
g_assert_cmpint (get_pixel (50, 50), ==, 0xff0000);
/* new shader effect */
g_assert_cmpint (get_pixel (150, 50), ==, 0x00ffff);
/* another new shader effect */
g_assert_cmpint (get_pixel (250, 50), ==, 0xff00ff);
/* new shader effect */
g_assert_cmpint (get_pixel (350, 50), ==, 0x00ffff);
clutter_main_quit ();
}
void
test_shader_effect (TestConformSimpleFixture *fixture,
gconstpointer data)
{
ClutterActor *stage;
ClutterActor *rect;
stage = clutter_stage_get_default ();
rect = make_actor (foo_old_shader_effect_get_type ());
clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
rect = make_actor (foo_new_shader_effect_get_type ());
clutter_actor_set_x (rect, 100);
clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
rect = make_actor (foo_another_new_shader_effect_get_type ());
clutter_actor_set_x (rect, 200);
clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
rect = make_actor (foo_new_shader_effect_get_type ());
clutter_actor_set_x (rect, 300);
clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
clutter_actor_show (stage);
g_signal_connect_after (stage, "paint", G_CALLBACK (paint_cb), NULL);
clutter_main ();
if (g_test_verbose ())
g_print ("OK\n");
}

View File

@ -195,7 +195,11 @@ main (int argc, char **argv)
unit_test_main = func; unit_test_main = func;
ret = unit_test_main (argc, argv); ret = unit_test_main (n_unit_names, unit_names);
g_free (unit_test);
break;
} }
g_free (unit_test); g_free (unit_test);