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
This commit is contained in:
Carsten Haitzler 2001-08-13 09:15:04 +00:00
parent bfd707ce99
commit 55bba3ab5e
8 changed files with 54 additions and 22 deletions

View File

@ -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

View File

@ -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)

View File

@ -1,2 +1,5 @@
EXTRA_DIST = \
evas.sdw evas.pdf
evasdir = $(datadir)/evas/doc
evas_DATA = \
evas.sdw evas.pdf

View File

@ -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 <kempler@utdallas.edu>
Vendor: The Enlightenment Development Team <e-develop@enlightenment.org>
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

View File

@ -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

View File

@ -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,

View File

@ -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;
};

View File

@ -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;