From: Enlightenment S. <no-...@en...> - 2009-09-03 17:43:51
|
Log: + Remove .in file + Move the engines into single structs instead of objects + Add empty eon_font source file that will handle the fonts + More eon_text work, we just need the drawing algo ;) + Add freetype is a dependency + More xml elements Author: turran Date: 2009-09-03 10:43:41 -0700 (Thu, 03 Sep 2009) New Revision: 42212 Added: trunk/PROTO/eon/data/vera.ttf trunk/PROTO/eon/src/lib/core/eon_font.c Removed: trunk/PROTO/eon/src/lib/widget/Makefile.in Modified: trunk/PROTO/eon/configure.ac trunk/PROTO/eon/src/bin/Makefile.am trunk/PROTO/eon/src/engines/enesim/Eon_Enesim.h trunk/PROTO/eon/src/engines/enesim/Makefile.am trunk/PROTO/eon/src/engines/enesim/enesim_engine.c trunk/PROTO/eon/src/engines/sdl/Makefile.am trunk/PROTO/eon/src/engines/sdl/sdl_engine.c trunk/PROTO/eon/src/include/Eon.h trunk/PROTO/eon/src/include/eon_engine.h trunk/PROTO/eon/src/include/eon_private.h trunk/PROTO/eon/src/include/eon_text.h trunk/PROTO/eon/src/lib/Makefile.am trunk/PROTO/eon/src/lib/core/Makefile.am trunk/PROTO/eon/src/lib/core/eon_document.c trunk/PROTO/eon/src/lib/core/eon_engine.c trunk/PROTO/eon/src/lib/paint/Makefile.am trunk/PROTO/eon/src/lib/parser/common/Makefile.am trunk/PROTO/eon/src/lib/parser/common/common_main.c trunk/PROTO/eon/src/lib/parser/exml/Makefile.am trunk/PROTO/eon/src/lib/parser/exml/exml_main.c trunk/PROTO/eon/src/lib/script/neko/Makefile.am trunk/PROTO/eon/src/lib/shape/Makefile.am trunk/PROTO/eon/src/lib/shape/eon_shape.c trunk/PROTO/eon/src/lib/shape/eon_text.c Modified: trunk/PROTO/eon/configure.ac =================================================================== --- trunk/PROTO/eon/configure.ac 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/configure.ac 2009-09-03 17:43:41 UTC (rev 42212) @@ -94,7 +94,7 @@ ;; esac -requirements="eina-0 ekeko ecore enesim emage etch" +requirements="eina-0 ekeko ecore enesim emage etch freetype" PKG_CHECK_MODULES(EINA, [eina-0 >= 0.0.1]) PKG_CHECK_MODULES(EKEKO, [ekeko]) @@ -102,6 +102,7 @@ PKG_CHECK_MODULES(ENESIM, [enesim >= 0.0.1]) PKG_CHECK_MODULES(EMAGE, [emage >= 0.0.1]) PKG_CHECK_MODULES(ETCH, [etch >= 0.0.1]) +PKG_CHECK_MODULES([FREETYPE], [freetype2 >= 9.3.0]) ################################################################################ ## Scripting ## ################################################################################ @@ -170,10 +171,10 @@ AC_SUBST(requirements) AC_SUBST(packagesrcdir) -ETK_CFLAGS="$EINA_CFLAGS $EKEKO_CFLAGS $ECORE_CFLAGS $ENESIM_CFLAGS $ETCH_CFLAGS $EMAGE_CFLAGS $ESHM_CFLAGS" -ETK_LIBS="$EINA_LIBS $EKEKO_LIBS $ECORE_LIBS $ENESIM_LIBS $ETCH_LIBS $EMAGE_LIBS $ESHM_LIBS" -AC_SUBST(ETK_CFLAGS) -AC_SUBST(ETK_LIBS) +EON_CFLAGS="$EINA_CFLAGS $EKEKO_CFLAGS $ECORE_CFLAGS $ENESIM_CFLAGS $ETCH_CFLAGS $EMAGE_CFLAGS $ESHM_CFLAGS $FREETYPE_CFLAGS" +EON_LIBS="$EINA_LIBS $EKEKO_LIBS $ECORE_LIBS $ENESIM_LIBS $ETCH_LIBS $EMAGE_LIBS $ESHM_LIBS $FREETYPE_LIBS" +AC_SUBST(EON_CFLAGS) +AC_SUBST(EON_LIBS) ##################################################################### ## Output Added: trunk/PROTO/eon/data/vera.ttf Property changes on: trunk/PROTO/eon/data/vera.ttf ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/PROTO/eon/src/bin/Makefile.am =================================================================== --- trunk/PROTO/eon/src/bin/Makefile.am 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/bin/Makefile.am 2009-09-03 17:43:41 UTC (rev 42212) @@ -6,7 +6,7 @@ INCLUDES = \ -I. -I../.. -I$(top_srcdir)/src/include -Wall -g \ -@ETK_CFLAGS@ +@EON_CFLAGS@ bin_PROGRAMS = eon_player @@ -17,7 +17,7 @@ eon_player.c eon_player_LDADD = $(top_builddir)/src/lib/libeon.la \ -@ETK_LIBS@ \ +@EON_LIBS@ \ -lm if BUILD_ENGINE_SDL Modified: trunk/PROTO/eon/src/engines/enesim/Eon_Enesim.h =================================================================== --- trunk/PROTO/eon/src/engines/enesim/Eon_Enesim.h 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/engines/enesim/Eon_Enesim.h 2009-09-03 17:43:41 UTC (rev 42212) @@ -1,12 +1,6 @@ #ifndef _EON_ENESIM_H_ #define _EON_ENESIM_H_ -#define EON_TYPE_ENGINE_ENESIM "Eon_Engine_Enesim" -typedef struct _Eon_Engine_Enesim_Private Eon_Engine_Enesim_Private; -typedef struct _Eon_Engine_Enesim -{ - Eon_Engine parent; - Eon_Engine_Enesim_Private *prv; -} Eon_Engine_Enesim; +EAPI void eon_engine_enesim_setup(Eon_Engine *e); #endif Modified: trunk/PROTO/eon/src/engines/enesim/Makefile.am =================================================================== --- trunk/PROTO/eon/src/engines/enesim/Makefile.am 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/engines/enesim/Makefile.am 2009-09-03 17:43:41 UTC (rev 42212) @@ -3,7 +3,7 @@ AM_CPPFLAGS = \ -I. \ -I$(top_srcdir)/src/include \ -@ETK_CFLAGS@ +@EON_CFLAGS@ noinst_LTLIBRARIES = libeon_engine_enesim.la Modified: trunk/PROTO/eon/src/engines/enesim/enesim_engine.c =================================================================== --- trunk/PROTO/eon/src/engines/enesim/enesim_engine.c 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/engines/enesim/enesim_engine.c 2009-09-03 17:43:41 UTC (rev 42212) @@ -7,12 +7,6 @@ /*============================================================================* * Local * *============================================================================*/ -struct _Eon_Engine_Enesim_Private -{ - -}; - - static void _color_set(void *c, int color) { uint32_t cmul; @@ -102,7 +96,7 @@ /*============================================================================* * Horswitch * *============================================================================*/ -void * hswitch_create(Eon_Hswitch *hs) +static void * hswitch_create(Eon_Hswitch *hs) { Paint *p; @@ -113,7 +107,7 @@ return p; } -Eina_Bool hswitch_setup(void *data, Eon_Shape *s) +static Eina_Bool hswitch_setup(void *data, Eon_Shape *s) { Paint *p = data; Paint *tmp; @@ -198,7 +192,7 @@ /*============================================================================* * Sqpattern * *============================================================================*/ -void * checker_create(Eon_Checker *sq) +static void * checker_create(Eon_Checker *sq) { Paint *p; @@ -209,7 +203,7 @@ return p; } -Eina_Bool checker_setup(void *data, Eon_Shape *s) +static Eina_Bool checker_setup(void *data, Eon_Shape *s) { Paint *p = data; Eon_Checker *sq = (Eon_Checker *)p->p; @@ -235,7 +229,7 @@ *============================================================================*/ /* FIXME do a real pattern! */ -void _image_pattern_span(void *data, void *span, int x, int y, unsigned int len) +static void _image_pattern_span(void *data, void *span, int x, int y, unsigned int len) { uint32_t *dst = span; uint32_t color[2]; @@ -259,7 +253,7 @@ } } -void * image_create(Eon_Image *i) +static void * image_create(Eon_Image *i) { Paint *p; @@ -270,7 +264,7 @@ return p; } -Eina_Bool image_setup(void *data, Eon_Shape *s) +static Eina_Bool image_setup(void *data, Eon_Shape *s) { Paint *p = data; Eon_Image *i = (Eon_Image *)p->p; @@ -300,142 +294,6 @@ free(p); } -#if 0 -/* As enesim doesnt support prescaling on the fly while doing transformations - * we need to create a scaled image before transforming - */ -static void _image_transform(Enesim_Surface *dst, Eina_Rectangle *dclip, Context *c, Enesim_Surface *src, uint32_t sw, uint32_t sh, Eina_Rectangle *sgeom, Eina_Rectangle *sclip) -{ - Enesim_Cpu **cpus; - int numcpus; - Enesim_Operator drawer, tx; - uint32_t sstride, dstride; - uint32_t *s, *d, *t; - Enesim_Surface *realsrc = src; - int y; - - cpus = enesim_cpu_get(&numcpus); - enesim_compositor_span_pixel_color_op_get(cpus[0], &drawer, c->rop, ENESIM_FORMAT_ARGB8888, ENESIM_FORMAT_ARGB8888, c->color); - enesim_transformer_1d_op_get(&tx, cpus[0], ENESIM_FORMAT_ARGB8888, ENESIM_MATRIX_AFFINE, ENESIM_FAST, ENESIM_FORMAT_ARGB8888); - - //printf("[%f %f %f]\n", c->matrix.m.xx, c->matrix.m.xy, c->matrix.m.xz); - //printf("[%f %f %f]\n", c->matrix.m.yx, c->matrix.m.yy, c->matrix.m.yz); - //printf("[%f %f %f]\n", c->matrix.m.zx, c->matrix.m.zy, c->matrix.m.zz); - - /* setup a temporary surface */ - /* downscale or upscale the image */ - if (((sgeom->w != sw) || (sgeom->h != sh))) - { - Enesim_Surface *tmp; - Eina_Rectangle rclip; - Context rc; - - rc.rop = ENESIM_FILL; - rc.color = 0xffffffff; - - tmp = enesim_surface_new(ENESIM_FORMAT_ARGB8888, sgeom->w, sgeom->h); - eina_rectangle_coords_from(&rclip, 0, 0, sgeom->w, sgeom->h); - _image_scale(tmp, &rclip, &rc, src, sw, sh, &rclip, &rclip); - realsrc = tmp; - } - _image_setup(realsrc, &s, &sstride, dst, &d, &dstride); - - t = malloc(dclip->w * sizeof(uint32_t)); - d = d + (dclip->y * dstride) + dclip->x; - y = 0; - - //printf("DCLIP %d %d %d %d\n", dclip->x, dclip->y, dclip->w, dclip->h); - //printf("SGEOM %d %d %d %d\n", sgeom->x, sgeom->y, sgeom->w, sgeom->h); - //printf("SCLIP %d %d %d %d\n", sclip->x, sclip->y, sclip->w, sclip->h); - //printf("%d %d %d\n", w, h, sstride); - //printf("old at %d %d %d %d\n", srect->x, srect->y, srect->w, srect->h); - while (y < dclip->h) - { - memset(t, 0, sizeof(uint32_t) * dclip->w); -#if !DEBUG - enesim_operator_transformer_1d(&tx, s, - sstride, sgeom->w, sgeom->h, - 0, 0, - c->matrix.m.xx, c->matrix.m.xy, c->matrix.m.xz, - c->matrix.m.yx, c->matrix.m.yy, c->matrix.m.yz, - c->matrix.m.zx, c->matrix.m.zy, c->matrix.m.zz, - 0, y, dclip->w, t); - enesim_operator_drawer_span(&drawer, d, dclip->w, t, c->color, NULL); - d += dstride; -#else - enesim_operator_drawer_span(&drawer, d, dclip->w, s, 0, NULL); - s += sstride; - d += dstride; -#endif - y++; - } - /* clean up */ - free(t); - /* the temporary surface */ - if (realsrc != src) - { - enesim_surface_delete(realsrc); - } -} - -/* - * surface: destintation surface - * context: destination clipping? - * srect: source rectangle (scaling??) - * src: src image - */ -void eon_enesim_image(void *surface, void *context, Enesim_Surface *src, Eina_Rectangle *srect) -{ - Enesim_Surface *dst = surface; - Context *c = context; - Eina_Rectangle dclip, sclip; - uint32_t sw, sh; - uint32_t dw, dh; - -#ifdef EON_DEBUG - printf("[Eon_Eon_Engine_Enesim] RENDERING AN IMAGE %d %d %d %d\n", srect->x, srect->y, srect->w, srect->h); -#endif - enesim_surface_size_get(src, &sw, &sh); - enesim_surface_size_get(dst, &dw, &dh); - eina_rectangle_coords_from(&dclip, srect->x, srect->y, srect->w, srect->h); - - /* the context has the clipping rect relative to the canvas */ - //printf("ENTERING\n"); - //printf("S = %d %d D = %d %d\n", sw, sh, dw, dh); - //printf("SGEOM %d %d %d %d\n", srect->x, srect->y, srect->w, srect->h); - //printf("DCLIP %d %d %d %d\n", dclip.x, dclip.y, dclip.w, dclip.h); - if (c->clip.used) - { - //printf("CLIP %d %d %d %d\n", c->clip.rect.x, c->clip.rect.y, c->clip.rect.w, c->clip.rect.h); - eina_rectangle_rescale_in(srect, &c->clip.rect, &sclip); - eina_rectangle_coords_from(&dclip, c->clip.rect.x, c->clip.rect.y, c->clip.rect.w, c->clip.rect.h); - } - //printf("SCLIP %d %d %d %d\n", sclip.x, sclip.y, sclip.w, sclip.h); - //printf("DCLIP %d %d %d %d\n", dclip.x, dclip.y, dclip.w, dclip.h); - - /* transformed matrix */ - if (c->matrix.used) - { - //printf("Transforming image %d %d - %d %d\n", sw, sh, srect->w, srect->h); - _image_transform(dst, &dclip, c, src, sw, sh, srect, &sclip); - } - // TODO filter - /* downscale or upscale the image */ - else if (((srect->w != sw) || (srect->h != sh))) - { - //printf("Scaling image %d %d - %d %d\n", sw, sh, srect->w, srect->h); - _image_scale(dst, &dclip, c, src, sw, sh, srect, &sclip); - return; - } - /* no scale */ - else - { - //printf("No scaling image %d %d - %d %d\n", sw, sh, srect->w, srect->h); - _image_noscale(dst, &dclip, c, src, srect, &sclip); - } -} -#endif - /*============================================================================* * Common * *============================================================================*/ @@ -485,7 +343,7 @@ } } -void aliased_color_cb(Enesim_Scanline *sl, void *data) +static void aliased_color_cb(Enesim_Scanline *sl, void *data) { Shape_Drawer_Data *sdd = data; uint32_t *ddata; @@ -497,7 +355,7 @@ sdd->span(ddata, sl->data.alias.w, NULL, sdd->color, NULL); } -void aliased_fill_cb(Enesim_Scanline *sl, void *data) +static void aliased_fill_cb(Enesim_Scanline *sl, void *data) { Shape_Drawer_Data *sdd = data; int px, py; @@ -590,7 +448,7 @@ return p; } -void polygon_point_add(void *pd, int x, int y) +static void polygon_point_add(void *pd, int x, int y) { Polygon *p = pd; @@ -600,7 +458,7 @@ enesim_rasterizer_vertex_add(p->r, x, y); } -void polygon_render(void *pd, void *cd, Eina_Rectangle *clip) +static void polygon_render(void *pd, void *cd, Eina_Rectangle *clip) { Polygon *p = pd; Shape_Drawer_Data sdd; @@ -698,6 +556,44 @@ free(ec); } /*============================================================================* + * Text * + *============================================================================*/ +/* Enesim doesnt have a text rasterizer, we use freetype here */ +typedef struct Text +{ + Eon_Text *t; +} Text; + + +static void * text_create(Eon_Text *et) +{ + Text *t; + + printf("CREATE!!\n"); + t = malloc(sizeof(Text)); + t->t = et; + + return t; +} + +static void text_render(void *et, void *cd, Eina_Rectangle *clip) +{ + Text *t = et; + char *str; + int i; + + printf("RENDER!! %p %p\n", t, t->t); + str = eon_text_string_get(t->t); + printf("%p\n", str); + /* TODO Move this into the shape object */ + if (!str) + return; + for (i = 0; str[i]; i++) + { + printf("%c\n", str[i]); + } +} +/*============================================================================* * Debug * *============================================================================*/ static void debug_rect(void *cd, uint32_t color, int x, int y, int w, int h) @@ -719,58 +615,31 @@ dst += stride; } } - -static void _ctor(void *instance) -{ - Eon_Engine_Enesim *e; - Eon_Engine_Enesim_Private *prv; - - e = (Eon_Engine_Enesim *) instance; - e->prv = prv = ekeko_type_instance_private_get(eon_engine_enesim_type_get(), instance); - e->parent.rect_create = rect_create; - e->parent.rect_render = rect_render; - e->parent.circle_create = circle_create; - e->parent.circle_render = circle_render; - e->parent.polygon_create = polygon_create; - e->parent.polygon_point_add = polygon_point_add; - e->parent.polygon_render = polygon_render; - e->parent.image_create = image_create; - e->parent.image_delete = image_delete; - e->parent.image_setup = image_setup; - e->parent.fade_create = fade_create; - e->parent.fade_delete = fade_delete; - e->parent.fade_setup = fade_setup; - e->parent.hswitch_create = hswitch_create; - e->parent.hswitch_delete = hswitch_delete; - e->parent.hswitch_setup = hswitch_setup; - e->parent.checker_create = checker_create; - e->parent.checker_delete = checker_delete; - e->parent.checker_setup = checker_setup; - e->parent.debug_rect = debug_rect; -} - -static void _dtor(void *instance) -{ - -} - - /*============================================================================* - * Global * + * API * *============================================================================*/ -Ekeko_Type * eon_engine_enesim_type_get(void) +EAPI void eon_engine_enesim_setup(Eon_Engine *e) { - static Ekeko_Type *type = NULL; - - if (!type) - { - type = ekeko_type_new(EON_TYPE_ENGINE_ENESIM, sizeof(Eon_Engine_Enesim), - sizeof(Eon_Engine_Enesim_Private), eon_engine_type_get(), - _ctor, _dtor, NULL); - } - - return type; + e->rect_create = rect_create; + e->rect_render = rect_render; + e->circle_create = circle_create; + e->circle_render = circle_render; + e->polygon_create = polygon_create; + e->polygon_point_add = polygon_point_add; + e->polygon_render = polygon_render; + e->text_create = text_create; + e->text_render = text_render; + e->image_create = image_create; + e->image_delete = image_delete; + e->image_setup = image_setup; + e->fade_create = fade_create; + e->fade_delete = fade_delete; + e->fade_setup = fade_setup; + e->hswitch_create = hswitch_create; + e->hswitch_delete = hswitch_delete; + e->hswitch_setup = hswitch_setup; + e->checker_create = checker_create; + e->checker_delete = checker_delete; + e->checker_setup = checker_setup; + e->debug_rect = debug_rect; } -/*============================================================================* - * API * - *============================================================================*/ Modified: trunk/PROTO/eon/src/engines/sdl/Makefile.am =================================================================== --- trunk/PROTO/eon/src/engines/sdl/Makefile.am 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/engines/sdl/Makefile.am 2009-09-03 17:43:41 UTC (rev 42212) @@ -6,7 +6,7 @@ -I. \ -I$(top_srcdir)/src/include \ -I$(top_srcdir)/src/engines/enesim/ \ -@ECORE_SDL_CFLAGS@ @SDL_CFLAGS@ @ETK_CFLAGS@ +@ECORE_SDL_CFLAGS@ @SDL_CFLAGS@ @EON_CFLAGS@ noinst_LTLIBRARIES = libeon_engine_sdl.la Modified: trunk/PROTO/eon/src/engines/sdl/sdl_engine.c =================================================================== --- trunk/PROTO/eon/src/engines/sdl/sdl_engine.c 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/engines/sdl/sdl_engine.c 2009-09-03 17:43:41 UTC (rev 42212) @@ -15,23 +15,9 @@ /*============================================================================* * Local * *============================================================================*/ -#define EON_TYPE_ENGINE_SDL "Eon_Engine_SDL" //#define SDL_PURE #define SINGLE_BUFFER -static Ekeko_Type *_engine_sdl_type_get(void); - -typedef struct _Engine_SDL_Private -{ - -} Engine_SDL_Private; - -typedef struct _Engine_SDL -{ - Eon_Engine_Enesim parent; - Engine_SDL_Private *prv; -} Engine_SDL; - typedef struct _Engine_SDL_Document { Eon_Canvas *root; @@ -265,12 +251,6 @@ return es; } - -static void _enesim_blit(void *s, void *context, void *src, Eina_Rectangle *srect) -{ - eon_enesim_image(s, context, src, srect); -} - static Eina_Bool canvas_flush(void *src, Eina_Rectangle *srect) { Enesim_Surface *es = src; @@ -346,45 +326,25 @@ _unlock(s); } - - -static void _ctor(void *instance) +static Eon_Engine _sdl_engine = { + .document_create = document_create, + .canvas_create = canvas_create, + .canvas_flush = canvas_flush, +}; +/*============================================================================* + * Global * + *============================================================================*/ +void engine_sdl_init(void) { - Engine_SDL *e; - Engine_SDL_Private *prv; - - e = (Engine_SDL *) instance; - e->prv = prv = ekeko_type_instance_private_get(_engine_sdl_type_get(), instance); - e->parent.parent.document_create = document_create; - e->parent.parent.canvas_create = canvas_create; - e->parent.parent.canvas_flush = canvas_flush; + eon_engine_enesim_setup(&_sdl_engine); + eon_engine_register("sdl", &_sdl_engine); } -static void _dtor(void *instance) +void engine_sdl_shutdown(void) { } -static Ekeko_Type *_engine_sdl_type_get(void) -{ - static Ekeko_Type *type = NULL; - - if (!type) - { - type = ekeko_type_new(EON_TYPE_ENGINE_SDL, sizeof(Engine_SDL), - sizeof(Engine_SDL_Private), eon_engine_enesim_type_get(), - _ctor, _dtor, NULL); - } - - return type; -} /*============================================================================* - * Global * - *============================================================================*/ -void engine_sdl_init(void) -{ - eon_engine_register("sdl", _engine_sdl_type_get); -} -/*============================================================================* * API * *============================================================================*/ Modified: trunk/PROTO/eon/src/include/Eon.h =================================================================== --- trunk/PROTO/eon/src/include/Eon.h 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/include/Eon.h 2009-09-03 17:43:41 UTC (rev 42212) @@ -17,11 +17,11 @@ typedef struct _Eon_Script Eon_Script; /* shapes */ typedef struct _Eon_Shape Eon_Shape; -typedef struct _Eon_Text Eon_Text; typedef struct _Eon_Square Eon_Square; typedef struct _Eon_Rect Eon_Rect; typedef struct _Eon_Circle Eon_Circle; typedef struct _Eon_Polygon Eon_Polygon; +typedef struct _Eon_Text Eon_Text; /* paint objects */ typedef struct _Eon_Paint Eon_Paint; typedef struct _Eon_Image Eon_Image; @@ -60,8 +60,8 @@ #include "eon_script.h" #include "eon_shape.h" +#include "eon_square.h" #include "eon_text.h" -#include "eon_square.h" #include "eon_rect.h" #include "eon_polygon.h" #include "eon_circle.h" Modified: trunk/PROTO/eon/src/include/eon_engine.h =================================================================== --- trunk/PROTO/eon/src/include/eon_engine.h 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/include/eon_engine.h 2009-09-03 17:43:41 UTC (rev 42212) @@ -18,20 +18,8 @@ #ifndef EON_ENGINE_H_ #define EON_ENGINE_H_ -/*============================================================================* - * Events * - *============================================================================*/ -/*============================================================================* - * Properties * - *============================================================================*/ -/*============================================================================* - * Class * - *============================================================================*/ -typedef struct _Eon_Engine_Private Eon_Engine_Private; struct _Eon_Engine { - Ekeko_Object parent; - Eon_Engine_Private *private; /* document callbacks */ void * (*document_create)(Eon_Document *d, const char *options); void (*document_delete)(void *); @@ -54,6 +42,9 @@ void (*polygon_render)(void *p, void *c, Eina_Rectangle *clip); void (*polygon_reset)(void *p); void (*polygon_delete)(void *p); + /* text callbacks */ + void * (*text_create)(Eon_Text *t); + void (*text_render)(void *p, void *c, Eina_Rectangle *clip); /* image callbacks */ void * (*image_create)(Eon_Image *i); Eina_Bool (*image_setup)(void *i, Eon_Shape *s); @@ -73,9 +64,8 @@ /* debug */ void (*debug_rect)(void *c, uint32_t color, int x, int y, int w, int h); }; -/*============================================================================* - * Functions * - *============================================================================*/ + + EAPI Ekeko_Type *eon_engine_type_get(void); EAPI void * eon_engine_document_create(Eon_Engine *e, Eon_Document *d, const char *options); @@ -94,6 +84,9 @@ EAPI void eon_engine_polygon_point_add(Eon_Engine *e, void *pd, int x, int y); EAPI void eon_polygon_render(Eon_Engine *e, void *p, void *c, Eina_Rectangle *clip); +EAPI void * eon_engine_text_create(Eon_Engine *e, Eon_Text *t); +EAPI void eon_engine_text_render(Eon_Engine *e, void *c, void *t, Eina_Rectangle *clip); + EAPI void * eon_engine_image_create(Eon_Engine *e, Eon_Paint *p); EAPI Eina_Bool eon_engine_image_setup(Eon_Engine *e, void *engine_data, Eon_Shape *s); EAPI void eon_engine_image_delete(Eon_Engine *e, void *engine_data); Modified: trunk/PROTO/eon/src/include/eon_private.h =================================================================== --- trunk/PROTO/eon/src/include/eon_private.h 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/include/eon_private.h 2009-09-03 17:43:41 UTC (rev 42212) @@ -61,7 +61,7 @@ typedef void * Eon_Engine_Surface; void eon_engine_init(void); void eon_engine_shutdown(void); -void eon_engine_register(const char *name, Eon_Type_Constructor n); +void eon_engine_register(const char *name, Eon_Engine *); Eon_Engine * eon_engine_get(const char *name); /* Enesim engine */ Modified: trunk/PROTO/eon/src/include/eon_text.h =================================================================== --- trunk/PROTO/eon/src/include/eon_text.h 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/include/eon_text.h 2009-09-03 17:43:41 UTC (rev 42212) @@ -6,31 +6,24 @@ * Events * *============================================================================*/ #define EON_TEXT_STR_CHANGED "strChanged" -#define EON_TEXT_X_CHANGED "xChanged" -#define EON_TEXT_Y_CHANGED "yChanged" /*============================================================================* * Properties * *============================================================================*/ extern Ekeko_Property_Id EON_TEXT_STR; -extern Ekeko_Property_Id EON_TEXT_X; -extern Ekeko_Property_Id EON_TEXT_Y; /*============================================================================* * Class * *============================================================================*/ typedef struct _Eon_Text_Private Eon_Text_Private; struct _Eon_Text { - Eon_Shape parent; + Eon_Square parent; Eon_Text_Private *private; }; /*============================================================================* * Functions * *============================================================================*/ EAPI Ekeko_Type *eon_text_type_get(void); -EAPI void eon_text_str_set(Eon_Text *t, const char *str); -EAPI void eon_text_x_rel_set(Eon_Text *t, int x); -EAPI void eon_text_x_set(Eon_Text *t, int x); -EAPI void eon_text_y_set(Eon_Text *t, int y); -EAPI void eon_text_y_rel_set(Eon_Text *t, int y); +EAPI void eon_text_string_set(Eon_Text *t, const char *str); +EAPI const char * eon_text_string_get(Eon_Text *t); #endif /* EON_TEXT_H_ */ Modified: trunk/PROTO/eon/src/lib/Makefile.am =================================================================== --- trunk/PROTO/eon/src/lib/Makefile.am 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/lib/Makefile.am 2009-09-03 17:43:41 UTC (rev 42212) @@ -6,7 +6,7 @@ INCLUDES = \ -I. -I../.. -I$(top_srcdir)/src/include -Wall -g \ -@ETK_CFLAGS@ +@EON_CFLAGS@ lib_LTLIBRARIES = libeon.la @@ -14,7 +14,7 @@ libeon_la_SOURCES = -libeon_la_LIBADD = @ETK_LIBS@ \ +libeon_la_LIBADD = @EON_LIBS@ \ core/libeon_core.la \ paint/libeon_paint.la \ shape/libeon_shape.la \ Modified: trunk/PROTO/eon/src/lib/core/Makefile.am =================================================================== --- trunk/PROTO/eon/src/lib/core/Makefile.am 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/lib/core/Makefile.am 2009-09-03 17:43:41 UTC (rev 42212) @@ -4,7 +4,7 @@ AM_CPPFLAGS = \ -I. \ -I$(top_srcdir)/src/include \ -@ETK_CFLAGS@ +@EON_CFLAGS@ noinst_LTLIBRARIES = libeon_core.la Modified: trunk/PROTO/eon/src/lib/core/eon_document.c =================================================================== --- trunk/PROTO/eon/src/lib/core/eon_document.c 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/lib/core/eon_document.c 2009-09-03 17:43:41 UTC (rev 42212) @@ -104,7 +104,6 @@ if (!strcmp(em->prop, "engine") && !prv->engine.backend) { prv->engine.backend = eon_engine_get(em->curr->value.string_value); - eon_engine_ref(prv->engine.backend, d); } } @@ -233,7 +232,6 @@ prv = PRIVATE(d); /* the gfx engine */ prv->engine.backend = eon_engine_get(engine); - eon_engine_ref(prv->engine.backend, d); prv->engine.data = eon_engine_document_create(prv->engine.backend, d, options); /* the script engine */ prv->vm.sm = eon_script_get("neko"); Modified: trunk/PROTO/eon/src/lib/core/eon_engine.c =================================================================== --- trunk/PROTO/eon/src/lib/core/eon_engine.c 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/lib/core/eon_engine.c 2009-09-03 17:43:41 UTC (rev 42212) @@ -20,26 +20,7 @@ /*============================================================================* * Local * *============================================================================*/ -struct _Eon_Engine_Private -{ - -}; - static Eina_Hash *_engines = NULL; - -static void _ctor(void *instance) -{ - Eon_Engine *e; - Eon_Engine_Private *prv; - - e = (Eon_Engine*) instance; - e->private = prv = ekeko_type_instance_private_get(eon_engine_type_get(), instance); -} - -static void _dtor(void *instance) -{ - -} /*============================================================================* * Global * *============================================================================*/ @@ -60,9 +41,9 @@ /* TODO remove the hash */ } -void eon_engine_register(const char *name, Eon_Type_Constructor n) +void eon_engine_register(const char *name, Eon_Engine *e) { - eina_hash_add(_engines, name, n); + eina_hash_add(_engines, name, e); } Eon_Engine * eon_engine_get(const char *name) @@ -71,55 +52,14 @@ Ekeko_Type *t; Eon_Type_Constructor n; - n = eina_hash_find(_engines, name); - if (!n) - return NULL; - /* get the engine's type */ - t = n(); - if (!t) - return NULL; - /* create the instance */ - o = ekeko_type_instance_new(t); - if (!ekeko_type_instance_is_of(o, EON_TYPE_ENGINE)) - { - ekeko_object_delete(o); - } - return (Eon_Engine *)o; + return eina_hash_find(_engines, name); } - -void eon_engine_ref(Eon_Engine *e, Eon_Document *d) -{ - /* register the needed callbacks */ -} - -void eon_engine_unref(Eon_Engine *e, Eon_Document *d) -{ - /* unregister every callback */ -} /*============================================================================* * API * *============================================================================*/ -EAPI Ekeko_Type *eon_engine_type_get(void) -{ - static Ekeko_Type *type = NULL; - - if (!type) - { - type = ekeko_type_new(EON_TYPE_ENGINE, sizeof(Eon_Engine), - sizeof(Eon_Engine_Private), ekeko_object_type_get(), - _ctor, _dtor, NULL); - } - - return type; - -} - EAPI void * eon_engine_document_create(Eon_Engine *e, Eon_Document *d, const char *options) { - void *dd = e->document_create(d, options); - - printf("%p\n", dd); - return dd; + return e->document_create(d, options); } EAPI void * eon_engine_canvas_create(Eon_Engine *e, void *cd, Eon_Canvas *c, Eina_Bool root, uint32_t w, uint32_t h) @@ -173,6 +113,17 @@ { e->polygon_render(p, c, clip); } + +EAPI void * eon_engine_text_create(Eon_Engine *e, Eon_Text *t) +{ + return e->text_create(t); +} + +EAPI void eon_engine_text_render(Eon_Engine *e, void *t, void *c, Eina_Rectangle *clip) +{ + e->text_render(t, c, clip); +} + /* Paint objects */ EAPI void * eon_engine_image_create(Eon_Engine *e, Eon_Paint *p) { @@ -233,6 +184,7 @@ { e->checker_delete(engine_data); } + /* Debug */ EAPI void eon_engine_debug_rect(Eon_Engine *e, void *c, uint32_t color, int x, int y, int w, int h) { Added: trunk/PROTO/eon/src/lib/core/eon_font.c Modified: trunk/PROTO/eon/src/lib/paint/Makefile.am =================================================================== --- trunk/PROTO/eon/src/lib/paint/Makefile.am 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/lib/paint/Makefile.am 2009-09-03 17:43:41 UTC (rev 42212) @@ -4,7 +4,7 @@ AM_CPPFLAGS = \ -I. \ -I$(top_srcdir)/src/include \ -@ETK_CFLAGS@ +@EON_CFLAGS@ noinst_LTLIBRARIES = libeon_paint.la Modified: trunk/PROTO/eon/src/lib/parser/common/Makefile.am =================================================================== --- trunk/PROTO/eon/src/lib/parser/common/Makefile.am 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/lib/parser/common/Makefile.am 2009-09-03 17:43:41 UTC (rev 42212) @@ -3,7 +3,7 @@ AM_CPPFLAGS = \ -I. \ -I$(top_srcdir)/src/include \ -@ETK_CFLAGS@ +@EON_CFLAGS@ noinst_LTLIBRARIES = libeon_parser_common.la Modified: trunk/PROTO/eon/src/lib/parser/common/common_main.c =================================================================== --- trunk/PROTO/eon/src/lib/parser/common/common_main.c 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/lib/parser/common/common_main.c 2009-09-03 17:43:41 UTC (rev 42212) @@ -355,3 +355,8 @@ return eon_script_new(); } +Ekeko_Object * eon_parser_text_new(Ekeko_Object *p) +{ + return eon_parser_shape_new(p, eon_text_type_get); +} + Modified: trunk/PROTO/eon/src/lib/parser/exml/Makefile.am =================================================================== --- trunk/PROTO/eon/src/lib/parser/exml/Makefile.am 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/lib/parser/exml/Makefile.am 2009-09-03 17:43:41 UTC (rev 42212) @@ -5,7 +5,7 @@ AM_CPPFLAGS = \ -I. \ -I$(top_srcdir)/src/include \ -@ETK_CFLAGS@ \ +@EON_CFLAGS@ \ @EXML_CFLAGS@ Modified: trunk/PROTO/eon/src/lib/parser/exml/exml_main.c =================================================================== --- trunk/PROTO/eon/src/lib/parser/exml/exml_main.c 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/lib/parser/exml/exml_main.c 2009-09-03 17:43:41 UTC (rev 42212) @@ -377,6 +377,10 @@ { o = eon_parser_circle_new(parent); } + else if (!strcmp(tag, "text")) + { + o = eon_parser_text_new(parent); + } else if (!strcmp(tag, "image")) { o = (Ekeko_Object *)eon_image_new(); Modified: trunk/PROTO/eon/src/lib/script/neko/Makefile.am =================================================================== --- trunk/PROTO/eon/src/lib/script/neko/Makefile.am 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/lib/script/neko/Makefile.am 2009-09-03 17:43:41 UTC (rev 42212) @@ -5,7 +5,7 @@ AM_CPPFLAGS = \ -I. \ -I$(top_srcdir)/src/include \ -@ETK_CFLAGS@ +@EON_CFLAGS@ noinst_LTLIBRARIES = libeon_script_neko.la Modified: trunk/PROTO/eon/src/lib/shape/Makefile.am =================================================================== --- trunk/PROTO/eon/src/lib/shape/Makefile.am 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/lib/shape/Makefile.am 2009-09-03 17:43:41 UTC (rev 42212) @@ -4,7 +4,7 @@ AM_CPPFLAGS = \ -I. \ -I$(top_srcdir)/src/include \ -@ETK_CFLAGS@ +@EON_CFLAGS@ noinst_LTLIBRARIES = libeon_shape.la Modified: trunk/PROTO/eon/src/lib/shape/eon_shape.c =================================================================== --- trunk/PROTO/eon/src/lib/shape/eon_shape.c 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/lib/shape/eon_shape.c 2009-09-03 17:43:41 UTC (rev 42212) @@ -49,6 +49,7 @@ eng = eon_document_engine_get(d); s = (Eon_Shape *)o; prv = PRIVATE(s); + printf("%p %p\n", s, s->create); prv->engine_data = s->create(eng, s); } Modified: trunk/PROTO/eon/src/lib/shape/eon_text.c =================================================================== --- trunk/PROTO/eon/src/lib/shape/eon_text.c 2009-09-03 17:22:10 UTC (rev 42211) +++ trunk/PROTO/eon/src/lib/shape/eon_text.c 2009-09-03 17:43:41 UTC (rev 42212) @@ -5,8 +5,6 @@ * Author: jl */ -/* Should the text be a child of square? i.e with w and h properties? */ - #include "Eon.h" #include "eon_private.h" /*============================================================================* @@ -17,8 +15,33 @@ { Eon_Coord x, y; char *str; + int strw; /* the width of the string on pixels */ + int strh; /* the height of the string on pixels */ }; +static void _geometry_calc(const Ekeko_Object *o, Ekeko_Event *e, void *data) +{ + Eon_Rect *r = (Eon_Rect *)o; + Eina_Rectangle geom; + Eon_Coord x, y, w, h; + + eon_square_coords_get((Eon_Square *)r, &x, &y, &w, &h); + eina_rectangle_coords_from(&geom, x.final, y.final, w.final, + h.final); +#ifdef EON_DEBUG + printf("[Eon_Rect] Setting geometry of size %d %d %d %d\n", + x.final, y.final, w.final, h.final); +#endif + /* TODO get the min between the user's x, y and the strw/h */ + ekeko_renderable_geometry_set((Ekeko_Renderable *)r, &geom); +} + +static void _str_change(const Ekeko_Object *o, Ekeko_Event *e, void *data) +{ + /* FIXME get the bounding box of the text */ + _geometry_calc(o, e, data); +} + static void _render(Eon_Shape *s, Eon_Engine *eng, void *engine_data, void *canvas_data, Eina_Rectangle *clip) { Eon_Text *t; @@ -29,7 +52,7 @@ #ifdef EON_DEBUG printf("[Eon_Text] Rendering text %p into canvas %p\n", t, c); #endif - //eon_engine_text_render(eng, engine_data, canvas_data, clip); + eon_engine_text_render(eng, engine_data, canvas_data, clip); } static void _ctor(void *instance) @@ -39,9 +62,12 @@ t = (Eon_Text *) instance; t->private = prv = ekeko_type_instance_private_get(eon_text_type_get(), instance); - t->parent.render = _render; - //t->parent.create = eon_engine_text_create; + t->parent.parent.render = _render; + t->parent.parent.create = eon_engine_text_create; /* events */ + ekeko_event_listener_add((Ekeko_Object *)t, EON_SQUARE_X_CHANGED, _geometry_calc, EINA_FALSE, NULL); + ekeko_event_listener_add((Ekeko_Object *)t, EON_SQUARE_Y_CHANGED, _geometry_calc, EINA_FALSE, NULL); + ekeko_event_listener_add((Ekeko_Object *)t, EON_TEXT_STR_CHANGED, _str_change, EINA_FALSE, NULL); } static void _dtor(void *instance) @@ -63,8 +89,6 @@ /*============================================================================* * API * *============================================================================*/ -Ekeko_Property_Id EON_TEXT_X; -Ekeko_Property_Id EON_TEXT_Y; Ekeko_Property_Id EON_TEXT_STR; EAPI Ekeko_Type *eon_text_type_get(void) @@ -74,10 +98,8 @@ if (!type) { type = ekeko_type_new(EON_TYPE_TEXT, sizeof(Eon_Text), - sizeof(Eon_Text_Private), eon_shape_type_get(), + sizeof(Eon_Text_Private), eon_square_type_get(), _ctor, _dtor, _appendable); - EON_TEXT_X = EKEKO_TYPE_PROP_SINGLE_ADD(type, "x", EON_PROPERTY_COORD, OFFSET(Eon_Text_Private, x)); - EON_TEXT_Y = EKEKO_TYPE_PROP_SINGLE_ADD(type, "y", EON_PROPERTY_COORD, OFFSET(Eon_Text_Private, y)); EON_TEXT_STR = EKEKO_TYPE_PROP_SINGLE_ADD(type, "str", EKEKO_PROPERTY_STRING, OFFSET(Eon_Text_Private, str)); } @@ -102,6 +124,14 @@ ekeko_object_property_value_set((Ekeko_Object *)t, "str", &v); } +EAPI const char * eon_text_string_get(Eon_Text *t) +{ + Eon_Text_Private *prv; + + prv = PRIVATE(t); + return prv->str; +} + EAPI void eon_text_x_rel_set(Eon_Text *t, int x) { Eon_Coord coord; @@ -142,3 +172,4 @@ ekeko_object_property_value_set((Ekeko_Object *)t, "y", &v); } + Deleted: trunk/PROTO/eon/src/lib/widget/Makefile.in |