]> git.imager.perl.org - imager.git/blobdiff - TODO
- the BMP reader now validates the bfOffBits value from the BMP header
[imager.git] / TODO
diff --git a/TODO b/TODO
index 87a469a65a07d042ebadacbfd10b131d188fb215..a3c7fffd2dcc9f9adba56d322a3aa8c763610fec 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,11 +1,31 @@
                          *** TODO ***
 
+PRE-0.44:
+- set i_format for every file type on read and test for it:
+  - bmp - done
+  - jpeg - done
+  - tiff
+  - tga
+  - rgb
+  - png - done
+  - gif
+  - pnm
+- check each file reader for possible integer overflows
+  - bmp
+  - tiff
+  - tga
+  - rgb
+  - png
+  - gif
+  - pnm
+- check bmp code uses image data offset correctly - done
+- check quant code for integer overflows
+- check for old URLs (umich and imager.perl.org/~addi/...)
 
 Iolayer:
 - Add scalar/mmap to iolayer
 - Add close() code to iolayer for fakeseek sources.
 - Merge callback interface into iolayer
-- Add iolayer reading/writing for gif
 - and raw
 - Implment the maxread threshold (Indicates how much can
   be read from a source before it stops reading from its
@@ -40,6 +60,7 @@ New Features:
   - WMF (extract bitmap data on read)
   - gzip or bzip2 compressed raw
   - postscript for output
+  - PAM file support (man pam in recent PNM tools)
 
 - Transforms, interpolated multidimensional lookup tables.
   Usefull for CMYK <-> RGB table lookup.
@@ -47,42 +68,83 @@ New Features:
 - advanced font layout (spacing, kerning, alignment) (Artur?)
 
 - ways to check if characters are present in a font, eg. checking if
-  ligatures are present
+  ligatures are present (done for FreeType2)
 
 - font synthesis - synthesize a bold or slanted font from a normal font
   (or even from an existing bold or slanted font)
 
 - utf8 support for text output
-  (available for freetype2)
+  (available for FT1, freetype2, should be easy for Win32)
+
+- easy interfaces for text output:
+  - align text around point, including:
+    - left, center, right horizontal alignment
+    - top, center, baseline, bottom alignment
+    - choose whether to base alignment upon character cells or font 
+      metrics to avoid spacing problems between lines
+  - fill a box from text, with newline handling
+    - an option to just return the information that would be used to 
+      output the text, so it can be used for sizing calculations
+    - how much text fit in the box/how much space is left in the box
+  - fill a box with rich text (size and font changes)
+    - as above
+    - wrapping around boxes/images
+  - pod2Imager :)
+
+- tools to get more information about fonts/characters:
+  - name of font "Arial Bold Italic" vs "arialbi.ttf"
+  - ABC widths for characters (currently the only way to get the C width 
+    for a character is to get the width with a following space and without
+    and then compare)
+  - character names
+
+- encodings for text output (maybe using the Encode module to work 
+  between encodings)
 
 - image rotation, 3 ways of doing rotation:
   - rotation by shearing, which produces makes lengths in the image larger,
     but could be useful
   (2 of the 3 have been done)
 
-- read_multi() needs to handle other multi-image types, such as TIFF 
-  (probably the most common)
+- read_multi() needs to handle other multi-image types,
+   (handles TIFF and GIF)
 
-- write_multi() to save other multi-image types, especially TIFF
+- write_multi() to save other multi-image types, (handles TIFF and GIF)
+  - pnm binary formats support multiple images per file
 
 - compose channels - build a new image based on channels from several
   images
 
-- filled polygons
-
 - arc outlines
 
-- single pixel set and get, maybe with an array of co-ordinates
-  http://www.molar.is/en/lists/imager-devel/2002-01/0002.shtml
+- complex lines/curves:
+  - thick lines:
+    - dotted/dashed lines
+    - doubled lines?
+    - end-point controls (butt-end, square-end, round-end, pointy, arrows)
+  - brush-lines (as with the Gimp, or Photoshop)
+    - more complex with multiple strokes and various randomness as with
+      Fractal Design Painter (or later versions of Corel Photo Paint)
+  - complex line shapes:
+    - lines
+    - general curves (cubic or bezier, whichever is more general)
+    - easy access to general curves:
+      - points to make a nice curve from
+      - various circular curves (centre, radii, start/end angles, 
+        direction)
+  - Complex thick lines are probably more useful than brush-lines for 
+    the things I expect Imager to be used for.
+  - http://www.develop-help.com/imager/strokes.png (.jpg for smaller version)
+
+- have Imager::Color{::Float}? use Graphics::ColorNames if present.
 
 Clean up:
 - Make sure everything is doable with the OO interface
   i_flood_fill() for example.
+  - include low-level functions like gsamp() and so on
 
 - Compile with memory debugging enabled and fix all leaks
 
-- dynaload.c is strongly tied to perl
-
 - Add mycalloc() memory allocation wrappers.
 
 - should we overload <=> or cmp for Imager::Color objects?
@@ -97,6 +159,12 @@ Clean up:
   standard for this (suggested names)?  Remember to preserve the old 
   interface where possible.
 
+- try to clean up the inconsistencies between font types:
+  - utf8 (even if we just treat characters over 0xFF as missing for T1)
+    (done for FT2, FT1, T1)
+  - transformations (done for FT2)
+  - has_char() method (done for FT2, FT1, T1)
+
 Format specific issues:
 - provide patches for libgif and libungif that fix their bugs
   and give a useful extension interface.  Probe for the 
@@ -119,14 +187,30 @@ Format specific issues:
 - read more metadata from images, esp tiff tags, EXIF format information 
   from TIFF and JPEG.
 
+- handle 16-bit/sample pgm/ppm files
+
 Documentation:
 - Add to the documentation
 - Write a tutorial?
 - sample code and Imager/Samples.pod describing them
 - Imager/Cookbook.pod
-- modify the .pm files to put pod describing a function close to the 
-  function
 - Write a guide to installing the helper libraries
 - Go through the entire project and add comments in pod
   so doco.perl can be used to read them.
 - see the IRC log in design/doclayout.txt
+- method index?
+- concept index?
+
+Build/configure:
+- use prompt() (from ExtUtils::MakeMaker) for questions in Makefile.PL
+- use the library's mechanism's to find the library if needed, for
+  example, freetype-config for FT2
+- the freetype2 library is built as "freetype.lib" on Win32 and needs
+  to be renamed to be found by the configuration process and included
+  with -lfreetype.  Try to work around that.
+- freetype2 and freetype1 tend to be installed in /usr/include/freetype2
+  and /usr/include/freetype directories, or similarly named (somedir/freetype
+  for example), instead of putting these directly into the search path
+  search for the freetype{2}?/someheader and then add the subdirectory if
+  we find the file in that directory.
+- switch to Test::More