[gtk+/kill-size-request: 5/5] Remove size_request from GtkEntry
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/kill-size-request: 5/5] Remove size_request from GtkEntry
- Date: Wed, 27 Oct 2010 01:43:44 +0000 (UTC)
commit 2432bf4a587f1a49e4827048ec353e0027652c69
Author: Matthias Clasen <mclasen redhat com>
Date: Tue Oct 26 21:41:13 2010 -0400
Remove size_request from GtkEntry
gtk/gtkentry.c | 78 +++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 58 insertions(+), 20 deletions(-)
---
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index 053e02b..4cb2c06 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -258,8 +258,12 @@ static void gtk_entry_realize (GtkWidget *widget);
static void gtk_entry_unrealize (GtkWidget *widget);
static void gtk_entry_map (GtkWidget *widget);
static void gtk_entry_unmap (GtkWidget *widget);
-static void gtk_entry_size_request (GtkWidget *widget,
- GtkRequisition *requisition);
+static void gtk_entry_get_preferred_width (GtkWidget *widget,
+ gint *minimum,
+ gint *natural);
+static void gtk_entry_get_preferred_height (GtkWidget *widget,
+ gint *minimum,
+ gint *natural);
static void gtk_entry_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gtk_entry_draw_frame (GtkWidget *widget,
@@ -577,7 +581,8 @@ gtk_entry_class_init (GtkEntryClass *class)
widget_class->unmap = gtk_entry_unmap;
widget_class->realize = gtk_entry_realize;
widget_class->unrealize = gtk_entry_unrealize;
- widget_class->size_request = gtk_entry_size_request;
+ widget_class->get_preferred_width = gtk_entry_get_preferred_width;
+ widget_class->get_preferred_height = gtk_entry_get_preferred_height;
widget_class->size_allocate = gtk_entry_size_allocate;
widget_class->draw = gtk_entry_draw;
widget_class->enter_notify_event = gtk_entry_enter_notify;
@@ -2853,8 +2858,9 @@ _gtk_entry_get_borders (GtkEntry *entry,
}
static void
-gtk_entry_size_request (GtkWidget *widget,
- GtkRequisition *requisition)
+gtk_entry_get_preferred_width (GtkWidget *widget,
+ gint *minimum,
+ gint *natural)
{
GtkEntry *entry = GTK_ENTRY (widget);
GtkEntryPrivate *priv = GTK_ENTRY_GET_PRIVATE (entry);
@@ -2862,33 +2868,29 @@ gtk_entry_size_request (GtkWidget *widget,
gint xborder, yborder;
GtkBorder inner_border;
PangoContext *context;
- int icon_widths = 0;
- int icon_width, i;
-
+ gint icon_widths = 0;
+ gint icon_width, i;
+ gint width;
+
gtk_widget_ensure_style (widget);
context = gtk_widget_get_pango_context (widget);
metrics = pango_context_get_metrics (context,
- gtk_widget_get_style (widget)->font_desc,
- pango_context_get_language (context));
+ gtk_widget_get_style (widget)->font_desc,
+ pango_context_get_language (context));
- entry->ascent = pango_font_metrics_get_ascent (metrics);
- entry->descent = pango_font_metrics_get_descent (metrics);
-
_gtk_entry_get_borders (entry, &xborder, &yborder);
_gtk_entry_effective_inner_border (entry, &inner_border);
if (entry->width_chars < 0)
- requisition->width = MIN_ENTRY_WIDTH + xborder * 2 + inner_border.left + inner_border.right;
+ width = MIN_ENTRY_WIDTH + xborder * 2 + inner_border.left + inner_border.right;
else
{
gint char_width = pango_font_metrics_get_approximate_char_width (metrics);
gint digit_width = pango_font_metrics_get_approximate_digit_width (metrics);
gint char_pixels = (MAX (char_width, digit_width) + PANGO_SCALE - 1) / PANGO_SCALE;
-
- requisition->width = char_pixels * entry->width_chars + xborder * 2 + inner_border.left + inner_border.right;
+
+ width = char_pixels * entry->width_chars + xborder * 2 + inner_border.left + inner_border.right;
}
-
- requisition->height = PANGO_PIXELS (entry->ascent + entry->descent) + yborder * 2 + inner_border.top + inner_border.bottom;
for (i = 0; i < MAX_ICONS; i++)
{
@@ -2897,10 +2899,46 @@ gtk_entry_size_request (GtkWidget *widget,
icon_widths += icon_width + 2 * priv->icon_margin;
}
- if (icon_widths > requisition->width)
- requisition->width += icon_widths;
+ if (icon_widths > width)
+ width += icon_widths;
pango_font_metrics_unref (metrics);
+
+ *minimum = width;
+ *natural = width;
+}
+
+static void
+gtk_entry_get_preferred_height (GtkWidget *widget,
+ gint *minimum,
+ gint *natural)
+{
+ GtkEntry *entry = GTK_ENTRY (widget);
+ GtkEntryPrivate *priv = GTK_ENTRY_GET_PRIVATE (entry);
+ PangoFontMetrics *metrics;
+ gint xborder, yborder;
+ GtkBorder inner_border;
+ PangoContext *context;
+ gint height;
+
+ gtk_widget_ensure_style (widget);
+ context = gtk_widget_get_pango_context (widget);
+ metrics = pango_context_get_metrics (context,
+ gtk_widget_get_style (widget)->font_desc,
+ pango_context_get_language (context));
+
+ entry->ascent = pango_font_metrics_get_ascent (metrics);
+ entry->descent = pango_font_metrics_get_descent (metrics);
+
+ _gtk_entry_get_borders (entry, &xborder, &yborder);
+ _gtk_entry_effective_inner_border (entry, &inner_border);
+
+ height = PANGO_PIXELS (entry->ascent + entry->descent) + yborder * 2 + inner_border.top + inner_border.bottom;
+
+ pango_font_metrics_unref (metrics);
+
+ *minimum = height;
+ *natural = height;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]