pike.git / lib / modules / _Image_PSD.pmod

version» Context lines:

pike.git/lib/modules/_Image_PSD.pmod:18:    object image;    object alpha;       int flags;    int xoffset, yoffset;    int width, height;       int mask_flags;    int mask_xoffset, mask_yoffset;    int mask_width, mask_height; +  int mask_default_color;   }         int foo;   Layer decode_layer(mapping layer, mapping i)   {   // int stt = gethrtime();    Layer l = Layer();    int use_cmap;    l->opacity = layer->opacity;    l->width = layer->right-layer->left;    l->height = layer->bottom-layer->top;    l->xoffset = layer->left;    l->yoffset = layer->top;    l->image = Image.image( l->width, l->height );    l->mode = layer->mode;    l->flags = layer->flags;    l->name = layer->name; -  +  l->mask_flags = layer->mask_flags; +  l->mask_default_color = layer->mask_default_color;       l->mask_width = layer->mask_right-layer->mask_left;    l->mask_height = layer->mask_bottom-layer->mask_top;    l->mask_xoffset = layer->mask_left;    l->mask_yoffset = layer->mask_top;    -  if( !(l->mask_flags & 1 ) ) // pos relative to layer +  if(l->mask_flags & 1) // pos relative to layer    { -  l->mask_xoffset -= l->xoffset; -  l->mask_yoffset -= l->yoffset; +  l->mask_xoffset += l->xoffset; +  l->mask_yoffset += l->yoffset;    }    array colors;    int inverted;       switch(i->mode)    {    case RGB:    array lays = ({});    foreach( layer->channels, mapping c )    {
pike.git/lib/modules/_Image_PSD.pmod:125:    {    object tmp;       if( !colors && (c->id >= 0 ))    continue;       if( c->id != -2)    tmp = ___decode_image_channel(l->width, l->height, c->data);    else    tmp = ___decode_image_channel(l->mask_width,l->mask_height,c->data); +     switch( c->id )    {    default:    if(!use_cmap)    {    if(inverted)    l->image -= tmp*colors[c->id%sizeof(colors)];    else    l->image += tmp*colors[c->id%sizeof(colors)];    } else {
pike.git/lib/modules/_Image_PSD.pmod:146:    l->image = tmp;    }    break;    case -1: /* alpha */    if(!l->alpha)    l->alpha = tmp;    else    l->alpha *= tmp;    break;    case -2: /* user mask */ -  if(!(l->mask_flags & 2 )) /* layer mask disabled */ +  if(!(l->mask_flags & 2)) /* layer mask disabled */    { -  array pad_color = ({ 0, 0, 0 }); -  if( (l->mask_flags & 4 ) ) { -  /* invert mask */ +  array pad_color = ({ l->mask_default_color }) * 3; +  int x0 = l->xoffset - l->mask_xoffset; +  int y0 = l->yoffset - l->mask_yoffset; +  tmp = tmp->copy(x0, y0, +  x0 + l->image->xsize() - 1, +  y0 + l->image->ysize() - 1, +  @pad_color); +  +  if(l->mask_flags & 4) /* invert mask */    tmp = tmp->invert(); -  pad_color = ({ 255, 255, 255 }); -  } +     -  tmp = tmp->copy( -l->mask_xoffset, -l->mask_yoffset, -  l->image->xsize()-1, l->image->ysize()-1, -  @pad_color ) -  ->copy(0,0,l->image->xsize()-1,l->image->ysize()-1, -  @pad_color); +     if(!l->alpha)    l->alpha = tmp;    else    l->alpha *= tmp;    break;    }    }    c->data = 0;    }   // werror(" mode %s image %O alpha %O\n",