From 8c1c8274963543c45ba3717d1156d9edaa78cdc2 Mon Sep 17 00:00:00 2001 From: Jon Trowbridge Date: Fri, 26 Jan 2001 22:10:51 +0000 Subject: Added; a new test program that demonstrates objects in ETexts. 2001-01-26 Jon Trowbridge * gal/e-text/e-text-model-test.c: Added; a new test program that demonstrates objects in ETexts. * gal/e-text/e-text-model-uri.c: Added; a text model that converts URIs in the text into objects that are passed off to the GNOME URI handler when activated. This is actually still extremely broken; I got it just working enough to test out my EText changes. * gal/e-text/e-text.c: A whole lot of changes, designed to make ETextModel objects render properly. The basic idea of the changes is pretty simple, though. (text_width_with_objects): First of all, this function is an alternative to e_font_utf8_text_width that takes into the account the embedded \1s in the text string and properly accounts for the width of the object strings. (unicode_strlen_with_objects): Next, this function finds the proper strlen of a string, expanding the \1s. (text_draw_with_objects): Finally, this is just a replacement for e_font_draw_utf8_text that does the right thing for objects. I've gone through all of e-text.c and replace calls by those original functions with my new object-enabled alternatives. (split_into_lines): Some tweaking to get line breaking to work properly. Made \1 into a "break character", so that we can break lines between multiple adjacent objects. (Which seemed like the right thing to do, but there may be cases where that is undesireable.) (_get_position_from_xy): Fixed to properly handle embedded objects, and to get the right selection semantics for objects. (Or at least semantics that feel right to me.) Also fixed a bug that caused selection, etc. to not work properly if the text was anchored anywhere other than with GTK_ANCHOR_NORTH*. (_get_position): Hacked to cause objects to activate when they are double-clicked. There is probably a better way to do this. * gal/e-text/e-text-model.c (e_text_model_real_object_count): Provide a default implementation of an object counter. Derived classes might want to override this for efficiency reasons. (e_text_model_strdup_expanded_text): Added. Allocates and returns a string contains the model's text with the objects "expanded" within. * gal/e-text/e-text-model.h: Added obj_count, get_nth_obj, and activate_nth_obj virtual methods to ETextModelClass. svn path=/trunk/; revision=7842 --- widgets/text/e-text-model-test.c | 67 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 widgets/text/e-text-model-test.c (limited to 'widgets/text/e-text-model-test.c') diff --git a/widgets/text/e-text-model-test.c b/widgets/text/e-text-model-test.c new file mode 100644 index 0000000000..0c758cd4ba --- /dev/null +++ b/widgets/text/e-text-model-test.c @@ -0,0 +1,67 @@ +/* + ETextModelTest +*/ + +#include +#include +#include "e-text-model.h" +#include "e-text-model-uri.h" +#include "e-text.h" + +static void +describe_model (ETextModel *model) +{ + gint i, N; + g_return_if_fail (E_IS_TEXT_MODEL (model)); + + N = e_text_model_object_count (model); + + g_print ("text: %s\n", e_text_model_get_text (model)); + if (N > 0) { + gchar *s = e_text_model_strdup_expanded_text (model); + g_print ("expd: %s\n", s); + g_free (s); + } + g_print ("objs: %d\n", N); + + for (i=0; i