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.
This commit is contained in:
Erick Pérez Castellanos
2015-02-16 09:31:19 -05:00
parent 0aa162a9e7
commit eb8d16bbc7
2 changed files with 39 additions and 74 deletions
+2 -5
View File
@@ -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;
}
+37 -69
View File
@@ -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_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;
pango_layout_get_pixel_size (layout, &layout_width, NULL);
g_object_unref (layout);
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);
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, &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;
pango_layout_get_pixel_size (layout, NULL, &layout_height);
g_object_unref (layout);
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);
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);
}