[gnome-photos] Add a PhotosViewEmbed skeleton



commit 24768e35e587cbb2c0d45c76eb3b9b5588142a58
Author: Debarshi Ray <debarshir gnome org>
Date:   Wed Apr 25 00:21:03 2012 +0200

    Add a PhotosViewEmbed skeleton

 configure.ac              |    1 +
 src/Makefile.am           |    4 +
 src/photos-main-toolbar.c |    7 ++
 src/photos-main-toolbar.h |    4 +-
 src/photos-view-embed.c   |  172 +++++++++++++++++++++++++++++++++++++++++++++
 src/photos-view-embed.h   |   71 +++++++++++++++++++
 6 files changed, 258 insertions(+), 1 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 5fd37df..f0a6fd9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -37,6 +37,7 @@ AM_GLIB_GNU_GETTEXT
 
 LT_INIT
 
+PKG_CHECK_MODULES(CLUTTER, [clutter-1.0])
 PKG_CHECK_MODULES(CLUTTER_GTK, [clutter-gtk-1.0])
 PKG_CHECK_MODULES(GLIB, [glib-2.0])
 PKG_CHECK_MODULES(GIO, [gio-2.0])
diff --git a/src/Makefile.am b/src/Makefile.am
index 8cab322..dd0e25f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -15,6 +15,8 @@ gnome_photos_SOURCES = \
 	photos-application.h \
 	photos-base-manager.c \
 	photos-base-manager.h \
+	photos-view-embed.c \
+	photos-view-embed.h \
 	photos-main-toolbar.c \
 	photos-main-toolbar.h \
 	photos-main-window.c \
@@ -38,6 +40,7 @@ EXTRA_DIST = \
 
 AM_CPPFLAGS = \
 	-DPACKAGE_LOCALE_DIR=\""${datadir}/locale"\" \
+	$(CLUTTER_CFLAGS) \
 	$(CLUTTER_GTK_CFLAGS) \
 	$(GIO_CFLAGS) \
 	$(GLIB_CFLAGS) \
@@ -48,6 +51,7 @@ AM_CPPFLAGS = \
 gnome_photos_LDFLAGS = 
 
 gnome_photos_LDADD = \
+	$(CLUTTER_LIBS) \
 	$(CLUTTER_GTK_LIBS) \
 	$(GIO_LIBS) \
 	$(GLIB_LIBS) \
diff --git a/src/photos-main-toolbar.c b/src/photos-main-toolbar.c
index 0d3bfa9..8ec031d 100644
--- a/src/photos-main-toolbar.c
+++ b/src/photos-main-toolbar.c
@@ -267,3 +267,10 @@ photos_main_toolbar_new (void)
 {
   return g_object_new (PHOTOS_TYPE_MAIN_TOOLBAR, NULL);
 }
+
+
+ClutterActor *
+photos_main_toolbar_get_actor (PhotosMainToolbar *self)
+{
+  return self->priv->actor;
+}
diff --git a/src/photos-main-toolbar.h b/src/photos-main-toolbar.h
index eaf2796..90174b7 100644
--- a/src/photos-main-toolbar.h
+++ b/src/photos-main-toolbar.h
@@ -21,7 +21,7 @@
 #ifndef PHOTOS_MAIN_TOOLBAR_H
 #define PHOTOS_MAIN_TOOLBAR_H
 
-#include <glib-object.h>
+#include <clutter/clutter.h>
 
 G_BEGIN_DECLS
 
@@ -66,6 +66,8 @@ GType                  photos_main_toolbar_get_type               (void) G_GNUC_
 
 PhotosMainToolbar     *photos_main_toolbar_new                    (void);
 
+ClutterActor          *photos_main_toolbar_get_actor              (PhotosMainToolbar *self);
+
 G_END_DECLS
 
 #endif /* PHOTOS_MAIN_TOOLBAR_H */
diff --git a/src/photos-view-embed.c b/src/photos-view-embed.c
new file mode 100644
index 0000000..b04e699
--- /dev/null
+++ b/src/photos-view-embed.c
@@ -0,0 +1,172 @@
+/*
+ * Photos - access, organize and share your photos on GNOME
+ * Copyright  2012 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+
+#include "config.h"
+
+#include <clutter-gtk/clutter-gtk.h>
+#include <gtk/gtk.h>
+
+#include "photos-main-toolbar.h"
+#include "photos-mode-controller.h"
+#include "photos-view-embed.h"
+
+
+struct _PhotosViewEmbedPrivate
+{
+  ClutterActor *background;
+  ClutterActor *contents_actor;
+  ClutterActor *notebook_actor;
+  ClutterActor *view_actor;
+  ClutterLayoutManager *contents_layout;
+  ClutterLayoutManager *view_layout;
+  GtkWidget *notebook;
+  PhotosMainToolbar *toolbar;
+  PhotosModeController *mode_cntrlr;
+};
+
+
+G_DEFINE_TYPE (PhotosViewEmbed, photos_view_embed, CLUTTER_TYPE_BOX);
+
+
+static void
+photos_view_embed_fullscreen_changed (PhotosModeController *mode_cntrlr, gboolean fullscreen, gpointer user_data)
+{
+}
+
+
+static void
+photos_view_embed_window_mode_changed (PhotosModeController *mode_cntrlr,
+                                       PhotosWindowMode mode,
+                                       PhotosWindowMode old_mode,
+                                       gpointer user_data)
+{
+}
+
+
+static void
+photos_view_embed_dispose (GObject *object)
+{
+  PhotosViewEmbed *self = PHOTOS_VIEW_EMBED (object);
+  PhotosViewEmbedPrivate *priv = self->priv;
+
+  if (priv->mode_cntrlr != NULL)
+    {
+      g_object_unref (priv->mode_cntrlr);
+      priv->mode_cntrlr = NULL;
+    }
+
+  G_OBJECT_CLASS (photos_view_embed_parent_class)->dispose (object);
+}
+
+
+static void
+photos_view_embed_init (PhotosViewEmbed *self)
+{
+  PhotosViewEmbedPrivate *priv;
+  ClutterActor *toolbar_actor;
+  ClutterColor color = {255, 255, 255, 255};
+
+  self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, PHOTOS_TYPE_VIEW_EMBED, PhotosViewEmbedPrivate);
+  priv = self->priv;
+
+  priv->contents_layout = clutter_box_layout_new ();
+  clutter_box_layout_set_vertical (CLUTTER_BOX_LAYOUT (priv->contents_layout), TRUE);
+  priv->contents_actor = clutter_box_new (priv->contents_layout);
+
+  priv->toolbar = photos_main_toolbar_new ();
+  toolbar_actor = photos_main_toolbar_get_actor (priv->toolbar);
+  clutter_container_add_actor (CLUTTER_CONTAINER (priv->contents_actor), toolbar_actor);
+  clutter_box_layout_set_fill (CLUTTER_BOX_LAYOUT (priv->contents_layout), toolbar_actor, TRUE, FALSE);
+
+  priv->view_layout = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_CENTER, CLUTTER_BIN_ALIGNMENT_CENTER);
+  priv->view_actor = clutter_box_new (priv->view_layout);
+  clutter_box_layout_set_expand (CLUTTER_BOX_LAYOUT (priv->contents_layout), priv->view_actor, TRUE);
+  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_bin_layout_add (CLUTTER_BIN_LAYOUT (priv->view_layout),
+                          priv->notebook_actor,
+                          CLUTTER_BIN_ALIGNMENT_FILL,
+                          CLUTTER_BIN_ALIGNMENT_FILL);
+
+  /* TODO: SpinnerBox */
+
+  priv->background = clutter_rectangle_new_with_color (&color);
+  clutter_bin_layout_add (CLUTTER_BIN_LAYOUT (priv->view_layout),
+                          priv->background,
+                          CLUTTER_BIN_ALIGNMENT_FILL,
+                          CLUTTER_BIN_ALIGNMENT_FILL);
+  clutter_actor_lower_bottom (priv->background);
+
+  /* TODO: SearchBar.Dropdown,
+   *       SelectionToolbar,
+   *       ...
+   */
+
+  priv->mode_cntrlr = photos_mode_controller_new ();
+  g_signal_connect (priv->mode_cntrlr,
+                    "window-mode-changed",
+                    G_CALLBACK (photos_view_embed_window_mode_changed),
+                    self);
+  g_signal_connect (priv->mode_cntrlr,
+                    "fullscreen-changed",
+                    G_CALLBACK (photos_view_embed_fullscreen_changed),
+                    self);
+}
+
+
+static void
+photos_view_embed_class_init (PhotosViewEmbedClass *class)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+  object_class->dispose = photos_view_embed_dispose;
+
+  g_type_class_add_private (class, sizeof (PhotosViewEmbedPrivate));
+}
+
+
+ClutterActor *
+photos_view_embed_new (ClutterBinLayout *layout)
+{
+  PhotosViewEmbed *self;
+  ClutterLayoutManager *overlay_layout;
+
+  g_return_val_if_fail (CLUTTER_IS_BIN_LAYOUT (layout), NULL);
+  self = g_object_new (PHOTOS_TYPE_VIEW_EMBED, "layout-manager", CLUTTER_LAYOUT_MANAGER (layout), NULL);
+
+  /* "layout-manager" being a non-construct property we can not use
+   * it from the constructed method :-(
+   */
+  overlay_layout = clutter_actor_get_layout_manager (CLUTTER_ACTOR (self));
+  clutter_bin_layout_add (CLUTTER_BIN_LAYOUT (overlay_layout),
+                          self->priv->contents_actor,
+                          CLUTTER_BIN_ALIGNMENT_FILL,
+                          CLUTTER_BIN_ALIGNMENT_FILL);
+
+  return CLUTTER_ACTOR (self);
+}
diff --git a/src/photos-view-embed.h b/src/photos-view-embed.h
new file mode 100644
index 0000000..0bedd9e
--- /dev/null
+++ b/src/photos-view-embed.h
@@ -0,0 +1,71 @@
+/*
+ * Photos - access, organize and share your photos on GNOME
+ * Copyright  2012 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+#ifndef PHOTOS_VIEW_EMBED_H
+#define PHOTOS_VIEW_EMBED_H
+
+#include <clutter/clutter.h>
+
+G_BEGIN_DECLS
+
+#define PHOTOS_TYPE_VIEW_EMBED (photos_view_embed_get_type ())
+
+#define PHOTOS_VIEW_EMBED(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+   PHOTOS_TYPE_VIEW_EMBED, PhotosViewEmbed))
+
+#define PHOTOS_VIEW_EMBED_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), \
+   PHOTOS_TYPE_VIEW_EMBED, PhotosViewEmbedClass))
+
+#define PHOTOS_IS_VIEW_EMBED(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+   PHOTOS_TYPE_VIEW_EMBED))
+
+#define PHOTOS_IS_VIEW_EMBED_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+   PHOTOS_TYPE_VIEW_EMBED))
+
+#define PHOTOS_VIEW_EMBED_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+   PHOTOS_TYPE_VIEW_EMBED, PhotosViewEmbedClass))
+
+typedef struct _PhotosViewEmbed        PhotosViewEmbed;
+typedef struct _PhotosViewEmbedClass   PhotosViewEmbedClass;
+typedef struct _PhotosViewEmbedPrivate PhotosViewEmbedPrivate;
+
+struct _PhotosViewEmbed
+{
+  ClutterBox parent_instance;
+  PhotosViewEmbedPrivate *priv;
+};
+
+struct _PhotosViewEmbedClass
+{
+  ClutterBoxClass parent_class;
+};
+
+GType                  photos_view_embed_get_type               (void) G_GNUC_CONST;
+
+ClutterActor          *photos_view_embed_new                    (ClutterBinLayout *layout);
+
+G_END_DECLS
+
+#endif /* PHOTOS_VIEW_EMBED_H */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]