return copy;
}
+static int
+get_char_pixels (GtkWidget *self,
+ PangoLayout *layout)
+{
+ PangoContext *context;
+ PangoFontMetrics *metrics;
+ int char_width, digit_width;
+
+ context = pango_layout_get_context (layout);
+ metrics = pango_context_get_metrics (context, NULL, NULL);
+ char_width = pango_font_metrics_get_approximate_char_width (metrics);
+ digit_width = pango_font_metrics_get_approximate_digit_width (metrics);
+ pango_font_metrics_unref (metrics);
+
+ return MAX (char_width, digit_width);
+}
+
static void
get_height_for_width (GtkLabel *self,
int width,
PangoLayout *layout;
int text_height, baseline;
- layout = gtk_label_get_measuring_layout (self, NULL, width * PANGO_SCALE);
+ width *= PANGO_SCALE;
+ if (self->max_width_chars > -1)
+ {
+ int char_pixels, width_chars;
+
+ layout = gtk_label_get_measuring_layout (self, NULL, -1);
+ char_pixels = get_char_pixels (GTK_WIDGET (self), layout);
+ if (self->width_chars > self->max_width_chars)
+ width_chars = self->width_chars;
+ else
+ width_chars = self->max_width_chars;
+ width = MIN (char_pixels * width_chars, width);
+ }
+ layout = gtk_label_get_measuring_layout (self, NULL, width);
pango_layout_get_pixel_size (layout, NULL, &text_height);
g_object_unref (layout);
}
-static int
-get_char_pixels (GtkWidget *self,
- PangoLayout *layout)
-{
- PangoContext *context;
- PangoFontMetrics *metrics;
- int char_width, digit_width;
-
- context = pango_layout_get_context (layout);
- metrics = pango_context_get_metrics (context, NULL, NULL);
- char_width = pango_font_metrics_get_approximate_char_width (metrics);
- digit_width = pango_font_metrics_get_approximate_digit_width (metrics);
- pango_font_metrics_unref (metrics);
-
- return MAX (char_width, digit_width);
-}
-
static void
gtk_label_get_preferred_layout_size (GtkLabel *self,
PangoRectangle *smallest,