]> git.eshelyaron.com Git - emacs.git/commitdiff
cosmetics, and changing of defconst to defcustom
authorJoakim Verona <joakim@verona.se>
Mon, 14 Jun 2010 21:27:03 +0000 (23:27 +0200)
committerJoakim Verona <joakim@verona.se>
Mon, 14 Jun 2010 21:27:03 +0000 (23:27 +0200)
README.imagemagick
lisp/image.el
src/image.c

index 52214a23b25b957372e0ea5dfdcf9863047509f7..22be443baa8e8a741fd8b7188b43383df573247f 100644 (file)
@@ -15,18 +15,45 @@ autoconf
 
 
 * TODO
-** complete documentation drafts below
-
-** fix inconsistencys with spelling of imagemagick in the src
-** report number of images in image bundle types somehow
-** probably add pdf to inhibited types
-** inhibit types is defconst should probably be defcustom
-** decide what to do with some uncommitted imagemagick support
+#B _ complete documentation drafts below
+
+#B X fix inconsistencys with spelling of imagemagick in the src
+#B X report number of images in image bundle types somehow
+Works like for "gif" support. Thanks to Juri Linkov.
+#B X probably add pdf to inhibited types
+#B X inhibit types is defconst should probably be defcustom
+#B _ decide what to do with some uncommitted imagemagick support
   functions for image size etc.
-** Test with more systems
+#B _ Test with more systems
 Tested on Fedora 12 so far, and the libmagick that ships with it.
 Ubuntu 8.04 was also tested, but it seems it ships a broken ImageMagick.
-Also need some way to handle render methods that only work on newer ImageMagicks
+#B X Also need some way to handle render methods that only work on newer ImageMagicks
+Is handled by configure now
+
+* Some nits from Stefan Monnier
+I just took a quick look at the code and I see the following nits to fix:
+#B _ obviously a merge will have to come with a good ChangeLog.
+#B X also the merge will need to come with documentation.  Maybe not in the
+   Texinfo form yet, but at least in the etc/NEWS with enough info that
+   describes the `scale' and other such arguments that someone can start
+   using them.
+#B X the README talks about naming inconsistencies, I think these should be
+  fixed before a first commit (should be straightforward).
+
+#B X the "let" in image.el should not be followed by a line break and the while
+   should be replaced by a dolist.
+
+#B X the prototype of imagemagick_load_image has some odd indentation in ([[2010.06.14]])
+   its args, not sure what happened.
+#B X a few lines in the C code break the 80columns limit.
+#B X please use ANSI style function declarations rather than K&R for new code. ([[2010.06.14]])
+#B X you can get rid of the prototypes by reordering the code. ([[2010.06.14]])
+#B X the docstrings in DEFUN should not be indented (they'll display ([[2010.06.14]])
+   weirdly otherwise in C-h f).
+#B X Some "{" are at the end of a for/if rather than on their own line. ([[2010.06.14]])
+#B X why use "*( imtypes + i)" rather than "imtypes[i]"? ([[2010.06.14]])
+#B X some "," lack a space after them. ([[2010.06.14]])
+#B X several "=" and "==" lack spaces around them. ([[2010.06.14]])
 
 
 * NEWS entry
@@ -44,7 +71,7 @@ The function (imagemagick-register-types) will enable the imagemagick
 support for the extensions in imagemagick-types minus the types listed
 in imagemagick-types-inhibit.
 
-imagemagick-types-inhibit has the value  '(C HTML HTM TXT) by default.
+imagemagick-types-inhibit has the value  '(C HTML HTM TXT PDF) by default.
 This means imagemagick will be used also to load jpeg files, if you
 have both jpeg and imagemagick libraries linked. Add 'JPG to
 imagemagick-types-inhibit if you do not want this.
@@ -52,22 +79,36 @@ imagemagick-types-inhibit if you do not want this.
 Images loaded with imagemagick will support a couple of new display
 specifications:
 
-- scale
-- rotation
-- index
+- :scale takes a geometry string as defined by ImageMagick:
 
-See the ImageMagick manual for information on how these specifications
-work.
+scale%            
+scale-x%xscale-y% 
+width             
+xheight           
+widthxheight      
+widthxheight^     
+widthxheight!     
+widthxheight>     
+widthxheight<     
+area@             
+{size}{offset}                                                                                                                                                               {size}{+-}x{+-}y
 
-The image-metadata function can be used to retrieve the total number
-of images in an image bundle, and the :index property can be used to
-show a particular image within the bundle. This is simmilar to how GIF
-files work.
+See the ImageMagick manual for more information.
+
+- :rotation specifies a rotation angle in degrees.
 
+- :index specifies which image inside an image bundle file format, such
+as TIFF or DJVM, to view.
+
+The image-metadata function can be used to retrieve the total number
+of images in an image bundle. This is simmilar to how GIF files work.
 
 
 * Changelog entry
-nothing yet
+2010-06-12 Joakim Verona <joakim@verona.se>
+           * image.c
+           * image.el
+           
 
 * Manual entry
-nothing yet
\ No newline at end of file
+nothing yet, but the NEWS entry could be adapted.
\ No newline at end of file
index fe6af0cefdad74f6b9221e5c1546540b75a9bef4..5b7b26b58e8a84f2f39961f210e19111ccd62b2b 100644 (file)
@@ -694,8 +694,8 @@ shall be displayed."
        (cons images tmo))))))
 
 \f
-(defconst imagemagick-types-inhibit
-  '(C HTML HTM TXT)
+(defcustom imagemagick-types-inhibit
+  '(C HTML HTM TXT PDF)
   "Types the imagemagick loader should not try to handle.")
 
 ;;;###autoload
index 9de83fa05e2532fab126fd64326eef3308f69e5f..4b4eb4e1c2e91de54fb3ef574324a2677985f15d 100644 (file)
@@ -7645,21 +7645,28 @@ imagemagick_image_p (Lisp_Object object)
 #define DrawRectangle DrawRectangleGif
 #include <wand/MagickWand.h>
 
-/* imagemagick_load_image is a helper function for imagemagick_load, which does the
-   actual loading given contents and size, apart from frame and image
-   structures, passed from imagemagick_load.
+/* imagemagick_load_image is a helper function for imagemagick_load,
+   which does the actual loading given contents and size, apart from
+   frame and image structures, passed from imagemagick_load.
 
    Uses librimagemagick to do most of the image processing.
 
-   Returns non-zero when successful.
+    non-zero when successful.
 */
 
 static int
-imagemagick_load_image (struct frame *f,        /* Pointer to emacs frame structure.  */
-                        struct image *img,      /* Pointer to emacs image structure.  */
-                        unsigned char *contents,/* String containing the IMAGEMAGICK data to be parsed.  */
-                        unsigned int size,      /* Size of data in bytes.  */
-                        unsigned char *filename)/* Filename, either pass filename or contents/size.  */
+imagemagick_load_image (/* Pointer to emacs frame structure.  */
+                        struct frame *f,
+                        /* Pointer to emacs image structure.  */
+                        struct image *img, 
+                        /* String containing the IMAGEMAGICK data to
+                           be parsed.  */
+                        unsigned char *contents,
+                        /* Size of data in bytes.  */
+                        unsigned int size,
+                        /* Filename, either pass filename or
+                           contents/size.  */
+                        unsigned char *filename)
 {
   long unsigned int width;
   long unsigned int height;
@@ -7716,17 +7723,17 @@ imagemagick_load_image (struct frame *f,        /* Pointer to emacs frame struct
 
  
   if (MagickGetNumberImages(image_wand) > 1)
-    img->data.lisp_val = Fcons (Qcount,
-                                Fcons (make_number (MagickGetNumberImages(image_wand)),
-                                       img->data.lisp_val));
+    img->data.lisp_val =
+      Fcons (Qcount,
+             Fcons (make_number (MagickGetNumberImages(image_wand)),
+                    img->data.lisp_val));
   if(ino == 0)
     MagickSetFirstIterator(image_wand);
   else
     MagickSetIteratorIndex(image_wand, ino);
 
-  /*
-    If width and/or height is set in the display spec
-    assume we want to scale to those.  */
+  /* If width and/or height is set in the display spec assume we want
+    to scale to those.  */
 
   value = image_spec_value (img->spec, QCwidth, NULL);
   desired_width = (INTEGERP (value)  ? XFASTINT (value) : -1);
@@ -7742,22 +7749,25 @@ imagemagick_load_image (struct frame *f,        /* Pointer to emacs frame struct
       }
     }
 
-  /* Also support :geometry and :crop which are imagemagick specific descriptors.  */
+  /* Also support :geometry and :crop which are imagemagick specific
+     descriptors.  */
 
   crop     = image_spec_value (img->spec, QCcrop, NULL);
   geometry = image_spec_value (img->spec, QCgeometry, NULL);
   if (STRINGP (crop) && STRINGP (geometry))
     {
       printf("MagickTransformImage %s %s\n", SDATA(crop), SDATA(geometry));
-      image_wand = MagickTransformImage (image_wand, SDATA (crop), SDATA (geometry));
+      image_wand = MagickTransformImage (image_wand, SDATA (crop),
+                                         SDATA (geometry));
       /* TODO differ between image_wand and transform_wand. */
     }
 
-  /* Furthermore :rotation. we need background color and angle for rotation.  */
+  /* Furthermore :rotation. we need background color and angle for
+     rotation.  */
   /*
-    TODO background handling for rotation
-    specified_bg = image_spec_value (img->spec, QCbackground, NULL);
-    if (!STRINGP (specified_bg)
+    TODO background handling for rotation specified_bg =
+    image_spec_value (img->spec, QCbackground, NULL); if (!STRINGP
+    (specified_bg)
   */
   value = image_spec_value (img->spec, QCrotation, NULL);
   if (FLOATP (value))
@@ -7799,11 +7809,13 @@ imagemagick_load_image (struct frame *f,        /* Pointer to emacs frame struct
   
 
   init_color_table ();
-  imagemagick_rendermethod = (INTEGERP (Vimagemagick_render_type) ? XFASTINT (Vimagemagick_render_type) : 0);
+  imagemagick_rendermethod = (INTEGERP (Vimagemagick_render_type)
+                              ? XFASTINT (Vimagemagick_render_type) : 0);
   if (imagemagick_rendermethod == 0)
     {
       /* Try to create a x pixmap to hold the imagemagick pixmap.  */
-      if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap))
+      if (!x_create_x_image_and_pixmap (f, width, height, 0,
+                                        &ximg, &img->pixmap))
         {
           image_error("Imagemagick X bitmap allocation failure", Qnil, Qnil);
           goto imagemagick_error;
@@ -7820,7 +7832,8 @@ imagemagick_load_image (struct frame *f,        /* Pointer to emacs frame struct
       iterator = NewPixelIterator (image_wand);
       if ((iterator == (PixelIterator *) NULL))
         {
-          image_error ("Imagemagick pixel iterator creation failed", Qnil, Qnil);
+          image_error ("Imagemagick pixel iterator creation failed",
+                       Qnil, Qnil);
           goto imagemagick_error;
         }
 
@@ -7832,7 +7845,11 @@ imagemagick_load_image (struct frame *f,        /* Pointer to emacs frame struct
           for (x = 0; x < (long) width; x++)
             {
               PixelGetMagickColor (pixels[x], &pixel);
-              XPutPixel (ximg, x, y, lookup_rgb_color (f, pixel.red, pixel.green, pixel.blue));      
+              XPutPixel (ximg, x, y,
+                         lookup_rgb_color (f,
+                                           pixel.red,
+                                           pixel.green,
+                                           pixel.blue));
             }
         }
       DestroyPixelIterator (iterator);
@@ -7841,13 +7858,16 @@ imagemagick_load_image (struct frame *f,        /* Pointer to emacs frame struct
   if (imagemagick_rendermethod == 1)
     {
       /* Try if magicexportimage is any faster than pixelpushing. */
-      /* printf("ximg: bitmap_unit:%d format:%d byte_order:%d depth:%d bits_per_pixel:%d\n", */
-      /*        ximg->bitmap_unit,ximg->format,ximg->byte_order,ximg->depth,ximg->bits_per_pixel); */
+      /* printf("ximg: bitmap_unit:%d format:%d byte_order:%d depth:%d
+         bits_per_pixel:%d\n", */
+      /*        ximg->bitmap_unit,ximg->format,ximg->byte_order,
+                ximg->depth,ximg->bits_per_pixel); */
       int imagedepth = 24;/*MagickGetImageDepth(image_wand);*/
       char* exportdepth = imagedepth <= 8 ? "I" : "BGRP";/*"RGBP";*/
       /* Try to create a x pixmap to hold the imagemagick pixmap.  */
       printf("imagedepth:%d exportdepth:%s\n", imagedepth, exportdepth);
-      if (!x_create_x_image_and_pixmap (f, width, height, imagedepth, &ximg, &img->pixmap)){
+      if (!x_create_x_image_and_pixmap (f, width, height, imagedepth,
+                                        &ximg, &img->pixmap)){
         image_error("Imagemagick X bitmap allocation failure", Qnil, Qnil);
         goto imagemagick_error;
       }
@@ -7884,7 +7904,7 @@ imagemagick_load_image (struct frame *f,        /* Pointer to emacs frame struct
                               /*&(img->pixmap));*/
                               ximg->data);
 #else
-      image_error("You dont have MagickExportImagePixels, upgrade ImageMagick if you want to try it!",
+      image_error("You dont have MagickExportImagePixels, upgrade ImageMagick!",
                   Qnil, Qnil);
 #endif    
     }
@@ -7957,7 +7977,8 @@ imagemagick_load (struct frame *f,
       /* contents = slurp_file (SDATA (file), &size); */
       /* if (contents == NULL) */
       /*   { */
-      /*     image_error ("Error loading IMAGEMAGICK image `%s'", img->spec, Qnil); */
+      /*     image_error ("Error loading IMAGEMAGICK image `%s'",
+             img->spec, Qnil); */
       /*     UNGCPRO; */
       /*     return 0; */
       /*   } */
@@ -7972,21 +7993,24 @@ imagemagick_load (struct frame *f,
       Lisp_Object data;
 
       data = image_spec_value (img->spec, QCdata, NULL);
-      success_p = imagemagick_load_image (f, img, SDATA (data), SBYTES (data), NULL);
+      success_p = imagemagick_load_image (f, img, SDATA (data),
+                                          SBYTES (data), NULL);
     }
 
   return success_p;
 }
 
-/* Structure describing the image type `imagemagick'.  Its the same type of
-   structure defined for all image formats, handled by Emacs image
-   functions.  See struct image_type in dispextern.h.  */
+/* Structure describing the image type `imagemagick'.  Its the same
+   type of structure defined for all image formats, handled by Emacs
+   image functions.  See struct image_type in dispextern.h.  */
 
 static struct image_type imagemagick_type =
   {
-    /* An identifier showing that this is an image structure for the IMAGEMAGICK format.  */
+    /* An identifier showing that this is an image structure for the
+       IMAGEMAGICK format.  */
     &Qimagemagick,
-    /* Handle to a function that can be used to identify a IMAGEMAGICK file.  */
+    /* Handle to a function that can be used to identify a IMAGEMAGICK
+       file.  */
     imagemagick_image_p,
     /* Handle to function used to load a IMAGEMAGICK file.  */
     imagemagick_load,
@@ -8002,8 +8026,8 @@ static struct image_type imagemagick_type =
 
 DEFUN ("imagemagick-types", Fimagemagick_types, Simagemagick_types, 0, 0, 0, 
        doc: /* Return image file types supported by ImageMagick.
-               Since ImageMagick recognizes a lot of file-types that clash with Emacs,
-               such as .c, we want to be able to alter the list at the lisp level.  */)
+Since ImageMagick recognizes a lot of file-types that clash with Emacs,
+such as .c, we want to be able to alter the list at the lisp level.  */)
   ()
 {
   Lisp_Object typelist = Qnil;
@@ -8824,7 +8848,8 @@ of `image-library-alist', which see).  */)
   if (EQ (type, Qimagemagick)){
     /* MagickWandGenesis() initalizes the imagemagick library.  */
     MagickWandGenesis(); 
-    return CHECK_LIB_AVAILABLE (&imagemagick_type, init_imagemagick_functions, libraries);
+    return CHECK_LIB_AVAILABLE (&imagemagick_type, init_imagemagick_functions,
+                                libraries);
   }
 #endif