[gnome-calendar] Added allocating of children in the GcalYearView.



commit 0a34a407222b5ec48cc10b016bdd2add3ca7182b
Author: Erick PÃrez Castellanos <erick red gmail com>
Date:   Thu Nov 22 11:16:16 2012 -0500

    Added allocating of children in the GcalYearView.
    
    Reordered months in the grid.

 src/gcal-year-view.c |   89 +++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 84 insertions(+), 5 deletions(-)
---
diff --git a/src/gcal-year-view.c b/src/gcal-year-view.c
index 72e74c8..426effa 100644
--- a/src/gcal-year-view.c
+++ b/src/gcal-year-view.c
@@ -351,6 +351,19 @@ gcal_year_view_size_allocate (GtkWidget     *widget,
                               GtkAllocation *allocation)
 {
   GcalYearViewPrivate *priv;
+  gint i;
+  GList *l;
+
+  GtkBorder padding;
+  PangoLayout *layout;
+
+  gint font_height;
+  gdouble start_grid_y;
+
+  gdouble added_height;
+  gdouble horizontal_block;
+  gdouble vertical_block;
+  gdouble vertical_cell_margin;
 
   priv = GCAL_YEAR_VIEW (widget)->priv;
 
@@ -363,6 +376,72 @@ gcal_year_view_size_allocate (GtkWidget     *widget,
                               allocation->width,
                               allocation->height);
     }
+
+  gtk_style_context_get_padding (gtk_widget_get_style_context (widget),
+                                 gtk_widget_get_state_flags (widget),
+                                 &padding);
+  layout = pango_layout_new (gtk_widget_get_pango_context (widget));
+
+  pango_layout_set_font_description (
+      layout,
+      gtk_style_context_get_font (gtk_widget_get_style_context (widget),
+                                  gtk_widget_get_state_flags (widget)));
+  pango_layout_get_pixel_size (layout, NULL, &font_height);
+  g_object_unref (layout);
+
+  start_grid_y = gcal_year_view_get_start_grid_y (widget);
+  horizontal_block = allocation->width / 6;
+  vertical_block = (allocation->height - start_grid_y) / 2;
+  vertical_cell_margin = padding.top + font_height;
+
+  g_debug ("handling children sizes");
+  for (i = 0; i < 12; i++)
+    {
+      added_height = 0;
+      for (l = priv->months[i]; l != NULL; l = l->next)
+        {
+          GcalViewChild *child;
+          gint pos_x;
+          gint pos_y;
+          gint min_height;
+          gint natural_height;
+          GtkAllocation child_allocation;
+
+          g_debug ("list length for %s is %d",
+                   gcal_get_month_name (i),
+                   g_list_length (priv->months[i]));
+          child = (GcalViewChild*) l->data;
+
+          pos_x = ( i % 6 ) * horizontal_block;
+          pos_y = ( i / 6 ) * vertical_block;
+
+          if ((! gtk_widget_get_visible (child->widget))
+              && (! child->hidden_by_me))
+            continue;
+
+          gtk_widget_get_preferred_height (child->widget,
+                                           &min_height,
+                                           &natural_height);
+          child_allocation.x = pos_x;
+          child_allocation.y = start_grid_y + vertical_cell_margin + pos_y;
+          child_allocation.width = horizontal_block;
+          child_allocation.height = MIN (natural_height, vertical_block);
+          if (added_height + vertical_cell_margin + child_allocation.height
+              > vertical_block)
+            {
+              gtk_widget_hide (child->widget);
+              child->hidden_by_me = TRUE;
+            }
+          else
+            {
+              gtk_widget_show (child->widget);
+              child->hidden_by_me = FALSE;
+              child_allocation.y = child_allocation.y + added_height;
+              gtk_widget_size_allocate (child->widget, &child_allocation);
+              added_height += child_allocation.height;
+            }
+        }
+    }
 }
 
 static gboolean
@@ -718,17 +797,17 @@ gcal_year_view_draw_grid (GcalYearView *view,
                         ligther_color.blue);
 
   /* drawing grid text */
-  for (i = 0; i < 6; i++)
+  for (i = 0; i < 2; i++)
     {
-      for (j = 0; j < 2; j++)
+      for (j = 0; j < 6; j++)
         {
-          pango_layout_set_text (layout, gcal_get_month_name (i * 2 + j), -1);
+          pango_layout_set_text (layout, gcal_get_month_name (i * 6 + j), -1);
           pango_cairo_update_layout (cr, layout);
           pango_layout_get_pixel_size (layout, &font_width, &font_height);
 
           cairo_move_to (cr,
-                         (alloc->width / 6) * i + header_padding.left,
-                         start_grid_y + padding->top + j * (alloc->height - start_grid_y) / 2);
+                         (alloc->width / 6) * j + header_padding.left,
+                         start_grid_y + padding->top + i * (alloc->height - start_grid_y) / 2);
           pango_cairo_show_layout (cr, layout);
         }
     }



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