The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
MODULE = IUP::Canvas::Pattern        PACKAGE = IUP::Canvas::Pattern   PREFIX = __Pattern__

IUP::Canvas::Pattern
__Pattern__new(CLASS,...)
                char *CLASS
        INIT:
                int w, h, i;
                long *data;
        CODE:
                if (items==2) {
                  if (!AV2long2D(ST(1), &data, &w, &h)) XSRETURN_UNDEF;
                }
                else {
                  w = SvIV(ST(1));
                  h = SvIV(ST(2));
                  if (w<=0 || h<=0) XSRETURN_UNDEF;
                  data = malloc(sizeof(long)*w*h);
                  if (!data) XSRETURN_UNDEF;
                  for(i=0; i<w*h; i++) data[i] = 0;
                }
                Newz(0, RETVAL, 1, struct __IUPinternal_cdPattern);
                RETVAL->w = w;
                RETVAL->h = h;
                RETVAL->pattern = data;
        OUTPUT:
                RETVAL

long
__Pattern__Pixel(self,x,y,...)
                IUP::Canvas::Pattern self;
                int x;
                int y;
        CODE:
                if ((x >= self->w) || (x < 0)) XSRETURN_UNDEF;
                if ((y >= self->h) || (y < 0)) XSRETURN_UNDEF;
                if (items>3) {
                  self->pattern[x+y*self->w] = SvIV(ST(3));
                  XSRETURN_UNDEF;
                }
                RETVAL = self->pattern[x+y*self->w];
        OUTPUT:
                RETVAL

int
__Pattern__Width(self)
                IUP::Canvas::Pattern self
        CODE:
                RETVAL = self->w;
        OUTPUT:
                RETVAL

int
__Pattern__Height(self)
                IUP::Canvas::Pattern self
        CODE:
                RETVAL = self->h;
        OUTPUT:
                RETVAL

SV*
__Pattern__Data(self)
                IUP::Canvas::Pattern self
        CODE:
                RETVAL = long2D2AV(self->pattern, self->w, self->h);
        OUTPUT:
                RETVAL