[gnome-calendar] event-widget: fix size requisition
- From: Erick Pérez Castellanos <erickpc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar] event-widget: fix size requisition
- Date: Mon, 16 Feb 2015 14:32:37 +0000 (UTC)
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]