Add Text::get_chars() implementation and tests
The clutter_text_get_chars() function returns a section of the contents of the Text actor, delimited by a start and an end position. This commit adds the implementation for that function and a test unit that guarantees the offset-to-bytes computations are correct.
This commit is contained in:
parent
2fedd3263c
commit
b1c366a143
@ -2998,14 +2998,47 @@ clutter_text_delete_chars (ClutterText *self,
|
|||||||
g_object_notify (G_OBJECT (self), "text");
|
g_object_notify (G_OBJECT (self), "text");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* clutter_text_get_chars:
|
||||||
|
* @self: a #ClutterTex
|
||||||
|
* @start_pos: start of text, in characters
|
||||||
|
* @end_pos: end of text, in characters
|
||||||
|
*
|
||||||
|
* Retrieves the contents of the #ClutterText actor between
|
||||||
|
* @start_pos and @end_pos.
|
||||||
|
*
|
||||||
|
* The positions are specified in characters, not in bytes.
|
||||||
|
*
|
||||||
|
* Return value: a newly allocated string with the contents of
|
||||||
|
* the text actor between the specified positions. Use g_free()
|
||||||
|
* to free the resources when done
|
||||||
|
*
|
||||||
|
* Since: 1.0
|
||||||
|
*/
|
||||||
gchar *
|
gchar *
|
||||||
clutter_text_get_chars (ClutterText *self,
|
clutter_text_get_chars (ClutterText *self,
|
||||||
gssize start_pos,
|
gssize start_pos,
|
||||||
gssize end_pos)
|
gssize end_pos)
|
||||||
{
|
{
|
||||||
|
ClutterTextPrivate *priv;
|
||||||
|
gint start_index, end_index;
|
||||||
|
|
||||||
g_return_val_if_fail (CLUTTER_IS_TEXT (self), NULL);
|
g_return_val_if_fail (CLUTTER_IS_TEXT (self), NULL);
|
||||||
|
|
||||||
return NULL;
|
priv = self->priv;
|
||||||
|
|
||||||
|
if (end_pos < 0)
|
||||||
|
end_pos = priv->n_chars;
|
||||||
|
|
||||||
|
start_pos = MIN (priv->n_chars, start_pos);
|
||||||
|
end_pos = MIN (priv->n_chars, end_pos);
|
||||||
|
|
||||||
|
start_index = g_utf8_offset_to_pointer (priv->text, start_pos)
|
||||||
|
- priv->text;
|
||||||
|
end_index = g_utf8_offset_to_pointer (priv->text, end_pos)
|
||||||
|
- priv->text;
|
||||||
|
|
||||||
|
return g_strndup (priv->text + start_index, end_index - start_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -238,6 +238,37 @@ test_text_delete_chars (TestConformSimpleFixture *fixture,
|
|||||||
clutter_actor_destroy (CLUTTER_ACTOR (text));
|
clutter_actor_destroy (CLUTTER_ACTOR (text));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_text_get_chars (TestConformSimpleFixture *fixture,
|
||||||
|
gconstpointer data)
|
||||||
|
{
|
||||||
|
ClutterText *text = CLUTTER_TEXT (clutter_text_new ());
|
||||||
|
gchar *chars;
|
||||||
|
|
||||||
|
clutter_text_set_text (text, "00abcdef11");
|
||||||
|
g_assert_cmpint (get_nchars (text), ==, 10);
|
||||||
|
g_assert_cmpint (get_nbytes (text), ==, 10);
|
||||||
|
g_assert_cmpstr (clutter_text_get_text (text), ==, "00abcdef11");
|
||||||
|
|
||||||
|
chars = clutter_text_get_chars (text, 2, -1);
|
||||||
|
g_assert_cmpstr (chars, ==, "abcdef11");
|
||||||
|
g_free (chars);
|
||||||
|
|
||||||
|
chars = clutter_text_get_chars (text, 0, 8);
|
||||||
|
g_assert_cmpstr (chars, ==, "00abcdef");
|
||||||
|
g_free (chars);
|
||||||
|
|
||||||
|
chars = clutter_text_get_chars (text, 2, 8);
|
||||||
|
g_assert_cmpstr (chars, ==, "abcdef");
|
||||||
|
g_free (chars);
|
||||||
|
|
||||||
|
chars = clutter_text_get_chars (text, 8, 12);
|
||||||
|
g_assert_cmpstr (chars, ==, "11");
|
||||||
|
g_free (chars);
|
||||||
|
|
||||||
|
clutter_actor_destroy (CLUTTER_ACTOR (text));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
test_text_delete_text (TestConformSimpleFixture *fixture,
|
test_text_delete_text (TestConformSimpleFixture *fixture,
|
||||||
gconstpointer data)
|
gconstpointer data)
|
||||||
|
@ -75,14 +75,11 @@ main (int argc, char **argv)
|
|||||||
TEST_CONFORM_SIMPLE ("/entry", test_entry_empty);
|
TEST_CONFORM_SIMPLE ("/entry", test_entry_empty);
|
||||||
TEST_CONFORM_SIMPLE ("/entry", test_entry_set_empty);
|
TEST_CONFORM_SIMPLE ("/entry", test_entry_set_empty);
|
||||||
TEST_CONFORM_SIMPLE ("/entry", test_entry_set_text);
|
TEST_CONFORM_SIMPLE ("/entry", test_entry_set_text);
|
||||||
|
|
||||||
TEST_CONFORM_SIMPLE ("/entry", test_entry_append_some);
|
TEST_CONFORM_SIMPLE ("/entry", test_entry_append_some);
|
||||||
TEST_CONFORM_SIMPLE ("/entry", test_entry_prepend_some);
|
TEST_CONFORM_SIMPLE ("/entry", test_entry_prepend_some);
|
||||||
TEST_CONFORM_SIMPLE ("/entry", test_entry_insert);
|
TEST_CONFORM_SIMPLE ("/entry", test_entry_insert);
|
||||||
|
|
||||||
TEST_CONFORM_SIMPLE ("/entry", test_entry_delete_chars);
|
TEST_CONFORM_SIMPLE ("/entry", test_entry_delete_chars);
|
||||||
TEST_CONFORM_SIMPLE ("/entry", test_entry_delete_text);
|
TEST_CONFORM_SIMPLE ("/entry", test_entry_delete_text);
|
||||||
|
|
||||||
TEST_CONFORM_SIMPLE ("/entry", test_entry_cursor);
|
TEST_CONFORM_SIMPLE ("/entry", test_entry_cursor);
|
||||||
TEST_CONFORM_SIMPLE ("/entry", test_entry_event);
|
TEST_CONFORM_SIMPLE ("/entry", test_entry_event);
|
||||||
|
|
||||||
@ -91,16 +88,14 @@ main (int argc, char **argv)
|
|||||||
TEST_CONFORM_SIMPLE ("/text", test_text_empty);
|
TEST_CONFORM_SIMPLE ("/text", test_text_empty);
|
||||||
TEST_CONFORM_SIMPLE ("/text", test_text_set_empty);
|
TEST_CONFORM_SIMPLE ("/text", test_text_set_empty);
|
||||||
TEST_CONFORM_SIMPLE ("/text", test_text_set_text);
|
TEST_CONFORM_SIMPLE ("/text", test_text_set_text);
|
||||||
|
|
||||||
TEST_CONFORM_SIMPLE ("/text", test_text_append_some);
|
TEST_CONFORM_SIMPLE ("/text", test_text_append_some);
|
||||||
TEST_CONFORM_SIMPLE ("/text", test_text_prepend_some);
|
TEST_CONFORM_SIMPLE ("/text", test_text_prepend_some);
|
||||||
TEST_CONFORM_SIMPLE ("/text", test_text_insert);
|
TEST_CONFORM_SIMPLE ("/text", test_text_insert);
|
||||||
|
|
||||||
TEST_CONFORM_SIMPLE ("/text", test_text_delete_chars);
|
TEST_CONFORM_SIMPLE ("/text", test_text_delete_chars);
|
||||||
TEST_CONFORM_SIMPLE ("/text", test_text_delete_text);
|
TEST_CONFORM_SIMPLE ("/text", test_text_delete_text);
|
||||||
|
|
||||||
TEST_CONFORM_SIMPLE ("/text", test_text_cursor);
|
TEST_CONFORM_SIMPLE ("/text", test_text_cursor);
|
||||||
TEST_CONFORM_SIMPLE ("/text", test_text_event);
|
TEST_CONFORM_SIMPLE ("/text", test_text_event);
|
||||||
|
TEST_CONFORM_SIMPLE ("/text", test_text_get_chars);
|
||||||
|
|
||||||
TEST_CONFORM_SIMPLE ("/rectangle", test_rect_set_size);
|
TEST_CONFORM_SIMPLE ("/rectangle", test_rect_set_size);
|
||||||
TEST_CONFORM_SIMPLE ("/rectangle", test_rect_set_color);
|
TEST_CONFORM_SIMPLE ("/rectangle", test_rect_set_color);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user