From 21e3901d6248ceb9fd4e3c0c82565817774f463f Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Wed, 6 May 2009 17:18:12 +0100 Subject: [PATCH] [text] Expose position_to_coords() The clutter_text_position_to_coords() is useful for ClutterText subclasses. See bug: http://bugzilla.openedhand.com/show_bug.cgi?id=1521 Based on a patch by: Raymond Liu --- clutter/clutter-text.c | 33 +++++++++++++--------- clutter/clutter-text.h | 5 ++++ doc/reference/clutter/clutter-sections.txt | 1 + 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/clutter/clutter-text.c b/clutter/clutter-text.c index 856b7df1b..a3de0b72d 100644 --- a/clutter/clutter-text.c +++ b/clutter/clutter-text.c @@ -477,7 +477,7 @@ clutter_text_coords_to_position (ClutterText *text, return index_ + trailing; } -/* +/** * clutter_text_position_to_coords: * @self: a #ClutterText * @position: position in characters @@ -488,19 +488,28 @@ clutter_text_coords_to_position (ClutterText *text, * Retrieves the coordinates of the given @position. * * Return value: %TRUE if the conversion was successful + * + * Since: 1.0 */ -static gboolean +gboolean clutter_text_position_to_coords (ClutterText *self, gint position, ClutterUnit *x, ClutterUnit *y, ClutterUnit *line_height) { - ClutterTextPrivate *priv = self->priv; + ClutterTextPrivate *priv; PangoRectangle rect; gint password_char_bytes = 1; gint index_; + g_return_val_if_fail (CLUTTER_IS_TEXT (self), FALSE); + + priv = self->priv; + + if (position < -1 || position > priv->n_chars) + return FALSE; + if (priv->password_char != 0) password_char_bytes = g_unichar_to_utf8 (priv->password_char, NULL); @@ -527,7 +536,13 @@ clutter_text_position_to_coords (ClutterText *self, &rect, NULL); if (x) - *x = CLUTTER_UNITS_FROM_PANGO_UNIT (rect.x); + { + *x = CLUTTER_UNITS_FROM_PANGO_UNIT (rect.x); + + /* Take any offset due to scrolling into account */ + if (priv->single_line_mode) + *x += priv->text_x; + } if (y) *y = CLUTTER_UNITS_FROM_PANGO_UNIT (rect.y); @@ -535,16 +550,6 @@ clutter_text_position_to_coords (ClutterText *self, if (line_height) *line_height = CLUTTER_UNITS_FROM_PANGO_UNIT (rect.height); - if (self->priv->single_line_mode) - { - /* Take any offset due to scrolling into account */ - if (x) - *x += self->priv->text_x; - } - - - - /* FIXME: should return false if coords were outside text */ return TRUE; } diff --git a/clutter/clutter-text.h b/clutter/clutter-text.h index 01b058cf7..f34ff967a 100644 --- a/clutter/clutter-text.h +++ b/clutter/clutter-text.h @@ -198,6 +198,11 @@ void clutter_text_set_single_line_mode (ClutterText *sel gboolean clutter_text_get_single_line_mode (ClutterText *self); gboolean clutter_text_activate (ClutterText *self); +gboolean clutter_text_position_to_coords (ClutterText *self, + gint position, + gfloat *x, + gfloat *y, + gfloat *line_height); G_END_DECLS diff --git a/doc/reference/clutter/clutter-sections.txt b/doc/reference/clutter/clutter-sections.txt index fcfc97ebb..9cebff45d 100644 --- a/doc/reference/clutter/clutter-sections.txt +++ b/doc/reference/clutter/clutter-sections.txt @@ -1599,6 +1599,7 @@ clutter_text_get_cursor_size clutter_text_activate +clutter_text_position_to_coords CLUTTER_IS_TEXT