[gtk+] label: Pass the desired height to measuring layout
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] label: Pass the desired height to measuring layout
- Date: Tue, 19 Apr 2011 20:26:33 +0000 (UTC)
commit 484e04aed2056126e4feafecd5326171360c0ac0
Author: Benjamin Otte <otte redhat com>
Date: Mon Apr 18 03:30:35 2011 +0200
label: Pass the desired height to measuring layout
We always pass -1 for now.
gtk/gtklabel.c | 22 +++++++++++++++-------
1 files changed, 15 insertions(+), 7 deletions(-)
---
diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
index 36ed275..f9abc0b 100644
--- a/gtk/gtklabel.c
+++ b/gtk/gtklabel.c
@@ -3212,6 +3212,7 @@ get_font_metrics (PangoContext *context, GtkWidget *widget)
* @label: the label
* @existing_layout: %NULL or an existing layout already in use.
* @width: the width to measure with in pango units, or -1 for infinite
+ * @height: the height to measure with in pango units, or -1 for infinite
*
* Gets a layout that can be used for measuring sizes. The returned
* layout will be identical to the label's layout except for the
@@ -3223,7 +3224,8 @@ get_font_metrics (PangoContext *context, GtkWidget *widget)
static PangoLayout *
gtk_label_get_measuring_layout (GtkLabel * label,
PangoLayout *existing_layout,
- int width)
+ int width,
+ int height)
{
GtkLabelPrivate *priv = label->priv;
PangoRectangle rect;
@@ -3234,6 +3236,7 @@ gtk_label_get_measuring_layout (GtkLabel * label,
if (existing_layout != priv->layout)
{
pango_layout_set_width (existing_layout, width);
+ pango_layout_set_height (existing_layout, height);
return existing_layout;
}
@@ -3242,7 +3245,8 @@ gtk_label_get_measuring_layout (GtkLabel * label,
gtk_label_ensure_layout (label);
- if (pango_layout_get_width (priv->layout) == width)
+ if (pango_layout_get_width (priv->layout) == width &&
+ pango_layout_get_height (priv->layout) == height)
{
g_object_ref (priv->layout);
return priv->layout;
@@ -3256,6 +3260,7 @@ gtk_label_get_measuring_layout (GtkLabel * label,
{
g_object_ref (priv->layout);
pango_layout_set_width (priv->layout, width);
+ pango_layout_set_height (priv->layout, height);
return priv->layout;
}
@@ -3266,6 +3271,7 @@ gtk_label_get_measuring_layout (GtkLabel * label,
*/
pango_layout_get_extents (priv->layout, NULL, &rect);
if ((width == -1 || rect.width <= width) &&
+ (height == -1 || rect.height <= height) &&
!pango_layout_is_wrapped (priv->layout) &&
!pango_layout_is_ellipsized (priv->layout))
{
@@ -3275,6 +3281,7 @@ gtk_label_get_measuring_layout (GtkLabel * label,
copy = pango_layout_copy (priv->layout);
pango_layout_set_width (copy, width);
+ pango_layout_set_height (copy, height);
return copy;
}
@@ -3305,6 +3312,7 @@ gtk_label_update_layout_width (GtkLabel *label)
const gdouble dy = matrix->xy; /* sin (M_PI * angle / 180) */
pango_layout_set_width (priv->layout, -1);
+ pango_layout_set_height (priv->layout, -1);
pango_layout_get_pixel_extents (priv->layout, NULL, &logical);
if (fabs (dy) < 0.01)
@@ -3358,7 +3366,7 @@ gtk_label_update_layout_width (GtkLabel *label)
else
{
pango_layout_set_width (priv->layout, width * PANGO_SCALE);
- pango_layout_set_height (priv->layout, height * PANGO_SCALE);
+ pango_layout_set_height (priv->layout, priv->ellipsize ? height * PANGO_SCALE : -1);
}
}
else
@@ -3482,7 +3490,7 @@ get_size_for_allocation (GtkLabel *label,
PangoLayout *layout;
gint text_height;
- layout = gtk_label_get_measuring_layout (label, NULL, allocation * PANGO_SCALE);
+ layout = gtk_label_get_measuring_layout (label, NULL, allocation * PANGO_SCALE, -1);
pango_layout_get_pixel_size (layout, NULL, &text_height);
@@ -3537,7 +3545,7 @@ gtk_label_get_preferred_layout_size (GtkLabel *label,
*/
/* Start off with the pixel extents of an as-wide-as-possible layout */
- layout = gtk_label_get_measuring_layout (label, NULL, -1);
+ layout = gtk_label_get_measuring_layout (label, NULL, -1, -1);
pango_layout_get_extents (layout, NULL, natural);
natural->x = natural->y = 0;
@@ -3547,8 +3555,8 @@ gtk_label_get_preferred_layout_size (GtkLabel *label,
if (priv->ellipsize || priv->wrap)
{
- /* a layout with widdth 0 will be as small as humanly possible */
- layout = gtk_label_get_measuring_layout (label, layout, 0);
+ /* a layout with width 0 will be as small as humanly possible */
+ layout = gtk_label_get_measuring_layout (label, layout, 0, -1);
pango_layout_get_extents (layout, NULL, required);
required->x = required->y = 0;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]