0.21 2024-04-22
- demo now only loads Prima when run, reducing perldl problems

0.20 2023-03-07
- improve handling of Win32 terminal in perldl (#50) - thanks @dk

0.19 2023-02-06
- add missing files to MANIFEST, convert to EUMM for working disttest

0.18 2023-01-23

  [MAJOR CHANGES]
  
  - New capability: color map support. PDL::Graphics::Prima has been able to
    use color to visualize data, especially heat maps, for  quite some time.
    However, apart from printing information to the terminal, there was no way
    to know what quantities the different colors represented. This meant that
    heat maps and other uses of palettes were, at best, only good for relative
    comparisons or meticulously crafted plots that depicted the color scaling
    on their own. The new changes make it possible (and fairly easy) to render
    and quantitatively label a color bar. This is made possible by a significant
    extension to the capabilities of Palettes.  Note that because Prima itself
    uses the term "Palette" in its gradient API, these are called color maps.
  
  [API CHANGES]
  
  - The Simple interface now accepts additional arguments that can be used to
    configure all elements of the plot command.
  
  - New plot widget keys default_save_dir and default_save_format. When a user
    right-clicks and chooses to save the figure, these settings will be used as
    the starting points rather than the defaults of the current directory and
    .bmp format.
  
  - Although plotTypes that have historically expected a palette (ppair::Matrix)
    will continue to accept them under that keyword, it is now officially
    discouraged. The preferred keyword is color_map.
  
  - Palettes no longer have the copy method. Having removed their association
    with a given plotType, this seems to be unnecessary capability, and
    extending it with the newer features seemed fraught with potential errors.

  - Update to newer Prima greatly simplifies the event loop management, but breaks
    the old loop management API. Use twiddling() call instead of $twiddling semaphore
  
  [DIFFERENT BEHAVIOR]
  
  - Change zoom-out factor so that a zoom-in/zoom-out pair takes us back to
    to starting zoom level.
  
  - When using a Grid datatype, if no palette is explicitly specified, the grid
    activates the new plot-wide color map. Activating the color map causes it to
    be rendered, which can significantly alter the appearance of the plot.
  
  [DEPENDENCIES]
  
  - updated Prima minimal version to 1.59 for new Dialog namespace names.

  [ENHANCEMENTS]
  
  - Palettes have always determined the mapping from values to color using the
    minimum and maximum values of the data. They now give you the option of
    specifying explicit minimum and maximum values.
  
  - Palettes now accept a scaling parameter that can be any valid scaling type.
    Palettes always used to do linear, so basically this means it is now easy
    to get logarithmic color palettes.
  
  - Palettes now take a whole range of new (optional) arguments related to
    rendering. Only the plot-wide palette---called the color map---is rendered
    in the new changes, though it may be possible and useful to render a palette
    in a different context. In that case it should be possible to use all of
    these to tweak that rendering.
  
  - Palettes now have a property for specifying a color to use if they
    encounter bad data. Ideally this color should fall somewhere outside of
    the palette's range. The default value, brown, was chosen specifically for
    this reason.
  
  - For the above enhancements, note that Palettes that implement their
    functionality via a custom "apply" method do not have access to the palette
    object, and so do now have access to any of these new parameters.
  
  - It is possible to specify the color map for a dataset or the plot as a whole
    via the color_map key. It is possible to specify a color map at each level;
    the level closest to the data is the one that is used. Also, only the plot's
    color map is rendered.
  
  [NEW FEATURES]
  
  - New module PDL::Graphics::Prima::SizeSpec facilitates expressing, parsing,
    and computing pixel equivalents for sophisticated combinations of distances
    in terms of multiple, meaningful units of measure.
  
  - PDL::Graphics::Prima::Simple now looks for a prima-simple.ini file for
    default settings for simple plots.
  

0.17 2014-08-25

  [BUG FIXES]
  
  - Fixed minor bug in logic for determining if error bars are specified.
    Previously I had returned two checks combined with "or", but the return
    keyword has higher precedence than the "or" boolean operator! So now it
    uses ||. The upshot was that if only lower error bars were specified, the
    library determined that no error bars were present.
  


0.16 2014-08-25

  - Fixed Changes file to conform to the spec



0.15 2014-08-25

  - Added a $VERSION to each module in the distribution.



0.14 2014-08-25

  [API CHANGES]
  
  - Meaningful drawing now happens in the draw_plot method. Changes in the title 
    drawing revealed a subtle bug in the on_paint method. This bug is most 
    easily solved by factoring the plot drawing code into its own function. 
    Subclasses of Prima::Plot that wish to modify how the widget implements its 
    drawing should override draw_plot, not on_paint.
  
  [DEPENDENCIES]
  
  - The latest version of Prima, v1.40, provides Prima::Drawable::Subcanvas.
    This is needed to get proper subfigure drawing for postscript output, as
    well as proper EPS output format.
  
  [DIFFERENT BEHAVIOR]
  
  - You can now specify the fill color for the ppair::Histogram plot type via
    the backColor or backColors property. Normal rectangles do not appear to
    pay any attention to this property, so now a set of bars are drawn with
    the backColor before the rectangles are rendered.
  
  - As mentioned in the NEW FEATURES, it is now possible to specify the title
    font specification with much greater precision. I have never been very happy
    with the default title font or spacing, so with this change I have taken the
    liberty of updating it. The font height now scales with the size of the plot
    widget, and the title space now scales with the font size, making the title
    size and spacing much more sensible for user interaction (i.e. resizing).
    This is expected to have negative impacts for animations if not handled
    carefully, but those impacts have not been benchmarked yet.
  
  - The rainbow palette now runs for hue values from 0 to 300 instead of 0 to
    360. The problem with the original behavior is that the smallest and largest
    values were nearly identical, and indistinguishable. However, it also
    removes a sixth of the color spectrum from the palette.
  
  - The save-as-postscript dialog now refers to Encapsulated Postscript
    files, with the file extension .eps. A default file extension is
    appended if the .eps extension is missing. This usually Does What You
    Mean, but also means that users cannot use their own file extension when
    using the save-as-postscript dialog.
  
  [NEW FEATURES]
  
  - There is a new property for setting the title's font, called titleFont. In
    addition to the normal settings, you can also indicate that the font size,
    width, and/or height should be percentages of the canvas's width or height,
    or a multiple of the canvas's font's feature.
  
  - The titleSpace property is now much more flexible. In addition to the integer
    number of pixels for the title space, the property now accepts either a
    subref that is expected to compute the titleSpace (in pixels) or a specially
    formatted string for a set of pre-canned calculations.
  
  - Added tick labeling callback (thanks Vikas!). Now users can specify an
    arbitrary tick labeling function that will be called for each tick that 
    needs to be labeled, allowing the user to return a string with the desired 
    label.
  
  - Added pal::RainbowSV to make less-than-bright rainbow palettes easier to
    create.
  
  - Added a new Properties dialog box and associated entry to the pop-up menu.
    The dialog box lets the user set the title, axis labels, axis extrema,
    and axis scaling type. Furthermore, the user can continue manipulating
    the plot with their mouse, and the properties will automatically update
    to the currently displayed values.
  
  - If you simply want to specify an axis label, you can now specify it as
    x => $x_label rather than x => { label => $x_label }
  
  [ENHANCEMENTS]
  
  - Different means for rendering a plot on a raster image are now documented
    and tested.
  
  - Added a Changes file.
  
  - Made file output *much* more robust. Postscript and raster file outputs now
    give results that look nearly identical or identical compared with the
    figure in the original plot window. Also, a window is not created
    unnecessarily if the script only uses Prima to create the images.
  
  - Added proper handling of weird/bad values for annotation positions. Now, if
    you specify a position that includes 'bad, 'inf', or 'nan', the annotation
    machinery will Just Work, by skipping the annotation drawing.
  
  - Postscript output uses a feature of Prima v1.40 to set the postscript
    output as EPS. This is important for proper rendering through LaTeX and
    on Mac Preview.
  
  [BUG FIXES]
  
  - Fixed png and ps example scripts. These spuriously called PDL::IO::Pic due
    some experiments I was running. These changes never should have gone into
    the distribution. Oops.
  
  - The twiddle() method of Simple now does nothing if Simple's plot() method is
    overwritten. Overwriting the plot() method is supported, but code that
    called twiddle() after calling said overwritten plot() would cause the
    script to hang with no way to exit the event loop.
  
  - The default apply() method in PDL::Graphics::Prima::Palette now correctly
    supplies its arguments to the supplied subref.
  
  - Logarithmic scaling detection works for ds::Grid (fixed assignment typo).



0.13 2013-03-13

  [API CHANGES]
  
  - Deprecated lm::Hold to make way for a new limit, lm::NextTick, to be
    developed in the future.
  
  - Renamed ds::Set to ds::Dist.
  
  - Removed pset::CDF; see ds::Dist.
  
  [DIFFERENT BEHAVIOR]
  
  - Slightly repositioned the x-axis label so that tails on letters like 'y'
    are no longer clipped with postscript output.
  
  [ENHANCEMENTS]
  
  - Made palettes much more robust.
  
  - Numerous property handling improvements.
  
  - Reduced the number of circular dependencies (and therefore memory leaks).
    I'm sure there are other circular references, but at least a good many of
    them were removed.
  
  - Made annotation datasets more robust.
  
  - Axis Component objects can now have arbitrary names.
  
  - Improved ReadLine detection and integration, and added support for twiddling.
  
  - Improved binning behavior for ppair::Histogram when bin boundaries are
    not identical.
  
  - Lots of documentation updates.
  
  [BUG FIXES]
  
  - Fixed non-functioning matrix_plot and imag_plot, which had been broken
    since December of 2011!
  
  [NEW FEATURES]
  
  - Added bin types for ds::Dist, including bt::CDF, bt::Linear, bt::Log,
    and bt::StrictLog.
  
  - Created ds::Dist, which inherits from ds::Pair and can use all plot types
    from that distribution type.



0.12 2013-01-21

  [BUG FIXES]
  
  - Included PDL::Graphics::Prima::ReadLine in the MANIFEST file.



0.11 2013-01-20

  [BUG FIXES]
  
  - Inherited autoscaling now works with Callback plot type.
  
  [ENHANCEMENTS]
  
  - We now have usable postscript output, though it's not perfect.



0.10 Not Released

  - Another version bump gone awry.



0.09 2012-08-06

  [BUG FIXES]
  
  - Finally got save-to-image behavior working, thanks to Dmitry!
  
  [ENHANCEMENTS]
  
  - PDL::Drawing::Prima saw an extensive overhaul with the release of PDP v0.07,
    one which handles singular as well as plural properties, and correctly
    restores the canvas state after the drawing operation is complete. That
    allowed me to simplify the canvas property handling in PDL::Graphics::Prima.
    It also means that singular properties Just Work now! :-D



0.08 2012-07-01

  [ENHANCEMENTS]
  
  - Build.PL is more specific about its requirements.
  
  - Super-simple pairwise api functions now accept single piddles as arguments,
    taking them as y-values and creating sequential x-values.



0.07 2012-06-25

  [BUG FIXES]
  
  - The Palette suffered a divide by zero bug when sent data with identical
    values. Also, empty piddles sent to Palette are now handled more gracefully.
  
  - Linear scaling now handles degenerate input more gracefully. In particular,
    when the data is all the same *negative* value, it now gives useful minima
    and maxima.
  
  - A recent revision in x autoscaling generated a bug in y autoscaling, such
    that y-axes would autoscale even when I explicitly set their min and/or max.
  
  [ENHANCEMENTS]
  
  - The plot constructor now accepts axis objects. Before, it only accepted a
    hash with the axis properties.
  
  - Histogram autoscaling now performs the correct threaded calculations.
  
  [NEW FEATURES]
  
  - Added image_plot to the Simple interface.



0.06 Not Released

  - I hadn't realized that I had already incremented the version number. Oops.



0.05 2012-03-15

  - Minor docs typo fixes and bug fixes



0.04 2012-02-29

  - Added dependency on Prima in the Build.PL file



0.03 2012-02-28

  - Added dependency on PDL in the Build.PL file



0.02 2012-02-26

  - First CPAN release
  
  - Switched to Module::Build
  
  [API CHANGES]
  
  - Changed naming from pt::<Type> to pseq::<Type>.

  - Differentiated datasets and introduced short-form dataset constructors.
  
  - Switched name from pseq::<Type> to ppair::<Type>.
  
  - Lots of naming consolidation.
  
  [ENHANCEMENTS]
  
  - Added first tests to check that the modules load.
  
  - Smooth axis movement.
  
  - Improved autoscaling.
  
  [NEW FEATURES]
  
  - Added ds::Func, ds::Image, and ds::Grid.
  
  - Added pimage::Basic and pgrid::matrix.
  
  - Preliminary postscript output.
  


0.01 2011-12-22

  - Added pt::NGons, renamed to pt::Symbols; added lots of derived plot types;
    added pt::TrendLines.
  
  - Simple API now includes plot, line_plot, circle plot, triangle_plot,
    square_plot, diamond_plot, cross_plot, X_plot, asterisk_plot, hist_plot,
    matrix_plot, and func_plot.
  
  - Right-click menu added.
  
  - Postscript and clipboard output added.



0.00_05 2011-10-25

  - Windows is now preliminarily supported.
  
  - DataSets are now plotted in asciibetical order, by name.



0.00_04 2011-10-19

  - Added PDL::Graphics::Prima::Simple and PDL::Graphics::Prima::Palette.
  
  - Pushed label handling from a plot responsibility to an axis responsibility.
  
  - Implemented collation-based autoscaling.



0.00_03 2011-09-20

  - Added pt::Spikes, pt::CallBack, pt::ErrorBars, pt::ColorGrid
  
  - Switched DataSet handling from being a tied array to a tied hash.
  
  - Renamed from Prima::Ex::Graph to PDL::Graphics::Prima and shuffled the files
    into a more standard CPAN distribution layout.
  
  - Moved PDL::PP code into PDL::Drawing::Prima
  
  - Added logarithmic scaling



0.00_02 2011-02-03

  - First realization as a widget is completed under the name Prima::Ex::Graph.
    The primary components of the library included Axis.pm, DataSet.pm,
    Graph.pm, Limits.pm, PlotType.pm, Scaling.pm, and pdlprima.pd.
  
  - Plot types included pt::Lines, pt::Blobs, and pt::Histogram
  
  - Scaling.pm included linear scaling, but not yet logarithmic.



0.00_01 2011-01-20

  - Basic line plotting, histogram binning and drawing, and axes scaling and
    tick drawing were prototyped in per-widget onDraw callbacks. These callbacks
    were added systematically to a widget via the endow_widget function.
  
  - Very first plotting interface was a Prima::Drawable method called graph(),
    followed shortly by an additional Drawable method called bin()



0.00_00 2011-01-15

  - Initially conceived as PDL::PrimaPoly, a set of PDL bindings to Prima's
    polyline method. This would eventually grow into PDL::Drawing::Prima.
