[gnome-calendar] event-widget: fix size requisition



commit eb8d16bbc7f510f10b47dc75d5b7864116686d8d
Author: Erick Pérez Castellanos <erick red gmail com>
Date:   Sun Feb 15 11:04:10 2015 -0500

    event-widget: fix size requisition
    
    Size requisition previously add margin to the size requested. Margin
    should be taken into account outside of the widget. Moving margin to the
    container and use border, which previously was not used.

 data/theme/gtk-styles.css |    7 +--
 src/gcal-event-widget.c   |  102 +++++++++++++++-----------------------------
 2 files changed, 37 insertions(+), 72 deletions(-)
---
diff --git a/data/theme/gtk-styles.css b/data/theme/gtk-styles.css
index 7571f83..ead7542 100644
--- a/data/theme/gtk-styles.css
+++ b/data/theme/gtk-styles.css
@@ -180,11 +180,8 @@ GtkPopover.events GtkButton {
 }
 
 GcalEventWidget {
-    border-radius: 3px;
-    margin-top: 2px;
-    margin-left: 4px;
-    margin-bottom: 2px;
-    margin-right: 4px;
+    border-radius: 2px;
+    margin: 2px;
     padding: 4px;
     font: 10;
 }
diff --git a/src/gcal-event-widget.c b/src/gcal-event-widget.c
index 08d0531..0718c84 100644
--- a/src/gcal-event-widget.c
+++ b/src/gcal-event-widget.c
@@ -360,27 +360,21 @@ gcal_event_widget_get_preferred_width (GtkWidget *widget,
                                        gint      *minimum,
                                        gint      *natural)
 {
-  GtkBorder margin;
-  GtkBorder padding;
+  GtkBorder border, padding;
   PangoLayout *layout;
-  PangoRectangle logical_rect;
+  gint layout_width;
 
   layout = gtk_widget_create_pango_layout (widget, "00:00:00 00:00");
+  pango_layout_get_pixel_size (layout, &layout_width, NULL);
+  g_object_unref (layout);
 
-  pango_layout_get_extents (layout, NULL, &logical_rect);
-  pango_extents_to_pixels (&logical_rect, NULL);
-
-  gtk_style_context_get_margin (gtk_widget_get_style_context (widget),
-                                gtk_widget_get_state_flags (widget),
-                                &margin);
-  gtk_style_context_get_padding (gtk_widget_get_style_context (widget),
-                                 gtk_widget_get_state_flags (widget),
-                                 &padding);
-
-  *minimum = *natural =
-    logical_rect.width + padding.left + padding.right + margin.left + margin.right;
+  gtk_style_context_get_border (gtk_widget_get_style_context (widget), gtk_widget_get_state_flags (widget), 
&border);
+  gtk_style_context_get_padding (gtk_widget_get_style_context (widget), gtk_widget_get_state_flags (widget), 
&padding);
 
-  g_object_unref (layout);
+  if (minimum != NULL)
+    *minimum = layout_width + padding.left + padding.right + border.left + border.right;
+  if (natural != NULL)
+    *natural = layout_width + padding.left + padding.right + border.left + border.right;
 }
 
 static void
@@ -388,26 +382,21 @@ gcal_event_widget_get_preferred_height (GtkWidget *widget,
                                         gint      *minimum,
                                         gint      *natural)
 {
-  GtkBorder margin;
-  GtkBorder padding;
+  GtkBorder border, padding;
   PangoLayout *layout;
-  gint height;
+  gint layout_height;
 
   layout = gtk_widget_create_pango_layout (widget, NULL);
+  pango_layout_get_pixel_size (layout, NULL, &layout_height);
+  g_object_unref (layout);
 
-  pango_layout_get_pixel_size (layout, NULL, &height);
-
-  gtk_style_context_get_margin (gtk_widget_get_style_context (widget),
-                                gtk_widget_get_state_flags (widget),
-                                &margin);
-  gtk_style_context_get_padding (gtk_widget_get_style_context (widget),
-                                 gtk_widget_get_state_flags (widget),
-                                 &padding);
-
-  *minimum = *natural =
-    height + padding.top + padding.bottom + margin.top + margin.bottom;
+  gtk_style_context_get_border (gtk_widget_get_style_context (widget), gtk_widget_get_state_flags (widget), 
&border);
+  gtk_style_context_get_padding (gtk_widget_get_style_context (widget), gtk_widget_get_state_flags (widget), 
&padding);
 
-  g_object_unref (layout);
+  if (minimum != NULL)
+    *minimum = layout_height + padding.top + padding.bottom + border.top + border.bottom;
+  if (natural != NULL)
+    *natural = layout_height + padding.top + padding.bottom + border.top + border.bottom;
 }
 
 static void
@@ -523,19 +512,15 @@ gcal_event_widget_draw (GtkWidget *widget,
                         cairo_t   *cr)
 {
   GcalEventWidgetPrivate *priv;
+
   GtkStyleContext *context;
   GtkStateFlags state;
-  GtkBorder margin;
   GtkBorder padding;
 
-  gint x,y;
-  gint width, height;
-  gint left_gap;
-  gint right_gap;
-  gint icon_size = 0;
+  gint width, height, layout_height;
+  gint left_gap, right_gap, icon_size = 0;
 
   PangoLayout *layout;
-  PangoRectangle logical_rect;
   PangoFontDescription *font_desc;
 
   priv = gcal_event_widget_get_instance_private (GCAL_EVENT_WIDGET (widget));
@@ -543,33 +528,26 @@ gcal_event_widget_draw (GtkWidget *widget,
   state = gtk_widget_get_state_flags (widget);
 
   gtk_style_context_get_padding (context, state, &padding);
-  gtk_style_context_get_margin (context, state, &margin);
 
-  x = margin.left;
-  y = margin.top;
-  width = gtk_widget_get_allocated_width (widget)
-   - (margin.left + margin.right);
-  height = gtk_widget_get_allocated_height (widget)
-   - (margin.top + margin.bottom);
+  width = gtk_widget_get_allocated_width (widget);
+  height = gtk_widget_get_allocated_height (widget);
 
-  gtk_render_background (context, cr, x, y, width, height);
-  gtk_render_frame (context, cr, x, y, width, height);
+  gtk_render_background (context, cr, 0, 0, width, height);
+  gtk_render_frame (context, cr, 0, 0, width, height);
 
   /* FIXME for RTL alignment and icons positions */
   gtk_style_context_get (context, state, "font", &font_desc, NULL);
-  layout = pango_cairo_create_layout (cr);
+  layout = gtk_widget_create_pango_layout (widget, priv->summary);
   pango_layout_set_font_description (layout, font_desc);
   pango_layout_set_ellipsize (layout, PANGO_ELLIPSIZE_END);
   pango_layout_set_width (layout, (width - (padding.left + padding.right) ) * PANGO_SCALE);
-  pango_layout_set_text (layout, priv->summary, -1);
   pango_cairo_update_layout (cr, layout);
 
   left_gap = 0;
   if (priv->has_reminders)
     {
-      pango_layout_get_extents (layout, NULL, &logical_rect);
-      pango_extents_to_pixels (&logical_rect, NULL);
-      icon_size = logical_rect.height;
+      pango_layout_get_pixel_size (layout, NULL, &layout_height);
+      icon_size = layout_height;
       left_gap = icon_size + padding.left;
       pango_layout_set_width (layout, (width - (left_gap + padding.left + padding.right) ) * PANGO_SCALE);
     }
@@ -579,19 +557,15 @@ gcal_event_widget_draw (GtkWidget *widget,
     {
       if (icon_size == 0)
         {
-          pango_layout_get_extents (layout, NULL, &logical_rect);
-          pango_extents_to_pixels (&logical_rect, NULL);
-          icon_size = logical_rect.height;
+          pango_layout_get_pixel_size (layout, NULL, &layout_height);
+          icon_size = layout_height;
         }
 
       right_gap = icon_size + padding.right;
       pango_layout_set_width (layout, (width - (left_gap + padding.left + padding.right + right_gap) ) * 
PANGO_SCALE);
     }
 
-  gtk_render_layout (context, cr,
-                     x + padding.left + left_gap,
-                     y + padding.top,
-                     layout);
+  gtk_render_layout (context, cr, padding.left + left_gap, padding.top, layout);
 
   /* render reminder icon */
   if (priv->has_reminders)
@@ -613,10 +587,7 @@ gcal_event_widget_draw (GtkWidget *widget,
                                                         &was_symbolic,
                                                         NULL);
 
-      gdk_cairo_set_source_pixbuf (cr,
-                                   pixbuf,
-                                   x + padding.left,
-                                   y + padding.top + ((icon_size - (16 * multiplier)) / 2));
+      gdk_cairo_set_source_pixbuf (cr, pixbuf, padding.left, padding.top + ((icon_size - (16 * multiplier)) 
/ 2));
       g_object_unref (pixbuf);
       cairo_paint (cr);
     }
@@ -641,10 +612,7 @@ gcal_event_widget_draw (GtkWidget *widget,
                                                         &was_symbolic,
                                                         NULL);
 
-      gdk_cairo_set_source_pixbuf (cr,
-                                   pixbuf,
-                                   width - right_gap,
-                                   y + padding.top + ((icon_size - (16 * multiplier)) / 2));
+      gdk_cairo_set_source_pixbuf (cr, pixbuf, width - right_gap, padding.top + ((icon_size - (16 * 
multiplier)) / 2));
       g_object_unref (pixbuf);
       cairo_paint (cr);
     }


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