Changes from grid_0.5-1 to grid_0.6:
------------------------------------

1.  Some internal changes to speed up creation of unit objects.  
    This may have a noticeable effect on drawing legends and anything 
    that relies on grid frames (e.g., "key"s in lattice).

2.  A couple of bug fixes for "grobwidth" and "grobheight" units.
    Symptoms were legends not being allocated the correct amount of 
    space.

    Thanks to Deepayan Sarkar and Peter Kleiweg for help diagnosing
    the bug and testing the fix.

3.  Added a plot.viewport() convenience function for creating a 
    viewport that has the typical layout of an R plot.

4.  Altered viewport() function so that layout.pos.row and layout.pos.col
    can be specified as a sequence and only the range() of that 
    sequence is used.

5.  Removed most documentation from the package to reduce the download
    size.  The user's guide and changes file are included with the
    tar ball, but the other documents are only available via 
    http://www.stat.auckland.ac.nz/PEOPLE/paul/grid/grid.html

    Also changed the format of the user's guide from postscript to pdf.

6.  Fixed bug in unit.length where the length of a unit.arithmetic object
    was calculated incorrectly if the length() of the scalar multiplier
    was longer than the unit.length() of the unit object being multiplied.

7.  Allowed character settings for pch in grid.points()

8.  The crash on Windows platforms when plot history is turned on
    has been fixed in R version 1.5.  

    This fix means that grid_0.6 will only run on R version >= 1.5.0

9.  Added handling of NULL values for gpar elements.  Except for col
    and fill, this now means the same as specifying no setting at all
    for the element -- previous behaviour was a segfault.


Changes from grid_0.5 to grid_0.5-1:
------------------------------------

1.  Fix for some grid bugs.
    
    The problems were:
	(i)   grid output could not be saved in metafile format 
	(ii)  non-grid output could not be saved in metafile format when
	      grid was loaded
	(iii) empty page at start of grid postscript output
	(iv)  empty page at start of non-grid postscript output when
	      grid was loaded
	(v)   copying grid output from x11 to postscript (dev.copy)
	      produced blank pages in postscript

    These problems were due to two things in grid:
	(i)  grid created a new page whenever a new device was started.
	(ii) grid created a new page whenever the display list was
	     replayed (e.g., when a device was resized or the output
	     was copied from one device to another)

    Grid now only creates a new page the first time grid output is
    produced on a device AND only creates a new page for replaying
    the display list IF there has already been grid output on the device.


Changes from grid_0.2 to grid_0.5:
----------------------------------

1.  R has a new device API and a new graphics engine.  Grid uses these.

    This means that this version will NOT work on R versions before 1.4.0

    Another known "bug" is that this version of grid will crash R if
    used in Windows with plot history recording turned on (although
    "add"ing individual grid "plots" to the plot history should still
    work).
    
2.  Added "mystrwidth" and "mystrheight" units;  basically these just
    complete the set of units which depend on font, fontsize, and/or 
    lineheight and therefore may refer to the current viewport settings
    of these parameters OR to the current settings of the grob being
    drawn.

3.  Added unit.rep function (the base rep() function is not generic
    so I could not simply write a rep.unit method).

4.  Added new gpar, "gamma", for gamma-correction of colours
    (defaults to 1).  NOTE that only windows devices will currently
    respond to on-the-fly changes in gamma.

5.  Added "clip" flag to viewports.  If "clip" is TRUE, then output
    is clipped to the viewport.

    Clipping obeys only the most recent viewport clip setting.
    For example, if you clip to viewport1, then clip to viewport2,
    the clipping region is determined wholly by viewport2, the
    size and shape of viewport1 is irrelevant (until viewport2
    is popped of course).

    If a viewport is rotated (because of its own "angle" setting
    or because it is within another viewport which is rotated) then
    the "clip" flag is ignored.
  
6.  The functions grid.start() and grid.stop() have been removed.
    grid automatically "registers" with devices.

7.  Grid no longer automatically opens a device when it is loaded.
    Instead, a device is created, if there are none open, when the
    first drawing occurs or when the first viewport is pushed.

8.  Added new functions unit.pmin() and unit.pmax() which are unit
    versions of pmax() and pmin()

9.  Added new function grid.place() which provides a simpler 
    interface to grid.pack() and is useful for using grid "frame"s
    as just a convenient way of defining a layout and sticking 
    things in it.


Changes from grid_0.1 to grid_0.2:
----------------------------------

1. Fixed bug in rotating viewports;  this should be more reliable now.

2. Added grid.line.to() and grid.move.to().  These allow drawing BETWEEN
   different coordinate systems.  See example in inst/doc/demo3.ps.

3. Added some more demonstrations to the doc directory.

4. Added more test code to the tests directory.

5. Added "grobwidth" and "grobheight" units.  See the document
   grid/inst/doc/advanced/parentchild.ps

6. Added more detailed documentation to grid/inst/doc/advanced.  This
   stuff is not as friendly for the reader, but may be useful if you're
   tearing your hair out wondering why some strange effect is occurring.

7. Changed frames and packing to use the new "grobwidth" and "grobheight"
   units.  This fixes some problems with frames and packing.

8. Fixed a bug where the gpar settings for "fontsize" and "lineheight"
   _within a grob_ would not affect the location or size of the grob
   if they were specified in "lines" or "char" units.

   This required adding new "mylines" and "mychar" units (alternative
   suggestions for names welcome !) so that you can specify whether
   a grob's a location/size is in terms of the current viewport's
   fontsize and lineheight ("lines" and "char") or in terms of its own
   fontsize and lineheight ("mylines" and "mychar").

9. Added grid.polygon() and grid.circle() primitives

10. Added newpage=TRUE argument to grid.start() so that you can restart
    grid graphics mode without having to move to a new page.

    For example, try ...

	postscript()
	grid.start()
	grid.polygon()
	grid.stop()
	grid.start() # moves to new page
	grid.circle()
	grid.stop()
	grid.start(newpage=FALSE) # does NOT move to new page
	grid.rect()
	grid.stop()
	dev.off()

11. Changed interface for pop.viewport().  This now just takes a
    number of viewports to pop, which defaults to 1.  
    For example ...

        push.viewport(viewport())
	pop.viewport(current.viewport())

    ... becomes ...
    
        push.viewport(viewport())
	pop.viewport()

    ... and ...

        vp1 <- viewport()
	vp2 <- viewport()
	push.viewport(vp1, vp2)
	pop.viewport(vp2, vp1)

    ... becomes ...

        vp1 <- viewport()
	vp2 <- viewport()
	push.viewport(vp1, vp2)
	pop.viewport(2)
	
12. Speed-up of pushing and popping viewports.  This will probably not
    be noticeable in normal usage, but makes a big difference for 
    frames and packing.

Changes from lattice_0.2 to grid_0.1:
-------------------------------------

0. Change of package name from "lattice" to "grid" (!!!!)

   This means that most user functions have changed from l<something>
   to grid.<something>

1. Slight speed up of grid.push.viewport and grid.pop.viewport.

2. Added sum() method for units.

   For example, try ...

       grid.rect(w=sum(unit(c(.25,.25), "npc")))
       grid.rect(w=sum(unit(c(.25,.25), "npc"), unit(1, "cm")), border="red")

3. Changed the usage of grid.edit() slightly.  If you want to specify 
   several new values at once, you must use grid.prop.list() rather
   than just list().  For example, for a single new value use ...

       grid.edit(<grob>, col="red")

   ... as before, but for multiple new values use ...

       grid.edit(<grob>, grid.prop.list(col="red", lty="dashed"))

   ... rather than ...
   
       grid.edit(<grob>, list(col="red", lty="dashed"))

4. Added a new grid.frame() grob.  This acts a bit like a simple 
   grid.collection() BUT controls the placement of its children.  
   You add children using the grid.pack() function.

5. All viewports and grobs now have a "gp" slot which contains a
   "gpar" object.  This is a list of graphical parameters, which 
   replaces the specification of individual graphical parameters
   for each different type of grob.  

   For example, instead of the old ...
   
       grid.rect(w=.8, h=.8, border="red")

   ... we have the new ...

       grid.rect(w=.8, h=.8, gp=gpar(border="red"))

   This may seem like a loss (because you have to type more stuff),
   and it is a loss, but the (hopefully greater) win is that (i) you only
   have one parameter for all graphical settings, for example, ...

       grid.rect(w=.8, h=.8, gp=gpar(border="red", lwd=3))

   ... and (ii) this applies for all grobs, for example, ...

       grid.text("hi", gp=gpar(col="red", fontsize=10))

   ... and (iii) you can add more graphical parameters with minimal fuss,
   for example, ...

       grid.text("hi", gp=gpar(col="red", fontsize=10, new.par=whatever))

   ... and (iv) its easier to automate things (see below).

   Graphical parameter settings are "permanent" so, for example, if
   an axis sets the colour to "red" then all of its children are
   drawn in "red" unless they set colour to something else.

   For example, try ...

       grid.multipanel(vp = grid.viewport(0.5, 0.5, 0.8, 0.8, 
                                          gp=gpar(fontsize=20)))

   ... and notice that all of the components of the multipanel take
   notice of the fontsize setting of the parent viewport (except the
   axis labels because they explicitly set the fontsize to 20 themselves).

   The setting of graphical parameters is automated;  
   if you have a slot called "gp" in your grob, Lattice will
   set the graphical parameters in that slot before calling
   draw.details() and unset the parameters afterwards.

6. The pushing and popping of "local" viewports has been automated.
   If you have a slot called "vp" in your grob, Lattice will call
   grid.push.viewport() on that slot before calling draw.details() 
   and grid.pop.viewport() afterwards.

7. "collection" grobs and "[x|y]axis" grobs no longer pass editing
   operations down to their children.  

   This was mainly (only ?) for sharing graphical parameter settings
   and that duty is now performed by the gpar stuff in point 5 above.

   This is a good thing because there are some cases where passing
   down editing operations could cause serious damage.  For example, 
   consider what would have happened if you had edited the "vp" slot
   of a collection grob (!)

