[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 <raymond.liu@intel.com>
This commit is contained in:
Emmanuele Bassi 2009-05-06 17:18:12 +01:00
parent a28b9f31eb
commit d0ad5a8abb
3 changed files with 18 additions and 4 deletions

View File

@ -469,7 +469,7 @@ clutter_text_coords_to_position (ClutterText *text,
return index_ + trailing; return index_ + trailing;
} }
/* /**
* clutter_text_position_to_coords: * clutter_text_position_to_coords:
* @self: a #ClutterText * @self: a #ClutterText
* @position: position in characters * @position: position in characters
@ -480,19 +480,28 @@ clutter_text_coords_to_position (ClutterText *text,
* Retrieves the coordinates of the given @position. * Retrieves the coordinates of the given @position.
* *
* Return value: %TRUE if the conversion was successful * Return value: %TRUE if the conversion was successful
*
* Since: 1.0
*/ */
static gboolean gboolean
clutter_text_position_to_coords (ClutterText *self, clutter_text_position_to_coords (ClutterText *self,
gint position, gint position,
gfloat *x, gfloat *x,
gfloat *y, gfloat *y,
gfloat *line_height) gfloat *line_height)
{ {
ClutterTextPrivate *priv = self->priv; ClutterTextPrivate *priv;
PangoRectangle rect; PangoRectangle rect;
gint password_char_bytes = 1; gint password_char_bytes = 1;
gint index_; 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) if (priv->password_char != 0)
password_char_bytes = g_unichar_to_utf8 (priv->password_char, NULL); password_char_bytes = g_unichar_to_utf8 (priv->password_char, NULL);
@ -527,7 +536,6 @@ clutter_text_position_to_coords (ClutterText *self,
if (line_height) if (line_height)
*line_height = CLUTTER_UNITS_FROM_PANGO_UNIT (rect.height); *line_height = CLUTTER_UNITS_FROM_PANGO_UNIT (rect.height);
/* FIXME: should return false if coords were outside text */
return TRUE; return TRUE;
} }

View File

@ -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_get_single_line_mode (ClutterText *self);
gboolean clutter_text_activate (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 G_END_DECLS

View File

@ -1599,6 +1599,7 @@ clutter_text_get_cursor_size
<SUBSECTION> <SUBSECTION>
clutter_text_activate clutter_text_activate
clutter_text_position_to_coords
<SUBSECTION Standard> <SUBSECTION Standard>
CLUTTER_IS_TEXT CLUTTER_IS_TEXT