summaryrefslogtreecommitdiffstats
path: root/gtk/src/ghbcellrenderertext.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/src/ghbcellrenderertext.c')
-rw-r--r--gtk/src/ghbcellrenderertext.c62
1 files changed, 20 insertions, 42 deletions
diff --git a/gtk/src/ghbcellrenderertext.c b/gtk/src/ghbcellrenderertext.c
index 3876fb31c..c198a5214 100644
--- a/gtk/src/ghbcellrenderertext.c
+++ b/gtk/src/ghbcellrenderertext.c
@@ -1519,13 +1519,10 @@ get_size (GtkCellRenderer *cell,
gint cell_width, cell_height, cell_xpad, cell_ypad;
gfloat cell_xalign, cell_yalign;
- g_object_get(cell,
- "width", &cell_width,
- "height", &cell_height,
- "xpad", &cell_xpad,
- "ypad", &cell_ypad,
- "xalign", &cell_xalign,
- "yalign", &cell_yalign, NULL);
+
+ gtk_cell_renderer_get_fixed_size(cell, &cell_width, &cell_height);
+ gtk_cell_renderer_get_alignment(cell, &cell_xalign, &cell_yalign);
+ gtk_cell_renderer_get_padding(cell, &cell_xpad, &cell_ypad);
if (celltext->calc_fixed_height)
{
@@ -1571,43 +1568,19 @@ get_size (GtkCellRenderer *cell,
else
layout = get_layout (celltext, widget, FALSE, 0);
- pango_layout_get_extents (layout, NULL, &rect);
- pango_extents_to_pixels (&rect, NULL);
-
- if (height)
- *height = cell_ypad * 2 + rect.height;
-
- /* The minimum size for ellipsized labels is ~ 3 chars */
- if (width)
- {
- if (priv->ellipsize || priv->width_chars > 0)
- {
- PangoContext *context;
- PangoFontMetrics *metrics;
- gint char_width;
-
- context = pango_layout_get_context (layout);
- metrics = pango_context_get_metrics (context, widget->style->font_desc, pango_context_get_language (context));
-
- char_width = pango_font_metrics_get_approximate_char_width (metrics);
- pango_font_metrics_unref (metrics);
-
- *width = cell_xpad * 2 + (PANGO_PIXELS (char_width) * MAX (priv->width_chars, 3));
- }
- else
- {
- *width = cell_xpad * 2 + rect.x + rect.width;
- }
- }
+ pango_layout_get_pixel_extents(layout, NULL, &rect);
if (cell_area)
{
+ rect.height = MIN(rect.height, cell_area->height - 2 * cell_ypad);
+ rect.width = MIN(rect.width, cell_area->width - 2 * cell_xpad);
+
if (x_offset)
{
if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
- *x_offset = (1.0 - cell_xalign) * (cell_area->width - (rect.x + rect.width + (2 * cell_xpad)));
+ *x_offset = (1.0 - cell_xalign) * (cell_area->width - (2 * cell_xpad));
else
- *x_offset = cell_xalign * (cell_area->width - (rect.x + rect.width + (2 * cell_xpad)));
+ *x_offset = cell_xalign * (cell_area->width - (2 * cell_xpad));
if ((priv->ellipsize_set && priv->ellipsize != PANGO_ELLIPSIZE_NONE) || priv->wrap_width != -1)
*x_offset = MAX(*x_offset, 0);
@@ -1624,6 +1597,12 @@ get_size (GtkCellRenderer *cell,
if (y_offset) *y_offset = 0;
}
+ if (height)
+ *height = cell_ypad * 2 + rect.height;
+
+ if (width)
+ *width = cell_xpad * 2 + rect.width;
+
g_object_unref (layout);
}
@@ -1665,11 +1644,8 @@ ghb_cell_renderer_text_render (GtkCellRenderer *cell,
gboolean sensitive;
gint xpad, ypad;
- g_object_get(cell,
- "sensitive", &sensitive,
- "xpad", &xpad,
- "ypad", &ypad,
- NULL);
+
+ sensitive = gtk_cell_renderer_get_sensitive(cell);
if (!sensitive)
{
state = GTK_STATE_INSENSITIVE;
@@ -1694,6 +1670,8 @@ ghb_cell_renderer_text_render (GtkCellRenderer *cell,
state = GTK_STATE_NORMAL;
}
+ gtk_cell_renderer_get_padding(cell, &xpad, &ypad);
+
if (celltext->background_set &&
(flags & GTK_CELL_RENDERER_SELECTED) == 0)
{