[gnome-photos] embed: Use texture background in preview
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos] embed: Use texture background in preview
- Date: Mon, 10 Dec 2012 08:48:55 +0000 (UTC)
commit 992c39d61dcb942e7677692196db2081e78799b6
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Fri Dec 7 17:55:12 2012 -0500
embed: Use texture background in preview
https://bugzilla.gnome.org/show_bug.cgi?id=688568
src/photos-embed.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 62 insertions(+), 5 deletions(-)
---
diff --git a/src/photos-embed.c b/src/photos-embed.c
index 3bd7b99..7b225c3 100644
--- a/src/photos-embed.c
+++ b/src/photos-embed.c
@@ -51,6 +51,7 @@ struct _PhotosEmbedPrivate
ClutterActor *contents_actor;
ClutterActor *error_box;
ClutterActor *image_actor;
+ ClutterActor *image_container;
ClutterActor *no_results;
ClutterActor *ntfctn_mngr;
ClutterActor *overview_actor;
@@ -209,7 +210,7 @@ photos_embed_prepare_for_overview (PhotosEmbed *self)
photos_error_box_move_out (PHOTOS_ERROR_BOX (priv->error_box));
clutter_actor_show (priv->overview_actor);
- clutter_actor_hide (priv->image_actor);
+ clutter_actor_hide (priv->image_container);
clutter_actor_set_child_below_sibling (priv->view_actor, priv->overview_actor, priv->ntfctn_mngr);
}
@@ -223,9 +224,9 @@ photos_embed_prepare_for_preview (PhotosEmbed *self)
* ErrorHandler
*/
- clutter_actor_show (priv->image_actor);
+ clutter_actor_show (priv->image_container);
clutter_actor_hide (priv->overview_actor);
- clutter_actor_set_child_below_sibling (priv->view_actor, priv->image_actor, priv->ntfctn_mngr);
+ clutter_actor_set_child_below_sibling (priv->view_actor, priv->image_container, priv->ntfctn_mngr);
}
@@ -335,6 +336,40 @@ photos_embed_dispose (GObject *object)
G_OBJECT_CLASS (photos_embed_parent_class)->dispose (object);
}
+static gboolean
+on_image_background_draw (ClutterCanvas *canvas,
+ cairo_t *cr,
+ gint width,
+ gint height,
+ gpointer user_data)
+{
+ PhotosEmbed *self = PHOTOS_EMBED (user_data);
+ GtkStyleContext *context;
+ GtkStateFlags flags;
+
+ context = gtk_widget_get_style_context (GTK_WIDGET (self));
+ flags = gtk_widget_get_state_flags (GTK_WIDGET (self));
+ gtk_style_context_save (context);
+ gtk_style_context_set_state (context, flags);
+ gtk_render_background (context, cr, 0, 0, width, height);
+ gtk_style_context_restore (context);
+
+ return TRUE;
+}
+
+static void
+on_image_background_resize (ClutterActor *actor,
+ const ClutterActorBox *allocation,
+ ClutterAllocationFlags flags,
+ gpointer user_data)
+{
+ ClutterContent *content;
+
+ content = clutter_actor_get_content (actor);
+ clutter_canvas_set_size (CLUTTER_CANVAS (content),
+ allocation->x2 - allocation->x1,
+ allocation->y2 - allocation->y1);
+}
static void
photos_embed_init (PhotosEmbed *self)
@@ -343,14 +378,20 @@ photos_embed_init (PhotosEmbed *self)
ClutterActor *actor;
ClutterActor *stage;
ClutterActor *toolbar_actor;
+ ClutterLayoutManager *image_layout;
ClutterLayoutManager *overlay_layout;
ClutterConstraint *constraint;
+ ClutterContent *image_background;
gboolean querying;
+ GtkStyleContext *context;
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, PHOTOS_TYPE_EMBED, PhotosEmbedPrivate);
priv = self->priv;
gtk_clutter_embed_set_use_layout_size (GTK_CLUTTER_EMBED (self), TRUE);
+ context = gtk_widget_get_style_context (GTK_WIDGET (self));
+ gtk_style_context_add_class (context, GTK_STYLE_CLASS_VIEW);
+ gtk_style_context_add_class (context, "content-view");
overlay_layout = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_CENTER, CLUTTER_BIN_ALIGNMENT_CENTER);
actor = clutter_actor_new ();
@@ -392,14 +433,30 @@ photos_embed_init (PhotosEmbed *self)
clutter_actor_set_y_expand (priv->overview_actor, TRUE);
clutter_actor_insert_child_below (priv->view_actor, priv->overview_actor, NULL);
+ priv->image_container = clutter_actor_new ();
+ clutter_actor_set_x_expand (priv->image_container, TRUE);
+ clutter_actor_set_y_expand (priv->image_container, TRUE);
+ image_layout = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_CENTER, CLUTTER_BIN_ALIGNMENT_CENTER);
+ clutter_actor_set_layout_manager (priv->image_container, image_layout);
+ clutter_actor_insert_child_below (priv->view_actor, priv->image_container, NULL);
+
+ image_background = clutter_canvas_new ();
+ clutter_actor_set_content (priv->image_container, image_background);
+ g_signal_connect (priv->image_container, "allocation-changed",
+ G_CALLBACK (on_image_background_resize), self);
+ g_signal_connect (image_background, "draw",
+ G_CALLBACK (on_image_background_draw), self);
+ g_signal_connect_swapped (self, "state-flags-changed",
+ G_CALLBACK (clutter_content_invalidate), image_background);
+ g_object_unref (image_background);
+
priv->image_actor = clutter_actor_new ();
- clutter_actor_set_background_color (priv->image_actor, CLUTTER_COLOR_Black);
clutter_actor_set_content_scaling_filters (priv->image_actor,
CLUTTER_SCALING_FILTER_TRILINEAR,
CLUTTER_SCALING_FILTER_TRILINEAR);
clutter_actor_set_x_expand (priv->image_actor, TRUE);
clutter_actor_set_y_expand (priv->image_actor, TRUE);
- clutter_actor_insert_child_below (priv->view_actor, priv->image_actor, NULL);
+ clutter_actor_add_child (priv->image_container, priv->image_actor);
priv->spinner_box = photos_spinner_box_new ();
clutter_actor_insert_child_below (priv->view_actor, priv->spinner_box, NULL);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]