[gtk+] entry: Move spinbutton size hack
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] entry: Move spinbutton size hack
- Date: Mon, 25 Jan 2016 14:52:17 +0000 (UTC)
commit 3982f05be4c228c3ec754a9783913b55d1ecef4d
Author: Benjamin Otte <otte redhat com>
Date: Mon Jan 25 15:42:18 2016 +0100
entry: Move spinbutton size hack
If we want to do special sizing for the text, we need to do it for the
text. Otherwise paddings, borders and entyr icons will screw up
everything.
gtk/gtkentry.c | 14 ++++++++---
gtk/gtkentryprivate.h | 4 +++
gtk/gtkspinbutton.c | 58 ++++++++++++++++++++++++------------------------
3 files changed, 43 insertions(+), 33 deletions(-)
---
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index f4335eb..4e16870 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -148,7 +148,6 @@
* .insertion-cursor.
*/
-
#define MIN_ENTRY_WIDTH 150
#define MAX_ICONS 2
@@ -3509,12 +3508,19 @@ gtk_entry_measure (GtkCssGadget *gadget,
char_pixels = (MAX (char_width, digit_width) + PANGO_SCALE - 1) / PANGO_SCALE;
if (priv->width_chars < 0)
- min = MIN_ENTRY_WIDTH;
+ {
+ if (GTK_IS_SPIN_BUTTON (entry))
+ min = gtk_spin_button_get_text_width (GTK_SPIN_BUTTON (entry));
+ else
+ min = MIN_ENTRY_WIDTH;
+ }
else
- min = char_pixels * priv->width_chars;
+ {
+ min = char_pixels * priv->width_chars;
+ }
if (priv->max_width_chars < 0)
- nat = MIN_ENTRY_WIDTH;
+ nat = min;
else
nat = char_pixels * priv->max_width_chars;
diff --git a/gtk/gtkentryprivate.h b/gtk/gtkentryprivate.h
index bc5e248..53a9078 100644
--- a/gtk/gtkentryprivate.h
+++ b/gtk/gtkentryprivate.h
@@ -24,6 +24,7 @@
#include <gtk/gtkentrycompletion.h>
#include <gtk/gtkentry.h>
#include <gtk/gtkcssgadgetprivate.h>
+#include <gtk/gtkspinbutton.h>
G_BEGIN_DECLS
@@ -91,6 +92,9 @@ GtkCssGadget* gtk_entry_get_gadget (GtkEntry *entry);
void _gtk_entry_grab_focus (GtkEntry *entry,
gboolean select_all);
+/* in gtkspinbutton.c (because I'm too lazy to create gtkspinbuttonprivate.h) */
+gint gtk_spin_button_get_text_width (GtkSpinButton *spin_button);
+
G_END_DECLS
#endif /* __GTK_ENTRY_PRIVATE_H__ */
diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c
index 3b619a7..dc39e38 100644
--- a/gtk/gtkspinbutton.c
+++ b/gtk/gtkspinbutton.c
@@ -1185,45 +1185,45 @@ gtk_spin_button_format_for_value (GtkSpinButton *spin_button,
return buf;
}
-static void
-gtk_spin_button_get_preferred_width (GtkWidget *widget,
- gint *minimum,
- gint *natural)
+gint
+gtk_spin_button_get_text_width (GtkSpinButton *spin_button)
{
- GtkSpinButton *spin_button = GTK_SPIN_BUTTON (widget);
GtkSpinButtonPrivate *priv = spin_button->priv;
- GtkEntry *entry = GTK_ENTRY (widget);
+ gint width, w;
+ PangoLayout *layout;
+ gchar *str;
- GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->get_preferred_width (widget, minimum, natural);
+ layout = pango_layout_copy (gtk_entry_get_layout (GTK_ENTRY (spin_button)));
- if (gtk_entry_get_width_chars (entry) < 0)
- {
- gint width, w;
- PangoLayout *layout;
- gchar *str;
+ /* Get max of MIN_SPIN_BUTTON_WIDTH, size of upper, size of lower */
+ width = MIN_SPIN_BUTTON_WIDTH;
- layout = pango_layout_copy (gtk_entry_get_layout (entry));
+ str = gtk_spin_button_format_for_value (spin_button,
+ gtk_adjustment_get_upper (priv->adjustment));
+ w = measure_string_width (layout, str);
+ width = MAX (width, w);
+ g_free (str);
- /* Get max of MIN_SPIN_BUTTON_WIDTH, size of upper, size of lower */
- width = MIN_SPIN_BUTTON_WIDTH;
+ str = gtk_spin_button_format_for_value (spin_button,
+ gtk_adjustment_get_lower (priv->adjustment));
+ w = measure_string_width (layout, str);
+ width = MAX (width, w);
+ g_free (str);
- str = gtk_spin_button_format_for_value (spin_button,
- gtk_adjustment_get_upper (priv->adjustment));
- w = measure_string_width (layout, str);
- width = MAX (width, w);
- g_free (str);
+ g_object_unref (layout);
- str = gtk_spin_button_format_for_value (spin_button,
- gtk_adjustment_get_lower (priv->adjustment));
- w = measure_string_width (layout, str);
- width = MAX (width, w);
- g_free (str);
+ return width;
+}
- *minimum = width;
- *natural = width;
+static void
+gtk_spin_button_get_preferred_width (GtkWidget *widget,
+ gint *minimum,
+ gint *natural)
+{
+ GtkSpinButton *spin_button = GTK_SPIN_BUTTON (widget);
+ GtkSpinButtonPrivate *priv = spin_button->priv;
- g_object_unref (layout);
- }
+ GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->get_preferred_width (widget, minimum, natural);
if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]