Note: Stub support is still missing although patches have been
      graciously provided for the 2.4q release.  This will be added as
      soon as I can get some free time.

What's new in 2.4?

 1. "eps" canvas item.  

    An encapsulated PostScript canvas item lets you embed an EPS file into 
    the canvas.  The "eps" item displays either a EPS preview image found 
    in the file, or a Tk image that you provide.  

 2. "hierbox" widget.

    Hierarchical listbox widget. Displays a general ordered tree which 
    may be built on-the-fly or all at once.

 3. "tabset" widget.

    Can be used either as a tab notebook or simple tabset.  Tabs can 
    be arranged in a variety of ways: multi-tiered, scrolled, and 
    attached to any of the four sides.  Tab labels can contain both 
    images and text (text can be arbitrarily rotated). Notebook pages 
    can be torn-off into separate windows and replaced later. 
    
 4. Changes to vectors.

    New features:
	
     o	Vector expressions.  The vector now has an "expr" operation
	that lets you perform math (including math library
	functions) on vectors.  There are several new functions
	(such as "max", "min", "mean" "median", "q1", "q3", "prod",
	"sum", "adev", "sdev", "skew", ...)

		vector expr { sin(x)^2 + cos(x)^2 }
		y expr { log(x) * $value }

     o	New syntax to create and destroy vectors:

		vector create x 
		vector destroy x
 
	The old syntax for creating vectors still works.

		vector x

     o	Vectors are *not* automatically deleted when their Tcl
	variable is unset anymore. This means that you can
	temporarily map vectors to variables and use them as you
	would an ordinary Tcl array (kind of like "upvar").

	    proc AddValue { vecName value } {
		 $vecName variable x
	
		 set x(++end) $value
	    }	

	There's an "-watchunset" flag to restore the old
	behavior if you need it. 

	    vector create x -watchunset yes

     o  Vectors still automatically create Tcl variables by
	default.  I'd like to change this, but it silently
	breaks lots of code, so it will stay.

    Bug fixes:

     o  Vector reallocation failed when shrinking the vector.

     o  Vector "destroy" callback made after vector was already freed.

     o  Fixed vector/scalar operations.

     o  Always store results in temporary, so not to overwrite accidently
	current vector values.
	
 5. Changes to Graph, Barchart, Stripchart widgets.

    New features:

     o 	Drop shadows for text (titles, markers, etc). Drop
	shadows improve contrast when displaying text over a
	background with similar color intensities.
   
     o  Postscript "-preview" option to generate a EPS
	PostScript preview image that can be read and
	displayed by the EPS canvas item.

     o  New "-topvariable", "-bottomvariable",
	"-leftvariable", and "-rightvariable" options.  They
	specify variables to contain the current margin
	sizes.  These variables are updated whenever the
	graph is redrawn.

     o  New "-aspect" option. Let's you maintain a particular aspect
	ratio for the the graph.

     o  Image markers can now be stretched and zoomed like
        bitmap markers.

     o  Bind operation for legend entries, markers, and elements.

	Much thanks to Julian Loaring <bigj@bigj.demon.co.uk> 
	for the idea.

     o  New "-xor" option for line markers, lets you draw the line
	by rubberbanded by XOR-ing without requiring the graph to
	be redrawn.  This can be used, for example, to select regions
	for zooming.  

	Thanks to Johannes Zellner (joze@krisal.physik.uni-karlsruhe.de) 
	for the idea.

     o  Can attach a scrollbar to an axis.  

  	    .sbar configure -command { .graph axis view y } 
	    .graph axis configure y -scrollcommand { .sbar set } 

    Bug fixes:

     o	Closest line (point) broken when using pens styles.

     o	Marker elastic coordinates were wrong.

     o	PostScript bounding box included the border of the page.

     o	Bad PostScript generated for barchart symbols with stipples.

     o	Wrong dimensions computed with postscript " -maxpect" option.

     o  Text markers fixed.

	Thanks to De Clarke for the bug report and fix.


     o  Renamed axis configuration from "-range" to "-autorange" to
	match the documentation.  

	Thanks to Brian Smith for the correction.

     o  Fixed polygon marker pick routine.

     o  Fixed active tab labels overlapping the selected tab.

     o  PostScript graph footer turned off by default.  Use -footer option
        to turn on.

	    .graph postscript configure -footer yes

What's incompatible with releases prior to BLT 2.4?

 1. Vector names must start with a letter and contain letters, digits,
    or underscores.  Vectors are now associated by their namespaces.  
    A vector name can contain a namespace qualifier. By default they
    reside in the namespace they were created in.  

	% namespace eval fred { vector create x }
	::fred::x
	% vector create fred::y
	::fred::y
	% vector names
	::fred::y ::fred::x

 2. The "-mapped" options throughout the graph have been replaced
    by the "-hide" option.  The many usages of the word "map" was 
    getting confusing.  

	# No longer works.
	.graph legend configure -mapped no

	# Instead use this.
	.graph legend configure -hide yes    
 

Changes from 2.4r to 2.4s

 o Fixed bug in stripchart (introduced in 2.4r) allowing uninitialized
   data to be displayed.  Thanks to Dick Gooris <gooris@lucent.com> for
   the bug report.

 o AIX dynamic loading.  Actually made it work on a 4.3 AIX box.

 o Fixed -tree option in hiertable.  Would segfault if tree was not
   fully initialized first.

 o Tree insert operation syntax changed from 

 	tree0 insert $node key1 value1 key2 value2
   to
	tree0 insert $node -data { key1 value1 key2 value2 }

 o Fixed tree label operation.  Save uid instead of string.
   
 o Bug in TreeEventProc, should be node != NULL instead of node >= 0
   Thanks to Julian H J Loaring <bigj@bigj.demon.co.uk> for the
   bug report. 
 

