From: <enl...@li...> - 2001-08-21 16:52:43
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Modified Files: Etox.h etox_color.c Log Message: Added a function for retrieving the rgba values of a given color member. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/Etox.h,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- Etox.h 2001/08/21 16:44:07 1.19 +++ Etox.h 2001/08/21 16:52:42 1.20 @@ -163,6 +163,8 @@ Etox_Color etox_color_new(void); void etox_color_set_member(Etox_Color color, char *member, int r, int g, int b, int a); +void etox_color_get_member(Etox_Color color, char *member, + int *r, int *g, int *b, int *a); void etox_color_free(Etox_Color color); =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_color.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- etox_color.c 2001/08/17 12:20:33 1.4 +++ etox_color.c 2001/08/21 16:52:42 1.5 @@ -79,3 +79,33 @@ ewd_list_append(color->bits, cb); } +void +etox_color_get_member(Etox_Color color, char *member, + int *r, int *g, int *b, int *a) +{ + Etox_Color_Bit cb = NULL; + + if (!color || !member) + return; + + if (!color->bits) + { + color->bits = ewd_list_new(); + ewd_list_set_free_cb(color->bits, EWD_FREE_CB(_etox_color_bit_free)); + } + + if ((cb = _etox_color_get_bit(color, cb->name))) + { + *r = cb->r; + *g = cb->g; + *b = cb->b; + *a = cb->a; + } + else + { + *r = 0; + *g = 0; + *b = 0; + *a = 0; + } +} |
From: <enl...@li...> - 2001-08-21 16:54:41
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Modified Files: Etox.h etox_color.c Log Message: Slight change in that API to fit better with what redalb had in mind. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/Etox.h,v retrieving revision 1.20 retrieving revision 1.21 diff -u -3 -r1.20 -r1.21 --- Etox.h 2001/08/21 16:52:42 1.20 +++ Etox.h 2001/08/21 16:54:40 1.21 @@ -163,7 +163,7 @@ Etox_Color etox_color_new(void); void etox_color_set_member(Etox_Color color, char *member, int r, int g, int b, int a); -void etox_color_get_member(Etox_Color color, char *member, +int etox_color_get_member(Etox_Color color, char *member, int *r, int *g, int *b, int *a); void etox_color_free(Etox_Color color); =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_color.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- etox_color.c 2001/08/21 16:52:42 1.5 +++ etox_color.c 2001/08/21 16:54:40 1.6 @@ -79,14 +79,14 @@ ewd_list_append(color->bits, cb); } -void +int etox_color_get_member(Etox_Color color, char *member, int *r, int *g, int *b, int *a) { Etox_Color_Bit cb = NULL; if (!color || !member) - return; + return 0; if (!color->bits) { @@ -106,6 +106,10 @@ *r = 0; *g = 0; *b = 0; - *a = 0; + *a = 255; + + return 0; } + + return 1; } |
From: <enl...@li...> - 2001-11-21 17:20:30
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Modified Files: etox_set.c Log Message: Fix for what could be a nasty leak if the text changes frequently. ewd_list_clear() doesn't free the data on the list, just removes all the items from the list. ewd_list_destroy() will free the corresponding data. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_set.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- etox_set.c 2001/11/12 00:04:15 1.7 +++ etox_set.c 2001/11/21 17:20:29 1.8 @@ -108,13 +108,11 @@ if (!e) return; - if (!e->bits) - { - e->bits = ewd_list_new(); - ewd_list_set_free_cb(e->bits, EWD_FREE_CB(_etox_bit_free)); - } - else - ewd_list_clear(e->bits); + if (e->bits) + ewd_list_destroy(e->bits); + + e->bits = ewd_list_new(); + ewd_list_set_free_cb(e->bits, EWD_FREE_CB(_etox_bit_free)); va_start(ap, e); |
From: <enl...@li...> - 2002-02-08 15:57:15
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Modified Files: etox.c Log Message: Fix from Thomas Staller for the segfault that was triggered by ewl. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -3 -r1.23 -r1.24 --- etox.c 4 Jan 2002 23:47:34 -0000 1.23 +++ etox.c 8 Feb 2002 15:57:12 -0000 1.24 @@ -71,6 +71,8 @@ e->layer = 0; e->clip = NULL; + e->callback_data = NULL; + e->def.align = malloc(sizeof(struct _Etox_Align)); e->def.align->v = ETOX_ALIGN_TYPE_TOP; e->def.align->h = ETOX_ALIGN_TYPE_LEFT; |
From: <enl...@li...> - 2002-04-02 02:50:11
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/test/fnt Removed Files: Makefile.am andover.ttf cinema.ttf grunge.ttf morpheus.ttf nationff.ttf notepad.ttf Log Message: Start of a new etox base that relies on estyle. The old code has been tagged as PRE_ESTYLE. This code does not have all the functionality that previously existed, but redalb and I discussed a new API that will hopefully be easier to use. I'll make a corresponding commit to SPLIT later tonight. |
From: <enl...@li...> - 2002-04-02 02:50:11
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/test/style Removed Files: Default.style Makefile.am plain.style sh_ol.style Log Message: Start of a new etox base that relies on estyle. The old code has been tagged as PRE_ESTYLE. This code does not have all the functionality that previously existed, but redalb and I discussed a new API that will hopefully be easier to use. I'll make a corresponding commit to SPLIT later tonight. |
From: <enl...@li...> - 2002-04-02 02:50:41
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox Modified Files: AUTHORS README autogen.sh configure.ac configure.in etox-config.h.in etox-config.in Log Message: Start of a new etox base that relies on estyle. The old code has been tagged as PRE_ESTYLE. This code does not have all the functionality that previously existed, but redalb and I discussed a new API that will hopefully be easier to use. I'll make a corresponding commit to SPLIT later tonight. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/AUTHORS,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- AUTHORS 11 Apr 2001 23:27:28 -0000 1.3 +++ AUTHORS 2 Apr 2002 02:50:09 -0000 1.4 @@ -1,3 +1,4 @@ Mandrake <man...@ma...> Adam Kisiel <ki...@if...> BLAdER (redalb) <bl...@ne...> +RbdPngn <ningerso@d.umn.edu> =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/README,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- README 17 Aug 2001 12:20:33 -0000 1.4 +++ README 2 Apr 2002 02:50:09 -0000 1.5 @@ -0,0 +1,11 @@ +Etox - An evas based text layout library +---------------------------------------- + +Etox provides facilities for multi-line text layout, as well as obstacle +wrapping and text stylization. + +Todo: ++ etox_free ++ obstacle wrapping ++ region selection ++ columnar layout =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/autogen.sh,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- autogen.sh 21 Mar 2002 10:16:58 -0000 1.2 +++ autogen.sh 2 Apr 2002 02:50:09 -0000 1.3 @@ -1,10 +1,5 @@ #! /bin/sh -abort () { - echo "$1 not found or command failed. Aborting!" - exit 1 -} - srcdir=`dirname $0` test -z "$srcdir" && srcdir=. @@ -13,11 +8,11 @@ DIE=0 set -x -aclocal || abort "aclocal" -libtoolize --ltdl --force --copy || abort "libtoolize" -autoheader || abort "autoheader" -automake --foreign --add-missing || abort "automake" -autoconf || abort "autoconf" +autoheader +libtoolize --ltdl --force --copy +aclocal +automake --foreign --add-missing +autoconf if test -z "$*"; then echo "I am going to run ./configure with no arguments - if you wish " @@ -26,7 +21,7 @@ cd "$THEDIR" -$srcdir/configure "$@" || abort "configure" +$srcdir/configure "$@" set +x =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/configure.ac,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- configure.ac 1 Jan 2002 14:29:22 -0000 1.3 +++ configure.ac 2 Apr 2002 02:50:09 -0000 1.4 @@ -70,15 +70,16 @@ ewd_cflags=`ewd-config --cflags` ewd_libs=`ewd-config --libs` +AC_SUBST(estyle_cflags) +AC_SUBST(estyle_libs) +estyle_cflags=`estyle-config --cflags` +estyle_libs=`estyle-config --libs` + AC_SUBST(imlib2_cflags) AC_SUBST(imlib2_libs) imlib2_cflags=`imlib2-config --cflags` imlib2_libs=`imlib2-config --libs` -dnl Checking for Perl: -AC_PATH_PROG(PERL,perl,0) -AC_SUBST(PERL) - dnl Look for jade for sgml translations. AC_ARG_WITH(dbsheets, [ --with-dbsheets=DIR use DIR to specify your DocBook stylesheets installation path.], @@ -87,8 +88,6 @@ AC_PATH_PROG(JADE, jade) AM_CONDITIONAL(HAVE_JADE, test "x$JADE" != "x" && test -d "$DB_STYLESHEETS") - - AC_CONFIG_FILES([ Makefile etox-config @@ -97,13 +96,10 @@ doc/html-customizations.dsl doc/Makefile test/Makefile -test/fnt/Makefile test/img/Makefile -test/style/Makefile ]) AC_CONFIG_COMMANDS([default],[[ chmod +x etox-config -chmod +x doc/kernel-doc ]],[[]]) AC_OUTPUT =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/configure.in,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- configure.in 27 Dec 2001 15:37:53 -0000 1.8 +++ configure.in 2 Apr 2002 02:50:09 -0000 1.9 @@ -184,6 +184,41 @@ fi ]) +ESTYLE_CONFIG="estyle-config" +AC_ARG_WITH(estyle, +[ --with-estyle-config=FILE estyle-config script to use (eg /usr/bin/estyle-config)], +[ + ESTYLE_CONFIG=$withval + AC_CHECK_PROG(ESTYLE_CONFIG_IN_PATH, $ESTYLE_CONFIG, yes, no) + if test $ESTYLE_CONFIG_IN_PATH = no; then + echo "ERROR:" + echo "The estyle-config development script you specified:" + echo "$ESTYLE_CONFIG" + echo "was not found. Please check the path and make sure " + echo "the script exists and is executable." + AC_MSG_ERROR([Fatal Error: no estyle-config detected.]) + exit; + fi +], +[ + AC_CHECK_PROG(ESTYLE_CONFIG_IN_PATH, $ESTYLE_CONFIG, yes, no) + if test $ESTYLE_CONFIG_IN_PATH = no; then + echo "ERROR:" + echo "The estyle-config development script was not found in your execute" + echo "path. This may mean one of several things" + echo "1. You may not have installed the estyle-devel (or estyle-dev)" + echo " packages." + echo "2. You may have estyle installed somewhere not covered by your path." + echo "" + echo "If this is the case make sure you have the packages installed, AND" + echo "that the estyle-config script is in your execute path (see your" + echo "shell's manual page on setting the \$PATH environment variable), OR" + echo "alternatively, specify the script to use with --with-estyle-config." + AC_MSG_ERROR([Fatal Error: no estyle-config detected.]) + exit; + fi +]) + IMLIB2_CONFIG="imlib2-config" AC_ARG_WITH(imlib2, [ --with-imlib2-config=FILE imlib2-config script to use (eg /usr/bin/imlib2-config)], @@ -244,38 +279,23 @@ ewd_cflags=`ewd-config --cflags` ewd_libs=`ewd-config --libs` +AC_SUBST(estyle_cflags) +AC_SUBST(estyle_libs) +estyle_cflags=`estyle-config --cflags` +estyle_libs=`estyle-config --libs` + AC_SUBST(imlib2_cflags) AC_SUBST(imlib2_libs) imlib2_cflags=`imlib2-config --cflags` imlib2_libs=`imlib2-config --libs` - -dnl Checking for Perl: -AC_PATH_PROG(PERL,perl,0) -AC_SUBST(PERL) - -dnl Look for jade for sgml translations. -AC_ARG_WITH(dbsheets, - [ --with-dbsheets=DIR use DIR to specify your DocBook stylesheets installation path.], - DB_STYLESHEETS="$withval", DB_STYLESHEETS="/usr/lib/sgml/stylesheet/dsssl/docbook/nwalsh") -AC_SUBST(DB_STYLESHEETS) -AC_PATH_PROG(JADE, jade) -AM_CONDITIONAL(HAVE_JADE, test "x$JADE" != "x" && test -d "$DB_STYLESHEETS") - - AC_OUTPUT([ Makefile etox-config src/Makefile -doc/kernel-doc -doc/html-customizations.dsl -doc/Makefile test/Makefile -test/fnt/Makefile test/img/Makefile -test/style/Makefile ], [ chmod +x etox-config -chmod +x doc/kernel-doc ] ) =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/etox-config.h.in,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- etox-config.h.in 27 Dec 2001 15:37:53 -0000 1.4 +++ etox-config.h.in 2 Apr 2002 02:50:09 -0000 1.5 @@ -1,24 +1,61 @@ -/* etox-config.h.in. Generated automatically from configure.in by autoheader. */ - -/* Define to empty if the keyword does not work. */ -#undef const - -/* Define if you need to in order for stat and other things to work. */ -#undef _POSIX_SOURCE - -/* Define if you have the ANSI C header files. */ -#undef STDC_HEADERS - +/* etox-config.h.in. Generated from configure.ac by autoheader. */ #undef PACKAGE_DATA_DIR #undef PACKAGE_LOCALE_DIR #undef PACKAGE_SOURCE_DIR -/* Define if you have the <dlfcn.h> header file. */ +/* Define to 1 if you have the <dlfcn.h> header file. */ #undef HAVE_DLFCN_H +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + /* Name of package */ #undef PACKAGE +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + /* Version number of package */ #undef VERSION +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/etox-config.in,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- etox-config.in 17 Aug 2001 12:20:33 -0000 1.1 +++ etox-config.in 2 Apr 2002 02:50:09 -0000 1.2 @@ -42,11 +42,11 @@ if test @includedir@ != /usr/include ; then includes=-I@includedir@ fi - echo $includes @evas_cflags@ @ewd_cflags@ -I$prefix/include/etox + echo $includes @evas_cflags@ @ewd_cflags@ @estyle_cflags@ -I$prefix/include/etox ;; --libs) libdirs=-L@libdir@ - echo $libdirs -letox @evas_libs@ @ewd_libs@ -lm + echo $libdirs -letox @evas_libs@ @ewd_libs@ @estyle_libs@ -lm ;; *) echo "${usage}" 1>&2 |
From: <enl...@li...> - 2002-04-02 02:50:41
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/test Modified Files: Makefile.am etox_test_drag.c etox_test_simple.c Log Message: Start of a new etox base that relies on estyle. The old code has been tagged as PRE_ESTYLE. This code does not have all the functionality that previously existed, but redalb and I discussed a new API that will hopefully be easier to use. I'll make a corresponding commit to SPLIT later tonight. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/test/Makefile.am,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- Makefile.am 1 Oct 2001 04:04:48 -0000 1.7 +++ Makefile.am 2 Apr 2002 02:50:10 -0000 1.8 @@ -1,19 +1,19 @@ AUTOMAKE_OPTIONS = 1.4 foreign MAINTAINERCLEANFILES = Makefile.in -SUBDIRS = fnt img style +SUBDIRS = img CFLAGS = -g -W -Wall -Wno-implicit -INCLUDES = -I$(top_srcdir)/src @evas_cflags@ @ewd_cflags@ @ecore_cflags@ +INCLUDES = -I$(top_srcdir)/src @evas_cflags@ @ewd_cflags@ @estyle_cflags@ @ecore_cflags@ @edb_cflags@ bin_PROGRAMS = etox_test_simple etox_test_drag etox_test_simple_DEPENDENCIES = $(top_builddir)/src/libetox.la etox_test_simple_SOURCES = etox_test_simple.c etox_test_simple_LDFLAGS = -static -etox_test_simple_LDADD = $(top_builddir)/src/libetox.la @evas_libs@ @evas_libs@ @ecore_libs@ +etox_test_simple_LDADD = $(top_builddir)/src/libetox.la @evas_libs@ @evas_libs@ @ecore_libs@ @ewd_libs@ @estyle_libs@ @edb_libs@ etox_test_drag_DEPENDENCIES = $(top_builddir)/src/libetox.la etox_test_drag_SOURCES = etox_test_drag.c etox_test_drag_LDFLAGS = -static -etox_test_drag_LDADD = $(top_builddir)/src/libetox.la @evas_libs@ @ewd_libs@ @ecore_libs@ +etox_test_drag_LDADD = $(top_builddir)/src/libetox.la @evas_libs@ @ewd_libs@ @estyle_libs@ @ecore_libs@ @edb_libs@ =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/test/etox_test_drag.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- etox_test_drag.c 4 Jan 2002 23:47:34 -0000 1.5 +++ etox_test_drag.c 2 Apr 2002 02:50:10 -0000 1.6 @@ -8,7 +8,7 @@ #define FNTDIR PACKAGE_DATA_DIR"/fnt/" #define STLDIR PACKAGE_DATA_DIR"/style/" -Etox et; +Etox *et; char txt[4096]; double down_x, down_y; @@ -17,303 +17,288 @@ void mouse_down(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) { - evas_put_data(_e, _o, "clicked", (void *) 1); - evas_set_layer(_e, _o, 200); - evas_get_geometry(_e, _o, &ox, &oy, NULL, NULL); - down_x = evas_screen_x_to_world(_e, _x); - down_y = evas_screen_y_to_world(_e, _y); + evas_put_data(_e, _o, "clicked", (void *) 1); + evas_set_layer(_e, _o, 200); + evas_get_geometry(_e, _o, &ox, &oy, NULL, NULL); + down_x = evas_screen_x_to_world(_e, _x); + down_y = evas_screen_y_to_world(_e, _y); + + return; + _data = NULL; + _b = 0; } -void -mouse_up(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) +void mouse_up(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) { - Etox_Obstacle ob; - double x, y, w, h; + Etox_Obstacle *ob; + double x, y, w, h; - evas_remove_data(_e, _o, "clicked"); - evas_set_layer(_e, _o, 50); + evas_remove_data(_e, _o, "clicked"); + evas_set_layer(_e, _o, 50); - ob = _data; + ob = (Etox_Obstacle *) _data; - if (_b == 2) - { - etox_obstacle_del(et, ob); - evas_hide(_e, _o); - return; - } - x = evas_screen_x_to_world(_e, _x); - y = evas_screen_y_to_world(_e, _y); + if (_b == 2) { + etox_obstacle_remove(et, ob); + evas_hide(_e, _o); + return; + } + x = evas_screen_x_to_world(_e, _x); + y = evas_screen_y_to_world(_e, _y); - evas_move(_e, _o, ox + x - down_x, oy + y - down_y); - evas_get_geometry(_e, _o, NULL, NULL, &w, &h); + evas_move(_e, _o, ox + x - down_x, oy + y - down_y); + evas_get_geometry(_e, _o, NULL, NULL, &w, &h); - etox_obstacle_set(et, ob, ox + x - down_x, oy + y - down_y, w, h); + etox_obstacle_move(et, ob, ox + x - down_x, oy + y - down_y); } void mouse_move(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) { - if (evas_get_data(_e, _o, "clicked")) - { - double x, y; - - x = evas_screen_x_to_world(_e, _x); - y = evas_screen_y_to_world(_e, _y); - evas_move(_e, _o, ox + x - down_x, oy + y - down_y); - } -} + if (evas_get_data(_e, _o, "clicked")) { + double x, y; -void -etox_mouse_in(void *_data, Etox_Callback _cb, Etox _e, int _b, int _x, int _y) -{ - Etox_Part part = NULL; + x = evas_screen_x_to_world(_e, _x); + y = evas_screen_y_to_world(_e, _y); + evas_move(_e, _o, ox + x - down_x, oy + y - down_y); + } - if (!(part = (Etox_Part) _data)) - return; - etox_part_set_from_callback(_e, part, _cb); - etox_part_prepend(_e, part, ET_FONT("cinema", 20), ET_END); - etox_part_append(_e, part, ET_FONT_END, ET_END); + return; + _data = NULL; + _b = 0; } -void -etox_mouse_out(void *_data, Etox_Callback _cb, Etox _e, int _b, int _x, - int _y) +int main(int argc, char *argv[]) { - Etox_Part part = NULL; + Evas e; + Evas_Object o[8]; + Evas_Render_Method method; + int down; + int x, y, w, h; - if (!(part = (Etox_Part) _data)) - return; - etox_part_remove_changes(_e, part); -} + Etox_Obstacle *ob[8]; + int win_w, win_h; + + Display *disp; + Window win; + + win_w = 640; + win_h = 580; -int -main(int argc, char *argv[]) -{ - Evas e; - Evas_Object o[8]; - Evas_Render_Method method; - int down; - int x, y, w, h; - - Etox_Style st; - Etox_Callback cb; - Etox_Color ec, ec2; - Etox_Obstacle ob[8]; - Etox_Part part; - int win_w, win_h; - - Display *disp; - Window win; - - win_w = 640; - win_h = 580; - - method = RENDER_METHOD_ALPHA_SOFTWARE; - if (argc > 1) - { - if (!strcmp(argv[1], "x11")) - method = RENDER_METHOD_BASIC_HARDWARE; - if (!strcmp(argv[1], "soft")) method = RENDER_METHOD_ALPHA_SOFTWARE; - if (!strcmp(argv[1], "hard")) - method = RENDER_METHOD_3D_HARDWARE; - if (!strcmp(argv[1], "render")) - method = RENDER_METHOD_ALPHA_HARDWARE; - if (!strcmp(argv[1], "-h")) - { - printf("options:\n" - "\t %s [x11 | soft | hard | render]\n" - "Where the option selects the evas rendering engine.\n", - argv[0]); - exit(0); + if (argc > 1) { + if (!strcmp(argv[1], "x11")) + method = RENDER_METHOD_BASIC_HARDWARE; + if (!strcmp(argv[1], "soft")) + method = RENDER_METHOD_ALPHA_SOFTWARE; + if (!strcmp(argv[1], "hard")) + method = RENDER_METHOD_3D_HARDWARE; + if (!strcmp(argv[1], "render")) + method = RENDER_METHOD_ALPHA_HARDWARE; + if (!strcmp(argv[1], "-h")) { + printf("options:\n" + "\t %s [x11 | soft | hard | render]\n" + "Where the option selects the evas rendering engine.\n", + argv[0]); + exit(0); + } } - } - disp = XOpenDisplay(NULL); - win = DefaultRootWindow(disp); - e = evas_new_all(disp, win, 128, 0, win_w, win_h, method, - 216, 8 * 1024 * 1024, 2 * 1024 * 1024, FNTDIR); - win = evas_get_window(e); - XSelectInput(disp, win, ButtonPressMask | ButtonReleaseMask | - PointerMotionMask | ExposureMask | StructureNotifyMask); - XMapWindow(disp, win); - XSync(disp, False); - - etox_style_add_path(STLDIR); - etox_style_add_path("./style"); - - o[0] = evas_add_rectangle(e); - evas_set_color(e, o[0], 200, 200, 200, 255); - evas_resize(e, o[0], win_w, win_h); - evas_move(e, o[0], 0, 0); - evas_lower(e, o[0]); - evas_show(e, o[0]); - - ec = etox_color_new(); - etox_color_set_member(ec, "fg", 240, 240, 240, 255); - etox_color_set_member(ec, "ol", 10, 10, 10, 255); - etox_color_set_member(ec, "sh", 20, 20, 20, 100); - - ec2 = etox_color_new(); - etox_color_set_member(ec2, "fg", 255, 255, 255, 255); - etox_color_set_member(ec2, "ol", 10, 10, 10, 255); - etox_color_set_member(ec2, "sh", 20, 20, 20, 100); - - st = etox_style_new("sh_ol"); - - et = etox_new_all(e, "Test Etox", 10, 0, - win_w - 20, win_h, 255, 5.0, - ETOX_ALIGN_TYPE_CENTER, ETOX_ALIGN_TYPE_CENTER, - NULL, NULL, "nationff", 10, NULL); - - x = 60, y = 320; - o[1] = evas_add_image_from_file(e, IMGDIR "evas_test_image_0.png"); - evas_get_image_size(e, o[1], &w, &h); - ob[0] = etox_obstacle_add(et, x, y, w, h); - evas_move(e, o[1], x, y); - evas_raise(e, o[1]); - evas_show(e, o[1]); - evas_callback_add(e, o[1], CALLBACK_MOUSE_DOWN, mouse_down, NULL); - evas_callback_add(e, o[1], CALLBACK_MOUSE_UP, mouse_up, ob[0]); - evas_callback_add(e, o[1], CALLBACK_MOUSE_MOVE, mouse_move, NULL); - - x = 200, y = 60; - o[2] = evas_add_image_from_file(e, IMGDIR "evas_test_image_1.png"); - evas_get_image_size(e, o[2], &w, &h); - ob[1] = etox_obstacle_add(et, x, y, w, h); - evas_move(e, o[2], x, y); - evas_raise(e, o[2]); - evas_show(e, o[2]); - evas_callback_add(e, o[2], CALLBACK_MOUSE_DOWN, mouse_down, NULL); - evas_callback_add(e, o[2], CALLBACK_MOUSE_UP, mouse_up, ob[1]); - evas_callback_add(e, o[2], CALLBACK_MOUSE_MOVE, mouse_move, NULL); - - x = 400, y = 100; - o[3] = evas_add_image_from_file(e, IMGDIR "evas_test_image_2.png"); - evas_get_image_size(e, o[3], &w, &h); - ob[2] = etox_obstacle_add(et, x, y, w, h); - evas_move(e, o[3], x, y); - evas_raise(e, o[3]); - evas_show(e, o[3]); - evas_callback_add(e, o[3], CALLBACK_MOUSE_DOWN, mouse_down, NULL); - evas_callback_add(e, o[3], CALLBACK_MOUSE_UP, mouse_up, ob[2]); - evas_callback_add(e, o[3], CALLBACK_MOUSE_MOVE, mouse_move, NULL); - - part = etox_part_new(); - - cb = etox_callback_new(); - etox_callback_add(cb, ETOX_CALLBACK_TYPE_MOUSE_IN, etox_mouse_in, part); - etox_callback_add(cb, ETOX_CALLBACK_TYPE_MOUSE_OUT, etox_mouse_out, part); - - etox_set_text(et, ET_FONT("cinema", 16), ET_COLOR(ec2), - ET_CALLBACK(cb), - ET_TEXT("The Etox Test Program\n"), - ET_CALLBACK_END, - ET_FONT_END, ET_COLOR_END, - ET_TEXT("Etox is a text layout abstraction, built " - "on top of Evas. It is to text, what Ebits " - "is to images. It is intended to abstract " - "text layout to allow different fonts, colors, " - "styles (outline, shadowed, etc.), word " - "wrapping, paragraph layout, columnation and " - "wrapping of text around obstacles in the text " - "area.\n\nTry moving the images (obstacles) " - "around, and see how etox perfectly wraps the " - "text around them. Middle-clicking an image " - "will remove it..\n\n"), - ET_ALIGN(ETOX_ALIGN_TYPE_CENTER, ETOX_ALIGN_TYPE_LEFT), - ET_TEXT("About E17:\n\nE17 is already beginning to use " - "a powerful object model system. I like to call " - "this system the \"fork() & exec()\" object model. " - "Unlike other desktops who like to invent new " - "\"interesting\" ways of doing object models, E17 " - "shall be using one that is the most widley used " - "object model in existance, one that has been in " - "heavy use and development for over 30 years. It " - "involves using 2 system calls - fork() and exec() " - "(and their variants). It's fast, powerful, " - "compatible, and requires no changes in existing " - "programs for them to work with this model. It's " - "great. "), - ET_ALIGN(ETOX_ALIGN_TYPE_CENTER, ETOX_ALIGN_TYPE_RIGHT), - ET_TEXT("E17 is definitely being worked on - it's just " - "a bit quiet. It currently does just enough to " - "manage client windows - not all of ICCCM at all, " - "but just enough. I'm currently working on getting " - "the icon view working in viewing directories and " - "letting me at the least click on files. After " - "that it'll be time to throw in the DND support " - "and then we'll be cooking with gas. I plan on " - "recycling the icon/directory view for handling " - "iconified windows, application launcher panels, " - "configuration panels (background selection and " - "more) and general file browsing and " - "management.\n\n"), ET_END); - - etox_show(et); - - down = 0; - for (;;) - { - XEvent ev; - - do - { - XNextEvent(disp, &ev); - switch (ev.type) - { - case ConfigureNotify: - evas_set_output_size(e, - ev.xconfigure.width, ev.xconfigure.height); - case ButtonPress: - { - int button, mouse_x, mouse_y; - - down = 1; - button = ev.xbutton.button; - mouse_x = ev.xbutton.x; - mouse_y = ev.xbutton.y; - evas_event_button_down(e, mouse_x, mouse_y, button); - } - break; - case ButtonRelease: - { - int button, mouse_x, mouse_y; - - down = 0; - button = ev.xbutton.button; - if (button == 3) - { - evas_free(e); - exit(0); - } - mouse_x = ev.xbutton.x; - mouse_y = ev.xbutton.y; - evas_event_button_up(e, mouse_x, mouse_y, button); - } - break; - case MotionNotify: - { - int mouse_x, mouse_y; - - mouse_x = ev.xmotion.x; - mouse_y = ev.xmotion.y; - evas_event_move(e, mouse_x, mouse_y); - } - break; - case Expose: - { - evas_update_rect(e, ev.xexpose.x, ev.xexpose.y, - ev.xexpose.width, ev.xexpose.height); - } - break; - default: - break; - } + disp = XOpenDisplay(NULL); + win = DefaultRootWindow(disp); + e = evas_new_all(disp, win, 128, 0, win_w, win_h, method, + 216, 8 * 1024 * 1024, 8 * 1024 * 1024, FNTDIR); + + win = evas_get_window(e); + XSelectInput(disp, win, ButtonPressMask | ButtonReleaseMask | + PointerMotionMask | ExposureMask | + StructureNotifyMask); + XMapWindow(disp, win); + XSync(disp, False); + + o[0] = evas_add_rectangle(e); + evas_set_color(e, o[0], 200, 200, 200, 255); + evas_resize(e, o[0], win_w, win_h); + evas_move(e, o[0], 0, 0); + evas_lower(e, o[0]); + evas_show(e, o[0]); +/* + ec = etox_color_new(); + etox_color_set_member(ec, "fg", 240, 240, 240, 255); + etox_color_set_member(ec, "ol", 10, 10, 10, 255); + etox_color_set_member(ec, "sh", 20, 20, 20, 100); + + ec2 = etox_color_new(); + etox_color_set_member(ec2, "fg", 255, 255, 255, 255); + etox_color_set_member(ec2, "ol", 10, 10, 10, 255); + etox_color_set_member(ec2, "sh", 20, 20, 20, 100); + + st = etox_style_new("sh_ol"); +*/ + et = etox_new_all(e, 10, 0, win_w - 20, win_h, 255, ETOX_ALIGN_LEFT); + + x = 60, y = 320; + o[1] = evas_add_image_from_file(e, IMGDIR "evas_test_image_0.png"); + evas_get_image_size(e, o[1], &w, &h); + ob[0] = etox_obstacle_add(et, x, y, w, h); + evas_move(e, o[1], x, y); + evas_raise(e, o[1]); + evas_show(e, o[1]); + evas_callback_add(e, o[1], CALLBACK_MOUSE_DOWN, mouse_down, NULL); + evas_callback_add(e, o[1], CALLBACK_MOUSE_UP, mouse_up, ob[0]); + evas_callback_add(e, o[1], CALLBACK_MOUSE_MOVE, mouse_move, NULL); + + x = 200, y = 60; + o[2] = evas_add_image_from_file(e, IMGDIR "evas_test_image_1.png"); + evas_get_image_size(e, o[2], &w, &h); + ob[1] = etox_obstacle_add(et, x, y, w, h); + evas_move(e, o[2], x, y); + evas_raise(e, o[2]); + evas_show(e, o[2]); + evas_callback_add(e, o[2], CALLBACK_MOUSE_DOWN, mouse_down, NULL); + evas_callback_add(e, o[2], CALLBACK_MOUSE_UP, mouse_up, ob[1]); + evas_callback_add(e, o[2], CALLBACK_MOUSE_MOVE, mouse_move, NULL); + + x = 400, y = 100; + o[3] = evas_add_image_from_file(e, IMGDIR "evas_test_image_2.png"); + evas_get_image_size(e, o[3], &w, &h); + ob[2] = etox_obstacle_add(et, x, y, w, h); + evas_move(e, o[3], x, y); + evas_raise(e, o[3]); + evas_show(e, o[3]); + evas_callback_add(e, o[3], CALLBACK_MOUSE_DOWN, mouse_down, NULL); + evas_callback_add(e, o[3], CALLBACK_MOUSE_UP, mouse_up, ob[2]); + evas_callback_add(e, o[3], CALLBACK_MOUSE_MOVE, mouse_move, NULL); + + etox_set_text(et, "The Etox Test Program\n" + "Etox is a text layout abstraction, built " + "on top of Evas. It is to text, what Ebits " + "is to images. It is intended to abstract " + "text layout to allow different fonts, colors, " + "styles (outline, shadowed, etc.), word " + "wrapping, paragraph layout, columnation and " + "wrapping of text around obstacles in the text " + "area.\n\nTry moving the images (obstacles) " + "around, and see how etox perfectly wraps the " + "text around them. Middle-clicking an image " + "will remove it..\n\n" + "About E17:\n\nE17 is already beginning to use " + "a powerful object model system. I like to call " + "this system the \"fork() & exec()\" object model. " + "Unlike other desktops who like to invent new " + "\"interesting\" ways of doing object models, E17 " + "shall be using one that is the most widley used " + "object model in existance, one that has been in " + "heavy use and development for over 30 years. It " + "involves using 2 system calls - fork() and exec() " + "(and their variants). It's fast, powerful, " + "compatible, and requires no changes in existing " + "programs for them to work with this model. It's " + "great. " + "E17 is definitely being worked on - it's just " + "a bit quiet. It currently does just enough to " + "manage client windows - not all of ICCCM at all, " + "but just enough. I'm currently working on getting " + "the icon view working in viewing directories and " + "letting me at the least click on files. After " + "that it'll be time to throw in the DND support " + "and then we'll be cooking with gas. I plan on " + "recycling the icon/directory view for handling " + "iconified windows, application launcher panels, " + "configuration panels (background selection and " + "more) and general file browsing and " + "management.\n\n"); + + etox_show(et); + + /* at test.. */ +/* + { + int x, y, w, h; + etox_get_at(et, 544, &x, &y, &w, &h); + printf("At Test: x = %d, y = %d, w = %d, h = %d\n", x, y, w, h); + etox_get_at_position(et, 12, 294, &x, &y, &w, &h); + printf("At Posiotion Test: x = %d, y = %d, w = %d, h = %d\n", x, y, w, h); + } +*/ + /* actual test.. */ +/* + { + double w, h; + etox_get_size(et, &w, &h); + printf("Size: w = %f, h = %f\n", w, h); + etox_get_actual_size(et, &w, &h); + printf("Actual Size: w = %f, h = %f\n", w, h); + } +*/ + + down = 0; + for (;;) { + XEvent ev; + + do { + XNextEvent(disp, &ev); + switch (ev.type) { + case ConfigureNotify: + evas_set_output_size(e, + ev.xconfigure.width, + ev.xconfigure.height); + case ButtonPress: + { + int button, mouse_x, mouse_y; + + down = 1; + button = ev.xbutton.button; + mouse_x = ev.xbutton.x; + mouse_y = ev.xbutton.y; + evas_event_button_down(e, mouse_x, + mouse_y, + button); + } + break; + case ButtonRelease: + { + int button, mouse_x, mouse_y; + + down = 0; + button = ev.xbutton.button; + if (button == 3) { + evas_free(e); + exit(0); + } + mouse_x = ev.xbutton.x; + mouse_y = ev.xbutton.y; + evas_event_button_up(e, mouse_x, + mouse_y, + button); + } + break; + case MotionNotify: + { + int mouse_x, mouse_y; + + mouse_x = ev.xmotion.x; + mouse_y = ev.xmotion.y; + evas_event_move(e, mouse_x, + mouse_y); + } + break; + case Expose: + { + evas_update_rect(e, ev.xexpose.x, + ev.xexpose.y, + ev.xexpose.width, + ev.xexpose. + height); + } + break; + default: + break; + } + } + while (XPending(disp)); + evas_render(e); } - while (XPending(disp)); - evas_render(e); - } - return 0; + return 0; } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/test/etox_test_simple.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- etox_test_simple.c 4 Jan 2002 23:47:34 -0000 1.10 +++ etox_test_simple.c 2 Apr 2002 02:50:10 -0000 1.11 @@ -15,263 +15,253 @@ #define OBST_X 100.0 #define OBST_Y 100.0 -double obstacle_w = -1.0, obstacle_h = -1.0, obstacle_x, obstacle_y; +char string1[] = "This text should test most of the basic\n" + "text display characteristics of etox.\n" + "including multi-line text, \ttabs,\n" + "and eventually text styles and inline formatting.\n" + "\n" + "The real test will be when there are huge\n" + "strings of text that wrap around obstacles.\n" + "At this point each line only contains 1 bit,\n" + "but when wrapping obstacles, multiple bits\n" + "will be needed to represent the lines."; + +char string2[] = "This is the alternate text to help\n" + "test the speed of changing text contents.\n" + "Eventually, this text should be read in from a file\n" + "so that long strings of text can be tested,\n" + "but for now this should give a basic idea\n" "of updating speed."; +char *last = string1; + +int obstacle_w = -1, obstacle_h = -1, obstacle_x, obstacle_y; + +int layer = 1000; +int visible = 1; +int focused = 0; static void e_idle(void *data); static void ecore_window_expose(Ecore_Event * ev); static void ecore_mouse_down(Ecore_Event * ev); +static void ecore_mouse_move(Ecore_Event * ev); +static void ecore_mouse_in(Ecore_Event * ev); +static void ecore_mouse_out(Ecore_Event * ev); void setup(void); Evas evas; Evas_Render_Method render_method = RENDER_ENGINE; -Etox e; +Evas_Object cursor = NULL; +Etox *e; -static void -e_idle(void *data) +static void e_idle(void *data) { - evas_render(evas); + evas_render(evas); + return; + data = NULL; } -static void -ecore_window_expose(Ecore_Event * ev) +static void ecore_window_expose(Ecore_Event * ev) { - Ecore_Event_Window_Expose *e; + Ecore_Event_Window_Expose *e; - e = (Ecore_Event_Window_Expose *) ev->event; - evas_update_rect(evas, e->x, e->y, e->w, e->h); + e = (Ecore_Event_Window_Expose *) ev->event; + evas_update_rect(evas, e->x, e->y, e->w, e->h); } -static void -ecore_mouse_down(Ecore_Event * ev) +static void ecore_mouse_in(Ecore_Event * ev) { - Ecore_Event_Mouse_Down *md; - static Evas_Object obj = NULL; - double x, y, w, h, et_x = 0.0, et_y = 0.0, pos_x = 0.0, pos_y = 0.0; - int index = 0; + focused = 1; +} - md = (Ecore_Event_Mouse_Down *) ev->event; +static void ecore_mouse_out(Ecore_Event * ev) +{ + focused = 0; +} - printf("MOUSE_DOWN AT x=%d, y=%d\n", md->x, md->y); +static void ecore_mouse_down(Ecore_Event * ev) +{ + int index, x, y, w, h; - etox_get_geometry(e, &et_x, &et_y, NULL, NULL); + Ecore_Event_Mouse_Down *eemd = + (Ecore_Event_Mouse_Down *) ev->event; - pos_x = evas_screen_x_to_world(evas, md->x) - et_x; - pos_y = evas_screen_y_to_world(evas, md->y) - et_y; - index = etox_get_char_geometry_at_position(e, pos_x, pos_y, &x, &y, &w, &h); + if (eemd->button == 1) { + /* + if (last == string1) { + etox_context_set_style(e, "shadow"); + etox_set_text(e, string2); + last = string2; + } else { + etox_context_set_style(e, "raised"); + etox_set_text(e, string1); + last = string1; + } + */ + index = etox_coord_to_geometry(e, eemd->x, eemd->y, &x, &y, + &w, &h); + printf("Clicked letter %c at %d, %d with size %d x %d\n", + string1[index], x, y, w, h); + evas_move(e->evas, cursor, x, y); + evas_resize(e->evas, cursor, w, h); + + } else if (eemd->button == 2) { + layer = -layer; + etox_set_layer(e, layer); + } else { + if (visible) { + etox_hide(e); + visible = 0; + } else { + etox_show(e); + visible = 1; + } + } +} - printf("-> (index = %d) pos_x=%f, pos_y=%f; x=%f, y=%f, w=%f, h=%f\n", - index, pos_x, pos_y, x, y, w, h); +/* + * Follow the mouse around the window + */ +static void ecore_mouse_move(Ecore_Event * ev) +{ + Ecore_Event_Mouse_Move *eemm = + (Ecore_Event_Mouse_Move *) ev->event; + if (focused) + etox_move(e, eemm->x, eemm->y); +} - x += et_x; - y += et_y; - if (!obj) - obj = evas_add_rectangle(evas); - evas_set_color(evas, obj, 0, 0, 0, 100); - evas_move(evas, obj, x, y); - evas_resize(evas, obj, w, h); - evas_show(evas, obj); -} -void -setup(void) +void setup(void) { - Window win, ewin; + Window win, ewin; - ecore_event_filter_handler_add(ECORE_EVENT_WINDOW_EXPOSE, - ecore_window_expose); - ecore_event_filter_handler_add(ECORE_EVENT_MOUSE_DOWN, ecore_mouse_down); - ecore_event_filter_idle_handler_add(e_idle, NULL); - win = ecore_window_new(0, 0, 0, 400, 400); - - evas = - evas_new_all(ecore_display_get(), win, 0, 0, 400, 400, render_method, - MAX_EVAS_COLORS, MAX_FONT_CACHE, MAX_IMAGE_CACHE, - PACKAGE_DATA_DIR "/fnt"); - - ewin = evas_get_window(evas); - - ecore_window_show(ewin); - ecore_window_set_events(ewin, XEV_EXPOSE | XEV_BUTTON); - ecore_window_show(win); + ecore_event_filter_handler_add(ECORE_EVENT_WINDOW_EXPOSE, + ecore_window_expose); + ecore_event_filter_handler_add(ECORE_EVENT_MOUSE_DOWN, + ecore_mouse_down); + /* + ecore_event_filter_handler_add(ECORE_EVENT_MOUSE_MOVE, + ecore_mouse_move); + */ + ecore_event_filter_handler_add(ECORE_EVENT_MOUSE_IN, + ecore_mouse_in); + ecore_event_filter_handler_add(ECORE_EVENT_MOUSE_OUT, + ecore_mouse_out); + ecore_event_filter_idle_handler_add(e_idle, NULL); + win = ecore_window_new(0, 0, 0, 400, 400); + + evas = evas_new_all(ecore_display_get(), win, 0, 0, 400, 400, + render_method, MAX_EVAS_COLORS, MAX_FONT_CACHE, + MAX_IMAGE_CACHE, PACKAGE_DATA_DIR "/fnt"); + + ewin = evas_get_window(evas); + + ecore_window_show(ewin); + ecore_window_set_events(ewin, + XEV_EXPOSE | XEV_BUTTON | XEV_MOUSE_MOVE /* | + XEV_IN_OUT */); + ecore_window_show(win); } -int -main(int argc, char *argv[]) +int main(int argc, char *argv[]) { - Etox_Style s; - Etox_Color c; - Evas_Object bg, et_bg, obst; - - obstacle_x = OBST_X; - obstacle_y = OBST_Y; - - { - int i; - - for (i = 1; i < argc; i++) - { - if (!strcmp(argv[i], "soft") || - !strcmp(argv[i], "x11") || !strcmp(argv[i], "hard")) - { - if (!strcmp(argv[i], "soft")) - render_method = RENDER_METHOD_ALPHA_SOFTWARE; - if (!strcmp(argv[i], "x11")) - render_method = RENDER_METHOD_BASIC_HARDWARE; - if (!strcmp(argv[i], "hard")) - render_method = RENDER_METHOD_3D_HARDWARE; - } - else - { - if (obstacle_w < 0.0) - obstacle_w = atoi(argv[i]); - else if (obstacle_h < 0.0) - obstacle_h = atoi(argv[i]); - } - } - } - - if (obstacle_w < 0.0) - obstacle_w = 100.0; - if (obstacle_h < 0.0) - obstacle_h = 100.0; - - ecore_display_init(NULL); - ecore_event_signal_init(); - ecore_event_filter_init(); - ecore_event_x_init(); - - setup(); - - /* add a background */ - bg = evas_add_rectangle(evas); - evas_resize(evas, bg, 400, 400); - evas_move(evas, bg, 0, 0); - evas_set_color(evas, bg, 255, 255, 255, 255); - evas_show(evas, bg); - - /* add an etox-background */ - et_bg = evas_add_rectangle(evas); - evas_resize(evas, et_bg, 380, 380); - evas_move(evas, et_bg, 10, 10); - evas_set_color(evas, et_bg, 0, 0, 255, 50); - evas_show(evas, et_bg); - - /* draw obstacle-rect */ - obst = evas_add_rectangle(evas); - evas_resize(evas, obst, obstacle_w, obstacle_h); - evas_move(evas, obst, obstacle_x, obstacle_y); - evas_set_color(evas, obst, 255, 0, 0, 50); - evas_show(evas, obst); - - /* test the etox stuff.. */ - e = etox_new(evas, "My Etox"); - etox_move(e, 10, 10); - etox_resize(e, 380, 380); - etox_set_font(e, "notepad", 10); - /* etox_set_padding(e, 10); */ - - etox_style_add_path(PACKAGE_DATA_DIR "/style"); - etox_style_add_path("./style"); - - s = etox_style_new("plain"); - - obst = etox_obstacle_add(e, obstacle_x, obstacle_y, obstacle_w, obstacle_h); - - c = etox_color_new(); - etox_color_set_member(c, "fg", 70, 90, 80, 255); - etox_color_set_member(c, "sh", 70, 90, 80, 255); - etox_color_set_member(c, "ol", 70, 90, 80, 255); - - /* Remeber, this is a _test_ program, not an example program. - * You should keep the amount of ET_TEXT's as low as possible in - * a real prog.. - */ - - etox_set_text(e, ET_ALIGN(ETOX_ALIGN_TYPE_CENTER, ETOX_ALIGN_TYPE_LEFT), - ET_TEXT("This is just a test\n\tstring.. some lame " - "copied\n\tstuff actually.. \n\n"), ET_STYLE(s), - ET_ALIGN(ETOX_ALIGN_TYPE_CENTER, ETOX_ALIGN_TYPE_RIGHT), - ET_TEXT - ("As a result of meeting requests from users, Enlightenment over "), - ET_TEXT - ("time has done some nasty hacks,\nbut now for the development of "), - ET_TEXT - ("version 0.17.0, we have moved a lot of the design and core code "), - ET_COLOR(c), - ET_TEXT - ("into various subsystems than generalize some back end and let us "), - ET_COLOR_END, - ET_TEXT - ("not only use it in Enlightenment itself, but make this work "), - ET_TEXT - ("available to everyone to use as they want. The result is various "), - ET_ALIGN_END, ET_STYLE_END, ET_FONT("cinema", 8), - ET_TEXT - ("lower level libraries that do lots of useful stuff for you and " - "provide a consistant api to them. Also daemons and helper programs " - "have been written too to make life easier."), ET_END); - - etox_show(e); - - etox_set_style(e, s); - - etox_set_alpha(e, 100); - - printf("Text: %s\n", etox_get_text_string(e)); - - printf("\n\n"); - - printf("Actual Text: %s\n", etox_get_actual_text_string(e)); - - { - double x, y, w, h; - Evas_Object real_rect; - - etox_get_actual_geometry(e, &x, &y, &w, &h); - - printf("Actual rect: x=%f,y=%f,w=%f,h=%f\n", x, y, w, h); - - real_rect = evas_add_rectangle(evas); - evas_set_color(evas, real_rect, 0, 255, 0, 50); - evas_move(evas, real_rect, x, y); - evas_resize(evas, real_rect, w, h); - evas_show(evas, real_rect); - } - - { - double x, y, w, h; - Evas_Object char_rect; - - etox_get_char_geometry_at(e, 0, &x, &y, &w, &h); - - printf("Char geometry: x=%f,y=%f,w=%f,h=%f\n", x, y, w, h); - - char_rect = evas_add_rectangle(evas); - evas_set_color(evas, char_rect, 255, 255, 0, 50); - evas_move(evas, char_rect, x + 10, y + 10); - evas_resize(evas, char_rect, w, h); - evas_show(evas, char_rect); - } - -/* - { - Evas_Object clip_rect; - - clip_rect = evas_add_rectangle(evas); - evas_set_color(evas, clip_rect, 255, 255, 255, 255); - evas_move(evas, clip_rect, 20, 20); - evas_resize(evas, clip_rect, 360, 360); - evas_show(evas, clip_rect); - etox_set_clip(e, clip_rect); - } -*/ + int i; + Evas_Object clip_rect; + Evas_Object bg, et_bg, obst; + + obstacle_x = OBST_X; + obstacle_y = OBST_Y; + + + for (i = 1; i < argc; i++) { + if (!strcmp(argv[i], "soft") || + !strcmp(argv[i], "x11") || !strcmp(argv[i], "hard")) { + if (!strcmp(argv[i], "soft")) + render_method = + RENDER_METHOD_ALPHA_SOFTWARE; + if (!strcmp(argv[i], "x11")) + render_method = + RENDER_METHOD_BASIC_HARDWARE; + if (!strcmp(argv[i], "hard")) + render_method = RENDER_METHOD_3D_HARDWARE; + } else { + if (obstacle_w < 0.0) + obstacle_w = atoi(argv[i]); + else if (obstacle_h < 0.0) + obstacle_h = atoi(argv[i]); + } + } + + if (obstacle_w < 0.0) + obstacle_w = 100.0; + if (obstacle_h < 0.0) + obstacle_h = 100.0; + + ecore_display_init(NULL); + ecore_event_signal_init(); + ecore_event_filter_init(); + ecore_event_x_init(); + + setup(); + + /* add a background */ + bg = evas_add_rectangle(evas); + evas_resize(evas, bg, 400, 400); + evas_move(evas, bg, 0, 0); + evas_set_layer(evas, bg, -10000); + evas_set_color(evas, bg, 255, 255, 255, 255); + evas_show(evas, bg); + + /* add an etox-background */ + et_bg = evas_add_rectangle(evas); + evas_resize(evas, et_bg, 380, 380); + evas_move(evas, et_bg, 10, 10); + evas_set_layer(evas, et_bg, -10000); + evas_set_color(evas, et_bg, 0, 0, 255, 50); + evas_show(evas, et_bg); + + /* draw obstacle-rect */ + obst = evas_add_rectangle(evas); + evas_resize(evas, obst, obstacle_w, obstacle_h); + evas_move(evas, obst, obstacle_x, obstacle_y); + evas_set_color(evas, obst, 255, 0, 0, 50); + evas_show(evas, obst); + + /* + * Create a clip rectangle for bounding where the text is drawn + */ + clip_rect = evas_add_rectangle(evas); + evas_move(evas, clip_rect, 100, 100); + evas_resize(evas, clip_rect, 200, 200); + evas_show(evas, clip_rect); + evas_set_color(evas, clip_rect, 255, 0, 255, 255); + + /* + * Create an etox. + */ + e = etox_new_all(evas, 30, 30, 300, 100, 255, ETOX_ALIGN_LEFT); + etox_context_set_align(e, ETOX_ALIGN_CENTER); + etox_context_set_style(e, "raised"); + etox_context_set_color(e, 128, 255, 255, 255); + /* etox_set_clip(e, clip_rect); */ + etox_set_alpha(e, 128); + etox_set_text(e, string1); + etox_obstacle_add(e, obstacle_x, obstacle_y, obstacle_w, obstacle_h); + + etox_show(e); + + /* add a cursor */ + cursor = evas_add_rectangle(evas); + evas_resize(evas, cursor, 10, 20); + evas_move(evas, cursor, 30, 30); + evas_set_layer(evas, cursor, 10000); + evas_set_color(evas, cursor, 255, 255, 255, 128); + evas_show(evas, cursor); - ecore_event_loop(); + ecore_event_loop(); - etox_free(e); - evas_free(evas); + etox_free(e); + evas_free(evas); - return 0; + return 0; } |
From: <enl...@li...> - 2002-04-02 02:50:42
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Modified Files: Etox.h Etox_private.h Makefile.am etox.c etox_obstacle.c Added Files: etox_context.c etox_context.h etox_line.c etox_line.h etox_selection.h Removed Files: etox_align.c etox_bit.c etox_callback.c etox_color.c etox_create.c etox_data.c etox_get.c etox_loadfile.c etox_object.c etox_part.c etox_set.c etox_str.c etox_style.c Log Message: Start of a new etox base that relies on estyle. The old code has been tagged as PRE_ESTYLE. This code does not have all the functionality that previously existed, but redalb and I discussed a new API that will hopefully be easier to use. I'll make a corresponding commit to SPLIT later tonight. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/Etox.h,v retrieving revision 1.25 retrieving revision 1.26 diff -u -3 -r1.25 -r1.26 --- Etox.h 4 Jan 2002 23:47:34 -0000 1.25 +++ Etox.h 2 Apr 2002 02:50:09 -0000 1.26 @@ -1,673 +1,270 @@ -#ifndef ETOX_H -#define ETOX_H 1 +#ifndef _ETOX_H +#define _ETOX_H -#include <Evas.h> #include <Ewd.h> - -#ifndef ETOX_PRIVATE_H -typedef void * Etox; -typedef void * Etox_Style; -typedef void * Etox_Color; -typedef void * Etox_Obstacle; -typedef void * Etox_Callback; -typedef void * Etox_Part; -#endif - - -enum _Etox_Align_Type -{ - ETOX_ALIGN_TYPE_NULL, - ETOX_ALIGN_TYPE_LEFT, - ETOX_ALIGN_TYPE_RIGHT, - ETOX_ALIGN_TYPE_CENTER, - ETOX_ALIGN_TYPE_TOP, - ETOX_ALIGN_TYPE_BOTTOM -}; - -enum _Etox_Callback_Type -{ - ETOX_CALLBACK_TYPE_NULL, - ETOX_CALLBACK_TYPE_MOUSE_IN, - ETOX_CALLBACK_TYPE_MOUSE_OUT, - ETOX_CALLBACK_TYPE_MOUSE_DOWN, - ETOX_CALLBACK_TYPE_MOUSE_UP, - ETOX_CALLBACK_TYPE_MOUSE_MOVE, - ETOX_CALLBACK_TYPE_FREE, -}; - -enum _Etox_Style_Type -{ - ETOX_STYLE_TYPE_NULL, - ETOX_STYLE_TYPE_FOREGROUND, - ETOX_STYLE_TYPE_SHADOW, - ETOX_STYLE_TYPE_OUTLINE -}; - -enum _Etox_Bit_Type -{ - ETOX_BIT_TYPE_NULL, - ETOX_BIT_TYPE_ALIGN, - ETOX_BIT_TYPE_CALLBACK, - ETOX_BIT_TYPE_COLOR, - ETOX_BIT_TYPE_FONT, - ETOX_BIT_TYPE_STYLE, - ETOX_BIT_TYPE_TEXT, - ETOX_BIT_TYPE_ALIGN_END, - ETOX_BIT_TYPE_CALLBACK_END, - ETOX_BIT_TYPE_COLOR_END, - ETOX_BIT_TYPE_FONT_END, - ETOX_BIT_TYPE_STYLE_END, - ETOX_BIT_STYLE_PARSE -}; - -typedef enum _Etox_Align_Type Etox_Align_Type; -typedef enum _Etox_Callback_Type Etox_Callback_Type; -typedef enum _Etox_Style_Type Etox_Style_Type; -typedef enum _Etox_Bit_Type Etox_Bit_Type; - -/** callback stuff is unfinished.. */ -#define ET_ALIGN(v, h) ETOX_BIT_TYPE_ALIGN, v, h -#define ET_CALLBACK(callback) ETOX_BIT_TYPE_CALLBACK, callback -#define ET_COLOR(color) ETOX_BIT_TYPE_COLOR, color -#define ET_FONT(font, size) ETOX_BIT_TYPE_FONT, font, size -#define ET_STYLE(style) ETOX_BIT_TYPE_STYLE, style -#define ET_TEXT(text) ETOX_BIT_TYPE_TEXT, text - -#define ET_ALIGN_END ETOX_BIT_TYPE_ALIGN_END -#define ET_CALLBACK_END ETOX_BIT_TYPE_CALLBACK_END -#define ET_COLOR_END ETOX_BIT_TYPE_COLOR_END -#define ET_FONT_END ETOX_BIT_TYPE_FONT_END -#define ET_STYLE_END ETOX_BIT_TYPE_STYLE_END - -#define ET_PARSE(string) ETOX_BIT_TYPE_PARSE, string - -#define ET_END NULL - - -#ifdef __cplusplus -extern "C" -{ -#endif - - -/* Public API */ - -/** - * etox_new - Creates a new etox object - * @evas: The evas this etox object will be part of - * @name: The name of the etox object - * - * Creates an Etox object with the specified name for the specified evas and - * returns it. - */ -Etox etox_new(Evas evas, char *name); - -/** - * etox_new_all - Creates a new Etox object with all parameters - * @evas: The evas this Etox object will be part of - * @name: The name of the Etox object - * @x: initial horizontal position on the evas relative to the upper left corner - * @y: initial vertical position on the evas relative to the upper left corner - * @w: initial width of the Etox object - * @h: initial height of the Etox object - * @alpha: initial alpha value of the Etox object - * @padding: initial padding value of the Etox object - * @v_align: initial vertival align value - * @h_align: initial horizontal align value - * @callback: callback function to be associated with this Etox - * @color: initial text color for this Etox - * @font: initial font to be used for this Etox - * @font_size: initial fontsize to be used for this Etox - * @style: initial fontstyle to be used for this Etox - * - * Creates an Etox object with the specified properties and returns it. - */ - -Etox etox_new_all(Evas evas, char *name, - double x, double y, double w, double h, - int alpha, double padding, - Etox_Align_Type v_align, Etox_Align_Type h_align, - Etox_Callback callback, Etox_Color color, - char *font, int font_size, Etox_Style style); - - -/** - * etox_free - Release all memory associated with this Etox - * @e: The Etox to free - * - * Release all memory associated with the specified Etox - */ -void etox_free(Etox e); - -/** - * etox_show - Set visibility of the Etox to on - * @e: The Etox to show - * - * Set visibility of the Etox to on - */ -void etox_show(Etox e); - -/** - * etox_hide - Set visibility of the Etox to off - * @e: The Etox to hide - * - * Set visibility of the Etox to off - */ -void etox_hide(Etox e); - -/** - * etox_raise - Raise the Etox on its Evas - * @e: The Etox - * - * Raise the Etox one layer on its corresponding Evas - */ -void etox_raise(Etox e); - -/** - * etox_lower - Lower the Etox on its Evas - * @e: The Etox - * - * Lower the Etox one layer on its corresponding Evas - */ -void etox_lower(Etox e); - -/** - * etox_move - Move the Etox - * @e: The Etox - * @x: horizontal coordinate to move the Etox to - * @y: vertical coordinate to move the Etox to - * - * Moves the Etox to the specified coordinates on the associated Evas - */ -void etox_move(Etox e, double x, double y); - -/** - * etox_resize - Resize the Etox - * @e: The Etox - * @w: The target width of the Etox - * @h: The target height of the Etox - * - * Changes the width and height to the specified values. - */ -void etox_resize(Etox e, double w, double h); - -/** - * etox_set_evas - Change the Evas associated with an Etox - * @e: The Etox - * @evas: The Evas to move the Etox to - * - * Changes the evas associated with an Etox. - */ -void etox_set_evas(Etox e, Evas evas); - -/** - * etox_set_name - Rename the Etox - * @e: The Etox - * @name: The new name for the Etox - * - * Sets the name of the Etox to the specified string. - */ -void etox_set_name(Etox e, char *name); - -/** - * etox_set_alpha - Adjust the alpha value of the Etox - * @e: The Etox - * @alpha: The new alpha value - * - * Sets the alpha value for the Etox to the specified value. - */ -void etox_set_alpha(Etox e, int alpha); - -/** - * etox_set_padding - Adjust the padding value of the Etox - * @e: The Etox - * @padding: The new padding value - * - * Sets the alpha value for the Etox to the specified value. - */ -void etox_set_padding(Etox e, double padding); - -/** - * etox_set_layer - Change the layer the Etox is on - * @e: The Etox - * @layer: The layer to move the Etox to - * - * Changes the evas layer associated with an Etox. - */ -void etox_set_layer(Etox e, int layer); - -/** - * etox_set_clip - Clip the Etox with the specified object - * @e: The Etox - * @clip: The Evas_Object to clip the Etox with - * - * Clip the Etox with the specified object. - */ -void etox_set_clip(Etox e, Evas_Object clip); - -/** - * etox_unset_clip - Remove all clipping objects from the Etox - * @e: The Etox - * - * Remove all clipping objects from the Etox - */ -void etox_unset_clip(Etox e); - -/** - * etox_set_align - set the align values - * @e: The Etox - * @h_align: The new horizontal align value - * @v_align: The new vertical align value - * - * Sets the horizontal and vertical align values of the Etox. - */ -void etox_set_align(Etox e, Etox_Align_Type h_align, Etox_Align_Type v_align); - -/** - * etox_set_callback - Set the callback for the Etox - * @e: The Etox - * @color: The new callback - * - * Sets the Etox's callback to the specified Etox_Callback - */ -void etox_set_callback(Etox e, Etox_Callback callback); - -/** - * etox_set_color - Set the color for the Etox - * @e: The Etox - * @color: The new color - * - * Sets the Etox's color to the specified Etox_Color - */ -void etox_set_color(Etox e, Etox_Color color); - -/** - * etox_set_font - change the font of the Etox - * @e: The Etox - * @font: The name of the font to switch to - * @size: The new font size - * - * Set the font used with this Etox to the specified name and size - */ -void etox_set_font(Etox e, char *font, int size); - -/** - * etox_set_style - change the style of the Etox - * @e: The Etox - * @style: The new style to be used - * - * Set the font style used with this Etox to the specified Etox_Style - */ -void etox_set_style(Etox e, Etox_Style style); - -/** - * etox_set_text - change the text of the Etox - * @e: The Etox - * - * This functions takes a variable number of arguments and can be used to set - * the text associated with an Etox including changes in formating and - * properties as they happen within the text. - */ -void etox_set_text(Etox e, ...); - +#include <Edb.h> +#include <Evas.h> +#include <Estyle.h> /* - * Accessor functions - */ - -/** - * etox_get_evas - Return the Evas associated with the etox - * @e: The Etox - */ -Evas etox_get_evas(Etox e); - -/** - * etox_get_name - Return the name of an Etox - * @e: The Etox - */ -char * etox_get_name(Etox e); - -/** - * etox_get_alpha - Return the current alpha value of the Etox - * @e: The Etox - */ -int etox_get_alpha(Etox e); - - -/** - * etox_get_padding - Return the current padding value of the Etox - * @e: The Etox - */ -double etox_get_padding(Etox e); - -/** - * etox_get_layer - Return the current layer of the Etox - * @e: The Etox - */ -int etox_get_layer(Etox e); - -/** - * etox_get_clip - Return the list of Evas_Objects currently set to clip the - * Etox - * @e: The Etox - */ -Evas_Object etox_get_clip(Etox e); - -/** - * etox_get_align_v - Return the current vertical alignment value of the Etox - * @e: The Etox - */ -Etox_Align_Type etox_get_align_v(Etox e); - -/** - * etox_get_align_h - Return the current horizontal alignment value of the Etox - * @e: The Etox - */ -Etox_Align_Type etox_get_align_h(Etox e); - -/** - * etox_get_color - Return the current color of the Etox - * @e: The Etox - */ -Etox_Color etox_get_color(Etox e); - -/** - * etox_get_font_name - Return the name of the font used with the Etox - * @e: The Etox - */ -char * etox_get_font_name(Etox e); - -/** - * etox_get_font_size - Return the size of the font used with the Etox - * @e: The Etox - */ -int etox_get_font_size(Etox e); - -/** - * etox_get_style - Return the style of the font used with the Etox - * @e: The Etox - */ -Etox_Style etox_get_style(Etox e); - -/** - * etox_get_text_string_length - - * @e: The Etox + * Simple alignment bitfield */ -int etox_get_text_string_lenght(Etox e); - -/** - * etox_get_text_string - - * @e: The Etox - */ -char * etox_get_text_string(Etox e); - -/** - * etox_get_actual_text_string_length - - * @e: The Etox - */ -int etox_get_actual_text_string_lenght(Etox e); - -/** - * etox_get_actual_text_string - - * @e: The Etox - */ -char * etox_get_actual_text_string(Etox e); - - -/** - * etox_get_geometry - - * @e: The Etox - * @x: pointer to the memory location for the x value - * @y: pointer to the memory location for the y value - * @w: pointer to the memory location for the w value - * @h: pointer to the memory location for the h value - */ -void etox_get_geometry(Etox e, double *x, double *y, - double *w, double *h); - -/** - * etox_get_actual_geometry - - * @e: The Etox - * @x: pointer to the memory location for the x value - * @y: pointer to the memory location for the y value - * @w: pointer to the memory location for the w value - * @h: pointer to the memory location for the h value - */ -void etox_get_actual_geometry(Etox e, double *x, double *y, - double *w, double *h); - -/** - * etox_get_char_gemometry_at - - * @e: The Etox - * @index: - * @char_x: pointer to the memory location for the char_x value - * @char_y: pointer to the memory location for the char_y value - * @char_w: pointer to the memory location for the char_w value - * @char_h: pointer to the memory location for the char_h value - */ -void etox_get_char_geometry_at(Etox e, int index, - double *char_x, double *char_y, - double *char_w, double *char_h); - -/** - * etox_get_char_geometry_at_position - - * @e: The Etox - * @x: horizontal offset from the upper left corner of the Evas - * @y: vertical offset from the upper left corner of the Evas - * @char_x: pointer to the memory location for the char_x value - * @char_y: pointer to the memory location for the char_y value - * @char_w: pointer to the memory location for the char_w value - * @char_h: pointer to the memory location for the char_h value - */ -int etox_get_char_geometry_at_position(Etox e, double x, double y, - double *char_x, - double *char_y, - double *char_w, - double *char_h); +typedef enum _etox_alignment Etox_Alignment; +enum _etox_alignment { + ETOX_ALIGN_CENTER = 0, + ETOX_ALIGN_LEFT = 1, + ETOX_ALIGN_RIGHT = 2, + ETOX_ALIGN_TOP = 4, + ETOX_ALIGN_BOTTOM = 8 +}; /* - * Callbacks + * The color struct simply keeps track of the various colors available */ - -Etox_Callback etox_callback_new(void); -void etox_callback_free(Etox_Callback callback); -void etox_callback_add(Etox_Callback callback, - Etox_Callback_Type type, - void (*func) (void *_data, - Etox_Callback cb, Etox _e, - int _b, int _x, int _y), - void *data); -void etox_callback_del(Etox_Callback callback, - Etox_Callback_Type type); - +typedef struct _etox_color Etox_Color; +struct _etox_color { + int a, r, g, b; +}; /* - * Obstacles - */ - -/** - * etox_obstacle_add - Add an obstacle to the Etox - * @x: Horizontal offset on the Evas for this obstacle - * @y: Vertical offset on the Evas for this obstacle - * @w: Width of the obstacle. - * @h: Height of the obstacle. - * - * Each Etox objects has an associated list of obstacles the text flows around. - * For each of those obstacles the x and y position as well as their width and - * height must be specified. Use this function to add such an obstacle to the - * Etox. - */ -Etox_Obstacle etox_obstacle_add(Etox e, - double x, double y, double w, double h); - -/** - * etox_obstacle_set - Change the geometry of the obstacle - * @x: New horizontal offset on the Evas for this obstacle - * @y: New vertical offset on the Evas for this obstacle - * @w: New width of the obstacle. - * @h: New height of the obstacle. - * - * Change the geometry settings for a given obstacle to the specified values. + * Text layout requires knowing the font layout, size, ascent and descent. */ -void etox_obstacle_set(Etox e, Etox_Obstacle obst, - double x, double y, double w, double h); +typedef struct _etox_font Etox_Font; +struct _etox_font { + char *name; + int size, ascent, descent; +}; -/** - * etox_obstacle_del - Remove object form the list of obstacles - * @e: The Etox - * @obst: The Obstacle to remove +/* + * Etox obstacles keep track of the lines that they intersect and the bit that + * represents it. */ -void etox_obstacle_del(Etox e, Etox_Obstacle obst); - +typedef struct _etox_obstacle Etox_Obstacle; +struct _etox_obstacle { + Estyle *bit; + int start_line; + int end_line; +}; /* - * Styles + * The info structure keeps the important information about the style, but not + * the bits used to display the text. */ +typedef struct _etox_style_info Etox_Style_Info; +struct _etox_style_info { + char *name; + E_DB_File *style_db; + Ewd_Sheap *layers; + int references; +}; -/** - * etox_style_new - Load a new font style of the given name - * @name: The name of the font style to load. - * - * Looks for a font style in the stylepath, loads it if it finds it and - * returns it. +/* + * The context structure holds information relative to the appearance of text + * that is added to the etox. */ -Etox_Style etox_style_new(char *name); +typedef struct _etox_context Etox_Context; +struct _etox_context { + /* + * Color for displaying the text + */ + int r; + int g; + int b; + int a; + + /* + * Font used for displaying the text + */ + char *font; + + /* + * The size of the font used for displaying the text + */ + int font_size; + + /* + * Style used for displaying the text + */ + char *style; + + /* + * Default alignment of text on etox + */ + char align; + + /* + * Padding surrounding the text + */ + int padding; +}; -/** - * etox_style_free - Free all memory associated with the given style - * @style: The style to free +/* + * The etox keeps track of the display and layout information for all of the + * text enclosed. */ -void etox_style_free(Etox_Style style); +typedef struct _etox Etox; +struct _etox { + /* + * Evas for drawing the text + */ + Evas evas; + + /* + * Clip box on evas that bounds the text display and applies an alpha + * layer. + */ + Evas_Object clip; + + /* + * The layer in the evas to set the text + */ + int layer; + + /* + * Geometry of the etox + */ + int x, y, w, h; + + /* + * The length text in the etox + */ + int length; + + /* + * The current context that is used when adding text + */ + Etox_Context *context; + + /* + * List of lines in the etox + */ + Ewd_List *lines; + + /* + * List of obstacles in the etox + */ + Ewd_List *obstacles; + + /* + * Determine if the etox has been displayed yet. + */ + char visible; + + /* + * Alpha level of clip box that is applied to the text + */ + int alpha; +}; -/** - * etox_style_add_path - Add a path to the pathlist - * @path: The path to add to the pathlist - * - * Etox keeps a global structure called the pathlist, which is a list of paths - * that are searched for styles. This function adds such a path to the list. +/* + * Etox creation and deletion functions */ -void etox_style_add_path(char *path); +Etox *etox_new(Evas evas); +Etox *etox_new_all(Evas evas, int x, int y, int w, int h, int alpha, + Etox_Alignment align); +void etox_free(Etox * et); -/** - * etox_style_del_path - Delete a path from the pathlist - * @path: The path to delete from the pathlist - * - * Etox keeps a global structure called the pathlist, which is a list of paths - * that are searched for styles. This function deletes the given path from this - * list. +/* + * Visibility altering functions */ -void etox_style_del_path(char *path); +void etox_show(Etox * et); +void etox_hide(Etox * et); -/** - * etox_style_get_paths - List the search paths for styles - * - * Etox keeps a global structure called the pathlist, which is a list of paths - * that are searched for styles. This function returnes this list. +/* + * Context management functions */ -Ewd_List *etox_style_get_paths(void); +Etox_Context *etox_context_save(Etox * et); +void etox_context_load(Etox * et, Etox_Context * context); +void etox_context_free(Etox_Context * context); /* - * Colors + * Color context management functions */ +void etox_context_get_color(Etox * et, int *r, int *g, int *b, int *a); +void etox_context_set_color(Etox * et, int r, int g, int b, int a); +void etox_context_set_color_db(Etox * et, char *name); - -/** - * etox_color_new - Create a new Etox_Color object +/* + * Callback context management functions */ -Etox_Color etox_color_new(void); +/* +int etox_context_clear_callbacks(Etox *et); +int etox_context_add_callback(Etox *et, int type, Etox_Cb_Func func, void *data); +int etox_context_del_callback(Etox *et, int index); +*/ -/** - * etox_color_set_member - Set the r,g,b and alpha values of a member - * @color: The Etox_Color to be manipulated - * @member: one of fg (foreground), ol (outline) or sh (shadow) - * @r: The red value for the color member - * @g: The green value for the color member - * @b: The blue value for the color member - * @a: The alpha value for the color member - * - * Each color consists of a foreground, an outline and a shadow component. To - * specify the red, green, blue and alpha values for one of them use this - * function and pass either fg, ol or sh as the member. +/* + * Font context managment functions */ +char *etox_context_get_font(Etox * et, int *size); +void etox_context_set_font(Etox * et, char *fontname, int size); -void etox_color_set_member(Etox_Color color, char *member, - int r, int g, int b, int a); - -/** - * etox_color_get_member - Get the r,g,b and alpha values of a member - * @color: The Etox_Color to be manipulated - * @member: one of fg (foreground), ol (outline) or sh (shadow) - * @r: Pointer to int for the red value for the color member - * @g: Pointer to int for the green value for the color member - * @b: Pointer to int for the blue value for the color member - * @a: Pointer to int for the alpha value for the color member - * - * Each color consists of a foreground, an outline and a shadow component. To - * get the red, green, blue and alpha values for one of them use this - * function and pass either fg, ol or sh as the member. +/* + * Style context management functions */ -int etox_color_get_member(Etox_Color color, char *member, - int *r, int *g, int *b, int *a); +char *etox_context_get_style(Etox * et); +void etox_context_set_style(Etox * et, char *stylename); -/** - * etox_color_free - Free all memory associated with an Etox_Color +/* + * Alignment context management functions */ -void etox_color_free(Etox_Color color); +int etox_context_get_align(Etox * et); +void etox_context_set_align(Etox * et, int align); - -/* +/* * Text manipulation functions - * - * NOTE: don't forget to free the stuff returned by these funcs.. - * - */ - -/** - * etox_str_remove_beginning_spaces - */ -char *etox_str_remove_beginning_spaces(char *str); +void etox_append_text(Etox * et, char *text); +void etox_prepend_text(Etox * et, char *text); +void etox_insert_text(Etox * et, char *text, int index); +void etox_set_text(Etox * et, char *text); +char *etox_get_text(Etox * et); +void etox_clear(Etox * et); -/** - * etox_str_remove_ending_spaces - +/* + * Geometry altering functions */ -char *etox_str_remove_ending_spaces(char *str); +void etox_move(Etox * et, int x, int y); +void etox_resize(Etox * et, int w, int h); -/** - * etox_str_chop_off_beginning_string - +/* + * Geometry retrieval functions */ -char *etox_str_chop_off_beginning_string(char *str, char *chop); +void etox_get_geometry(Etox * et, int *x, int *y, int *w, int *h); +int etox_coord_to_index(Etox * et, int x, int y); +void etox_index_to_geometry(Etox * et, int index, int *x, int *y, + int *w, int *h); +int etox_coord_to_geometry(Etox * et, int xc, int yc, int *x, int *y, + int *w, int *h); -/** - * etox_str_chop_off_beginning_word - +/* + * Appearance altering functions */ -char *etox_str_chop_off_beginning_word(char *str); +void etox_set_layer(Etox * et, int layer); +void etox_set_clip(Etox * et, Evas_Object clip); +void etox_set_alpha(Etox * et, int alpha); -/** - * etox_str_chop_off_ending_string - +/* + * Region selection and release */ -char *etox_str_chop_off_ending_string(char *str, char *chop); +Ewd_List *etox_region_select(Etox * et, int start, int end); +Ewd_List *etox_region_select_str(Etox * et, char *search, char *last); +void etox_region_release(Ewd_List * region); -/** - * etox_str_chop_off_ending_word - +/* + * Region altering appearance modifiers */ -char *etox_str_chop_off_ending_word(char *str); - +void etox_region_set_font(Ewd_List * region, char *name, int size); +void etox_region_set_color(Ewd_List * region, int r, int g, int b, int a); +void etox_region_set_style(Ewd_List * region, char *stylename); /* - * Part functions + * Obstacle manipulation functions */ - -Etox_Part etox_part_new(void); -void etox_part_free(Etox_Part part); -void etox_part_set_from_callback(Etox e, Etox_Part part, - Etox_Callback callback); -void etox_part_prepend(Etox e, Etox_Part part, ...); -void etox_part_append(Etox e, Etox_Part part, ...); -void etox_part_remove_changes(Etox e, Etox_Part part); - - -#ifdef __cplusplus -} -#endif +Etox_Obstacle *etox_obstacle_add(Etox * et, int x, int y, int w, int h); +void etox_obstacle_remove(Etox * et, Etox_Obstacle * obstacle); +void etox_obstacle_move(Etox * et, Etox_Obstacle * obstacle, int x, int y); +void etox_obstacle_resize(Etox * et, Etox_Obstacle * obstacle, int w, + int h); #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/Etox_private.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- Etox_private.h 4 Jan 2002 23:47:34 -0000 1.10 +++ Etox_private.h 2 Apr 2002 02:50:09 -0000 1.11 @@ -1,361 +1,71 @@ -#ifndef ETOX_PRIVATE_H -#define ETOX_PRIVATE_H 1 - -#include <stdio.h> -#include <stdlib.h> -#include <limits.h> -#include <unistd.h> -#include <string.h> -#include <stdarg.h> -#include <Evas.h> -#include <Ewd.h> -#include "etox-config.h" - -#define ET_X_TO_EV(A) (A + e->x) -#define ET_Y_TO_EV(A) (A + e->y) -#define EV_X_TO_ET(A) (A - e->x) -#define EV_Y_TO_ET(A) (A - e->y) - -#ifdef DEBUG - -#define _etox_update(A) \ -printf("ETOX: %s() (%s:%d): Updating..\n", __FUNCTION__, __FILE__, __LINE__); \ -_D_etox_update(A) -#define D_PRINT(args...) \ -printf("ETOX: %s() (%s:%d): ", __FUNCTION__, __FILE__, __LINE__); printf(args) - -#else - -#define D_PRINT(args...) - -#endif - -enum _Etox_Object_Bit_Type -{ - ETOX_OBJECT_BIT_TYPE_NULL, - ETOX_OBJECT_BIT_TYPE_STRING, - ETOX_OBJECT_BIT_TYPE_NEWLINE, - ETOX_OBJECT_BIT_TYPE_TAB -}; - -typedef enum _Etox_Object_Bit_Type Etox_Object_Bit_Type; - -typedef struct _Etox_All_Bits * Etox_All_Bits; - -typedef struct _Etox * Etox; - -typedef struct _Etox_Part * Etox_Part; - -typedef struct _Etox_Bit * Etox_Bit; -typedef struct _Etox_Align * Etox_Align; -typedef struct _Etox_Callback * Etox_Callback; -typedef struct _Etox_Callback_Bit * Etox_Callback_Bit; -typedef struct _Etox_Color * Etox_Color; -typedef struct _Etox_Color_Bit * Etox_Color_Bit; -typedef struct _Etox_Font * Etox_Font; -typedef struct _Etox_Style * Etox_Style; -typedef struct _Etox_Style_Bit * Etox_Style_Bit; -typedef struct _Etox_Text * Etox_Text; - -typedef struct _Etox_Object * Etox_Object; - -typedef struct _Etox_Object_Bit * Etox_Object_Bit; -typedef struct _Etox_Object_String * Etox_Object_String; -typedef struct _Etox_Object_Newline * Etox_Object_Newline; -typedef struct _Etox_Object_Tab * Etox_Object_Tab; - -typedef struct _Etox_Obstacle * Etox_Obstacle; - -typedef struct _Etox_Data * Etox_Data; - +#ifndef _ETOX_PRIVATE_H +#define _ETOX_PRIVATE_H #include "Etox.h" +#include <Edb.h> - -struct _Etox_All_Bits -{ - Etox_Align align; - Etox_Callback callback; - Etox_Color color; - Etox_Font font; - Etox_Style style; - Etox_Text text; -}; - - -struct _Etox -{ - Evas evas; - char *name; - double x, y, w, h; - int a; - double padding; - - int show; - int raise; - int lower; - int layer; - Evas_Object clip; - - struct _Etox_All_Bits def; - - /* This is the list of Etox_Bits as passed in by the user. */ - Ewd_List *bits; - Ewd_List *obstacles; - - /* This is a list of Etox_Objects. Those continuous chunks that group - * together several Etox_Object_Bits. They need to be recalculated once - * initially and on every change of layout. */ - struct _etox_objects - { - double h; - Ewd_List *list; - int dirty; - struct _etox_objects_bits - { - Ewd_List *list; - int dirty; - } bits; - } etox_objects; - - /* These are the actual evas objects that are rendered. They change whenever - * the above etox_objects change. */ - struct _evas_objects - { - Ewd_List *list; - int dirty; - } evas_objects; - - /* list that contains data that needs to be freed eventually */ - Ewd_List *callback_data; -}; - - -struct _Etox_Part -{ - Ewd_List *bits; - Ewd_List *appended; - Ewd_List *prepended; -}; - - -struct _Etox_Bit -{ - Etox_Bit_Type type; - void *body; -}; - -struct _Etox_Align -{ - Etox_Align_Type v, h; +/* + * There is some subtelty to this enum. It leaves the bits used by alignment + * untouched so that a single char can hold all of the necessary information. + */ +typedef enum _etox_line_flags Etox_Line_Flags; +enum _etox_line_flags { + ETOX_LINE_SOFT = 0x10, +}; + +/* + * Line information helps process the bits layout + */ +typedef struct _etox_line Etox_Line; +struct _etox_line { + + /* + * The etox containing this line, used for getting back to necessary + * etox info when drawing bits. + */ + Etox *et; + + /* + * This is a pointer to a list of bits + */ + Ewd_List *bits; + + /* + * The dimensions of this line. + */ + int x, y, w, h; + + /* + * Flags indicating alignment, or if this is a "softline", ie. etox + * wrapped the line because it was too long to fit within the etox's + * bounds. + */ + char flags; + + /* + * Keep track of the length of text stored in this bit to avoid + * needing to recalculate this often. + */ + int length; +}; + +/* + * The bit holds all information necessary for display and layout of the text + */ +typedef struct _etox_bit Etox_Bit; +struct _etox_bit { + /* + * This is the estyle that displays the bit. + */ + Ewd_List *estyles; + + /* + * Regions that reference this bit. + */ + Ewd_List *regions; }; -struct _Etox_Callback -{ - Ewd_List *bits; -}; - -struct _Etox_Callback_Bit -{ - Etox_Callback_Type type; - void *data; - void (*func) (void *_data, Etox_Callback _cb, Etox _e, int _b, int _x, int _y); -}; - -struct _Etox_Color -{ - Ewd_List *bits; -}; - -struct _Etox_Color_Bit -{ - char *name; - int r, g, b, a; -}; - -struct _Etox_Font -{ - char *name; - int size; - double ascent, descent; -}; - -struct _Etox_Style -{ - char *name; - double offset_w, offset_h; - Ewd_List *bits; -}; - -struct _Etox_Style_Bit -{ - Etox_Style_Type type; - double x, y; - int a; -}; - -struct _Etox_Text -{ - char *str; -}; - - -struct _Etox_Object -{ - double x, y, w; - Ewd_List *bits; -}; - - -struct _Etox_Object_Bit -{ - Etox_Object_Bit_Type type; - double x, y, w, h; - void *body; - struct _evas_objects_list - { - Ewd_List *fg; - Ewd_List *sh; - Ewd_List *ol; - } evas_objects_list; -}; - -struct _Etox_Object_String -{ - char *str; - Etox_Align align; - Etox_Callback callback; - Etox_Color color; - Etox_Font font; - Etox_Style style; -}; - -struct _Etox_Object_Newline -{ - /* empty */ -}; - -struct _Etox_Object_Tab -{ - Etox_Align align; - Etox_Callback callback; - Etox_Font font; -}; - -struct _Etox_Obstacle -{ - double x, y, w, h; -}; - - -struct _Etox_Data -{ - void **value; - int data_added; - int size; -}; - - -/** Internal Functions **/ - -#ifdef DEBUG -void _D_etox_update(Etox e); -#else -void _etox_update(Etox e); -#endif - -void _etox_create_etox_objects(Etox e); -void _etox_create_evas_objects(Etox e); -void _etox_create_etox_object_bits(Etox e); - - -Etox_Object _etox_object_new(Etox e, double x, double y); -void _etox_object_free(Etox_Object obj); -int _etox_object_get_available_size(Etox_Object obj, - double *w); -int _etox_object_add_bit(Etox_Object obj, - Etox_Object_Bit obj_bit); -Etox_Object_Bit _etox_object_bit_new(void); -Etox_Object_Bit _etox_object_bit_clone(Etox_Object_Bit); -void _etox_object_bit_free(Etox_Object_Bit bit); -void _etox_object_bit_set_body(Etox e, - Etox_Object_Bit bit, - void *body, - Etox_Object_Bit_Type type); -void _etox_object_bit_get_char_geometry_at(Etox e, - Etox_Object_Bit obj_bit, - int index, - double *char_x, - double *char_y, - double *char_w, - double *char_h); -int _etox_object_bit_get_char_geometry_at_position(Etox e, - Etox_Object_Bit obj_bit, - double x, double y, - double *char_x, - double *char_y, - double *char_w, - double *char_h); -Etox_Object_String _etox_object_string_new(char *str, - Etox_Align align, - Etox_Callback callback, - Etox_Color color, - Etox_Font font, - Etox_Style style); -void _etox_object_string_free(Etox_Object_String string); -void _etox_object_string_set_string( - Etox_Object_String string, char *t); -Etox_Object_String _etox_object_string_clone(Etox_Object_String string); -Etox_Object_Newline _etox_object_newline_new(void); -void _etox_object_newline_free(Etox_Object_Newline nl); -Etox_Object_Tab _etox_object_tab_new(Etox_Align align, - Etox_Callback callback, - Etox_Font font); -void _etox_object_tab_free(Etox_Object_Tab tab); -Etox_Object_Tab _etox_object_tab_clone(Etox_Object_Tab tab); - -void _etox_align_etox_object(Etox e, Etox_Object obj); - -Etox_Callback_Bit _etox_callback_bit_new(void); -void _etox_callback_bit_free(Etox_Callback_Bit cb_bit); -void _etox_callback_create(Etox e, Etox_Callback callback, - Evas_Object ev_obj); - -Etox_Color_Bit _etox_color_get_bit(Etox_Color color, char *member); -void _etox_color_bit_free(Etox_Color_Bit bit); - -char * _etox_loadfile_atword(char *s, int num); -int _etox_loadfile_is_whitespace(const char *s); -char * _etox_loadfile_get_line(char *s, int size, FILE *f); -int _etox_loadfile_is_good(char *path); - -char * _etox_get_string_that_fits(Etox e, char *long_str, double w, - Etox_All_Bits bits); -void _etox_get_string_width(Etox e, Etox_Font font, char *str, - double *w); -void _etox_get_font_ascent_descent(Etox e, Etox_Font font, - double *ascent, double *descent); -void _etox_get_style_offsets(Etox_Style style, double *offset_w, - double *offset_h); - -Etox_Align _etox_bit_align_new(Etox_Align_Type v, Etox_Align_Type h); -void _etox_bit_align_free(Etox_Align align); -Etox_Font _etox_bit_font_new(char *name, int size, Etox e); -void _etox_bit_font_free(Etox_Font font); -Etox_Text _etox_bit_text_new(char *str); -void _etox_bit_text_free(Etox_Text text); -void _etox_bit_free(Etox_Bit bit); - -Etox_Data _etox_data_new(int size); -void _etox_data_free(Etox_Data data); -int _etox_data_get_size(Etox_Data data); -void _etox_data_set(Etox_Data data, int index, void * value); -void _etox_data_set_from_list(Etox_Data data, Ewd_List *list); -void * _etox_data_get(Etox_Data Data, int index); -void _etox_data_swap(Etox_Data data, int left, int right); -void _etox_data_sort(Etox_Data data, int left, int right, - int (*compare)(void *, void *)); - -void _etox_part_add_bit(Etox_Part part, Etox_Bit bit); +#include "etox_line.h" +#include "etox_obstacle.h" #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/Makefile.am,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- Makefile.am 4 Jan 2002 23:47:34 -0000 1.12 +++ Makefile.am 2 Apr 2002 02:50:09 -0000 1.13 @@ -11,24 +11,12 @@ libetox_la_SOURCES = \ Etox.h \ -Etox_private.h \ etox.c \ -etox_bit.c \ -etox_color.c \ -etox_create.c \ -etox_get.c \ -etox_loadfile.c \ -etox_object.c \ -etox_callback.c \ -etox_obstacle.c \ -etox_set.c \ -etox_str.c \ -etox_style.c \ -etox_align.c \ -etox_data.c \ -etox_part.c +etox_line.c \ +etox_context.c \ +etox_obstacle.c libetox_la_LIBADD = @evas_libs@ @ewd_libs@ libetox_la_DEPENDENCIES = $(top_builddir)/etox-config.h -libetox_la_LDFLAGS = -version-info 0:1:0 +libetox_la_LDFLAGS = -version-info 0:2:0 =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -3 -r1.24 -r1.25 --- etox.c 8 Feb 2002 15:57:12 -0000 1.24 +++ etox.c 2 Apr 2002 02:50:09 -0000 1.25 @@ -1,280 +1,982 @@ +#include "etox-config.h" #include "Etox_private.h" -#include "Etox.h" -void -#ifdef DEBUG -_D_etox_update(Etox e) -#else -_etox_update(Etox e) -#endif -{ - Evas_Object ev_obj; - - if (e->etox_objects.bits.dirty) - _etox_create_etox_object_bits(e); - - if (e->etox_objects.dirty) - _etox_create_etox_objects(e); - if (e->evas_objects.dirty) - _etox_create_evas_objects(e); - - if (!e->evas_objects.list || ewd_list_is_empty(e->evas_objects.list)) - return; - - ewd_list_goto_first(e->evas_objects.list); - while ((ev_obj = (Evas_Object) ewd_list_next(e->evas_objects.list))) - { - if (e->show) - evas_show(e->evas, ev_obj); - else - evas_hide(e->evas, ev_obj); - if (e->raise) - evas_raise(e->evas, ev_obj); - if (e->lower) - evas_lower(e->evas, ev_obj); - if (e->layer) - evas_set_layer(e->evas, ev_obj, e->layer); - if (e->clip) - evas_set_clip(e->evas, ev_obj, e->clip); - } -} - -Etox -etox_new(Evas evas, char *name) -{ - - Etox e; - Etox_Style_Bit style_bit; - - if (!evas) - return NULL; - - etox_style_add_path("."); - - e = malloc(sizeof(struct _Etox)); - e->evas = evas; - if (name) - e->name = strdup(name); - else - e->name = NULL; - - e->x = 0.0; - e->y = 0.0; - e->w = 100.0; - e->h = 100.0; - e->a = 255; - e->padding = 7.0; - - e->show = 1; - e->raise = 0; - e->lower = 0; - e->layer = 0; - e->clip = NULL; - - e->callback_data = NULL; - - e->def.align = malloc(sizeof(struct _Etox_Align)); - e->def.align->v = ETOX_ALIGN_TYPE_TOP; - e->def.align->h = ETOX_ALIGN_TYPE_LEFT; - - e->def.callback = NULL; - - e->def.color = etox_color_new(); - etox_color_set_member(e->def.color, "sh", 0, 0, 0, 255); - etox_color_set_member(e->def.color, "ol", 0, 0, 0, 255); - etox_color_set_member(e->def.color, "fg", 255, 255, 255, 255); - - e->def.font = malloc(sizeof(struct _Etox_Font)); - e->def.font->name = strdup("notepad"); - e->def.font->size = 12; - _etox_get_font_ascent_descent(e, e->def.font, - &(e->def.font->ascent), - &(e->def.font->descent)); - - e->def.style = malloc(sizeof(struct _Etox_Style)); - e->def.style->name = strdup("Default"); - e->def.style->bits = ewd_list_new(); - ewd_list_set_free_cb(e->def.style->bits, EWD_FREE_CB(free)); - style_bit = malloc(sizeof(struct _Etox_Style_Bit)); - style_bit->type = ETOX_STYLE_TYPE_SHADOW; - style_bit->x = 2; - style_bit->y = 2; - style_bit->a = 128; - ewd_list_append(e->def.style->bits, style_bit); - style_bit = malloc(sizeof(struct _Etox_Style_Bit)); - style_bit->type = ETOX_STYLE_TYPE_OUTLINE; - style_bit->x = 0; - style_bit->y = -1; - style_bit->a = 255; - ewd_list_append(e->def.style->bits, style_bit); - style_bit = malloc(sizeof(struct _Etox_Style_Bit)); - style_bit->type = ETOX_STYLE_TYPE_OUTLINE; - style_bit->x = 1; - style_bit->y = 0; - style_bit->a = 255; - ewd_list_append(e->def.style->bits, style_bit); - style_bit = malloc(sizeof(struct _Etox_Style_Bit)); - style_bit->type = ETOX_STYLE_TYPE_OUTLINE; - style_bit->x = 0; - style_bit->y = 1; - style_bit->a = 255; - ewd_list_append(e->def.style->bits, style_bit); - style_bit = malloc(sizeof(struct _Etox_Style_Bit)); - style_bit->type = ETOX_STYLE_TYPE_FOREGROUND; - style_bit->x = 0; - style_bit->y = 0; - style_bit->a = 255; - ewd_list_append(e->def.style->bits, style_bit); - - _etox_get_style_offsets(e->def.style, - &(e->def.style->offset_w), - &(e->def.style->offset_h)); - - e->def.text = malloc(sizeof(struct _Etox_Text)); - e->def.text->str = strdup("Empty string"); - - e->bits = NULL; - e->obstacles = NULL; - - e->etox_objects.list = NULL; - e->etox_objects.h = 0.0; - e->etox_objects.dirty = 1; - e->etox_objects.bits.list = NULL; - e->etox_objects.bits.dirty = 1; - - e->evas_objects.list = NULL; - e->evas_objects.dirty = 1; - - return e; -} - -Etox -etox_new_all(Evas evas, char *name, - double x, double y, double w, double h, - int alpha, double padding, - Etox_Align_Type v_align, Etox_Align_Type h_align, - Etox_Callback callback, Etox_Color color, - char *font, int font_size, Etox_Style style) -{ - Etox e; - - if (!evas || !w || !h) - return NULL; - - e = etox_new(evas, name); - etox_move(e, x, y); - etox_resize(e, w, h); - etox_set_alpha(e, alpha); - etox_set_padding(e, padding); - if (h_align && v_align) - etox_set_align(e, h_align, v_align); - if (callback) - etox_set_callback(e, callback); - if (color) - etox_set_color(e, color); - if (font && font_size) - etox_set_font(e, font, font_size); - if (style) - etox_set_style(e, style); - - return e; -} - -void -etox_free(Etox e) -{ - IF_FREE(e->name); - IF_FREE(e->def.align); - IF_FREE(e->def.callback); - if (e->def.color) - etox_color_free(e->def.color); - if (e->def.font) - { - IF_FREE(e->def.font->name); - FREE(e->def.font); - } - IF_FREE(e->def.style); - IF_FREE(e->def.text); - if (e->bits) - ewd_list_destroy(e->bits); - if (e->obstacles) - ewd_list_destroy(e->obstacles); - if (e->etox_objects.list) - ewd_list_destroy(e->etox_objects.list); - if (e->etox_objects.bits.list) - ewd_list_destroy(e->etox_objects.bits.list); - if (e->evas_objects.list) - ewd_list_destroy(e->evas_objects.list); - if (e->callback_data) - ewd_list_destroy(e->callback_data); -} - -void -etox_show(Etox e) -{ - if (!e) - return; - - e->show = 1; - - _etox_update(e); -} - -void -etox_hide(Etox e) -{ - if (!e) - return; - - e->show = 0; - - _etox_update(e); -} - -void -etox_raise(Etox e) -{ - if (!e) - return; - - e->raise = 1; - - _etox_update(e); -} - -void -etox_lower(Etox e) -{ - if (!e) - return; - - e->lower = 1; - - _etox_update(e); -} - -void -etox_move(Etox e, double x, double y) -{ - if (!e) - return; - - e->x = x; - e->y = y; - - e->etox_objects.dirty = 1; - _etox_update(e); -} - -void -etox_resize(Etox e, double w, double h) +static Ewd_List *_etox_break_text(Etox * et, char *text); +static void _etox_layout(Etox * et, int y); + +/** + * etox_new - create a new etox with default settings + * @evas: the evas for rendering text + * + * Returns a pointer to a newly allocated etox on success, NULL on failure. + */ +Etox *etox_new(Evas evas) +{ + Etox *et; + + CHECK_PARAM_POINTER_RETURN("evas", evas, NULL); + + /* + * Create the etox and assign it's evas to draw on. + */ + et = (Etox *) malloc(sizeof(Etox)); + memset(et, 0, sizeof(Etox)); + + et->evas = evas; + + /* + * Allocate space for the default context + */ + et->context = (Etox_Context *) malloc(sizeof(Etox_Context)); + memset(et->context, 0, sizeof(Etox_Context)); + + /* + * Setup the default color + */ + et->context->r = 255; + et->context->g = 255; + et->context->b = 255; + et->context->a = 255; + + /* + * Setup the default style + */ + et->context->style = strdup("outline"); + + /* + * Set up the default font + */ + evas_font_add_path(evas, PACKAGE_DATA_DIR "/fonts"); + et->context->font = strdup("nationff"); + et->context->font_size = 14; + + /* + * Setup the default alignment + */ + et->context->align = ETOX_ALIGN_LEFT | ETOX_ALIGN_TOP; + + /* + * Set the clip rectangle for the etox + */ + et->clip = evas_add_rectangle(evas); + evas_set_color(et->evas, et->clip, 255, 255, 255, 255); + + return et; +} + +/** + * etox_new_all - create a new etox with specified settings + * @evas: the evas for rendering text + * @x: the x coordinate of the positioning for the etox + * @y: the y coordinate of the positioning for the etox + * @w: the width of the size for the etox + * @h: the height of the size for the etox + * @alpha: the alpha value to apply to the text in the etox + * @padding: the padding surrounding the text in the etox + * @style: the default style to be applied to the text of the etox + * @align: the defaul alignment to apply to the text of the etox + * + * Returns a pointer to a newly allocated etox on success, NULL on failure. + */ +Etox *etox_new_all(Evas evas, int x, int y, int w, int h, int alpha, + Etox_Alignment align) +{ + Etox *et; + + CHECK_PARAM_POINTER_RETURN("evas", evas, NULL); + + /* + * Create the etox and then override the default values with those + * passed in to etox_new_all. + */ + et = etox_new(evas); + et->context->align = align; + et->x = x; + et->y = y; + et->w = w; + et->h = h; + + et->alpha = alpha; + + return et; +} + +/** + * etox_free - free the memory used by the etox and remove it from the evas + * @et: the etox that will be freed + * + * Returns no value. Removes the etox @et from the evas it is drawn on, and + * then deallocates the memory that it was using. + */ +void etox_free(Etox * et) +{ + Etox_Obstacle *obst; + + CHECK_PARAM_POINTER("et", et); + + etox_clear(et); + FREE(et->context->style); + + while (et->obstacles && (obst = ewd_list_remove_last(et->obstacles))) + FREE(obst); +} + +/** + * etox_show - display the etox + * @et: the etox to be displayed + * + * Returns no value. Adds the text from @et to it's evas. + */ +void etox_show(Etox * et) +{ + Etox_Line *line; + + CHECK_PARAM_POINTER("et", et); + + et->visible = TRUE; + + ewd_list_goto_first(et->lines); + while ((line = ewd_list_next(et->lines))) + etox_line_show(line); + + /* + * Display and position the clip box with the correct size. + */ + evas_show(et->evas, et->clip); + evas_move(et->evas, et->clip, (double)(et->x), (double)(et->y)); + evas_resize(et->evas, et->clip, (double)(et->w), (double)(et->h)); +} + +/** + * etox_hide - hide the etox + * @et: the etox to hide + * + * Returns no value. Hides the text from @et from it's evas + */ +void etox_hide(Etox * et) +{ + CHECK_PARAM_POINTER("et", et); + + et->visible = FALSE; + + evas_hide(et->evas, et->clip); +} + +/** + * etox_append_text - append text to the existing text in the etox + * @et: the etox to append the text + * @text: the text to add at the end of the etox + * + * Returns no value. Appends @text to the text already existing in @et, and + * updates the layout and display of the etox. + */ +void etox_append_text(Etox * et, char *text) +{ + Ewd_List *lines; + Etox_Line *end, *start; + + CHECK_PARAM_POINTER("et", et); + CHECK_PARAM_POINTER("text", text); + + /* + * Break the incoming text into lines, and merge the first line of the + * new text with the last line of the old text. + */ + lines = _etox_break_text(et, text); + start = ewd_list_remove_first(lines); + end = ewd_list_remove_last(et->lines); + + /* + * Need to adjust the height and length of the line to reflect the + * text that was added. + */ + et->length -= start->length; + et->h -= start->h; + etox_line_merge(start, end); + et->length += start->length; + et->h += start->h; + + ewd_list_append(lines, start); + + /* + * Now add the remaining lines to the end of the line list. + */ + ewd_list_goto_first(et->lines); + while ((start = ewd_list_remove_first(lines))) { + if (start->w > et->w) + et->w = start->w; + + et->h += start->h; + et->length += start->length; + ewd_list_append(lines, start); + } + + /* + * Layout the lines on the etox starting at the newly added text. + */ + _etox_layout(et, end->y); + + /* + * Destroy the temporary list of lines now that it is empty. + */ + ewd_list_destroy(lines); +} + +/** + * etox_prepend_text - prepend text to the existing text in the etox + * @et: the etox to prepend the text + * @text: the text to add at the end of the etox + * + * Returns no value. Prepends @text to the text already existing in @et, and + * updates the layout and display of the etox. + */ +void etox_prepend_text(Etox * et, char *text) { - if (!e) - return; + Ewd_List *lines; + Etox_Line *end, *start; + + CHECK_PARAM_POINTER("et", et); + CHECK_PARAM_POINTER("text", text); + + /* + * Break the incoming text into lines, and merge the first line of the + * new text with the last line of the old text. + */ + lines = _etox_break_text(et, text); + start = ewd_list_remove_first(et->lines); + end = ewd_list_remove_last(lines); + + /* + * Need to adjust the height and length of the line to reflect the + * text that was added. + */ + et->length -= end->length; + et->h -= end->h; + etox_line_merge(end, start); + et->length += end->length; + et->h += end->h; + + ewd_list_append(lines, end); + + /* + * Now add the remaining lines to the end of the line list. + */ + ewd_list_goto_first(et->lines); + while ((start = ewd_list_remove_first(et->lines))) { + if (start->w > et->w) + et->w = start->w; + + et->h += start->h; + et->length += start->length; + ewd_list_prepend(lines, start); + } + + /* + * Add the newly created lines to the end of the list of lines. + */ + while ((start = ewd_list_remove_first(lines))) + ewd_list_append(et->lines, start); + + /* + * Layout the lines on the etox. + */ + ewd_list_goto_first(et->lines); + _etox_layout(et, et->y); + + /* + * Destroy the temporary list of lines now that it is empty. + */ + ewd_list_destroy(lines); +} + +/** + * etox_insert_text - insert text into an etox at specified index + * @et: the etox to insert the text + * @text: the text to insert into the etox + * @index: the index into the etox to insert the etox + * + * Returns no value. Places @text into the etox @et at position @index and + * updates the layout and display of the etox. + */ +void etox_insert_text(Etox * et, char *text, int index) +{ + CHECK_PARAM_POINTER("et", et); + CHECK_PARAM_POINTER("text", text); +} + +/** + * etox_set_text - change the text in the etox + * @et: the etox to change text + * @text: the new text to display in @et + * + * Returns no value. Changes the text displayed by @et to itext. + */ +void etox_set_text(Etox * et, char *text) +{ + Etox_Line *line; + + CHECK_PARAM_POINTER("et", et); + + if (!text) + text = strdup(""); + + text = strdup(text); + + etox_clear(et); + + /* + * Layout the text and add to the display + */ + et->lines = _etox_break_text(et, text); + + ewd_list_goto_first(et->lines); + _etox_layout(et, et->y); + + /* + * Sum up the length and height of the text in the etox. + */ + et->h = 0; + et->length = 0; + ewd_list_goto_first(et->lines); + while ((line = ewd_list_next(et->lines))) { + /* + * Grab the largest line width for the width of the etox. + */ + if (line->w > et->w) + et->w = line->w; + + et->h += line->h; + et->length += line->length; + } + + FREE(text); +} + +/** + * etox_get_text - retrieve the text in the etox + * @et: the etox to retrieve the text + * + * Returns the text in the etox @et on success, NULL on failure. + */ +char *etox_get_text(Etox * et) +{ + char *ret, *temp; + Etox_Line *line; + + CHECK_PARAM_POINTER_RETURN("et", et, NULL); + + /* + * Return NULL on an empty etox. + */ + if (!et->lines) + return NULL; + + ret = (char *)malloc((et->length + 1) * sizeof(char)); + memset(ret, 0, (et->length + 1) * sizeof(char)); + + temp = ret; + ewd_list_goto_first(et->lines); + + /* + * Concatenate the text into the newly allocated buffer. + */ + while ((line = ewd_list_next(et->lines))) { + etox_line_get_text(line, temp); + temp += line->length; + } + + return ret; +} + +/** + * etox_clear - remove all text from the etox + * @et: the etox to be cleared + * + * Returns no value. Removes all text from the etox. + */ +void etox_clear(Etox * et) +{ + Etox_Line *line; + + CHECK_PARAM_POINTER("et", et); + + /* + * If there aren't any lines currently available, then return + * immediately. + */ + if (!et->lines) + return; + + while ((line = ewd_list_remove_last(et->lines))) + etox_line_free(line); +} + +/** + * etox_set_layer - change the layer where the etox is displayed + * @et: the etox to change layers + * @layer: the layer to display the etox on the evas + * + * Returns no value. Moves all bits of the etox onto the @layer layer of the + * evas. All further text added will be drawn on this layer. + */ +void etox_set_layer(Etox * et, int layer) +{ + Estyle *bit; + Etox_Line *line; + + CHECK_PARAM_POINTER("et", et); + + et->layer = layer; + + if (!et->lines) + return; + + /* + * Set the layer for every line + */ + ewd_list_goto_first(et->lines); + while ((line = ewd_list_next(et->lines))) { + if (line->bits) { + + /* + * Set the layer for each bit in the line + */ + ewd_list_goto_first(line->bits); + while ((bit = ewd_list_next(line->bits))) + estyle_set_layer(bit, layer); + } + } +} + +/** + * etox_set_alpha - change the alpha value for the etox + * @et: the etox to change alpha + * @alpha: the new alpha value for the etox + * + * Returns no value. Sets the alpha value of the etox @et to @alpha. + */ +void etox_set_alpha(Etox *et, int alpha) +{ + int r, g, b, a; + + CHECK_PARAM_POINTER("et", et); + + if (et->alpha == alpha) + return; + + evas_get_color(et->evas, et->clip, &r, &g, &b, &a); + evas_set_color(et->evas, et->clip, r, g, b, alpha); +} + +/** + * etox_move - move the etox into a new desired position + * @et: the etox to change position + * @x: the new x coordinate of the etox + * @y: the new y coordinate of the etox + * + * Returns no value. Changes the position of the etox @et to the specified + * position. + */ +void etox_move(Etox * et, int x, int y) +{ + CHECK_PARAM_POINTER("et", et); + + if (et->x == x && et->y == y) + return; + + et->x = x; + et->y = y; + + /* + * Layout lines if appropriate. + */ + if (et->lines) { + ewd_list_goto_first(et->lines); + _etox_layout(et, et->y); + } + + /* + * Adjust the clip box to display the contents correctly. We need to + * do both a move and a resize in case the size has been adjusted + * during layout. + */ + evas_move(et->evas, et->clip, (double)(et->x), (double)(et->y)); + evas_resize(et->evas, et->clip, (double)(et->w), (double)(et->h)); +} + +/** + * etox_resize - resize the etox into a new desired size + * @et: the etox to change position + * @w: the new width of the etox + * @y: the new height of the etox + * + * Returns no value. Changes the dimensions of the etox to match the specified + * dimensions. + */ +void etox_resize(Etox * et, int w, int h) +{ + CHECK_PARAM_POINTER("et", et); + + if (et->w == w && et->h == h) + return; + + /* + * Layout lines if appropriate. + */ + if (et->lines) { + ewd_list_goto_first(et->lines); + _etox_layout(et, et->y); + } + + /* + * Adjust the clip box to display the contents correctly. We need to + * do both a move and a resize in case the size has been adjusted + * during layout. + */ + evas_move(et->evas, et->clip, (double)(et->x), (double)(et->y)); + evas_resize(et->evas, et->clip, (double)(et->w), (double)(et->h)); +} + +/** + * etox_get_geometry - retrieve information about etox geometry + * @et: the etox to inquire the geometry + * @x: a pointer to an int to store the x coordinate of the etox + * @y: a pointer to an int to store the y coordinate of the etox + * @w: a pointer to an int to store the width of the etox + * @h: a pointer to an int to store the height of the etox + * + * Returns no value. Stores the current geometry of the etox @et into the + * integers pointed to by @x, @y, @w, and @h. + */ +void etox_get_geometry(Etox * et, int *x, int *y, int *w, int *h) +{ + CHECK_PARAM_POINTER("et", et); + + if (x) + *x = et->x; + + if (y) + *y = et->y; + + if (w) + *w = et->w; + + if (h) + *h = et->h; +} + +/** + * etox_get_letter_geometry - retrieve information about a letters geometry + * @et: the etox to inquire the geometry + * @x: a pointer to an int to store the x coordinate of the etox + * @y: a pointer to an int to store the y coordinate of the etox + * @w: a pointer to an int to store the width of the etox + * @h: a pointer to an int to store the height of the etox + * + * Returns no value. Stores the current geometry of the letter at index @index + * in @et into the integers pointed to by @x, @y, @w, and @h. + */ +void etox_index_to_geometry(Etox * et, int index, int *x, int *y, + int *w, int *h) +{ + int sum; + Estyle *bit; + Etox_Line *line; + + CHECK_PARAM_POINTER("et", et); + + if (index > et->length) { + sum = et->length; + line = ewd_list_goto_last(et->lines); + + *h = line->h; + *w = line->w / line->length; + *y = line->y; + *x = line->x + line->w; + } + else { + /* + * Find the line that contains the character + */ + sum = 0; + ewd_list_goto_first(et->lines); + while ((line = (Etox_Line *)ewd_list_next(et->lines)) && + sum + line->length < index) + sum += line->length; + + + /* + * Find the bit that contains the character + */ + ewd_list_goto_first(line->bits); + while ((bit = ewd_list_next(line->bits)) && + sum + estyle_length(bit) < index) + sum += estyle_length(bit); + + /* + * No bit intersects, so set the geometry to the start of the + * line, with the average character width on the line. + */ + if (!bit) { + *h = line->h; + *w = line->w / line->length; + *y = line->y; + *x = line->x + line->w; + return; + } + + /* + * Now get the actual geometry from the bit + */ + estyle_text_at(bit, index - sum, x, y, w, h); + } +} + +/** + * etox_get_coord_geometry - retrieve information about a letters geometry + * @et: the etox to inquire the geometry + * @x: a pointer to an int to store the x coordinate of the etox + * @y: a pointer to an int to store the y coordinate of the etox + * @w: a pointer to an int to store the width of the etox + * @h: a pointer to an int to store the height of the etox + * + * Returns no value. Stores the geometry of the letter at coordinates @xc, @yc + * in @et into the integers pointed to by @x, @y, @w, and @h. + */ +int etox_coord_to_geometry(Etox * et, int xc, int yc, int *x, int *y, + int *w, int *h) +{ + int sum; + Estyle *bit; + Etox_Line *line; + int tx, ty, tw, th; + + CHECK_PARAM_POINTER_RETURN("et", et, 0); + + /* + * Put the click within the bounds of the etox. + */ + if (xc < et->x) + xc = et->x + 1; + + if (yc < et->y) + yc = et->y + 1; + + if (yc > et->y + et->h) + yc = et->y + et->h - 1; + + /* + * Find the line that contains the character + */ + sum = 0; + line = ewd_list_goto_first(et->lines); + while ((line = (Etox_Line *)ewd_list_next(et->lines)) && + line->y + line->h < yc) { + sum += line->length; + } + + /* + * Bring the coordinate into the line if it falls outside, this may + * happen with centered or right alignment. + */ + bit = ewd_list_goto_first(line->bits); + estyle_geometry(bit, &tx, &ty, &tw, &th); + if (xc < tx) + xc = tx; + + /* + * Find the bit that contains the character, be sure to check that + * it's not above this line, which means the click happened above the + * etox, and should be placed over the first character. + */ + while ((bit = ewd_list_next(line->bits))) { + + estyle_geometry(bit, &tx, &ty, &tw, ... [truncated message content] |
From: <enl...@li...> - 2002-04-03 00:29:08
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/data Added Files: colors.db Log Message: Forgot to add some necessary data files. |
From: <enl...@li...> - 2002-04-03 00:34:52
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/data/fonts Added Files: andover.ttf cinema.ttf grunge.ttf morpheus.ttf nationff.ttf notepad.ttf Log Message: Forgot to add some necessary data files. |
From: <enl...@li...> - 2002-04-03 00:34:58
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/data/styles Added Files: bold.style.db outline.style.db raised.style.db shadow.style.db Log Message: Forgot to add some necessary data files. |
From: <enl...@li...> - 2002-04-03 00:34:59
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/data/fonts Log Message: Directory /cvsroot/enlightenment/e17/libs/etox/data/fonts added to the repository |
From: <enl...@li...> - 2002-04-03 00:40:49
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/data/styles Log Message: Directory /cvsroot/enlightenment/e17/libs/etox/data/styles added to the repository |
From: <enl...@li...> - 2002-04-02 03:59:15
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Added Files: etox_obstacle.h Log Message: Forgot to add this file. |
From: <enl...@li...> - 2002-04-19 18:09:23
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Modified Files: etox_line.c Log Message: Small fix in line_minimize, we don't need to move to the next item after a remove, since the remove does this for us. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_line.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- etox_line.c 2 Apr 2002 02:50:10 -0000 1.1 +++ etox_line.c 19 Apr 2002 18:09:22 -0000 1.2 @@ -264,9 +264,10 @@ */ if (estyle_merge(last_bit, bit)) ewd_list_remove(line->bits); - - ewd_list_next(line->bits); - last_bit = bit; + else { + ewd_list_next(line->bits); + last_bit = bit; + } } } |
From: <enl...@li...> - 2002-04-19 18:29:37
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Modified Files: Tag: SPLIT etox_line.c Log Message: Sync to the HEAD change for line_minimize =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_line.c,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -3 -r1.1.2.1 -r1.1.2.2 --- etox_line.c 2 Apr 2002 12:03:22 -0000 1.1.2.1 +++ etox_line.c 19 Apr 2002 18:29:35 -0000 1.1.2.2 @@ -264,9 +264,10 @@ */ if (estyle_merge(last_bit, bit)) ewd_list_remove(line->bits); - - ewd_list_next(line->bits); - last_bit = bit; + else { + ewd_list_next(line->bits); + last_bit = bit; + } } } |
From: <enl...@li...> - 2002-04-19 21:25:27
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Modified Files: etox.c Log Message: Need to remove the line from the end of the list when we free it. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -3 -r1.25 -r1.26 --- etox.c 2 Apr 2002 02:50:09 -0000 1.25 +++ etox.c 19 Apr 2002 21:25:26 -0000 1.26 @@ -136,8 +136,10 @@ et->visible = TRUE; ewd_list_goto_first(et->lines); - while ((line = ewd_list_next(et->lines))) + while ((line = ewd_list_next(et->lines))) { + printf("Etox showing line %d\n", ewd_list_index(et->lines)); etox_line_show(line); + } /* * Display and position the clip box with the correct size. @@ -940,8 +942,10 @@ etox_line_append(line, bit); estyle_show(bit); } - else if (line->bits == NULL) + else if (line->bits == NULL) { etox_line_free(line); + ewd_list_remove_last(ret); + } return ret; } |
From: <enl...@li...> - 2002-04-19 21:26:17
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Modified Files: Tag: SPLIT etox.c Log Message: Remove the line when freeing it. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox.c,v retrieving revision 1.24.2.2 retrieving revision 1.24.2.3 diff -u -3 -r1.24.2.2 -r1.24.2.3 --- etox.c 14 Apr 2002 23:13:29 -0000 1.24.2.2 +++ etox.c 19 Apr 2002 21:26:17 -0000 1.24.2.3 @@ -2,7 +2,6 @@ #include "Etox_private.h" static Ewd_List *_etox_break_text(Etox * et, char *text); -static void _etox_wrap_lines (Etox * et); static void _etox_layout(Etox * et, int y); /** @@ -137,8 +136,10 @@ et->visible = TRUE; ewd_list_goto_first(et->lines); - while ((line = ewd_list_next(et->lines))) + while ((line = ewd_list_next(et->lines))) { + printf("Etox showing line %d\n", ewd_list_index(et->lines)); etox_line_show(line); + } /* * Display and position the clip box with the correct size. @@ -175,7 +176,6 @@ { Ewd_List *lines; Etox_Line *end, *start; - int index; CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("text", text); @@ -214,13 +214,6 @@ } /* - * wrap the lines, but return the list to the original position - */ - index = ewd_list_index(et->lines); - _etox_wrap_lines (et); - ewd_list_goto_index(et->lines, index); - - /* * Layout the lines on the etox starting at the newly added text. */ _etox_layout(et, end->y); @@ -289,7 +282,6 @@ /* * Layout the lines on the etox. */ - _etox_wrap_lines (et); ewd_list_goto_first(et->lines); _etox_layout(et, et->y); @@ -339,7 +331,6 @@ */ et->lines = _etox_break_text(et, text); - _etox_wrap_lines (et); ewd_list_goto_first(et->lines); _etox_layout(et, et->y); @@ -951,71 +942,12 @@ etox_line_append(line, bit); estyle_show(bit); } - else if (line->bits == NULL) + else if (line->bits == NULL) { etox_line_free(line); + ewd_list_remove_last(ret); + } return ret; -} - -static void -_etox_wrap_lines (Etox * et) -{ - Etox_Line *line; - Etox_Line *newline; - - CHECK_PARAM_POINTER ("et", et); - - /* if soft flag is not set, don't do anything */ - if (!(et->context->align & ETOX_LINE_SOFT)) return; - - ewd_list_goto_first(et->lines); - - /* go through all the lines */ - while ((line = ewd_list_next(et->lines))) - { - Estyle *bit, *split; - int index; - - if (line->w > et->w ) - { - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits))) - { - index = estyle_text_at_position(bit, line->x + et->w, line->y, - NULL, NULL, NULL, NULL); - if (index >= 0) - { - /* split the bit that is on the edge */ - split = estyle_split(bit, index); - - /* if split doesn't exist don't do the following */ - if (!split) break; - - /* set up the split style and show it */ - estyle_set_clip(bit, et->clip); - estyle_set_color(split, et->context->r, et->context->g, - et->context->b, et->context->a); - estyle_show(split); - - /* create the new line */ - newline = etox_line_new(line->flags); - ewd_list_insert(et->lines, newline); - newline->et = et; - - /* add the 'split' bit do the new line */ - etox_line_append(newline, split); - - /* move all remaining bits from line to newline */ - while ((bit = ewd_list_next(line->bits))) - { - etox_line_append(newline, bit); - ewd_list_remove(line->bits); - } - break; - } - } - } - } } /* |
From: <enl...@li...> - 2002-04-19 21:38:13
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Removed Files: Tag: SPLIT etox_context.h Log Message: This file isn't used since it's contents are in Etox.h |
From: <enl...@li...> - 2002-04-19 21:39:05
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Removed Files: etox_context.h Log Message: These contents are in Etox.h |
From: <enl...@li...> - 2002-04-19 22:06:34
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Modified Files: Etox.h etox.c etox_context.c Log Message: Allow for creating contexts that can then be loaded by an etox at a later time. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/Etox.h,v retrieving revision 1.26 retrieving revision 1.27 diff -u -3 -r1.26 -r1.27 --- Etox.h 2 Apr 2002 02:50:09 -0000 1.26 +++ Etox.h 19 Apr 2002 22:06:31 -0000 1.27 @@ -173,6 +173,7 @@ /* * Context management functions */ +Etox_Context *etox_context_new(); Etox_Context *etox_context_save(Etox * et); void etox_context_load(Etox * et, Etox_Context * context); void etox_context_free(Etox_Context * context); =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -3 -r1.26 -r1.27 --- etox.c 19 Apr 2002 21:25:26 -0000 1.26 +++ etox.c 19 Apr 2002 22:06:31 -0000 1.27 @@ -25,10 +25,9 @@ et->evas = evas; /* - * Allocate space for the default context + * Allocate the default context */ - et->context = (Etox_Context *) malloc(sizeof(Etox_Context)); - memset(et->context, 0, sizeof(Etox_Context)); + et->context = etox_context_new(); /* * Setup the default color @@ -119,6 +118,8 @@ while (et->obstacles && (obst = ewd_list_remove_last(et->obstacles))) FREE(obst); + + FREE(et->context); } /** =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_context.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- etox_context.c 2 Apr 2002 02:50:10 -0000 1.1 +++ etox_context.c 19 Apr 2002 22:06:32 -0000 1.2 @@ -2,6 +2,25 @@ #include "Etox_private.h" /** + * etox_context_new - create a new context for loading values to an etox + * + * Returns a newly allocated and zeroed out Etox_Context on success, NULL on + * failure. + */ +Etox_Context *etox_context_new() +{ + Etox_Context *ret; + + ret = (Etox_Context *)malloc(sizeof(Etox_Context)); + if (!ret) + return NULL; + + memset(ret, 0, sizeof(Etox_Context)); + + return ret; +} + +/** * etox_context_save - save a copy of the current context for restoring later * @et: the etox to retrieve a copy of the current context * |
From: <enl...@li...> - 2002-04-21 06:27:25
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Modified Files: Tag: SPLIT Etox.h Etox_private.h etox.c etox_context.c etox_line.c etox_line.h etox_obstacle.c etox_obstacle.h etox_selection.h Log Message: Conversion to use Evas_List's by fukui-san, also readded the line wrapping code which I accidentally removed yesterday. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/Etox.h,v retrieving revision 1.25.2.2 retrieving revision 1.25.2.3 diff -u -3 -r1.25.2.2 -r1.25.2.3 --- Etox.h 14 Apr 2002 23:13:29 -0000 1.25.2.2 +++ Etox.h 21 Apr 2002 06:27:24 -0000 1.25.2.3 @@ -1,7 +1,6 @@ #ifndef _ETOX_H #define _ETOX_H -#include <Ewd.h> #include <Edb.h> #include <Evas.h> #include <Estyle.h> @@ -54,7 +53,6 @@ struct _etox_style_info { char *name; E_DB_File *style_db; - Ewd_Sheap *layers; int references; }; @@ -138,12 +136,12 @@ /* * List of lines in the etox */ - Ewd_List *lines; + Evas_List lines; /* * List of obstacles in the etox */ - Ewd_List *obstacles; + Evas_List obstacles; /* * Determine if the etox has been displayed yet. @@ -234,9 +232,9 @@ void etox_get_geometry(Etox * et, int *x, int *y, int *w, int *h); int etox_coord_to_index(Etox * et, int x, int y); void etox_index_to_geometry(Etox * et, int index, int *x, int *y, - int *w, int *h); + int *w, int *h); int etox_coord_to_geometry(Etox * et, int xc, int yc, int *x, int *y, - int *w, int *h); + int *w, int *h); /* * Appearance altering functions @@ -248,16 +246,16 @@ /* * Region selection and release */ -Ewd_List *etox_region_select(Etox * et, int start, int end); -Ewd_List *etox_region_select_str(Etox * et, char *search, char *last); -void etox_region_release(Ewd_List * region); +Evas_List etox_region_select(Etox * et, int start, int end); +Evas_List etox_region_select_str(Etox * et, char *search, char *last); +void etox_region_release(Evas_List region); /* * Region altering appearance modifiers */ -void etox_region_set_font(Ewd_List * region, char *name, int size); -void etox_region_set_color(Ewd_List * region, int r, int g, int b, int a); -void etox_region_set_style(Ewd_List * region, char *stylename); +void etox_region_set_font(Evas_List region, char *name, int size); +void etox_region_set_color(Evas_List region, int r, int g, int b, int a); +void etox_region_set_style(Evas_List region, char *stylename); /* * Obstacle manipulation functions =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/Etox_private.h,v retrieving revision 1.10.2.1 retrieving revision 1.10.2.2 diff -u -3 -r1.10.2.1 -r1.10.2.2 --- Etox_private.h 2 Apr 2002 11:41:37 -0000 1.10.2.1 +++ Etox_private.h 21 Apr 2002 06:27:24 -0000 1.10.2.2 @@ -28,7 +28,7 @@ /* * This is a pointer to a list of bits */ - Ewd_List *bits; + Evas_List bits; /* * The dimensions of this line. @@ -57,12 +57,12 @@ /* * This is the estyle that displays the bit. */ - Ewd_List *estyles; + Evas_List estyles; /* * Regions that reference this bit. */ - Ewd_List *regions; + Evas_List regions; }; #include "etox_line.h" =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox.c,v retrieving revision 1.24.2.3 retrieving revision 1.24.2.4 diff -u -3 -r1.24.2.3 -r1.24.2.4 --- etox.c 19 Apr 2002 21:26:17 -0000 1.24.2.3 +++ etox.c 21 Apr 2002 06:27:24 -0000 1.24.2.4 @@ -1,7 +1,8 @@ #include "etox-config.h" #include "Etox_private.h" -static Ewd_List *_etox_break_text(Etox * et, char *text); +static Evas_List _etox_break_text(Etox * et, char *text); +static void _etox_wrap_lines(Etox * et); static void _etox_layout(Etox * et, int y); /** @@ -79,7 +80,7 @@ * Returns a pointer to a newly allocated etox on success, NULL on failure. */ Etox *etox_new_all(Evas evas, int x, int y, int w, int h, int alpha, - Etox_Alignment align) + Etox_Alignment align) { Etox *et; @@ -111,14 +112,20 @@ void etox_free(Etox * et) { Etox_Obstacle *obst; + Evas_List l; CHECK_PARAM_POINTER("et", et); etox_clear(et); FREE(et->context->style); - while (et->obstacles && (obst = ewd_list_remove_last(et->obstacles))) + //FIXME could this be replaced by evas_list_free ? + for (l = et->obstacles; l; l = l->next) { + obst = l->data; + FREE(obst); + } + } /** @@ -130,23 +137,26 @@ void etox_show(Etox * et) { Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER("et", et); et->visible = TRUE; - ewd_list_goto_first(et->lines); - while ((line = ewd_list_next(et->lines))) { - printf("Etox showing line %d\n", ewd_list_index(et->lines)); - etox_line_show(line); + for (l = et->lines; l; l = l->next) { + if (l->data) { + line = l->data; + etox_line_show(line); + } } /* * Display and position the clip box with the correct size. */ evas_show(et->evas, et->clip); - evas_move(et->evas, et->clip, (double)(et->x), (double)(et->y)); - evas_resize(et->evas, et->clip, (double)(et->w), (double)(et->h)); + evas_move(et->evas, et->clip, (double) (et->x), (double) (et->y)); + evas_resize(et->evas, et->clip, (double) (et->w), + (double) (et->h)); } /** @@ -174,8 +184,10 @@ */ void etox_append_text(Etox * et, char *text) { - Ewd_List *lines; - Etox_Line *end, *start; + Evas_List lines, l, ll, lll, llll; + Etox_Line *end = NULL, *start; + int index; + int i, j; CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("text", text); @@ -185,33 +197,49 @@ * new text with the last line of the old text. */ lines = _etox_break_text(et, text); - start = ewd_list_remove_first(lines); - end = ewd_list_remove_last(et->lines); + for (l = et->lines; l; l = l->next) + end = l->data; + et->lines = evas_list_remove(et->lines, end); + + for (i = 0, ll = lines; ll; ll = ll->next, i++) { + if (i == 0) { + start = ll->data; - /* - * Need to adjust the height and length of the line to reflect the - * text that was added. - */ - et->length -= start->length; - et->h -= start->h; - etox_line_merge(start, end); - et->length += start->length; - et->h += start->h; + /* + * Need to adjust the height and length of the line to reflect the + * text that was added. + */ + et->length -= start->length; + et->h -= start->h; + etox_line_merge(start, end); + et->length += start->length; + et->h += start->h; + lines = evas_list_append(lines, start); + } else { + start = ll->data; - ewd_list_append(lines, start); + /* + * Now add the remaining lines to the end of the line list. + */ + if (start->w > et->w) + et->w = start->w; + + et->h += start->h; + et->length += start->length; + lines = evas_list_append(lines, start); + } + } /* - * Now add the remaining lines to the end of the line list. + * wrap the lines, but return the list to the original position */ - ewd_list_goto_first(et->lines); - while ((start = ewd_list_remove_first(lines))) { - if (start->w > et->w) - et->w = start->w; - - et->h += start->h; - et->length += start->length; - ewd_list_append(lines, start); - } + /* + * FIXME there has to be a more elegant way to do this + */ + for (index = 0, lll = et->lines; lll; lll = lll->next, index++); + _etox_wrap_lines(et); + for (j = 0, llll = et->lines; j <= index && llll; + llll = llll->next, j++); /* * Layout the lines on the etox starting at the newly added text. @@ -221,7 +249,7 @@ /* * Destroy the temporary list of lines now that it is empty. */ - ewd_list_destroy(lines); + evas_list_free(lines); } /** @@ -234,8 +262,9 @@ */ void etox_prepend_text(Etox * et, char *text) { - Ewd_List *lines; - Etox_Line *end, *start; + Evas_List lines, l, ll, lll; + Etox_Line *end = NULL, *start; + int i; CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("text", text); @@ -245,50 +274,58 @@ * new text with the last line of the old text. */ lines = _etox_break_text(et, text); - start = ewd_list_remove_first(et->lines); - end = ewd_list_remove_last(lines); + for (l = lines; l; l = l->next) + end = l->data; + lines = evas_list_remove(lines, end); + + for (i = 0, ll = et->lines; ll; ll = ll->next, i++) { + if (i == 0) { + start = ll->data; - /* - * Need to adjust the height and length of the line to reflect the - * text that was added. - */ - et->length -= end->length; - et->h -= end->h; - etox_line_merge(end, start); - et->length += end->length; - et->h += end->h; + } else { + start = ll->data; + /* + * Need to adjust the height and length of the line to reflect the + * text that was added. + */ + et->length -= end->length; + et->h -= end->h; + etox_line_merge(end, start); + et->length += end->length; + et->h += end->h; - ewd_list_append(lines, end); + et->lines = evas_list_append(lines, end); - /* - * Now add the remaining lines to the end of the line list. - */ - ewd_list_goto_first(et->lines); - while ((start = ewd_list_remove_first(et->lines))) { - if (start->w > et->w) - et->w = start->w; + /* + * Now add the remaining lines to the end of the line list. + */ + if (start->w > et->w) + et->w = start->w; - et->h += start->h; - et->length += start->length; - ewd_list_prepend(lines, start); + et->h += start->h; + et->length += start->length; + lines = evas_list_prepend(lines, start); + } } /* * Add the newly created lines to the end of the list of lines. */ - while ((start = ewd_list_remove_first(lines))) - ewd_list_append(et->lines, start); + for (lll = lines; lll; lll = lll->next) { + start = lll->data; + et->lines = evas_list_append(et->lines, start); + } /* * Layout the lines on the etox. */ - ewd_list_goto_first(et->lines); + _etox_wrap_lines(et); _etox_layout(et, et->y); /* * Destroy the temporary list of lines now that it is empty. */ - ewd_list_destroy(lines); + evas_list_free(lines); } /** @@ -316,6 +353,7 @@ void etox_set_text(Etox * et, char *text) { Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER("et", et); @@ -331,7 +369,7 @@ */ et->lines = _etox_break_text(et, text); - ewd_list_goto_first(et->lines); + _etox_wrap_lines(et); _etox_layout(et, et->y); /* @@ -339,10 +377,10 @@ */ et->h = 0; et->length = 0; - ewd_list_goto_first(et->lines); - while ((line = ewd_list_next(et->lines))) { + for (l = et->lines; l; l = l->next) { + line = l->data; /* - * Grab the largest line width for the width of the etox. + * Grab the largest line width for the width of the etox. */ if (line->w > et->w) et->w = line->w; @@ -364,6 +402,7 @@ { char *ret, *temp; Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER_RETURN("et", et, NULL); @@ -373,16 +412,16 @@ if (!et->lines) return NULL; - ret = (char *)malloc((et->length + 1) * sizeof(char)); + ret = (char *) malloc((et->length + 1) * sizeof(char)); memset(ret, 0, (et->length + 1) * sizeof(char)); temp = ret; - ewd_list_goto_first(et->lines); /* * Concatenate the text into the newly allocated buffer. */ - while ((line = ewd_list_next(et->lines))) { + for (l = et->lines; l; l = l->next) { + line = l->data; etox_line_get_text(line, temp); temp += line->length; } @@ -399,6 +438,7 @@ void etox_clear(Etox * et) { Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER("et", et); @@ -409,8 +449,10 @@ if (!et->lines) return; - while ((line = ewd_list_remove_last(et->lines))) + for (l = et->lines; l; l = l->next) { + line = l->data; etox_line_free(line); + } } /** @@ -425,6 +467,7 @@ { Estyle *bit; Etox_Line *line; + Evas_List l, ll; CHECK_PARAM_POINTER("et", et); @@ -436,16 +479,18 @@ /* * Set the layer for every line */ - ewd_list_goto_first(et->lines); - while ((line = ewd_list_next(et->lines))) { + for (l = et->lines; l; l = l->next) { + line = l->data; + if (line->bits) { /* * Set the layer for each bit in the line */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits))) + for (ll = line->bits; ll; ll = ll->next) { + bit = ll->data; estyle_set_layer(bit, layer); + } } } } @@ -457,7 +502,7 @@ * * Returns no value. Sets the alpha value of the etox @et to @alpha. */ -void etox_set_alpha(Etox *et, int alpha) +void etox_set_alpha(Etox * et, int alpha) { int r, g, b, a; @@ -493,7 +538,6 @@ * Layout lines if appropriate. */ if (et->lines) { - ewd_list_goto_first(et->lines); _etox_layout(et, et->y); } @@ -502,8 +546,9 @@ * do both a move and a resize in case the size has been adjusted * during layout. */ - evas_move(et->evas, et->clip, (double)(et->x), (double)(et->y)); - evas_resize(et->evas, et->clip, (double)(et->w), (double)(et->h)); + evas_move(et->evas, et->clip, (double) (et->x), (double) (et->y)); + evas_resize(et->evas, et->clip, (double) (et->w), + (double) (et->h)); } /** @@ -526,7 +571,6 @@ * Layout lines if appropriate. */ if (et->lines) { - ewd_list_goto_first(et->lines); _etox_layout(et, et->y); } @@ -535,8 +579,9 @@ * do both a move and a resize in case the size has been adjusted * during layout. */ - evas_move(et->evas, et->clip, (double)(et->x), (double)(et->y)); - evas_resize(et->evas, et->clip, (double)(et->w), (double)(et->h)); + evas_move(et->evas, et->clip, (double) (et->x), (double) (et->y)); + evas_resize(et->evas, et->clip, (double) (et->w), + (double) (et->h)); } /** @@ -579,41 +624,45 @@ * in @et into the integers pointed to by @x, @y, @w, and @h. */ void etox_index_to_geometry(Etox * et, int index, int *x, int *y, - int *w, int *h) + int *w, int *h) { int sum; - Estyle *bit; - Etox_Line *line; + Estyle *bit = NULL; + Etox_Line *line = NULL; + Evas_List l, ll, lll; CHECK_PARAM_POINTER("et", et); if (index > et->length) { sum = et->length; - line = ewd_list_goto_last(et->lines); + for (lll = et->lines; lll; lll = lll->next) + line = lll->data; *h = line->h; *w = line->w / line->length; *y = line->y; *x = line->x + line->w; - } - else { + } else { /* * Find the line that contains the character */ sum = 0; - ewd_list_goto_first(et->lines); - while ((line = (Etox_Line *)ewd_list_next(et->lines)) && - sum + line->length < index) + for (l = et->lines; l; l = l->next) { + line = l->data; + if (sum + line->length < index) + break; sum += line->length; - + } /* * Find the bit that contains the character */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits)) && - sum + estyle_length(bit) < index) + for (ll = line->bits; ll; ll = ll->next) { + bit = ll->data; + if (sum + estyle_length(bit) < index) + break; sum += estyle_length(bit); + } /* * No bit intersects, so set the geometry to the start of the @@ -635,7 +684,7 @@ } /** - * etox_get_coord_geometry - retrieve information about a letters geometry + * etox_coord_to_geometry - retrieve information about a letters geometry * @et: the etox to inquire the geometry * @x: a pointer to an int to store the x coordinate of the etox * @y: a pointer to an int to store the y coordinate of the etox @@ -646,12 +695,13 @@ * in @et into the integers pointed to by @x, @y, @w, and @h. */ int etox_coord_to_geometry(Etox * et, int xc, int yc, int *x, int *y, - int *w, int *h) + int *w, int *h) { int sum; Estyle *bit; - Etox_Line *line; + Etox_Line *line = NULL; int tx, ty, tw, th; + Evas_List l; CHECK_PARAM_POINTER_RETURN("et", et, 0); @@ -671,17 +721,20 @@ * Find the line that contains the character */ sum = 0; - line = ewd_list_goto_first(et->lines); - while ((line = (Etox_Line *)ewd_list_next(et->lines)) && - line->y + line->h < yc) { - sum += line->length; + + for (l = et->lines; l; l = l->next) { + line = l->data; + if (line->y + line->h < yc) + sum += line->length; + else + break; } /* * Bring the coordinate into the line if it falls outside, this may * happen with centered or right alignment. */ - bit = ewd_list_goto_first(line->bits); + bit = line->bits->data; estyle_geometry(bit, &tx, &ty, &tw, &th); if (xc < tx) xc = tx; @@ -691,8 +744,8 @@ * it's not above this line, which means the click happened above the * etox, and should be placed over the first character. */ - while ((bit = ewd_list_next(line->bits))) { - + for (l = line->bits; l; l = l->next) { + bit = l->data; estyle_geometry(bit, &tx, &ty, &tw, &th); if (xc >= tx && xc <= tx + tw) break; @@ -703,8 +756,8 @@ * Click occurred outside this line, return the end of line * character's index. */ - if (!bit) { - bit = ewd_list_goto_first(line->bits); + if (!l) { + bit = line->bits->data; /* * Estimate the average width and height of the line. @@ -719,8 +772,7 @@ estyle_geometry(bit, &tx, &ty, &tw, &th); *x = tx + line->w; *y = line->y; - } - else { + } else { /* * Now get the actual geometry from the bit @@ -766,12 +818,9 @@ CHECK_PARAM_POINTER_RETURN("et", et, NULL); - if (!et->obstacles) - et->obstacles = ewd_list_new(); - obst = etox_obstacle_new(et, x, y, w, h); - ewd_list_append(et->obstacles, obst); + evas_list_append(et->obstacles, obst); etox_obstacle_place(et, obst); @@ -791,8 +840,7 @@ CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("obstacle", obstacle); - ewd_list_goto(et->obstacles, obstacle); - ewd_list_remove(et->obstacles); + evas_list_remove(et->obstacles, obstacle); etox_obstacle_free(et, obstacle); } @@ -841,9 +889,9 @@ * Returns no value. Separates the text into lines and bits if specific * characters are contained in the text. */ -static Ewd_List *_etox_break_text(Etox * et, char *text) +static Evas_List _etox_break_text(Etox * et, char *text) { - Ewd_List *ret; + Evas_List ret = NULL; Estyle *bit; Etox_Line *line = NULL; char *walk = text; @@ -856,9 +904,8 @@ * Setup the list for adding lines that will be returned to the * calling function */ - ret = ewd_list_new(); line = etox_line_new(et->context->align); - ewd_list_append(ret, line); + ret = evas_list_append(ret, line); line->et = et; while (*walk) { @@ -876,10 +923,12 @@ /* * Make a bit for the preceding text */ - bit = estyle_new(et->evas , text, et->context->style); + bit = + estyle_new(et->evas, text, et->context->style); estyle_set_clip(bit, et->clip); - estyle_set_color(bit, et->context->r, et->context->g, - et->context->b, et->context->a); + estyle_set_color(bit, et->context->r, + et->context->g, et->context->b, + et->context->a); etox_line_append(line, bit); estyle_show(bit); @@ -891,9 +940,11 @@ * Make a bit for the tab character */ *text = '\0'; - bit = estyle_new(et->evas, walk, et->context->style); - estyle_set_color(bit, et->context->r, et->context->g, - et->context->b, et->context->a); + bit = + estyle_new(et->evas, walk, et->context->style); + estyle_set_color(bit, et->context->r, + et->context->g, et->context->b, + et->context->a); estyle_set_clip(bit, et->clip); etox_line_append(line, bit); estyle_show(bit); @@ -912,9 +963,11 @@ /* * Create a bit for the text preceding \n */ - bit = estyle_new(et->evas, text, et->context->style); - estyle_set_color(bit, et->context->r, et->context->g, - et->context->b, et->context->a); + bit = + estyle_new(et->evas, text, et->context->style); + estyle_set_color(bit, et->context->r, + et->context->g, et->context->b, + et->context->a); estyle_set_clip(bit, et->clip); etox_line_append(line, bit); estyle_show(bit); @@ -926,7 +979,7 @@ * Create a new line for the next text */ line = etox_line_new(line->flags); - ewd_list_append(ret, line); + ret = evas_list_append(ret, line); line->et = et; break; @@ -934,22 +987,96 @@ walk++; } + /* + * Add any remaining text after the last line break or tab. + */ if (*text) { bit = estyle_new(et->evas, text, et->context->style); estyle_set_color(bit, et->context->r, et->context->g, - et->context->b, et->context->a); + et->context->b, et->context->a); estyle_set_clip(bit, et->clip); etox_line_append(line, bit); estyle_show(bit); - } - else if (line->bits == NULL) { - etox_line_free(line); - ewd_list_remove_last(ret); + } else if (line->bits == NULL) { + evas_list_remove(ret, line); + etox_line_free(line); } return ret; } +static void _etox_wrap_lines(Etox * et) +{ + Etox_Line *line; + Etox_Line *newline; + Evas_List l, ll; + + CHECK_PARAM_POINTER("et", et); + + /* if soft flag is not set, don't do anything */ + if (!(et->context->align & ETOX_LINE_SOFT)) + return; + + /* go through all the lines */ + for (l = et->lines; l; l = l->next) { + Estyle *bit, *split; + int index; + + line = l->data; + if (line->w > et->w) { + for (ll = line->bits; ll; ll = ll->next) { + bit = ll->data; + index = + estyle_text_at_position(bit, + line->x + + et->w, line->y, + NULL, NULL, + NULL, NULL); + if (index >= 0) { + /* split the bit that is on the edge */ + split = estyle_split(bit, index); + + /* if split doesn't exist don't do the following */ + if (!split) + break; + + /* set up the split style and show it */ + estyle_set_clip(bit, et->clip); + estyle_set_color(split, + et->context->r, + et->context->g, + et->context->b, + et->context->a); + estyle_show(split); + + /* create the new line */ + newline = + etox_line_new(line->flags); + l = evas_list_prepend_relative(l, + newline, + l-> + next); + newline->et = et; + + /* add the 'split' bit do the new line */ + etox_line_append(newline, split); + + /* move all remaining bits from line to newline */ + for (ll = line->bits; ll; + ll = ll->next) { + bit = ll->data; + etox_line_append(newline, + bit); + ll = evas_list_remove(ll, + bit); + } + break; + } + } + } + } +} + /* * _etox_layout - deals with the actual laying out of lines within the etox * @et: the etox to be laid out @@ -962,6 +1089,7 @@ static void _etox_layout(Etox * et, int y) { Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER("et", et); @@ -969,7 +1097,8 @@ * Traverse the list displaying each line, moving down the screen after * each line. */ - while ((line = ewd_list_next(et->lines))) { + for (l = et->lines; l; l = l->next) { + line = l->data; line->x = et->x; line->y = y; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_context.c,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -3 -r1.1.2.2 -r1.1.2.3 --- etox_context.c 14 Apr 2002 23:13:29 -0000 1.1.2.2 +++ etox_context.c 21 Apr 2002 06:27:24 -0000 1.1.2.3 @@ -2,6 +2,25 @@ #include "Etox_private.h" /** + * etox_context_new - create a new context for loading values to an etox + * + * Returns a newly allocated and zeroed out Etox_Context on success, NULL on + * failure. + */ +Etox_Context *etox_context_new() +{ + Etox_Context *ret; + + ret = (Etox_Context *) malloc(sizeof(Etox_Context)); + if (!ret) + return NULL; + + memset(ret, 0, sizeof(Etox_Context)); + + return ret; +} + +/** * etox_context_save - save a copy of the current context for restoring later * @et: the etox to retrieve a copy of the current context * @@ -84,10 +103,10 @@ { CHECK_PARAM_POINTER("et", et); - *a = et->context->a; - *r = et->context->r; - *b = et->context->b; - *g = et->context->g; + *a = et->context->a; + *r = et->context->r; + *b = et->context->b; + *g = et->context->g; } /** @@ -124,7 +143,7 @@ CHECK_PARAM_POINTER("et", et); estyle_lookup_color_db(name, &et->context->r, &et->context->g, - &et->context->b, &et->context->a); + &et->context->b, &et->context->a); } /** @@ -243,29 +262,5 @@ { CHECK_PARAM_POINTER("et", et); - /* make sure we retain the soft wrap setting if it is set */ - if (et->context->align & ETOX_LINE_SOFT) - et->context->align = align | ETOX_LINE_SOFT; - else - et->context->align = align; -} - -/* - * etox_context_set_soft_wrap - turns on soft wrapping of lines that are - * longer than the etox is wide - * @et: the etox to set for - * @boolean: 0 is off, anything else is on - * - * Returns no value. changes current context alignment value. - */ -void etox_context_set_soft_wrap(Etox *et, int boolean) -{ - CHECK_PARAM_POINTER("et", et); - - if (boolean) - et->context->align = et->context->align | ETOX_LINE_SOFT; - else - { - et->context->align = et->context->align & ~ETOX_LINE_SOFT; - } + et->context->align = align; } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_line.c,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -3 -r1.1.2.2 -r1.1.2.3 --- etox_line.c 19 Apr 2002 18:29:35 -0000 1.1.2.2 +++ etox_line.c 21 Apr 2002 06:27:24 -0000 1.1.2.3 @@ -32,6 +32,7 @@ void etox_line_free(Etox_Line * line) { Estyle *bit; + Evas_List l; CHECK_PARAM_POINTER("line", line); @@ -43,13 +44,15 @@ /* * Free all of the bits on the line. */ - while ((bit = ewd_list_remove_last(line->bits))) + for (l = line->bits; l; l = l->next) { + bit = l->data; estyle_free(bit); + } /* * Clean up the remaining list */ - ewd_list_destroy(line->bits); + evas_list_free(line->bits); } FREE(line); @@ -64,15 +67,17 @@ void etox_line_show(Etox_Line * line) { Estyle *bit; + Evas_List l; CHECK_PARAM_POINTER("line", line); /* * Display all of the bits in the line. */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits))) + for (l = line->bits; l; l = l->next) { + bit = l->data; estyle_show(bit); + } } @@ -85,15 +90,17 @@ void etox_line_hide(Etox_Line * line) { Estyle *bit; + Evas_List l; CHECK_PARAM_POINTER("line", line); /* * Hide all the bits in this line */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits))) + for (l = line->bits; l; l = l->next) { + bit = l->data; estyle_hide(bit); + } } @@ -113,15 +120,9 @@ CHECK_PARAM_POINTER("bit", bit); /* - * Create the list for the bits if none is present - */ - if (!line->bits) - line->bits = ewd_list_new(); - - /* * Append the text and update necessary fields */ - ewd_list_append(line->bits, bit); + line->bits = evas_list_append(line->bits, bit); estyle_geometry(bit, &x, &y, &w, &h); line->w += w; @@ -146,15 +147,9 @@ CHECK_PARAM_POINTER("bit", bit); /* - * Create the list for the bits if none is present - */ - if (!line->bits) - line->bits = ewd_list_new(); - - /* * Prepend the text and update necessary fields */ - ewd_list_prepend(line->bits, bit); + line->bits = evas_list_prepend(line->bits, bit); estyle_geometry(bit, &x, &y, &w, &h); line->w += w; @@ -174,8 +169,7 @@ CHECK_PARAM_POINTER("line", line); CHECK_PARAM_POINTER("bit", bit); - ewd_list_goto(line->bits, bit); - ewd_list_remove(line->bits); + line->bits = evas_list_remove(line->bits, bit); line->length -= estyle_length(bit); etox_line_minimize(line); } @@ -192,14 +186,13 @@ int x; Estyle *bit; int tx, ty, tw, th; + Evas_List l; CHECK_PARAM_POINTER("line", line); if (!line->bits) return; - ewd_list_goto_first(line->bits); - /* * Determine the horizontal alignment of the text and set the starting * x coordinate appropriately. @@ -216,7 +209,8 @@ * Determine the veritcal alignment and perform the layout of the * bits. */ - while ((bit = ewd_list_next(line->bits))) { + for (l = line->bits; l; l = l->next) { + bit = l->data; if (!estyle_fixed(bit)) { estyle_geometry(bit, &tx, &ty, &tw, &th); @@ -252,21 +246,22 @@ void etox_line_minimize(Etox_Line * line) { Estyle *bit, *last_bit = NULL; + Evas_List l; CHECK_PARAM_POINTER("line", line); - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_current(line->bits))) { + l = line->bits; + while ((bit = l->data)) { /* * Attempt to merge the bits if possible, remove the second * one if successful. */ if (estyle_merge(last_bit, bit)) - ewd_list_remove(line->bits); + evas_list_remove(l, bit); else { - ewd_list_next(line->bits); last_bit = bit; + l = l->next; } } } @@ -281,6 +276,7 @@ void etox_line_merge(Etox_Line * line1, Etox_Line * line2) { Estyle *bit; + Evas_List l; CHECK_PARAM_POINTER("line1", line1); CHECK_PARAM_POINTER("line2", line2); @@ -288,9 +284,11 @@ /* * Move the bits from line2 to line1. */ - while ((bit = ewd_list_remove_first(line2->bits))) - etox_line_append(line1, bit); - + for (l = line2->bits; l; l = l->next) { + bit = l->data; + line2->bits = evas_list_remove(line2->bits, bit); + line1->bits = evas_list_append(line1->bits, bit); + } /* * Adjust the height and length of the merged line. */ @@ -312,22 +310,22 @@ * Returns no value. Saves the text from the line @line into the char buffer * @buf. */ -void etox_line_get_text(Etox_Line *line, char *buf) +void etox_line_get_text(Etox_Line * line, char *buf) { char *temp; Estyle *es; + Evas_List l; CHECK_PARAM_POINTER("line", line); CHECK_PARAM_POINTER("buf", buf); - ewd_list_goto_first(line->bits); - /* * Examine each bit on the list of bits and cat it's text onto the end * of the buffer. Then append a \n to the buffer at the end of the * line. */ - while ((es = ewd_list_next(line->bits))) { + for (l = line->bits; l; l = l->next) { + es = l->data; temp = estyle_get_text(es); strcat(buf, temp); } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_line.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -3 -r1.1.2.1 -r1.1.2.2 --- etox_line.h 2 Apr 2002 12:03:22 -0000 1.1.2.1 +++ etox_line.h 21 Apr 2002 06:27:24 -0000 1.1.2.2 @@ -11,6 +11,6 @@ void etox_line_remove(Etox_Line * line, Estyle * bit); void etox_line_merge(Etox_Line * line1, Etox_Line * line2); void etox_line_minimize(Etox_Line * line); -void etox_line_get_text(Etox_Line *line, char *buf); +void etox_line_get_text(Etox_Line * line, char *buf); #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_obstacle.c,v retrieving revision 1.7.2.1 retrieving revision 1.7.2.2 diff -u -3 -r1.7.2.1 -r1.7.2.2 --- etox_obstacle.c 2 Apr 2002 11:41:37 -0000 1.7.2.1 +++ etox_obstacle.c 21 Apr 2002 06:27:24 -0000 1.7.2.2 @@ -1,6 +1,7 @@ #include "Etox_private.h" -static void _etox_obstacle_line_insert(Etox_Line * line, Etox_Obstacle * obst); +static void _etox_obstacle_line_insert(Etox_Line * line, + Etox_Obstacle * obst); /* * etox_obstacle_new - create a new obstacle with given dimensions @@ -33,7 +34,7 @@ /* * etox_obstacle_free - remove an obstacle and free it */ -void etox_obstacle_free(Etox *et, Etox_Obstacle * obstacle) +void etox_obstacle_free(Etox * et, Etox_Obstacle * obstacle) { CHECK_PARAM_POINTER("obstacle", obstacle); @@ -52,8 +53,10 @@ void etox_obstacle_place(Etox * et, Etox_Obstacle * obst) { int i = 0; + int j = 0; int x, y, w, h; Etox_Line *line; + Evas_List l_nodes, l; CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("obst", obst); @@ -79,26 +82,28 @@ * We know the obstacle intersects this etox, so now determine * starting and ending lines, as well as split lines appropriately. */ - obst->start_line = ewd_list_nodes(et->lines); + for (l_nodes = et->lines; l_nodes; l_nodes = l_nodes->next) + j++; + obst->start_line = j; obst->end_line = -1; /* * Run through to determine the lines to determine which intersect the * obstacle */ - ewd_list_goto_first(et->lines); - while ((line = (Etox_Line *) ewd_list_next(et->lines)) && - line->y < y + h) { - - if (line->y > y) { - - /* - * Check if the obstacle starts at this line - */ - if (i < obst->start_line) - obst->start_line = i; - _etox_obstacle_line_insert(line, obst); - } + for (l = et->lines; l; l = l->next) { + line = l->data; + if (line->y < y + h) { + if (line->y > y) { + /* + * Check if the obstacle starts at this line + */ + if (i < obst->start_line) + obst->start_line = i; + _etox_obstacle_line_insert(line, obst); + } + } else + break; /* * Check if the obstacle starts at this line @@ -114,9 +119,10 @@ */ void etox_obstacle_unplace(Etox * et, Etox_Obstacle * obst) { - int i; + int i, j; Estyle *bit; Etox_Line *line; + Evas_List l, ll; CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("obst", obst); @@ -125,34 +131,40 @@ * Only adjust the lines that intersect the obstacle. */ i = obst->start_line; - ewd_list_goto_index(et->lines, i); /* * On each line within the obstacle bounds, remove the obstacle from * the list of bits. */ - while (i <= obst->end_line) { - line = ewd_list_current(et->lines); - - ewd_list_goto_first(line->bits); - - /* - * Now find the obstacle on the list of bits and remove it. - */ - while ((bit = ewd_list_current(line->bits)) && bit != obst->bit) - ewd_list_next(line->bits); - if (bit) - ewd_list_remove(line->bits); + for (j = 1, l = et->lines; j <= obst->end_line && l; + l = l->next, j++) { + if (j < i); + else { + line = l->data; + /* + * Now find the obstacle on the list of bits and remove it. + */ + for (ll = line->bits; ll; ll = ll->next) { + bit = ll->data; + if (bit != obst->bit); + else { + ll = evas_list_remove(ll, bit); + break; + } + } + } } } /* * etox_obstacle_line_insert - place an obstacle within a line */ -static void _etox_obstacle_line_insert(Etox_Line * line, Etox_Obstacle * obst) +static void _etox_obstacle_line_insert(Etox_Line * line, + Etox_Obstacle * obst) { Estyle *bit; int x, y, w, h; + Evas_List l; CHECK_PARAM_POINTER("line", line); CHECK_PARAM_POINTER("obst", obst); @@ -162,30 +174,30 @@ /* * Find the position to place the obstacle within the line */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits))) { + for (l = line->bits; l; l = l->next) { int tx, ty, tw, th; + bit = l->data; estyle_geometry(bit, &tx, &ty, &tw, &th); - if (etox_rect_intersect(x, y, w, h, tx, ty, tw, th)) + if (etox_rect_intersect(x, y, w, h, tx, ty, tw, th)) { + if (!bit) + return; + /* + * FIXME: We need to do some bit-splitting here, just need to get + * around to it. + */ + l = evas_list_prepend_relative(l, obst->bit, + l->next); break; + } } - - if (!bit) - return; - - /* - * FIXME: We need to do some bit-splitting here, just need to get - * around to it. - */ - ewd_list_insert(line->bits, obst->bit); } /* * etox_rect_intersect - check for intersection on two rectangles */ inline int etox_rect_intersect(int x1, int y1, int w1, int h1, - int x2, int y2, int w2, int h2) + int x2, int y2, int w2, int h2) { if (x1 > x2 + w2) return FALSE; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_obstacle.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -3 -r1.1.2.1 -r1.1.2.2 --- etox_obstacle.h 2 Apr 2002 12:03:22 -0000 1.1.2.1 +++ etox_obstacle.h 21 Apr 2002 06:27:24 -0000 1.1.2.2 @@ -2,10 +2,10 @@ #define _ETOX_OBSTACLE_H Etox_Obstacle *etox_obstacle_new(Etox * line, int x, int y, int w, int h); -void etox_obstacle_free(Etox *et, Etox_Obstacle * obstacle); +void etox_obstacle_free(Etox * et, Etox_Obstacle * obstacle); void etox_obstacle_place(Etox * et, Etox_Obstacle * obst); void etox_obstacle_unplace(Etox * et, Etox_Obstacle * obst); inline int etox_rect_intersect(int x1, int y1, int w1, int h1, - int x2, int y2, int w2, int h2); + int x2, int y2, int w2, int h2); #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_selection.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -3 -r1.1.2.1 -r1.1.2.2 --- etox_selection.h 2 Apr 2002 12:03:22 -0000 1.1.2.1 +++ etox_selection.h 21 Apr 2002 06:27:24 -0000 1.1.2.2 @@ -4,34 +4,38 @@ /* * These functions select regions of the etox. */ -Etox_Selection *etox_select_coords(Etox *et, int sx, int sy, int ex, int ey); -Etox_Selection *etox_select_index(Etox *et, int si, int ei); -Etox_Selection *etox_select_str(Etox *et, char *match, char **last); +Etox_Selection *etox_select_coords(Etox * et, int sx, int sy, int ex, + int ey); +Etox_Selection *etox_select_index(Etox * et, int si, int ei); +Etox_Selection *etox_select_str(Etox * et, char *match, char **last); /* * Release a selection that is no longer needed. */ -void etox_selection_free(Etox_Selection *selected); +void etox_selection_free(Etox_Selection * selected); /* * This function gets a rectangular bound on the selection. */ -void etox_selection_bounds(Etox_Selection *selected, int *x, int *y, - int *w, int *h); +void etox_selection_bounds(Etox_Selection * selected, int *x, int *y, + int *w, int *h); /* * These methods alter the appearance of the selected region. */ -void etox_selection_set_font(Etox_Selection *selected, char *font, int size); -void etox_selection_set_style(Etox_Selection *selected, char *style); +void etox_selection_set_font(Etox_Selection * selected, char *font, + int size); +void etox_selection_set_style(Etox_Selection * selected, char *style); /* * These functions manipulate callbacks on the selected region. */ -void etox_selection_add_callback(Etox_Selection *selected, - Evas_Callback_Type callback, void (*func) (void *data, Evas e, - Evas_Object o, int b, int x, int y), void *data); -void etox_selection_del_callback(Etox_Selection *selected, - Evas_Callback_Type callback); +void etox_selection_add_callback(Etox_Selection * selected, + Evas_Callback_Type callback, + void (*func) (void *data, Evas e, + Evas_Object o, int b, int x, + int y), void *data); +void etox_selection_del_callback(Etox_Selection * selected, + Evas_Callback_Type callback); #endif |
From: <enl...@li...> - 2002-04-25 16:32:03
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Modified Files: Etox.h Etox_private.h etox.c etox_context.c etox_line.c etox_line.h etox_obstacle.c etox_obstacle.h etox_selection.h Log Message: Sync of the changes to SPLIT. This now almost elminates the Ewd dependancy from text handling. The only thing remaining is the use of the hash table in Estyle. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/Etox.h,v retrieving revision 1.27 retrieving revision 1.28 diff -u -3 -r1.27 -r1.28 --- Etox.h 19 Apr 2002 22:06:31 -0000 1.27 +++ Etox.h 25 Apr 2002 16:32:00 -0000 1.28 @@ -1,7 +1,6 @@ #ifndef _ETOX_H #define _ETOX_H -#include <Ewd.h> #include <Edb.h> #include <Evas.h> #include <Estyle.h> @@ -54,7 +53,6 @@ struct _etox_style_info { char *name; E_DB_File *style_db; - Ewd_Sheap *layers; int references; }; @@ -138,12 +136,12 @@ /* * List of lines in the etox */ - Ewd_List *lines; + Evas_List lines; /* * List of obstacles in the etox */ - Ewd_List *obstacles; + Evas_List obstacles; /* * Determine if the etox has been displayed yet. @@ -173,7 +171,6 @@ /* * Context management functions */ -Etox_Context *etox_context_new(); Etox_Context *etox_context_save(Etox * et); void etox_context_load(Etox * et, Etox_Context * context); void etox_context_free(Etox_Context * context); @@ -211,6 +208,7 @@ */ int etox_context_get_align(Etox * et); void etox_context_set_align(Etox * et, int align); +void etox_context_set_soft_wrap(Etox * et, int boolean); /* * Text manipulation functions @@ -234,9 +232,9 @@ void etox_get_geometry(Etox * et, int *x, int *y, int *w, int *h); int etox_coord_to_index(Etox * et, int x, int y); void etox_index_to_geometry(Etox * et, int index, int *x, int *y, - int *w, int *h); + int *w, int *h); int etox_coord_to_geometry(Etox * et, int xc, int yc, int *x, int *y, - int *w, int *h); + int *w, int *h); /* * Appearance altering functions @@ -248,16 +246,16 @@ /* * Region selection and release */ -Ewd_List *etox_region_select(Etox * et, int start, int end); -Ewd_List *etox_region_select_str(Etox * et, char *search, char *last); -void etox_region_release(Ewd_List * region); +Evas_List etox_region_select(Etox * et, int start, int end); +Evas_List etox_region_select_str(Etox * et, char *search, char *last); +void etox_region_release(Evas_List region); /* * Region altering appearance modifiers */ -void etox_region_set_font(Ewd_List * region, char *name, int size); -void etox_region_set_color(Ewd_List * region, int r, int g, int b, int a); -void etox_region_set_style(Ewd_List * region, char *stylename); +void etox_region_set_font(Evas_List region, char *name, int size); +void etox_region_set_color(Evas_List region, int r, int g, int b, int a); +void etox_region_set_style(Evas_List region, char *stylename); /* * Obstacle manipulation functions =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/Etox_private.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- Etox_private.h 2 Apr 2002 02:50:09 -0000 1.11 +++ Etox_private.h 25 Apr 2002 16:32:00 -0000 1.12 @@ -28,7 +28,7 @@ /* * This is a pointer to a list of bits */ - Ewd_List *bits; + Evas_List bits; /* * The dimensions of this line. @@ -57,12 +57,12 @@ /* * This is the estyle that displays the bit. */ - Ewd_List *estyles; + Evas_List estyles; /* * Regions that reference this bit. */ - Ewd_List *regions; + Evas_List regions; }; #include "etox_line.h" =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -3 -r1.27 -r1.28 --- etox.c 19 Apr 2002 22:06:31 -0000 1.27 +++ etox.c 25 Apr 2002 16:32:00 -0000 1.28 @@ -1,7 +1,8 @@ #include "etox-config.h" #include "Etox_private.h" -static Ewd_List *_etox_break_text(Etox * et, char *text); +static Evas_List _etox_break_text(Etox * et, char *text); +static void _etox_wrap_lines(Etox * et); static void _etox_layout(Etox * et, int y); /** @@ -25,9 +26,10 @@ et->evas = evas; /* - * Allocate the default context + * Allocate space for the default context */ - et->context = etox_context_new(); + et->context = (Etox_Context *) malloc(sizeof(Etox_Context)); + memset(et->context, 0, sizeof(Etox_Context)); /* * Setup the default color @@ -78,7 +80,7 @@ * Returns a pointer to a newly allocated etox on success, NULL on failure. */ Etox *etox_new_all(Evas evas, int x, int y, int w, int h, int alpha, - Etox_Alignment align) + Etox_Alignment align) { Etox *et; @@ -110,16 +112,20 @@ void etox_free(Etox * et) { Etox_Obstacle *obst; + Evas_List l; CHECK_PARAM_POINTER("et", et); etox_clear(et); FREE(et->context->style); - while (et->obstacles && (obst = ewd_list_remove_last(et->obstacles))) + //FIXME could this be replaced by evas_list_free ? + for (l = et->obstacles; l; l = l->next) { + obst = l->data; + FREE(obst); + } - FREE(et->context); } /** @@ -131,23 +137,26 @@ void etox_show(Etox * et) { Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER("et", et); et->visible = TRUE; - ewd_list_goto_first(et->lines); - while ((line = ewd_list_next(et->lines))) { - printf("Etox showing line %d\n", ewd_list_index(et->lines)); - etox_line_show(line); + for (l = et->lines; l; l = l->next) { + if (l->data) { + line = l->data; + etox_line_show(line); + } } /* * Display and position the clip box with the correct size. */ evas_show(et->evas, et->clip); - evas_move(et->evas, et->clip, (double)(et->x), (double)(et->y)); - evas_resize(et->evas, et->clip, (double)(et->w), (double)(et->h)); + evas_move(et->evas, et->clip, (double) (et->x), (double) (et->y)); + evas_resize(et->evas, et->clip, (double) (et->w), + (double) (et->h)); } /** @@ -175,8 +184,10 @@ */ void etox_append_text(Etox * et, char *text) { - Ewd_List *lines; - Etox_Line *end, *start; + Evas_List lines, l, ll, lll, llll; + Etox_Line *end = NULL, *start; + int index; + int i, j; CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("text", text); @@ -186,33 +197,49 @@ * new text with the last line of the old text. */ lines = _etox_break_text(et, text); - start = ewd_list_remove_first(lines); - end = ewd_list_remove_last(et->lines); + for (l = et->lines; l; l = l->next) + end = l->data; + et->lines = evas_list_remove(et->lines, end); + + for (i = 0, ll = lines; ll; ll = ll->next, i++) { + if (i == 0) { + start = ll->data; - /* - * Need to adjust the height and length of the line to reflect the - * text that was added. - */ - et->length -= start->length; - et->h -= start->h; - etox_line_merge(start, end); - et->length += start->length; - et->h += start->h; + /* + * Need to adjust the height and length of the line to reflect the + * text that was added. + */ + et->length -= start->length; + et->h -= start->h; + etox_line_merge(start, end); + et->length += start->length; + et->h += start->h; + lines = evas_list_append(lines, start); + } else { + start = ll->data; - ewd_list_append(lines, start); + /* + * Now add the remaining lines to the end of the line list. + */ + if (start->w > et->w) + et->w = start->w; + + et->h += start->h; + et->length += start->length; + lines = evas_list_append(lines, start); + } + } /* - * Now add the remaining lines to the end of the line list. + * wrap the lines, but return the list to the original position */ - ewd_list_goto_first(et->lines); - while ((start = ewd_list_remove_first(lines))) { - if (start->w > et->w) - et->w = start->w; - - et->h += start->h; - et->length += start->length; - ewd_list_append(lines, start); - } + /* + * FIXME there has to be a more elegant way to do this + */ + for (index = 0, lll = et->lines; lll; lll = lll->next, index++); + _etox_wrap_lines(et); + for (j = 0, llll = et->lines; j <= index && llll; + llll = llll->next, j++); /* * Layout the lines on the etox starting at the newly added text. @@ -222,7 +249,7 @@ /* * Destroy the temporary list of lines now that it is empty. */ - ewd_list_destroy(lines); + evas_list_free(lines); } /** @@ -235,8 +262,9 @@ */ void etox_prepend_text(Etox * et, char *text) { - Ewd_List *lines; - Etox_Line *end, *start; + Evas_List lines, l, ll, lll; + Etox_Line *end = NULL, *start; + int i; CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("text", text); @@ -246,50 +274,58 @@ * new text with the last line of the old text. */ lines = _etox_break_text(et, text); - start = ewd_list_remove_first(et->lines); - end = ewd_list_remove_last(lines); + for (l = lines; l; l = l->next) + end = l->data; + lines = evas_list_remove(lines, end); + + for (i = 0, ll = et->lines; ll; ll = ll->next, i++) { + if (i == 0) { + start = ll->data; - /* - * Need to adjust the height and length of the line to reflect the - * text that was added. - */ - et->length -= end->length; - et->h -= end->h; - etox_line_merge(end, start); - et->length += end->length; - et->h += end->h; + } else { + start = ll->data; + /* + * Need to adjust the height and length of the line to reflect the + * text that was added. + */ + et->length -= end->length; + et->h -= end->h; + etox_line_merge(end, start); + et->length += end->length; + et->h += end->h; - ewd_list_append(lines, end); + et->lines = evas_list_append(lines, end); - /* - * Now add the remaining lines to the end of the line list. - */ - ewd_list_goto_first(et->lines); - while ((start = ewd_list_remove_first(et->lines))) { - if (start->w > et->w) - et->w = start->w; + /* + * Now add the remaining lines to the end of the line list. + */ + if (start->w > et->w) + et->w = start->w; - et->h += start->h; - et->length += start->length; - ewd_list_prepend(lines, start); + et->h += start->h; + et->length += start->length; + lines = evas_list_prepend(lines, start); + } } /* * Add the newly created lines to the end of the list of lines. */ - while ((start = ewd_list_remove_first(lines))) - ewd_list_append(et->lines, start); + for (lll = lines; lll; lll = lll->next) { + start = lll->data; + et->lines = evas_list_append(et->lines, start); + } /* * Layout the lines on the etox. */ - ewd_list_goto_first(et->lines); + _etox_wrap_lines(et); _etox_layout(et, et->y); /* * Destroy the temporary list of lines now that it is empty. */ - ewd_list_destroy(lines); + evas_list_free(lines); } /** @@ -317,6 +353,7 @@ void etox_set_text(Etox * et, char *text) { Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER("et", et); @@ -332,7 +369,7 @@ */ et->lines = _etox_break_text(et, text); - ewd_list_goto_first(et->lines); + _etox_wrap_lines(et); _etox_layout(et, et->y); /* @@ -340,10 +377,10 @@ */ et->h = 0; et->length = 0; - ewd_list_goto_first(et->lines); - while ((line = ewd_list_next(et->lines))) { + for (l = et->lines; l; l = l->next) { + line = l->data; /* - * Grab the largest line width for the width of the etox. + * Grab the largest line width for the width of the etox. */ if (line->w > et->w) et->w = line->w; @@ -365,6 +402,7 @@ { char *ret, *temp; Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER_RETURN("et", et, NULL); @@ -374,16 +412,16 @@ if (!et->lines) return NULL; - ret = (char *)malloc((et->length + 1) * sizeof(char)); + ret = (char *) malloc((et->length + 1) * sizeof(char)); memset(ret, 0, (et->length + 1) * sizeof(char)); temp = ret; - ewd_list_goto_first(et->lines); /* * Concatenate the text into the newly allocated buffer. */ - while ((line = ewd_list_next(et->lines))) { + for (l = et->lines; l; l = l->next) { + line = l->data; etox_line_get_text(line, temp); temp += line->length; } @@ -400,6 +438,7 @@ void etox_clear(Etox * et) { Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER("et", et); @@ -410,8 +449,10 @@ if (!et->lines) return; - while ((line = ewd_list_remove_last(et->lines))) + for (l = et->lines; l; l = l->next) { + line = l->data; etox_line_free(line); + } } /** @@ -426,6 +467,7 @@ { Estyle *bit; Etox_Line *line; + Evas_List l, ll; CHECK_PARAM_POINTER("et", et); @@ -437,16 +479,18 @@ /* * Set the layer for every line */ - ewd_list_goto_first(et->lines); - while ((line = ewd_list_next(et->lines))) { + for (l = et->lines; l; l = l->next) { + line = l->data; + if (line->bits) { /* * Set the layer for each bit in the line */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits))) + for (ll = line->bits; ll; ll = ll->next) { + bit = ll->data; estyle_set_layer(bit, layer); + } } } } @@ -458,7 +502,7 @@ * * Returns no value. Sets the alpha value of the etox @et to @alpha. */ -void etox_set_alpha(Etox *et, int alpha) +void etox_set_alpha(Etox * et, int alpha) { int r, g, b, a; @@ -494,7 +538,6 @@ * Layout lines if appropriate. */ if (et->lines) { - ewd_list_goto_first(et->lines); _etox_layout(et, et->y); } @@ -503,8 +546,9 @@ * do both a move and a resize in case the size has been adjusted * during layout. */ - evas_move(et->evas, et->clip, (double)(et->x), (double)(et->y)); - evas_resize(et->evas, et->clip, (double)(et->w), (double)(et->h)); + evas_move(et->evas, et->clip, (double) (et->x), (double) (et->y)); + evas_resize(et->evas, et->clip, (double) (et->w), + (double) (et->h)); } /** @@ -527,7 +571,6 @@ * Layout lines if appropriate. */ if (et->lines) { - ewd_list_goto_first(et->lines); _etox_layout(et, et->y); } @@ -536,8 +579,9 @@ * do both a move and a resize in case the size has been adjusted * during layout. */ - evas_move(et->evas, et->clip, (double)(et->x), (double)(et->y)); - evas_resize(et->evas, et->clip, (double)(et->w), (double)(et->h)); + evas_move(et->evas, et->clip, (double) (et->x), (double) (et->y)); + evas_resize(et->evas, et->clip, (double) (et->w), + (double) (et->h)); } /** @@ -580,41 +624,45 @@ * in @et into the integers pointed to by @x, @y, @w, and @h. */ void etox_index_to_geometry(Etox * et, int index, int *x, int *y, - int *w, int *h) + int *w, int *h) { int sum; - Estyle *bit; - Etox_Line *line; + Estyle *bit = NULL; + Etox_Line *line = NULL; + Evas_List l, ll, lll; CHECK_PARAM_POINTER("et", et); if (index > et->length) { sum = et->length; - line = ewd_list_goto_last(et->lines); + for (lll = et->lines; lll; lll = lll->next) + line = lll->data; *h = line->h; *w = line->w / line->length; *y = line->y; *x = line->x + line->w; - } - else { + } else { /* * Find the line that contains the character */ sum = 0; - ewd_list_goto_first(et->lines); - while ((line = (Etox_Line *)ewd_list_next(et->lines)) && - sum + line->length < index) + for (l = et->lines; l; l = l->next) { + line = l->data; + if (sum + line->length < index) + break; sum += line->length; - + } /* * Find the bit that contains the character */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits)) && - sum + estyle_length(bit) < index) + for (ll = line->bits; ll; ll = ll->next) { + bit = ll->data; + if (sum + estyle_length(bit) < index) + break; sum += estyle_length(bit); + } /* * No bit intersects, so set the geometry to the start of the @@ -636,7 +684,7 @@ } /** - * etox_get_coord_geometry - retrieve information about a letters geometry + * etox_coord_to_geometry - retrieve information about a letters geometry * @et: the etox to inquire the geometry * @x: a pointer to an int to store the x coordinate of the etox * @y: a pointer to an int to store the y coordinate of the etox @@ -647,12 +695,13 @@ * in @et into the integers pointed to by @x, @y, @w, and @h. */ int etox_coord_to_geometry(Etox * et, int xc, int yc, int *x, int *y, - int *w, int *h) + int *w, int *h) { int sum; Estyle *bit; - Etox_Line *line; + Etox_Line *line = NULL; int tx, ty, tw, th; + Evas_List l; CHECK_PARAM_POINTER_RETURN("et", et, 0); @@ -672,17 +721,20 @@ * Find the line that contains the character */ sum = 0; - line = ewd_list_goto_first(et->lines); - while ((line = (Etox_Line *)ewd_list_next(et->lines)) && - line->y + line->h < yc) { - sum += line->length; + + for (l = et->lines; l; l = l->next) { + line = l->data; + if (line->y + line->h < yc) + sum += line->length; + else + break; } /* * Bring the coordinate into the line if it falls outside, this may * happen with centered or right alignment. */ - bit = ewd_list_goto_first(line->bits); + bit = line->bits->data; estyle_geometry(bit, &tx, &ty, &tw, &th); if (xc < tx) xc = tx; @@ -692,8 +744,8 @@ * it's not above this line, which means the click happened above the * etox, and should be placed over the first character. */ - while ((bit = ewd_list_next(line->bits))) { - + for (l = line->bits; l; l = l->next) { + bit = l->data; estyle_geometry(bit, &tx, &ty, &tw, &th); if (xc >= tx && xc <= tx + tw) break; @@ -704,8 +756,8 @@ * Click occurred outside this line, return the end of line * character's index. */ - if (!bit) { - bit = ewd_list_goto_first(line->bits); + if (!l) { + bit = line->bits->data; /* * Estimate the average width and height of the line. @@ -720,8 +772,7 @@ estyle_geometry(bit, &tx, &ty, &tw, &th); *x = tx + line->w; *y = line->y; - } - else { + } else { /* * Now get the actual geometry from the bit @@ -767,12 +818,9 @@ CHECK_PARAM_POINTER_RETURN("et", et, NULL); - if (!et->obstacles) - et->obstacles = ewd_list_new(); - obst = etox_obstacle_new(et, x, y, w, h); - ewd_list_append(et->obstacles, obst); + evas_list_append(et->obstacles, obst); etox_obstacle_place(et, obst); @@ -792,8 +840,7 @@ CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("obstacle", obstacle); - ewd_list_goto(et->obstacles, obstacle); - ewd_list_remove(et->obstacles); + evas_list_remove(et->obstacles, obstacle); etox_obstacle_free(et, obstacle); } @@ -842,9 +889,9 @@ * Returns no value. Separates the text into lines and bits if specific * characters are contained in the text. */ -static Ewd_List *_etox_break_text(Etox * et, char *text) +static Evas_List _etox_break_text(Etox * et, char *text) { - Ewd_List *ret; + Evas_List ret = NULL; Estyle *bit; Etox_Line *line = NULL; char *walk = text; @@ -857,9 +904,8 @@ * Setup the list for adding lines that will be returned to the * calling function */ - ret = ewd_list_new(); line = etox_line_new(et->context->align); - ewd_list_append(ret, line); + ret = evas_list_append(ret, line); line->et = et; while (*walk) { @@ -877,10 +923,12 @@ /* * Make a bit for the preceding text */ - bit = estyle_new(et->evas , text, et->context->style); + bit = + estyle_new(et->evas, text, et->context->style); estyle_set_clip(bit, et->clip); - estyle_set_color(bit, et->context->r, et->context->g, - et->context->b, et->context->a); + estyle_set_color(bit, et->context->r, + et->context->g, et->context->b, + et->context->a); etox_line_append(line, bit); estyle_show(bit); @@ -892,9 +940,11 @@ * Make a bit for the tab character */ *text = '\0'; - bit = estyle_new(et->evas, walk, et->context->style); - estyle_set_color(bit, et->context->r, et->context->g, - et->context->b, et->context->a); + bit = + estyle_new(et->evas, walk, et->context->style); + estyle_set_color(bit, et->context->r, + et->context->g, et->context->b, + et->context->a); estyle_set_clip(bit, et->clip); etox_line_append(line, bit); estyle_show(bit); @@ -913,9 +963,11 @@ /* * Create a bit for the text preceding \n */ - bit = estyle_new(et->evas, text, et->context->style); - estyle_set_color(bit, et->context->r, et->context->g, - et->context->b, et->context->a); + bit = + estyle_new(et->evas, text, et->context->style); + estyle_set_color(bit, et->context->r, + et->context->g, et->context->b, + et->context->a); estyle_set_clip(bit, et->clip); etox_line_append(line, bit); estyle_show(bit); @@ -927,7 +979,7 @@ * Create a new line for the next text */ line = etox_line_new(line->flags); - ewd_list_append(ret, line); + ret = evas_list_append(ret, line); line->et = et; break; @@ -935,22 +987,96 @@ walk++; } + /* + * Add any remaining text after the last line break or tab. + */ if (*text) { bit = estyle_new(et->evas, text, et->context->style); estyle_set_color(bit, et->context->r, et->context->g, - et->context->b, et->context->a); + et->context->b, et->context->a); estyle_set_clip(bit, et->clip); etox_line_append(line, bit); estyle_show(bit); - } - else if (line->bits == NULL) { - etox_line_free(line); - ewd_list_remove_last(ret); + } else if (line->bits == NULL) { + evas_list_remove(ret, line); + etox_line_free(line); } return ret; } +static void _etox_wrap_lines(Etox * et) +{ + Etox_Line *line; + Etox_Line *newline; + Evas_List l, ll; + + CHECK_PARAM_POINTER("et", et); + + /* if soft flag is not set, don't do anything */ + if (!(et->context->align & ETOX_LINE_SOFT)) + return; + + /* go through all the lines */ + for (l = et->lines; l; l = l->next) { + Estyle *bit, *split; + int index; + + line = l->data; + if (line->w > et->w) { + for (ll = line->bits; ll; ll = ll->next) { + bit = ll->data; + index = + estyle_text_at_position(bit, + line->x + + et->w, line->y, + NULL, NULL, + NULL, NULL); + if (index >= 0) { + /* split the bit that is on the edge */ + split = estyle_split(bit, index); + + /* if split doesn't exist don't do the following */ + if (!split) + break; + + /* set up the split style and show it */ + estyle_set_clip(bit, et->clip); + estyle_set_color(split, + et->context->r, + et->context->g, + et->context->b, + et->context->a); + estyle_show(split); + + /* create the new line */ + newline = + etox_line_new(line->flags); + l = evas_list_prepend_relative(l, + newline, + l-> + next); + newline->et = et; + + /* add the 'split' bit do the new line */ + etox_line_append(newline, split); + + /* move all remaining bits from line to newline */ + for (ll = line->bits; ll; + ll = ll->next) { + bit = ll->data; + etox_line_append(newline, + bit); + ll = evas_list_remove(ll, + bit); + } + break; + } + } + } + } +} + /* * _etox_layout - deals with the actual laying out of lines within the etox * @et: the etox to be laid out @@ -963,6 +1089,7 @@ static void _etox_layout(Etox * et, int y) { Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER("et", et); @@ -970,7 +1097,8 @@ * Traverse the list displaying each line, moving down the screen after * each line. */ - while ((line = ewd_list_next(et->lines))) { + for (l = et->lines; l; l = l->next) { + line = l->data; line->x = et->x; line->y = y; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_context.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- etox_context.c 19 Apr 2002 22:06:32 -0000 1.2 +++ etox_context.c 25 Apr 2002 16:32:00 -0000 1.3 @@ -11,7 +11,7 @@ { Etox_Context *ret; - ret = (Etox_Context *)malloc(sizeof(Etox_Context)); + ret = (Etox_Context *) malloc(sizeof(Etox_Context)); if (!ret) return NULL; @@ -103,10 +103,10 @@ { CHECK_PARAM_POINTER("et", et); - *a = et->context->a; - *r = et->context->r; - *b = et->context->b; - *g = et->context->g; + *a = et->context->a; + *r = et->context->r; + *b = et->context->b; + *g = et->context->g; } /** @@ -143,7 +143,7 @@ CHECK_PARAM_POINTER("et", et); estyle_lookup_color_db(name, &et->context->r, &et->context->g, - &et->context->b, &et->context->a); + &et->context->b, &et->context->a); } /** =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_line.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- etox_line.c 19 Apr 2002 18:09:22 -0000 1.2 +++ etox_line.c 25 Apr 2002 16:32:00 -0000 1.3 @@ -32,6 +32,7 @@ void etox_line_free(Etox_Line * line) { Estyle *bit; + Evas_List l; CHECK_PARAM_POINTER("line", line); @@ -43,13 +44,15 @@ /* * Free all of the bits on the line. */ - while ((bit = ewd_list_remove_last(line->bits))) + for (l = line->bits; l; l = l->next) { + bit = l->data; estyle_free(bit); + } /* * Clean up the remaining list */ - ewd_list_destroy(line->bits); + evas_list_free(line->bits); } FREE(line); @@ -64,15 +67,17 @@ void etox_line_show(Etox_Line * line) { Estyle *bit; + Evas_List l; CHECK_PARAM_POINTER("line", line); /* * Display all of the bits in the line. */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits))) + for (l = line->bits; l; l = l->next) { + bit = l->data; estyle_show(bit); + } } @@ -85,15 +90,17 @@ void etox_line_hide(Etox_Line * line) { Estyle *bit; + Evas_List l; CHECK_PARAM_POINTER("line", line); /* * Hide all the bits in this line */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits))) + for (l = line->bits; l; l = l->next) { + bit = l->data; estyle_hide(bit); + } } @@ -113,15 +120,9 @@ CHECK_PARAM_POINTER("bit", bit); /* - * Create the list for the bits if none is present - */ - if (!line->bits) - line->bits = ewd_list_new(); - - /* * Append the text and update necessary fields */ - ewd_list_append(line->bits, bit); + line->bits = evas_list_append(line->bits, bit); estyle_geometry(bit, &x, &y, &w, &h); line->w += w; @@ -146,15 +147,9 @@ CHECK_PARAM_POINTER("bit", bit); /* - * Create the list for the bits if none is present - */ - if (!line->bits) - line->bits = ewd_list_new(); - - /* * Prepend the text and update necessary fields */ - ewd_list_prepend(line->bits, bit); + line->bits = evas_list_prepend(line->bits, bit); estyle_geometry(bit, &x, &y, &w, &h); line->w += w; @@ -174,8 +169,7 @@ CHECK_PARAM_POINTER("line", line); CHECK_PARAM_POINTER("bit", bit); - ewd_list_goto(line->bits, bit); - ewd_list_remove(line->bits); + line->bits = evas_list_remove(line->bits, bit); line->length -= estyle_length(bit); etox_line_minimize(line); } @@ -192,14 +186,13 @@ int x; Estyle *bit; int tx, ty, tw, th; + Evas_List l; CHECK_PARAM_POINTER("line", line); if (!line->bits) return; - ewd_list_goto_first(line->bits); - /* * Determine the horizontal alignment of the text and set the starting * x coordinate appropriately. @@ -216,7 +209,8 @@ * Determine the veritcal alignment and perform the layout of the * bits. */ - while ((bit = ewd_list_next(line->bits))) { + for (l = line->bits; l; l = l->next) { + bit = l->data; if (!estyle_fixed(bit)) { estyle_geometry(bit, &tx, &ty, &tw, &th); @@ -252,21 +246,22 @@ void etox_line_minimize(Etox_Line * line) { Estyle *bit, *last_bit = NULL; + Evas_List l; CHECK_PARAM_POINTER("line", line); - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_current(line->bits))) { + l = line->bits; + while ((bit = l->data)) { /* * Attempt to merge the bits if possible, remove the second * one if successful. */ if (estyle_merge(last_bit, bit)) - ewd_list_remove(line->bits); + evas_list_remove(l, bit); else { - ewd_list_next(line->bits); last_bit = bit; + l = l->next; } } } @@ -281,6 +276,7 @@ void etox_line_merge(Etox_Line * line1, Etox_Line * line2) { Estyle *bit; + Evas_List l; CHECK_PARAM_POINTER("line1", line1); CHECK_PARAM_POINTER("line2", line2); @@ -288,9 +284,11 @@ /* * Move the bits from line2 to line1. */ - while ((bit = ewd_list_remove_first(line2->bits))) - etox_line_append(line1, bit); - + for (l = line2->bits; l; l = l->next) { + bit = l->data; + line2->bits = evas_list_remove(line2->bits, bit); + line1->bits = evas_list_append(line1->bits, bit); + } /* * Adjust the height and length of the merged line. */ @@ -312,22 +310,22 @@ * Returns no value. Saves the text from the line @line into the char buffer * @buf. */ -void etox_line_get_text(Etox_Line *line, char *buf) +void etox_line_get_text(Etox_Line * line, char *buf) { char *temp; Estyle *es; + Evas_List l; CHECK_PARAM_POINTER("line", line); CHECK_PARAM_POINTER("buf", buf); - ewd_list_goto_first(line->bits); - /* * Examine each bit on the list of bits and cat it's text onto the end * of the buffer. Then append a \n to the buffer at the end of the * line. */ - while ((es = ewd_list_next(line->bits))) { + for (l = line->bits; l; l = l->next) { + es = l->data; temp = estyle_get_text(es); strcat(buf, temp); } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_line.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- etox_line.h 2 Apr 2002 02:50:10 -0000 1.1 +++ etox_line.h 25 Apr 2002 16:32:00 -0000 1.2 @@ -11,6 +11,6 @@ void etox_line_remove(Etox_Line * line, Estyle * bit); void etox_line_merge(Etox_Line * line1, Etox_Line * line2); void etox_line_minimize(Etox_Line * line); -void etox_line_get_text(Etox_Line *line, char *buf); +void etox_line_get_text(Etox_Line * line, char *buf); #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_obstacle.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- etox_obstacle.c 2 Apr 2002 02:50:10 -0000 1.8 +++ etox_obstacle.c 25 Apr 2002 16:32:00 -0000 1.9 @@ -1,6 +1,7 @@ #include "Etox_private.h" -static void _etox_obstacle_line_insert(Etox_Line * line, Etox_Obstacle * obst); +static void _etox_obstacle_line_insert(Etox_Line * line, + Etox_Obstacle * obst); /* * etox_obstacle_new - create a new obstacle with given dimensions @@ -33,7 +34,7 @@ /* * etox_obstacle_free - remove an obstacle and free it */ -void etox_obstacle_free(Etox *et, Etox_Obstacle * obstacle) +void etox_obstacle_free(Etox * et, Etox_Obstacle * obstacle) { CHECK_PARAM_POINTER("obstacle", obstacle); @@ -52,8 +53,10 @@ void etox_obstacle_place(Etox * et, Etox_Obstacle * obst) { int i = 0; + int j = 0; int x, y, w, h; Etox_Line *line; + Evas_List l_nodes, l; CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("obst", obst); @@ -79,26 +82,28 @@ * We know the obstacle intersects this etox, so now determine * starting and ending lines, as well as split lines appropriately. */ - obst->start_line = ewd_list_nodes(et->lines); + for (l_nodes = et->lines; l_nodes; l_nodes = l_nodes->next) + j++; + obst->start_line = j; obst->end_line = -1; /* * Run through to determine the lines to determine which intersect the * obstacle */ - ewd_list_goto_first(et->lines); - while ((line = (Etox_Line *) ewd_list_next(et->lines)) && - line->y < y + h) { - - if (line->y > y) { - - /* - * Check if the obstacle starts at this line - */ - if (i < obst->start_line) - obst->start_line = i; - _etox_obstacle_line_insert(line, obst); - } + for (l = et->lines; l; l = l->next) { + line = l->data; + if (line->y < y + h) { + if (line->y > y) { + /* + * Check if the obstacle starts at this line + */ + if (i < obst->start_line) + obst->start_line = i; + _etox_obstacle_line_insert(line, obst); + } + } else + break; /* * Check if the obstacle starts at this line @@ -114,9 +119,10 @@ */ void etox_obstacle_unplace(Etox * et, Etox_Obstacle * obst) { - int i; + int i, j; Estyle *bit; Etox_Line *line; + Evas_List l, ll; CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("obst", obst); @@ -125,34 +131,40 @@ * Only adjust the lines that intersect the obstacle. */ i = obst->start_line; - ewd_list_goto_index(et->lines, i); /* * On each line within the obstacle bounds, remove the obstacle from * the list of bits. */ - while (i <= obst->end_line) { - line = ewd_list_current(et->lines); - - ewd_list_goto_first(line->bits); - - /* - * Now find the obstacle on the list of bits and remove it. - */ - while ((bit = ewd_list_current(line->bits)) && bit != obst->bit) - ewd_list_next(line->bits); - if (bit) - ewd_list_remove(line->bits); + for (j = 1, l = et->lines; j <= obst->end_line && l; + l = l->next, j++) { + if (j < i); + else { + line = l->data; + /* + * Now find the obstacle on the list of bits and remove it. + */ + for (ll = line->bits; ll; ll = ll->next) { + bit = ll->data; + if (bit != obst->bit); + else { + ll = evas_list_remove(ll, bit); + break; + } + } + } } } /* * etox_obstacle_line_insert - place an obstacle within a line */ -static void _etox_obstacle_line_insert(Etox_Line * line, Etox_Obstacle * obst) +static void _etox_obstacle_line_insert(Etox_Line * line, + Etox_Obstacle * obst) { Estyle *bit; int x, y, w, h; + Evas_List l; CHECK_PARAM_POINTER("line", line); CHECK_PARAM_POINTER("obst", obst); @@ -162,30 +174,30 @@ /* * Find the position to place the obstacle within the line */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits))) { + for (l = line->bits; l; l = l->next) { int tx, ty, tw, th; + bit = l->data; estyle_geometry(bit, &tx, &ty, &tw, &th); - if (etox_rect_intersect(x, y, w, h, tx, ty, tw, th)) + if (etox_rect_intersect(x, y, w, h, tx, ty, tw, th)) { + if (!bit) + return; + /* + * FIXME: We need to do some bit-splitting here, just need to get + * around to it. + */ + l = evas_list_prepend_relative(l, obst->bit, + l->next); break; + } } - - if (!bit) - return; - - /* - * FIXME: We need to do some bit-splitting here, just need to get - * around to it. - */ - ewd_list_insert(line->bits, obst->bit); } /* * etox_rect_intersect - check for intersection on two rectangles */ inline int etox_rect_intersect(int x1, int y1, int w1, int h1, - int x2, int y2, int w2, int h2) + int x2, int y2, int w2, int h2) { if (x1 > x2 + w2) return FALSE; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_obstacle.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- etox_obstacle.h 2 Apr 2002 03:59:13 -0000 1.1 +++ etox_obstacle.h 25 Apr 2002 16:32:01 -0000 1.2 @@ -2,10 +2,10 @@ #define _ETOX_OBSTACLE_H Etox_Obstacle *etox_obstacle_new(Etox * line, int x, int y, int w, int h); -void etox_obstacle_free(Etox *et, Etox_Obstacle * obstacle); +void etox_obstacle_free(Etox * et, Etox_Obstacle * obstacle); void etox_obstacle_place(Etox * et, Etox_Obstacle * obst); void etox_obstacle_unplace(Etox * et, Etox_Obstacle * obst); inline int etox_rect_intersect(int x1, int y1, int w1, int h1, - int x2, int y2, int w2, int h2); + int x2, int y2, int w2, int h2); #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_selection.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- etox_selection.h 2 Apr 2002 02:50:10 -0000 1.1 +++ etox_selection.h 25 Apr 2002 16:32:01 -0000 1.2 @@ -4,34 +4,38 @@ /* * These functions select regions of the etox. */ -Etox_Selection *etox_select_coords(Etox *et, int sx, int sy, int ex, int ey); -Etox_Selection *etox_select_index(Etox *et, int si, int ei); -Etox_Selection *etox_select_str(Etox *et, char *match, char **last); +Etox_Selection *etox_select_coords(Etox * et, int sx, int sy, int ex, + int ey); +Etox_Selection *etox_select_index(Etox * et, int si, int ei); +Etox_Selection *etox_select_str(Etox * et, char *match, char **last); /* * Release a selection that is no longer needed. */ -void etox_selection_free(Etox_Selection *selected); +void etox_selection_free(Etox_Selection * selected); /* * This function gets a rectangular bound on the selection. */ -void etox_selection_bounds(Etox_Selection *selected, int *x, int *y, - int *w, int *h); +void etox_selection_bounds(Etox_Selection * selected, int *x, int *y, + int *w, int *h); /* * These methods alter the appearance of the selected region. */ -void etox_selection_set_font(Etox_Selection *selected, char *font, int size); -void etox_selection_set_style(Etox_Selection *selected, char *style); +void etox_selection_set_font(Etox_Selection * selected, char *font, + int size); +void etox_selection_set_style(Etox_Selection * selected, char *style); /* * These functions manipulate callbacks on the selected region. */ -void etox_selection_add_callback(Etox_Selection *selected, - Evas_Callback_Type callback, void (*func) (void *data, Evas e, - Evas_Object o, int b, int x, int y), void *data); -void etox_selection_del_callback(Etox_Selection *selected, - Evas_Callback_Type callback); +void etox_selection_add_callback(Etox_Selection * selected, + Evas_Callback_Type callback, + void (*func) (void *data, Evas e, + Evas_Object o, int b, int x, + int y), void *data); +void etox_selection_del_callback(Etox_Selection * selected, + Evas_Callback_Type callback); #endif |
From: <enl...@li...> - 2002-04-30 05:09:47
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/data/images Log Message: Directory /cvsroot/enlightenment/e17/libs/etox/data/images added to the repository |