[rt #69243] use the AV* typemap for i_matrix_transform()
authorTony Cook <tony@develop-help.com>
Tue, 21 May 2013 11:01:15 +0000 (21:01 +1000)
committerTony Cook <tony@develop-help.com>
Tue, 21 May 2013 11:01:15 +0000 (21:01 +1000)
Changes
Imager.xs

diff --git a/Changes b/Changes
index d38e842..75a70e5 100644 (file)
--- a/Changes
+++ b/Changes
@@ -17,8 +17,8 @@ Imager release history.  Older releases can be found in Changes.old
  - Imager::Color's rgba() method now returns it's values as integers
    instead of floating point. (IV instead of NV).
 
- - The XS for i_poly_aa() and i_poly_aa_cfill() now use the AV *
-   typemap instead of rolling their own.
+ - The XS for i_poly_aa(), i_poly_aa_cfill() and i_matrix_transform()
+   now use the AV * typemap instead of rolling their own.
    https://rt.cpan.org/Ticket/Display.html?id=69243 (partial)
 
 Imager 0.96 - 19 May 2013
index bd322b3..a54fad3 100644 (file)
--- a/Imager.xs
+++ b/Imager.xs
@@ -1981,27 +1981,24 @@ i_rotate_exact(im, amount, ...)
        RETVAL
 
 Imager::ImgRaw
-i_matrix_transform(im, xsize, ysize, matrix, ...)
+i_matrix_transform(im, xsize, ysize, matrix_av, ...)
     Imager::ImgRaw      im
                i_img_dim      xsize
                i_img_dim      ysize
+    AV *matrix_av
       PREINIT:
         double matrix[9];
-        AV *av;
-        IV len;
+        STRLEN len;
         SV *sv1;
         int i;
        i_color *backp = NULL;
        i_fcolor *fbackp = NULL;
       CODE:
-        if (!SvROK(ST(3)) || SvTYPE(SvRV(ST(3))) != SVt_PVAV)
-          croak("i_matrix_transform: parameter 4 must be an array ref\n");
-       av=(AV*)SvRV(ST(3));
-       len=av_len(av)+1;
+       len=av_len(matrix_av)+1;
         if (len > 9)
           len = 9;
         for (i = 0; i < len; ++i) {
-         sv1=(*(av_fetch(av,i,0)));
+         sv1=(*(av_fetch(matrix_av,i,0)));
          matrix[i] = SvNV(sv1);
         }
         for (; i < 9; ++i)