[clutter/wip/apocalypses/apocalypse-3: 21/35] actor: Add minification/magnification filters
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter/wip/apocalypses/apocalypse-3: 21/35] actor: Add minification/magnification filters
- Date: Thu, 15 Mar 2012 18:06:26 +0000 (UTC)
commit a39d868994d99df7478b05260311953407c5bc6e
Author: Emmanuele Bassi <ebassi linux intel com>
Date: Thu Mar 8 17:18:17 2012 +0000
actor: Add minification/magnification filters
These settings are informative, and will only be used by the eventual
content of an actor.
clutter/clutter-actor.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++-
clutter/clutter-actor.h | 8 +++
clutter/clutter-enums.h | 6 ++
3 files changed, 133 insertions(+), 1 deletions(-)
---
diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c
index acbae95..9c3b6c2 100644
--- a/clutter/clutter-actor.c
+++ b/clutter/clutter-actor.c
@@ -166,7 +166,9 @@
* clutter_actor_get_allocation_box (actor, &box);
*
* /* the cogl_texture variable is set elsewhere */
- * node = clutter_texture_node_new (cogl_texture, CLUTTER_COLOR_White);
+ * node = clutter_texture_node_new (cogl_texture, CLUTTER_COLOR_White,
+ * CLUTTER_SCALING_FILTER_BILINEAR,
+ * CLUTTER_SCALING_FILTER_LINEAR);
*
* /* paint the content of the node using the allocation */
* clutter_paint_node_add_rectangle (node, &box);
@@ -588,6 +590,8 @@ struct _ClutterActorPrivate
ClutterContent *content;
ClutterContentGravity content_gravity;
+ ClutterScalingFilter min_filter;
+ ClutterScalingFilter mag_filter;
/* used when painting, to update the paint volume */
ClutterEffect *current_effect;
@@ -754,6 +758,8 @@ enum
PROP_CONTENT,
PROP_CONTENT_GRAVITY,
PROP_CONTENT_BOX,
+ PROP_MINIFICATION_FILTER,
+ PROP_MAGNIFICATION_FILTER,
PROP_LAST
};
@@ -4471,6 +4477,18 @@ clutter_actor_set_property (GObject *object,
clutter_actor_set_content_gravity (actor, g_value_get_enum (value));
break;
+ case PROP_MINIFICATION_FILTER:
+ clutter_actor_set_content_scaling_filters (actor,
+ g_value_get_enum (value),
+ actor->priv->mag_filter);
+ break;
+
+ case PROP_MAGNIFICATION_FILTER:
+ clutter_actor_set_content_scaling_filters (actor,
+ actor->priv->min_filter,
+ g_value_get_enum (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -4886,6 +4904,14 @@ clutter_actor_get_property (GObject *object,
}
break;
+ case PROP_MINIFICATION_FILTER:
+ g_value_set_enum (value, priv->min_filter);
+ break;
+
+ case PROP_MAGNIFICATION_FILTER:
+ g_value_set_enum (value, priv->mag_filter);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -6352,6 +6378,22 @@ clutter_actor_class_init (ClutterActorClass *klass)
CLUTTER_TYPE_ACTOR_BOX,
CLUTTER_PARAM_READABLE);
+ obj_props[PROP_MINIFICATION_FILTER] =
+ g_param_spec_enum ("minification-filter",
+ P_("Minification Filter"),
+ P_("The filter used when reducing the size of the content"),
+ CLUTTER_TYPE_SCALING_FILTER,
+ CLUTTER_SCALING_FILTER_LINEAR,
+ CLUTTER_PARAM_READWRITE);
+
+ obj_props[PROP_MAGNIFICATION_FILTER] =
+ g_param_spec_enum ("magnification-filter",
+ P_("Magnification Filter"),
+ P_("The filter used when increasing the size of the content"),
+ CLUTTER_TYPE_SCALING_FILTER,
+ CLUTTER_SCALING_FILTER_LINEAR,
+ CLUTTER_PARAM_READWRITE);
+
g_object_class_install_properties (object_class, PROP_LAST, obj_props);
/**
@@ -6937,6 +6979,8 @@ clutter_actor_init (ClutterActor *self)
* the easiest thing to compute.
*/
priv->content_gravity = CLUTTER_CONTENT_GRAVITY_RESIZE_FILL;
+ priv->min_filter = CLUTTER_SCALING_FILTER_LINEAR;
+ priv->mag_filter = CLUTTER_SCALING_FILTER_LINEAR;
}
/**
@@ -17745,3 +17789,77 @@ clutter_actor_get_content_box (ClutterActor *self,
break;
}
}
+
+/**
+ * clutter_actor_set_content_scaling_filters:
+ * @self: a #ClutterActor
+ * @min_filter: FIXME
+ * @mag_filter: FIXME
+ *
+ * FIXME
+ *
+ * Since: 1.10
+ */
+void
+clutter_actor_set_content_scaling_filters (ClutterActor *self,
+ ClutterScalingFilter min_filter,
+ ClutterScalingFilter mag_filter)
+{
+ ClutterActorPrivate *priv;
+ gboolean changed;
+ GObject *obj;
+
+ g_return_if_fail (CLUTTER_IS_ACTOR (self));
+
+ priv = self->priv;
+ obj = G_OBJECT (self);
+
+ g_object_freeze_notify (obj);
+
+ changed = FALSE;
+
+ if (priv->min_filter != min_filter)
+ {
+ priv->min_filter = min_filter;
+ changed = TRUE;
+
+ g_object_notify_by_pspec (obj, obj_props[PROP_MINIFICATION_FILTER]);
+ }
+
+ if (priv->mag_filter != mag_filter)
+ {
+ priv->mag_filter = mag_filter;
+ changed = TRUE;
+
+ g_object_notify_by_pspec (obj, obj_props[PROP_MAGNIFICATION_FILTER]);
+ }
+
+ if (changed)
+ clutter_actor_queue_redraw (self);
+
+ g_object_thaw_notify (obj);
+}
+
+/**
+ * clutter_actor_get_content_scaling_filters:
+ * @self: a #ClutterActor
+ * @min_filter: (out): FIXME
+ * @mag_filter: (out): FIXME
+ *
+ * FIXME
+ *
+ * Since: 1.10
+ */
+void
+clutter_actor_get_content_scaling_filters (ClutterActor *self,
+ ClutterScalingFilter *min_filter,
+ ClutterScalingFilter *mag_filter)
+{
+ g_return_if_fail (CLUTTER_IS_ACTOR (self));
+
+ if (min_filter != NULL)
+ *min_filter = self->priv->min_filter;
+
+ if (mag_filter != NULL)
+ *mag_filter = self->priv->mag_filter;
+}
diff --git a/clutter/clutter-actor.h b/clutter/clutter-actor.h
index 42f0fce..85b5d69 100644
--- a/clutter/clutter-actor.h
+++ b/clutter/clutter-actor.h
@@ -480,6 +480,14 @@ void clutter_actor_set_content_gravity
CLUTTER_AVAILABLE_IN_1_10
ClutterContentGravity clutter_actor_get_content_gravity (ClutterActor *self);
CLUTTER_AVAILABLE_IN_1_10
+void clutter_actor_set_content_scaling_filters (ClutterActor *self,
+ ClutterScalingFilter min_filter,
+ ClutterScalingFilter mag_filter);
+CLUTTER_AVAILABLE_IN_1_10
+void clutter_actor_get_content_scaling_filters (ClutterActor *self,
+ ClutterScalingFilter *min_filter,
+ ClutterScalingFilter *mag_filter);
+CLUTTER_AVAILABLE_IN_1_10
void clutter_actor_get_content_box (ClutterActor *self,
ClutterActorBox *box);
CLUTTER_AVAILABLE_IN_1_10
diff --git a/clutter/clutter-enums.h b/clutter/clutter-enums.h
index 8e68015..b9323cb 100644
--- a/clutter/clutter-enums.h
+++ b/clutter/clutter-enums.h
@@ -1149,6 +1149,12 @@ typedef enum {
CLUTTER_CONTENT_GRAVITY_RESIZE_ASPECT
} ClutterContentGravity;
+typedef enum {
+ CLUTTER_SCALING_FILTER_LINEAR,
+ CLUTTER_SCALING_FILTER_NEAREST,
+ CLUTTER_SCALING_FILTER_BILINEAR
+} ClutterScalingFilter;
+
G_END_DECLS
#endif /* __CLUTTER_ENUMS_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]