diff options
author | Owen Taylor <otaylor@redhat.com> | 2004-03-01 03:30:27 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2004-03-01 03:30:27 +0000 |
commit | 4ea9813d23e5454d7b301b33433ab8db457438cd (patch) | |
tree | abe1ceeacc16e730137c4bbc1476414aec1c20e9 | |
parent | 8451e4f843d8e56a0b02e820002aec49d91ddc47 (diff) | |
download | gtk+-4ea9813d23e5454d7b301b33433ab8db457438cd.tar.gz |
Add gtk_entry_set_alignment() to allow right-aligned entries and a
Sun Feb 29 22:01:49 2004 Owen Taylor <otaylor@redhat.com>
* gtk/gtkentry.[ch]: Add gtk_entry_set_alignment()
to allow right-aligned entries and a "xalign"
property. (#59799, patch from Egon Andersen and
Steffen Gutmann)
* gtk/gtkmisc.c (gtk_misc_class_init): Use improved
xalign property description here too.
* tests/testtext.c: UNDERLINE_ERROR test addition
from Nicolas Settons' patch.
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 13 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 13 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 13 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 13 | ||||
-rw-r--r-- | docs/reference/ChangeLog | 8 | ||||
-rw-r--r-- | docs/reference/gtk/gtk-sections.txt | 2 | ||||
-rw-r--r-- | gtk/gtkentry.c | 106 | ||||
-rw-r--r-- | gtk/gtkentry.h | 3 | ||||
-rw-r--r-- | gtk/gtkmisc.c | 2 | ||||
-rw-r--r-- | tests/testtext.c | 9 |
11 files changed, 188 insertions, 7 deletions
@@ -1,3 +1,16 @@ +Sun Feb 29 22:01:49 2004 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkentry.[ch]: Add gtk_entry_set_alignment() + to allow right-aligned entries and a "xalign" + property. (#59799, patch from Egon Andersen and + Steffen Gutmann) + + * gtk/gtkmisc.c (gtk_misc_class_init): Use improved + xalign property description here too. + + * tests/testtext.c: UNDERLINE_ERROR test addition + from Nicolas Settons' patch. + Sun Feb 29 20:34:06 2004 Owen Taylor <otaylor@redhat.com> * gtk/gtkwindow.[ch] gtk/gtkmenushellx.c: export diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 4e73b4271e..cb3fc0430e 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,16 @@ +Sun Feb 29 22:01:49 2004 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkentry.[ch]: Add gtk_entry_set_alignment() + to allow right-aligned entries and a "xalign" + property. (#59799, patch from Egon Andersen and + Steffen Gutmann) + + * gtk/gtkmisc.c (gtk_misc_class_init): Use improved + xalign property description here too. + + * tests/testtext.c: UNDERLINE_ERROR test addition + from Nicolas Settons' patch. + Sun Feb 29 20:34:06 2004 Owen Taylor <otaylor@redhat.com> * gtk/gtkwindow.[ch] gtk/gtkmenushellx.c: export diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 4e73b4271e..cb3fc0430e 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,16 @@ +Sun Feb 29 22:01:49 2004 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkentry.[ch]: Add gtk_entry_set_alignment() + to allow right-aligned entries and a "xalign" + property. (#59799, patch from Egon Andersen and + Steffen Gutmann) + + * gtk/gtkmisc.c (gtk_misc_class_init): Use improved + xalign property description here too. + + * tests/testtext.c: UNDERLINE_ERROR test addition + from Nicolas Settons' patch. + Sun Feb 29 20:34:06 2004 Owen Taylor <otaylor@redhat.com> * gtk/gtkwindow.[ch] gtk/gtkmenushellx.c: export diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 4e73b4271e..cb3fc0430e 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,16 @@ +Sun Feb 29 22:01:49 2004 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkentry.[ch]: Add gtk_entry_set_alignment() + to allow right-aligned entries and a "xalign" + property. (#59799, patch from Egon Andersen and + Steffen Gutmann) + + * gtk/gtkmisc.c (gtk_misc_class_init): Use improved + xalign property description here too. + + * tests/testtext.c: UNDERLINE_ERROR test addition + from Nicolas Settons' patch. + Sun Feb 29 20:34:06 2004 Owen Taylor <otaylor@redhat.com> * gtk/gtkwindow.[ch] gtk/gtkmenushellx.c: export diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 4e73b4271e..cb3fc0430e 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,16 @@ +Sun Feb 29 22:01:49 2004 Owen Taylor <otaylor@redhat.com> + + * gtk/gtkentry.[ch]: Add gtk_entry_set_alignment() + to allow right-aligned entries and a "xalign" + property. (#59799, patch from Egon Andersen and + Steffen Gutmann) + + * gtk/gtkmisc.c (gtk_misc_class_init): Use improved + xalign property description here too. + + * tests/testtext.c: UNDERLINE_ERROR test addition + from Nicolas Settons' patch. + Sun Feb 29 20:34:06 2004 Owen Taylor <otaylor@redhat.com> * gtk/gtkwindow.[ch] gtk/gtkmenushellx.c: export diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog index 759a6df05a..623ba6fceb 100644 --- a/docs/reference/ChangeLog +++ b/docs/reference/ChangeLog @@ -1,3 +1,11 @@ +Sun Feb 29 22:04:43 2004 Owen Taylor <otaylor@redhat.com> + + * gtk/gtk-sections.txt: Add gtk_entry_get_alignment + +Sun Feb 29 20:32:18 2004 Owen Taylor <otaylor@redhat.com> + + * gtk/gtk-sections.txt: Add gtk_window_mnemonic_activate + Sat Feb 28 01:14:23 2004 Matthias Clasen <maclas@gmx.de> * gtk/migrating-GtkComboBox.sgml: New chapter. diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt index 55932c0409..597620d8b1 100644 --- a/docs/reference/gtk/gtk-sections.txt +++ b/docs/reference/gtk/gtk-sections.txt @@ -1006,6 +1006,8 @@ gtk_entry_set_activates_default gtk_entry_set_has_frame gtk_entry_set_width_chars gtk_entry_get_invisible_char +gtk_entry_set_alignment +gtk_entry_get_alignment gtk_entry_get_layout gtk_entry_get_layout_offsets gtk_entry_get_max_length diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index dbdbaf86dd..e9cf61144e 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -65,6 +65,15 @@ /* Maximum size of text buffer, in bytes */ #define MAX_SIZE G_MAXUSHORT +typedef struct _GtkEntryPrivate GtkEntryPrivate; + +#define GTK_ENTRY_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_ENTRY, GtkEntryPrivate)) + +struct _GtkEntryPrivate +{ + gfloat xalign; +}; + enum { ACTIVATE, POPULATE_POPUP, @@ -90,7 +99,8 @@ enum { PROP_ACTIVATES_DEFAULT, PROP_WIDTH_CHARS, PROP_SCROLL_OFFSET, - PROP_TEXT + PROP_TEXT, + PROP_XALIGN }; static guint signals[LAST_SIGNAL] = { 0 }; @@ -535,6 +545,16 @@ gtk_entry_class_init (GtkEntryClass *class) P_("The contents of the entry"), "", G_PARAM_READABLE | G_PARAM_WRITABLE)); + + g_object_class_install_property (gobject_class, + PROP_XALIGN, + g_param_spec_float ("xalign", + P_("X align"), + P_("The horizontal alignment, from 0 (left) to 1 (right). Reversed for RTL layouts"), + 0.0, + 1.0, + 0.0, + G_PARAM_READABLE | G_PARAM_WRITABLE)); signals[POPULATE_POPUP] = g_signal_new ("populate_popup", @@ -767,6 +787,8 @@ gtk_entry_class_init (GtkEntryClass *class) P_("Whether to select the contents of an entry when it is focused"), TRUE, G_PARAM_READWRITE)); + + g_type_class_add_private (gobject_class, sizeof (GtkEntryPrivate)); } static void @@ -842,6 +864,10 @@ gtk_entry_set_property (GObject *object, gtk_entry_set_text (entry, g_value_get_string (value)); break; + case PROP_XALIGN: + gtk_entry_set_alignment (entry, g_value_get_float (value)); + break; + case PROP_SCROLL_OFFSET: case PROP_CURSOR_POSITION: default: @@ -893,6 +919,9 @@ gtk_entry_get_property (GObject *object, case PROP_TEXT: g_value_set_string (value, gtk_entry_get_text (entry)); break; + case PROP_XALIGN: + g_value_set_float (value, gtk_entry_get_alignment (entry)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -903,6 +932,8 @@ gtk_entry_get_property (GObject *object, static void gtk_entry_init (GtkEntry *entry) { + GtkEntryPrivate *priv = GTK_ENTRY_GET_PRIVATE (entry); + GTK_WIDGET_SET_FLAGS (entry, GTK_CAN_FOCUS); entry->text_size = MIN_SIZE; @@ -917,6 +948,7 @@ gtk_entry_init (GtkEntry *entry) entry->is_cell_renderer = FALSE; entry->editing_canceled = FALSE; entry->has_frame = TRUE; + priv->xalign = 0.0; gtk_drag_dest_set (GTK_WIDGET (entry), GTK_DEST_DEFAULT_HIGHLIGHT, @@ -3016,10 +3048,12 @@ gtk_entry_get_cursor_locations (GtkEntry *entry, static void gtk_entry_adjust_scroll (GtkEntry *entry) { + GtkEntryPrivate *priv = GTK_ENTRY_GET_PRIVATE (entry); gint min_offset, max_offset; - gint text_area_width; + gint text_area_width, text_width; gint strong_x, weak_x; gint strong_xoffset, weak_xoffset; + gfloat xalign; PangoLayout *layout; PangoLayoutLine *line; PangoRectangle logical_rect; @@ -3038,14 +3072,21 @@ gtk_entry_adjust_scroll (GtkEntry *entry) /* Display as much text as we can */ if (gtk_widget_get_direction (GTK_WIDGET (entry)) == GTK_TEXT_DIR_LTR) + xalign = priv->xalign; + else + xalign = 1.0 - priv->xalign; + + text_width = PANGO_PIXELS(logical_rect.width); + + if (text_width > text_area_width) { min_offset = 0; - max_offset = MAX (min_offset, logical_rect.width / PANGO_SCALE - text_area_width); + max_offset = text_width - text_area_width; } else { - max_offset = logical_rect.width / PANGO_SCALE - text_area_width; - min_offset = MIN (0, max_offset); + min_offset = (text_width - text_area_width) * xalign; + max_offset = min_offset; } entry->scroll_offset = CLAMP (entry->scroll_offset, min_offset, max_offset); @@ -3942,6 +3983,61 @@ gtk_entry_get_layout_offsets (GtkEntry *entry, *y += text_area_y; } + +/** + * gtk_entry_set_alignment: + * @entry: a #GtkEntry + * @xalign: The horizontal alignment, from 0 (left) to 1 (right). + * Reversed for RTL layouts + * + * Sets the alignment for the contents of the entry. This controls + * the horizontal positioning of the contents when the displayed + * text is shorter than the width of the entry. + **/ +void +gtk_entry_set_alignment (GtkEntry *entry, gfloat xalign) +{ + GtkEntryPrivate *priv; + + g_return_if_fail (GTK_IS_ENTRY (entry)); + + priv = GTK_ENTRY_GET_PRIVATE (entry); + + if (xalign < 0.0) + xalign = 0.0; + else if (xalign > 1.0) + xalign = 1.0; + + if (xalign != priv->xalign) + { + priv->xalign = xalign; + + gtk_entry_recompute (entry); + + g_object_notify (G_OBJECT (entry), "xalign"); + } +} + +/** + * gtk_entry_get_alignment: + * @entry: a #GtkEntry + * + * Gets the value set by gtk_entry_set_alignment(). + * + * Return value: the alignment + **/ +gfloat +gtk_entry_get_alignment (GtkEntry *entry) +{ + GtkEntryPrivate *priv; + + g_return_val_if_fail (GTK_IS_ENTRY (entry), 0.0); + + priv = GTK_ENTRY_GET_PRIVATE (entry); + + return priv->xalign; +} + /* Quick hack of a popup menu */ static void diff --git a/gtk/gtkentry.h b/gtk/gtkentry.h index d7b2f25478..3c06f472dc 100644 --- a/gtk/gtkentry.h +++ b/gtk/gtkentry.h @@ -182,6 +182,9 @@ PangoLayout* gtk_entry_get_layout (GtkEntry *entry); void gtk_entry_get_layout_offsets (GtkEntry *entry, gint *x, gint *y); +void gtk_entry_set_alignment (GtkEntry *entry, + gfloat xalign); +gfloat gtk_entry_get_alignment (GtkEntry *entry); void gtk_entry_set_completion (GtkEntry *entry, GtkEntryCompletion *completion); diff --git a/gtk/gtkmisc.c b/gtk/gtkmisc.c index fd9ff5cad7..20b1f64bbf 100644 --- a/gtk/gtkmisc.c +++ b/gtk/gtkmisc.c @@ -96,7 +96,7 @@ gtk_misc_class_init (GtkMiscClass *class) PROP_XALIGN, g_param_spec_float ("xalign", P_("X align"), - P_("The horizontal alignment, from 0 (left) to 1 (right)"), + P_("The horizontal alignment, from 0 (left) to 1 (right). Reversed for RTL layouts"), 0.0, 1.0, 0.5, diff --git a/tests/testtext.c b/tests/testtext.c index 13eaabd42d..ef22c2b050 100644 --- a/tests/testtext.c +++ b/tests/testtext.c @@ -502,10 +502,12 @@ fill_example_buffer (GtkTextBuffer *buffer) "underline", PANGO_UNDERLINE_SINGLE, NULL); + tag = gtk_text_buffer_create_tag (buffer, "underline_error", NULL); + setup_tag (tag); g_object_set (tag, - "underline", PANGO_UNDERLINE_SINGLE, + "underline", PANGO_UNDERLINE_ERROR, NULL); tag = gtk_text_buffer_create_tag (buffer, "centered", NULL); @@ -580,6 +582,11 @@ fill_example_buffer (GtkTextBuffer *buffer) gtk_text_buffer_apply_tag_by_name (buffer, "underline", &iter, &iter2); + gtk_text_buffer_get_iter_at_line_offset (buffer, &iter, 1, 4); + gtk_text_buffer_get_iter_at_line_offset (buffer, &iter2, 1, 7); + + gtk_text_buffer_apply_tag_by_name (buffer, "underline_error", &iter, &iter2); + gtk_text_buffer_get_iter_at_line_offset (buffer, &iter, 1, 14); gtk_text_buffer_get_iter_at_line_offset (buffer, &iter2, 1, 24); |