[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:
parent
ca23838752
commit
21e3901d62
@ -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,24 +536,20 @@ clutter_text_position_to_coords (ClutterText *self,
|
||||
&rect, NULL);
|
||||
|
||||
if (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);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -1599,6 +1599,7 @@ clutter_text_get_cursor_size
|
||||
|
||||
<SUBSECTION>
|
||||
clutter_text_activate
|
||||
clutter_text_position_to_coords
|
||||
|
||||
<SUBSECTION Standard>
|
||||
CLUTTER_IS_TEXT
|
||||
|
Loading…
Reference in New Issue
Block a user