From 55bba3ab5e966b9e6c4f6d104ce292b4528c6a25 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Mon, 13 Aug 2001 09:15:04 +0000 Subject: [PATCH] optimize! software enigne image objects will keep a pre-scaled copy IF: 1. they are rendered completely unclipped by clip obejcts or edges of the canvas for more than 16 iterations at the same size with no border scaling 2. it will throw thme out if things chnage 3. it will share image objects only of original size :) SVN revision: 5139 --- legacy/evas/README | 2 +- legacy/evas/configure.in | 2 +- legacy/evas/doc/Makefile.am | 3 ++ legacy/evas/evas.spec | 8 ++++-- legacy/evas/src/Makefile.am | 2 +- legacy/evas/src/evas_imlib_routines.c | 40 +++++++++++++++++++++------ legacy/evas/src/evas_imlib_routines.h | 3 +- legacy/evas/src/evas_render.c | 16 +++++++---- 8 files changed, 54 insertions(+), 22 deletions(-) diff --git a/legacy/evas/README b/legacy/evas/README index eda10246e8..b82b4213cd 100644 --- a/legacy/evas/README +++ b/legacy/evas/README @@ -1,5 +1,5 @@ ------------------------------------------------------------------------------- - E V A S - 0.5.0 + E V A S - 0.6.0 ------------------------------------------------------------------------------- This is the ``E Canvas'' - a rip off of some of the other canvas's floating diff --git a/legacy/evas/configure.in b/legacy/evas/configure.in index 23d33412c8..6ec95eac82 100644 --- a/legacy/evas/configure.in +++ b/legacy/evas/configure.in @@ -1,7 +1,7 @@ # SETUP AC_INIT(src/Evas.h) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(evas, 0.5.0) +AM_INIT_AUTOMAKE(evas, 0.6.0) IMLIB2_CONFIG_IN_PATH=xyes AC_PROGRAM_CHECK(IMLIB2_CONFIG_IN_PATH, imlib2-config, xyes, xno) diff --git a/legacy/evas/doc/Makefile.am b/legacy/evas/doc/Makefile.am index f1f7c13146..e0d0864d28 100644 --- a/legacy/evas/doc/Makefile.am +++ b/legacy/evas/doc/Makefile.am @@ -1,2 +1,5 @@ EXTRA_DIST = \ evas.sdw evas.pdf +evasdir = $(datadir)/evas/doc +evas_DATA = \ +evas.sdw evas.pdf diff --git a/legacy/evas/evas.spec b/legacy/evas/evas.spec index 30f7440484..16efd15cdd 100644 --- a/legacy/evas/evas.spec +++ b/legacy/evas/evas.spec @@ -1,6 +1,6 @@ # this is NOT relocatable, unless you alter the patch! %define name evas -%define ver 0.5.0 +%define ver 0.6.0 %define rel 1 %define prefix /usr @@ -19,7 +19,7 @@ Packager: Term Vendor: The Enlightenment Development Team Source: ftp://ftp.enlightenment.org/enlightenment/%{name}-%{ver}.tar.gz BuildRoot: /var/tmp/%{name}-root -Requires: imlib2 >= 1.0.3 +Requires: imlib2 >= 1.0.4 %description Evas is an advanced canvas library, providing three backends for @@ -67,7 +67,8 @@ rm -rf $RPM_BUILD_ROOT %defattr(-,root,root) %{prefix}/lib/libevas.so.* %{prefix}/bin/evas_* -%{prefix}/share/evas/* +%{prefix}/share/evas/fnt +%{prefix}/share/evas/img %files devel %defattr(-,root,root) @@ -75,3 +76,4 @@ rm -rf $RPM_BUILD_ROOT %{prefix}/lib/libevas.*a %{prefix}/include/Evas.h %{prefix}/bin/evas-config +%{prefix}/share/evas/doc diff --git a/legacy/evas/src/Makefile.am b/legacy/evas/src/Makefile.am index 7e4742bac6..7a896f4003 100644 --- a/legacy/evas/src/Makefile.am +++ b/legacy/evas/src/Makefile.am @@ -59,4 +59,4 @@ Evas_private.h libevas_la_LIBADD = $(LIBS_ALL) libevas_la_DEPENDENCIES = $(top_builddir)/config.h -libevas_la_LDFLAGS = -version-info 5:0:5 +libevas_la_LDFLAGS = -version-info 6:0:6 diff --git a/legacy/evas/src/evas_imlib_routines.c b/legacy/evas/src/evas_imlib_routines.c index c24a643402..22d851dca4 100644 --- a/legacy/evas/src/evas_imlib_routines.c +++ b/legacy/evas/src/evas_imlib_routines.c @@ -55,7 +55,7 @@ __evas_imlib_image_cache_clean(void) __evas_image_cache_used -= imlib_image_get_width() * imlib_image_get_height() * 4; - imlib_free_image_and_decache(); + imlib_free_image(); if (last->scaled.image) { imlib_context_set_image(last->scaled.image); @@ -113,17 +113,16 @@ __evas_imlib_image_new_from_file(Display *disp, char *file) Evas_Imlib_Image *im; Imlib_Image image; - im = __evas_imlib_image_cache_find(file); - if (im) return im; - image = imlib_load_image(file); if (!image) return NULL; im = malloc(sizeof(Evas_Imlib_Image)); im->file = strdup(file); im->image = image; im->scaled.aa = 0; + im->scaled.w = 0; + im->scaled.h = 0; im->scaled.image = NULL; - im->life = 0; + im->scaled.usage = 0; im->references = 1; images = evas_list_prepend(images, im); return im; @@ -216,7 +215,6 @@ __evas_imlib_image_draw(Evas_Imlib_Image *im, imlib_context_set_direction(IMLIB_TEXT_TO_RIGHT); imlib_context_set_anti_alias(__evas_anti_alias); imlib_context_set_blend(1); -/* if (im->life < 65536) im->life++;*/ for(l = drawable_list; l; l = l->next) { Evas_Imlib_Drawable *dr; @@ -247,8 +245,7 @@ __evas_imlib_image_draw(Evas_Imlib_Image *im, if (!up->image) up->image = imlib_create_image(up->w, up->h); /* if our src and dest are 1:1 scaling.. use original */ - if (((dst_w == src_w) && (dst_h == src_h)) || - (im->life < 2)) + if ((dst_w == src_w) && (dst_h == src_h)) { imlib_context_set_image(up->image); imlib_blend_image_onto_image(im->image, 0, @@ -256,6 +253,7 @@ __evas_imlib_image_draw(Evas_Imlib_Image *im, dst_x - up->x, dst_y - up->y, dst_w, dst_h); if (im->scaled.image) { + im->scaled.usage = 0; imlib_context_set_image(im->scaled.image); imlib_free_image(); im->scaled.image = NULL; @@ -352,6 +350,29 @@ __evas_imlib_image_draw(Evas_Imlib_Image *im, iw = imlib_image_get_width(); ih = imlib_image_get_height(); + if ((dst_w == im->scaled.w) && + (dst_h == im->scaled.h) && + (__evas_anti_alias == im->scaled.aa)) + { + Imlib_Border bd; + + imlib_context_set_image(im->image); + imlib_image_get_border(&bd); + if ((bd.left != 0) || + (bd.right != 0) || + (bd.top != 0) || + (bd.bottom != 0)) + im->scaled.usage = 0; + else + im->scaled.usage++; + } + else + { + im->scaled.usage = 0; + im->scaled.w = dst_w; + im->scaled.h = dst_h; + im->scaled.aa = __evas_anti_alias; + } /* if we are using the WHOLE src image */ if ((src_x == 0) && (src_y == 0) && (src_w == iw) && (src_h == ih) && @@ -360,7 +381,8 @@ __evas_imlib_image_draw(Evas_Imlib_Image *im, (dst_w + dst_x <= win_w) && (dst_h + dst_y <= win_h) && ((!__evas_clip) || ((dst_x >= __evas_clip_x) && (dst_y >= __evas_clip_y) && - (dst_w + dst_x <= __evas_clip_w) && (dst_h + dst_y <= __evas_clip_h))))) + (dst_w + dst_x <= __evas_clip_w) && (dst_h + dst_y <= __evas_clip_h)))) && + (im->scaled.usage > 15)) { imlib_context_set_image(im->image); im->scaled.image = imlib_create_cropped_scaled_image(0, 0, iw, ih, diff --git a/legacy/evas/src/evas_imlib_routines.h b/legacy/evas/src/evas_imlib_routines.h index a0228c8054..807501258b 100644 --- a/legacy/evas/src/evas_imlib_routines.h +++ b/legacy/evas/src/evas_imlib_routines.h @@ -38,9 +38,10 @@ struct _evas_imlib_image Imlib_Image image; struct { int aa; + int w, h; Imlib_Image image; + int usage; } scaled; - int life; int references; }; diff --git a/legacy/evas/src/evas_render.c b/legacy/evas/src/evas_render.c index 0a2e2f2f13..de1552b9d1 100644 --- a/legacy/evas/src/evas_render.c +++ b/legacy/evas/src/evas_render.c @@ -910,12 +910,16 @@ evas_render_updates(Evas e) void *im; oo = o; - if (o->renderer_data.method[e->current.render_method]) - im = (void *)o->renderer_data.method[e->current.render_method]; - else - o->renderer_data.method[e->current.render_method] = - im = - func_image_new_from_file(e->current.display, oo->current.file); + im = NULL; + if (oo->current.file) + { + if (o->renderer_data.method[e->current.render_method]) + im = (void *)o->renderer_data.method[e->current.render_method]; + else + o->renderer_data.method[e->current.render_method] = + im = + func_image_new_from_file(e->current.display, oo->current.file); + } if (im) { int visx, visy, visw, vish;