[gnome-photos] preview-view: Don't put everything in a single GtkScrolledWindow



commit 62f4bcb4e78338d727fc21199703dce8758be44c
Author: Debarshi Ray <debarshir gnome org>
Date:   Thu Nov 26 20:02:25 2015 +0100

    preview-view: Don't put everything in a single GtkScrolledWindow
    
    There was never any reason to derive from GtkScrolledWindow and put
    everything in a single scrolled window. That was a stupid move on my
    part. Instead each view and the palette should have separate scrolled
    windows.
    
    This is not a big issue at the moment, but it will be when the palette
    grows further or we implement zoom.

 src/photos-preview-view.c |   83 +++++++++++++++++++++++++++-----------------
 src/photos-preview-view.h |    6 ++--
 2 files changed, 54 insertions(+), 35 deletions(-)
---
diff --git a/src/photos-preview-view.c b/src/photos-preview-view.c
index 39c3d99..0ffe096 100644
--- a/src/photos-preview-view.c
+++ b/src/photos-preview-view.c
@@ -60,7 +60,7 @@ enum
 };
 
 
-G_DEFINE_TYPE_WITH_PRIVATE (PhotosPreviewView, photos_preview_view, GTK_TYPE_SCROLLED_WINDOW);
+G_DEFINE_TYPE_WITH_PRIVATE (PhotosPreviewView, photos_preview_view, GTK_TYPE_BIN);
 
 
 static GtkWidget *photos_preview_view_create_view (PhotosPreviewView *self);
@@ -228,13 +228,20 @@ static GtkWidget *
 photos_preview_view_create_view (PhotosPreviewView *self)
 {
   GtkStyleContext *context;
+  GtkWidget *sw;
   GtkWidget *view;
 
+  sw = gtk_scrolled_window_new (NULL, NULL);
+  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN);
+  context = gtk_widget_get_style_context (sw);
+  gtk_style_context_add_class (context, "documents-scrolledwin");
+
   view = GTK_WIDGET (gegl_gtk_view_new ());
   gtk_widget_add_events (view, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK);
   context = gtk_widget_get_style_context (view);
   gtk_style_context_add_class (context, GTK_STYLE_CLASS_VIEW);
   gtk_style_context_add_class (context, "content-view");
+  gtk_container_add (GTK_CONTAINER (sw), view);
   g_signal_connect_swapped (view, "button-press-event", G_CALLBACK (photos_preview_view_button_press_event), 
self);
   g_signal_connect_swapped (view,
                             "button-release-event",
@@ -245,9 +252,9 @@ photos_preview_view_create_view (PhotosPreviewView *self)
   g_signal_connect_swapped (view, "draw-overlay", G_CALLBACK (photos_preview_view_draw_overlay), self);
 
   /* It has to be visible to become the visible child of priv->stack. */
-  gtk_widget_show (view);
+  gtk_widget_show_all (sw);
 
-  return view;
+  return sw;
 }
 
 
@@ -257,7 +264,9 @@ photos_preview_view_process (GObject *source_object, GAsyncResult *res, gpointer
   PhotosPreviewView *self = PHOTOS_PREVIEW_VIEW (user_data);
   PhotosPreviewViewPrivate *priv = self->priv;
   GError *error = NULL;
+  GtkWidget *sw;
   GtkWidget *view;
+  GtkWidget *viewport;
   PhotosBaseItem *item = PHOTOS_BASE_ITEM (source_object);
 
   photos_base_item_process_finish (item, res, &error);
@@ -267,7 +276,9 @@ photos_preview_view_process (GObject *source_object, GAsyncResult *res, gpointer
       g_error_free (error);
     }
 
-  view = gtk_stack_get_visible_child (GTK_STACK (priv->stack));
+  sw = gtk_stack_get_visible_child (GTK_STACK (priv->stack));
+  viewport = gtk_bin_get_child (GTK_BIN (sw));
+  view = gtk_bin_get_child (GTK_BIN (viewport));
   gtk_widget_queue_draw (view);
 }
 
@@ -398,7 +409,9 @@ static void
 photos_preview_view_tool_changed (PhotosPreviewView *self, PhotosTool *tool)
 {
   PhotosPreviewViewPrivate *priv = self->priv;
+  GtkWidget *sw;
   GtkWidget *view;
+  GtkWidget *viewport;
 
   if (priv->current_tool == tool)
     return;
@@ -407,7 +420,9 @@ photos_preview_view_tool_changed (PhotosPreviewView *self, PhotosTool *tool)
     photos_tool_deactivate (priv->current_tool);
 
   g_clear_object (&priv->current_tool);
-  view = gtk_stack_get_visible_child (GTK_STACK (priv->stack));
+  sw = gtk_stack_get_visible_child (GTK_STACK (priv->stack));
+  viewport = gtk_bin_get_child (GTK_BIN (sw));
+  view = gtk_bin_get_child (GTK_BIN (viewport));
 
   if (tool != NULL)
     {
@@ -490,27 +505,9 @@ photos_preview_view_constructed (GObject *object)
 {
   PhotosPreviewView *self = PHOTOS_PREVIEW_VIEW (object);
   PhotosPreviewViewPrivate *priv = self->priv;
-  GtkWidget *grid;
-  GtkWidget *palette;
 
   G_OBJECT_CLASS (photos_preview_view_parent_class)->constructed (object);
 
-  grid = gtk_grid_new ();
-  gtk_container_add (GTK_CONTAINER (self), grid);
-
-  /* Add the stack to the scrolled window after the default
-   * adjustments have been created.
-   */
-  gtk_container_add (GTK_CONTAINER (grid), priv->stack);
-
-  priv->revealer = gtk_revealer_new ();
-  gtk_revealer_set_transition_type (GTK_REVEALER (priv->revealer), GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT);
-  gtk_container_add (GTK_CONTAINER (grid), priv->revealer);
-
-  palette = photos_edit_palette_new ();
-  gtk_container_add (GTK_CONTAINER (priv->revealer), palette);
-  g_signal_connect_swapped (palette, "tool-changed", G_CALLBACK (photos_preview_view_tool_changed), self);
-
   priv->nav_buttons = photos_preview_nav_buttons_new (self, GTK_OVERLAY (priv->overlay));
   gtk_widget_show_all (GTK_WIDGET (self));
 }
@@ -541,7 +538,9 @@ photos_preview_view_init (PhotosPreviewView *self)
   PhotosPreviewViewPrivate *priv;
   GAction *action;
   GApplication *app;
-  GtkStyleContext *context;
+  GtkWidget *grid;
+  GtkWidget *palette;
+  GtkWidget *sw;
   GtkWidget *view;
   PhotosSearchContextState *state;
 
@@ -562,13 +561,14 @@ photos_preview_view_init (PhotosPreviewView *self)
 
   gtk_widget_set_hexpand (GTK_WIDGET (self), TRUE);
   gtk_widget_set_vexpand (GTK_WIDGET (self), TRUE);
-  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (self), GTK_SHADOW_IN);
-  context = gtk_widget_get_style_context (GTK_WIDGET (self));
-  gtk_style_context_add_class (context, "documents-scrolledwin");
+
+  grid = gtk_grid_new ();
+  gtk_container_add (GTK_CONTAINER (self), grid);
 
   priv->stack = gtk_stack_new ();
   gtk_widget_set_hexpand (priv->stack, TRUE);
   gtk_widget_set_vexpand (priv->stack, TRUE);
+  gtk_container_add (GTK_CONTAINER (grid), priv->stack);
 
   view = photos_preview_view_create_view (self);
   gtk_container_add (GTK_CONTAINER (priv->stack), view);
@@ -577,6 +577,19 @@ photos_preview_view_init (PhotosPreviewView *self)
   view = photos_preview_view_create_view (self);
   gtk_container_add (GTK_CONTAINER (priv->stack), view);
 
+  priv->revealer = gtk_revealer_new ();
+  gtk_revealer_set_transition_type (GTK_REVEALER (priv->revealer), GTK_REVEALER_TRANSITION_TYPE_SLIDE_LEFT);
+  gtk_container_add (GTK_CONTAINER (grid), priv->revealer);
+
+  sw = gtk_scrolled_window_new (NULL, NULL);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN);
+  gtk_container_add (GTK_CONTAINER (priv->revealer), sw);
+
+  palette = photos_edit_palette_new ();
+  gtk_container_add (GTK_CONTAINER (sw), palette);
+  g_signal_connect_swapped (palette, "tool-changed", G_CALLBACK (photos_preview_view_tool_changed), self);
+
   action = g_action_map_lookup_action (G_ACTION_MAP (app), "brightness-contrast-current");
   g_signal_connect_object (action,
                            "activate",
@@ -650,25 +663,31 @@ void
 photos_preview_view_set_node (PhotosPreviewView *self, GeglNode *node)
 {
   PhotosPreviewViewPrivate *priv = self->priv;
-  GtkWidget *view;
+  GtkWidget *sw;
 
   if (priv->node == node)
     return;
 
-  view = gtk_stack_get_visible_child (GTK_STACK (priv->stack));
+  sw = gtk_stack_get_visible_child (GTK_STACK (priv->stack));
   g_clear_object (&priv->node);
 
   if (node == NULL)
     {
-      gtk_container_remove (GTK_CONTAINER (priv->stack), view);
+      gtk_container_remove (GTK_CONTAINER (priv->stack), sw);
 
-      view = photos_preview_view_create_view (self);
-      gtk_container_add (GTK_CONTAINER (priv->stack), view);
+      sw = photos_preview_view_create_view (self);
+      gtk_container_add (GTK_CONTAINER (priv->stack), sw);
     }
   else
     {
+      GtkWidget *view;
+      GtkWidget *viewport;
+
       priv->node = g_object_ref (node);
 
+      viewport = gtk_bin_get_child (GTK_BIN (sw));
+      view = gtk_bin_get_child (GTK_BIN (viewport));
+
       /* Steals the reference to the GeglNode. */
       gegl_gtk_view_set_node (GEGL_GTK_VIEW (view), g_object_ref (priv->node));
       gtk_widget_queue_draw (view);
diff --git a/src/photos-preview-view.h b/src/photos-preview-view.h
index cdcdf3e..b19b399 100644
--- a/src/photos-preview-view.h
+++ b/src/photos-preview-view.h
@@ -1,6 +1,6 @@
 /*
  * Photos - access, organize and share your photos on GNOME
- * Copyright © 2013 Red Hat, Inc.
+ * Copyright © 2013, 2015 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
@@ -58,13 +58,13 @@ typedef struct _PhotosPreviewViewPrivate PhotosPreviewViewPrivate;
 
 struct _PhotosPreviewView
 {
-  GtkScrolledWindow parent_instance;
+  GtkBin parent_instance;
   PhotosPreviewViewPrivate *priv;
 };
 
 struct _PhotosPreviewViewClass
 {
-  GtkScrolledWindowClass parent_class;
+  GtkBinClass parent_class;
 };
 
 GType                  photos_preview_view_get_type               (void) G_GNUC_CONST;


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