pike.git / src / modules / Image / blit.c

version» Context lines:

pike.git/src/modules/Image/blit.c:7:   #include "global.h"      /*   **! module Image   **! class Image   */      #include <math.h>   #include <ctype.h>    - #include "global.h" +    #include "pike_macros.h"   #include "interpret.h"   #include "svalue.h"   #include "pike_error.h"   #include "threads.h"      #include "image.h"   #include "image_machine.h"      #define sp Pike_sp      extern struct program *image_program;   #ifdef THIS   #undef THIS /* Needed for NT */   #endif   #define THIS ((struct image *)(Pike_fp->current_storage))   #define THISOBJ (Pike_fp->current_object)    - #define absdiff(a,b) ((a)<(b)?((b)-(a)):((a)-(b))) -  +    #if 0   #include <sys/resource.h>   #define CHRONO(X) chrono(X)      static void chrono(char *x)   {    struct rusage r;    static struct rusage rold;    getrusage(RUSAGE_SELF,&r);    fprintf(stderr,"%s: %ld.%06ld - %ld.%06ld\n",x,
pike.git/src/modules/Image/blit.c:54:    );       rold=r;   }   #else   #define CHRONO(X)   #endif      /***************** internals ***********************************/    - #define testrange(x) MAXIMUM(MINIMUM((x),255),0) -  - #define apply_alpha(x,y,alpha) \ -  ((unsigned char)((y*(255L-(alpha))+x*(alpha))/255L)) -  - #define set_rgb_group_alpha(dest,src,alpha) \ -  (((dest).r=apply_alpha((dest).r,(src).r,alpha)), \ -  ((dest).g=apply_alpha((dest).g,(src).g,alpha)), \ -  ((dest).b=apply_alpha((dest).b,(src).b,alpha))) -  - #define pixel(_img,x,y) ((_img)->img[(x)+(y)*(_img)->xsize]) -  - #define setpixel(x,y) \ -  (THIS->alpha? \ -  set_rgb_group_alpha(THIS->img[(x)+(y)*THIS->xsize],THIS->rgb,THIS->alpha): \ -  ((pixel(THIS,x,y)=THIS->rgb),0)) -  - #define setpixel_test(x,y) \ -  (((x)<0||(y)<0||(x)>=THIS->xsize||(y)>=THIS->ysize)? \ -  0:(setpixel(x,y),0)) -  +    static inline int getrgb(struct image *img,    INT32 args_start,INT32 args,INT32 max,char *name)   {    INT32 i;    if (args-args_start<1) return 0;       if (image_color_svalue(sp-args+args_start,&(img->rgb)))    return 1;       if (max<3 || args-args_start<3) return 0;
pike.git/src/modules/Image/blit.c:285:   */      void image_paste(INT32 args)   {    struct image *img=NULL;    INT32 x1,y1,x2,y2,blitwidth,blitheight;       if (args<1    || TYPEOF(sp[-args]) != T_OBJECT    || !(img=get_storage(sp[-args].u.object,image_program))) -  bad_arg_error("paste",sp-args,args,1,"",sp+1-1-args, +  bad_arg_error("paste",args,1,"",sp+1-1-args,    "Bad argument 1 to paste.\n");    if (!THIS->img) return;       if (!img->img) return;       if (args>1)    {    if (args<3    || TYPEOF(sp[1-args]) != T_INT    || TYPEOF(sp[2-args]) != T_INT) -  bad_arg_error("paste",sp-args,args,0,"",sp-args, +  bad_arg_error("paste",args,0,"",sp-args,    "Bad arguments to paste.\n");    x1=sp[1-args].u.integer;    y1=sp[2-args].u.integer;    }    else x1=y1=0;       if(x1 >= THIS->xsize || y1 >= THIS->ysize) /* Per */    {    pop_n_elems(args);    ref_push_object(THISOBJ);
pike.git/src/modules/Image/blit.c:365:   void image_paste_alpha(INT32 args)   {    struct image *img = NULL;    INT32 x1,y1;       if (args<2    || TYPEOF(sp[-args]) != T_OBJECT    || !sp[-args].u.object    || !(img=get_storage(sp[-args].u.object,image_program))    || TYPEOF(sp[1-args]) != T_INT) -  bad_arg_error("paste_alpha",sp-args,args,0,"",sp-args, +  bad_arg_error("paste_alpha",args,0,"",sp-args,    "Bad arguments to paste_alpha.\n");    if (!THIS->img) return;    if (!img->img) return;    THIS->alpha=(unsigned char)(sp[1-args].u.integer);       if (args>=4)    {    if (TYPEOF(sp[2-args]) != T_INT    || TYPEOF(sp[3-args]) != T_INT) -  bad_arg_error("paste_alpha",sp-args,args,0,"",sp-args, +  bad_arg_error("paste_alpha",args,0,"",sp-args,    "Bad arguments to paste_alpha.\n");    x1=sp[2-args].u.integer;    y1=sp[3-args].u.integer;    }    else x1=y1=0;       if(x1 >= THIS->xsize || y1 >= THIS->ysize) /* Per */    {    pop_n_elems(args);    ref_push_object(THISOBJ);
pike.git/src/modules/Image/blit.c:453:    INT32 x1,y1,x,y,x2,y2,smod,dmod,mmod;    rgb_group *s,*d,*m;    double q;      CHRONO("image_paste_mask init");       if (args<2)    Pike_error("illegal number of arguments to image->paste_mask()\n");    if (TYPEOF(sp[-args]) != T_OBJECT    || !(img=get_storage(sp[-args].u.object,image_program))) -  bad_arg_error("paste_mask",sp-args,args,1,"",sp+1-1-args, +  bad_arg_error("paste_mask",args,1,"",sp+1-1-args,    "Bad argument 1 to paste_mask.\n");    if (TYPEOF(sp[1-args]) != T_OBJECT    || !(mask=get_storage(sp[1-args].u.object,image_program))) -  bad_arg_error("paste_mask",sp-args,args,2,"",sp+2-1-args, +  bad_arg_error("paste_mask",args,2,"",sp+2-1-args,    "Bad argument 2 to paste_mask.\n");    if (!THIS->img) return;       if (!mask->img) return;    if (!img->img) return;       if (args>=4)    {    if (TYPEOF(sp[2-args]) != T_INT    || TYPEOF(sp[3-args]) != T_INT)
pike.git/src/modules/Image/blit.c:559:    rgb_group rgb,*d,*m;    INT32 mmod,dmod;    double q;    int arg=1;       if (args<1)    SIMPLE_WRONG_NUM_ARGS_ERROR("image->paste_alpha_color",1);    if (TYPEOF(sp[-args]) != T_OBJECT    || !sp[-args].u.object    || !(mask=get_storage(sp[-args].u.object,image_program))) -  bad_arg_error("paste_alpha_color",sp-args,args,1,"",sp+1-1-args, +  bad_arg_error("paste_alpha_color",args,1,"",sp+1-1-args,    "Bad argument 1 to paste_alpha_color.\n");    if (!THIS->img) return;    if (!mask->img) return;       if (args==6 || args==4 || args==2 || args==3) /* color at arg 2.. */ -  arg=1+getrgb(THIS,1,args,3,"image->paste_alpha_color()\n"); +  arg=1+getrgb(THIS,1,args,3,"paste_alpha_color");    if (args>arg+1)    {    if (TYPEOF(sp[arg-args]) != T_INT    || TYPEOF(sp[1+arg-args]) != T_INT)    Pike_error("illegal coordinate arguments to image->paste_alpha_color()\n");    x1=sp[arg-args].u.integer;    y1=sp[1+arg-args].u.integer;    }    else x1=y1=0;