[gnome-photos] embed: Use ClutterImage for preview, and don't switch with GtkNotebook
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos] embed: Use ClutterImage for preview, and don't switch with GtkNotebook
- Date: Fri, 10 Aug 2012 10:56:23 +0000 (UTC)
commit 9c928c9f2b56ba76713e4ac48e6c283f1c8dfe0f
Author: Debarshi Ray <debarshir gnome org>
Date: Fri Aug 10 02:06:33 2012 +0200
embed: Use ClutterImage for preview, and don't switch with GtkNotebook
Instead of using a GtkNotebook lets just use the actors within the
view_actor for switching between overview and preview. Since we are
using a ClutterImage for the preview, using a GtkNotebook would mean
having a GtkClutterEmbed to put the preview actor within it. It is a
good idea to reduce the number of GtkClutterActors and
GtkClutterEmbeds.
src/photos-embed.c | 93 +++++++++++++++++++++++++++++-----------------------
1 files changed, 52 insertions(+), 41 deletions(-)
---
diff --git a/src/photos-embed.c b/src/photos-embed.c
index 832636f..16537af 100644
--- a/src/photos-embed.c
+++ b/src/photos-embed.c
@@ -40,14 +40,13 @@ struct _PhotosEmbedPrivate
ClutterActor *background;
ClutterActor *contents_actor;
ClutterActor *error_box;
- ClutterActor *notebook_actor;
+ ClutterActor *grid_actor;
+ ClutterActor *image_actor;
ClutterActor *view_actor;
ClutterLayoutManager *contents_layout;
ClutterLayoutManager *view_layout;
GCancellable *loader_cancellable;
- GdkPixbuf *pixbuf;
- GtkWidget *notebook;
- GtkWidget *scrolled_win_preview;
+ GtkWidget *grid;
GtkWidget *view;
PhotosBaseManager *item_mngr;
PhotosMainToolbar *toolbar;
@@ -70,10 +69,38 @@ photos_embed_item_load (GObject *source_object, GAsyncResult *res, gpointer user
{
PhotosEmbed *self = PHOTOS_EMBED (user_data);
PhotosEmbedPrivate *priv = self->priv;
+ ClutterContent *image;
+ CoglPixelFormat pixel_format;
+ GdkPixbuf *pixbuf;
PhotosBaseItem *item = PHOTOS_BASE_ITEM (source_object);
+ gboolean has_alpha;
+ gint height;
+ gint row_stride;
+ gint width;
+ guchar *pixels;
g_clear_object (&priv->loader_cancellable);
- priv->pixbuf = photos_base_item_load_finish (item, res, NULL);
+ pixbuf = photos_base_item_load_finish (item, res, NULL);
+ if (pixbuf == NULL)
+ return;
+
+ pixels = gdk_pixbuf_get_pixels (pixbuf);
+ has_alpha = gdk_pixbuf_get_has_alpha (pixbuf);
+ pixel_format = (has_alpha) ? COGL_PIXEL_FORMAT_RGBA_8888 : COGL_PIXEL_FORMAT_RGB_888;
+
+ width = gdk_pixbuf_get_width (pixbuf);
+ height = gdk_pixbuf_get_height (pixbuf);
+ row_stride = gdk_pixbuf_get_rowstride (pixbuf);
+
+ image = clutter_image_new ();
+ clutter_image_set_data (CLUTTER_IMAGE (image), pixels, pixel_format, width, height, row_stride, NULL);
+ g_object_unref (pixbuf);
+
+ clutter_actor_save_easing_state (priv->image_actor);
+ clutter_actor_set_content_gravity (priv->image_actor, CLUTTER_CONTENT_GRAVITY_RESIZE_ASPECT);
+ clutter_actor_restore_easing_state (priv->image_actor);
+ clutter_actor_set_content (priv->image_actor, image);
+ g_object_unref (image);
/* TODO: set toolbar model, move out spinner box. */
@@ -157,17 +184,10 @@ photos_embed_prepare_for_overview (PhotosEmbed *self)
if (priv->view == NULL)
{
- GtkWidget *grid;
-
- grid = gtk_grid_new ();
- gtk_orientable_set_orientation (GTK_ORIENTABLE (grid), GTK_ORIENTATION_VERTICAL);
priv->view = photos_view_new ();
- gtk_container_add (GTK_CONTAINER (grid), priv->view);
+ gtk_container_add (GTK_CONTAINER (priv->grid), priv->view);
/* TODO: LoadMoreButton */
-
- gtk_widget_show_all (grid);
- priv->view_page = gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), grid, NULL);
}
vadjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (priv->view));
@@ -187,7 +207,7 @@ photos_embed_prepare_for_overview (PhotosEmbed *self)
self);
photos_embed_view_change (self);
- gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), priv->view_page);
+ clutter_actor_set_child_above_sibling (priv->view_actor, priv->grid_actor, NULL);
}
@@ -223,23 +243,7 @@ photos_embed_prepare_for_preview (PhotosEmbed *self)
priv->scrollbar_visible_id = 0;
}
- if (priv->scrolled_win_preview == NULL)
- {
- GtkStyleContext *context;
-
- priv->scrolled_win_preview = gtk_scrolled_window_new (NULL, NULL);
- gtk_widget_set_hexpand (priv->scrolled_win_preview, TRUE);
- gtk_widget_set_vexpand (priv->scrolled_win_preview, TRUE);
- gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (priv->scrolled_win_preview), GTK_SHADOW_IN);
- context = gtk_widget_get_style_context (priv->scrolled_win_preview);
- gtk_style_context_add_class (context, "documents-scrolledwin");
- gtk_widget_show (priv->scrolled_win_preview);
- priv->preview_page = gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook),
- priv->scrolled_win_preview,
- NULL);
- }
-
- gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), priv->preview_page);
+ clutter_actor_set_child_above_sibling (priv->view_actor, priv->image_actor, NULL);
}
@@ -314,7 +318,6 @@ photos_embed_dispose (GObject *object)
PhotosEmbedPrivate *priv = self->priv;
g_clear_object (&priv->loader_cancellable);
- g_clear_object (&priv->pixbuf);
g_clear_object (&priv->item_mngr);
if (priv->mode_cntrlr != NULL)
@@ -373,15 +376,23 @@ photos_embed_init (PhotosEmbed *self)
clutter_box_layout_set_fill (CLUTTER_BOX_LAYOUT (priv->contents_layout), priv->view_actor, TRUE, TRUE);
clutter_container_add_actor (CLUTTER_CONTAINER (priv->contents_actor), priv->view_actor);
- priv->notebook = gtk_notebook_new ();
- gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->notebook), FALSE);
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), FALSE);
- gtk_widget_show (priv->notebook);
-
- priv->notebook_actor = gtk_clutter_actor_new_with_contents (priv->notebook);
- clutter_actor_set_x_expand (priv->notebook_actor, TRUE);
- clutter_actor_set_y_expand (priv->notebook_actor, TRUE);
- clutter_actor_add_child (priv->view_actor, priv->notebook_actor);
+ priv->grid = gtk_grid_new ();
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->grid), GTK_ORIENTATION_VERTICAL);
+ gtk_widget_show_all (priv->grid);
+
+ priv->grid_actor = gtk_clutter_actor_new_with_contents (priv->grid);
+ clutter_actor_set_x_expand (priv->grid_actor, TRUE);
+ clutter_actor_set_y_expand (priv->grid_actor, TRUE);
+ clutter_actor_add_child (priv->view_actor, priv->grid_actor);
+
+ 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);
/* TODO: SpinnerBox */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]