diff --git a/src/modules/Image/blit.c b/src/modules/Image/blit.c index 2930c504b0fd5575ce0d985f0d39634f424cd2d5..c4a6f7dac784084f69a652f8157e11c935561d70 100644 --- a/src/modules/Image/blit.c +++ b/src/modules/Image/blit.c @@ -1,10 +1,10 @@ -/* $Id: blit.c,v 1.21 1997/11/23 07:22:44 per Exp $ */ +/* $Id: blit.c,v 1.22 1997/11/23 21:58:53 per Exp $ */ #include "global.h" /* **! module Image **! note -**! $Id: blit.c,v 1.21 1997/11/23 07:22:44 per Exp $ +**! $Id: blit.c,v 1.22 1997/11/23 21:58:53 per Exp $ **! class image */ @@ -104,26 +104,26 @@ static INLINE void getrgb(struct image *img, void img_clear(rgb_group *dest,rgb_group rgb,INT32 size) { - int ok = 0; - THREADS_ALLOW(); - if(sizeof(rgb.r) == 1) - { - if(rgb.r == rgb.b && rgb.b == rgb.g) - (ok = 1),MEMSET(dest, rgb.r, size*sizeof(rgb_group)); - } else { - if(!rgb.r && !rgb.b && !rgb.g) - (ok = 1),MEMSET(dest, 0, size*sizeof(rgb_group)); - } - if(!ok) - { - int increment = 1; - rgb_group *from = dest; - *(dest++)=rgb; - for (; size > increment; size-=increment,dest+=increment,increment*=2) - MEMCPY(dest,from,increment*sizeof(rgb_group)); - MEMCPY(dest,from,size*sizeof(rgb_group)); - } - THREADS_DISALLOW(); + if(!size) return; + THREADS_ALLOW(); + if(!rgb.r && !rgb.b && !rgb.g) + MEMSET(dest, 0, size*sizeof(rgb_group)); + else if((sizeof(rgb.r) == 1) && (rgb.r == rgb.b && rgb.b == rgb.g)) + MEMSET(dest, rgb.r, size*sizeof(rgb_group)); + else if(size) + { + int increment = 1; + rgb_group *from = dest; + *(dest++)=rgb; + size--; + for (; size > increment; size-=increment,dest+=increment) + { + MEMCPY(dest,from,increment*sizeof(rgb_group)); + if(increment < 1024) increment *= 2; + } + if(size>0) MEMCPY(dest,from,size*sizeof(rgb_group)); + } + THREADS_DISALLOW(); } void img_box_nocheck(INT32 x1,INT32 y1,INT32 x2,INT32 y2) diff --git a/src/modules/Image/image.c b/src/modules/Image/image.c index 3f76f2495312a358b95a168b48cda3e1520e77d5..212b1c47a6d750c90fbe2585649ec5c5437ccfcd 100644 --- a/src/modules/Image/image.c +++ b/src/modules/Image/image.c @@ -1,9 +1,9 @@ -/* $Id: image.c,v 1.67 1997/11/23 07:22:45 per Exp $ */ +/* $Id: image.c,v 1.68 1997/11/23 21:58:55 per Exp $ */ /* **! module Image **! note -**! $Id: image.c,v 1.67 1997/11/23 07:22:45 per Exp $ +**! $Id: image.c,v 1.68 1997/11/23 21:58:55 per Exp $ **! class image **! **! The main object of the <ref>Image</ref> module, this object @@ -82,7 +82,7 @@ #include "stralloc.h" #include "global.h" -RCSID("$Id: image.c,v 1.67 1997/11/23 07:22:45 per Exp $"); +RCSID("$Id: image.c,v 1.68 1997/11/23 21:58:55 per Exp $"); #include "pike_macros.h" #include "object.h" #include "constants.h" @@ -1176,6 +1176,7 @@ image_tuned_box_leftright(const rgba_group left, const rgba_group right, { int x, y=height, w; rgb_group *from = dest; + if(!xsize || !height) return; for(x=0; x<length; x++) { (dest+x)->r = (((long)left.r)*(length-x)+((long)right.r)*(x))/length; @@ -1194,6 +1195,7 @@ image_tuned_box_topbottom(const rgba_group left, const rgba_group right, { int x,y; rgb_group color, *from, old; + if(!xsize || !height) return; if(length > 128) { for(y=0; y<height; y++)