[gtk+/kill-size-request: 5/5] Remove size_request from GtkEntry



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]