Skip to content

1.2.0

Latest

Choose a tag to compare

@iliaal iliaal released this 12 Jun 00:02
· 1 commit to master since this release
1.2.0
7a8599d

Added

  • Chart::getImageMapAreas(): array — structured hot-spot data (shape strings "rect"/"circle"/"poly", HTML -style coords for rects, href/tooltip/index). Same filtering and lifetime rules as the HTML getImageMap(). Useful for custom overlays or link generation without parsing HTML.
  • PHP 8.1 support (lowered the minimum from 8.3).

Changed

  • Clarified setStrict(true) coverage in stub, docs/README.md and tests: only Line/Area/Bar setSeries are strict; all other data-ingest setters remain best-effort (silent drop) even when the flag is on. New phpt 193/194 lock the contract.

Fixed

  • Use-after-free read in getImageMap() after re-calling ScatterChart::setPoints(); the area list borrowed freed point strings.
  • WEBP_LOSSLESS output was lossy; RGBA was imported through libwebp's YUV420 path before VP8L encoding. Now imports straight ARGB and round-trips bit-exact.
  • Stacked AreaChart now ranges over partial cumulative sums, so negative values render as a diverging stack instead of clamping to the baseline.
  • Background/icon image loading stats the path before opening it; a writerless FIFO previously blocked the request in open(2) forever.
  • SVG dimension guards now reject the 2^31 float boundary; (float)INT_MAX rounds up, so > admitted one value into a UB float-to-int cast.
  • GanttChart clamps the task-label margin; a name wider than the plot inverted the time axis and collapsed every bar.
  • CalendarHeatmap::setData() no longer drops pre-1970 dates; the parser's -1 failure sentinel collided with the day index of 1969-12-31.
  • AreaChart log Y-axis threw "requires strictly-positive data" for every input because the range pass zero-clamped the minimum first. Overlay and band modes now render on log scale (fill anchors at the axis bottom); stacked rejects with an honest "anchor at 0" message.
  • GanttChart::setTimeRange() honors the documented null-side auto-fit; a null bound was stored as 0, so start-only threw and end-only anchored the axis at 1970.
  • All-negative AreaChart data now keeps 0 in the axis range; the fill previously anchored at the axis max (the inverse of fill-to-zero) because only positive data was zero-anchored.