CHANGES IN VERSION 1.21.7
-------------------------

    o Concave windows are computed by a C++ port of concaveman in the core, which gives the same polygon as
      concaveman::concaveman(); concaveman is no longer needed. hatchingPlot(), whose default window is
      "concave", works without it again.

CHANGES IN VERSION 1.21.6
-------------------------

    o concaveman moves to Suggests: it is needed only for window = "concave".

CHANGES IN VERSION 1.21.5
-------------------------

    o nameRegions() names each region by the marker cell type it is most enriched for; regions most enriched
      for the same marker get the same name.

    o regionBoxPlot() draws the share of each region in each image, or each patient, by group.

    o regionMap(type = "table") returns the relative frequency of each cell type in each region as a matrix.

    o The vignette uses spicyR's colTest() to compare regions between groups and tidySpatialExperiment to
      summarise the cells of each image.

CHANGES IN VERSION 1.21.4
-------------------------

    o hatchingPlot(), geom_hatching() and scale_region_manual() have 12 hatchings instead of 7: none, /, \, -,
      |, x, +, dots, circles, / with dots, \ with dots and - with dots (in that order). Regions beyond the
      twelfth are drawn as the first. Legend keys are drawn from the same definitions as the hatching.

CHANGES IN VERSION 1.21.3
-------------------------

    o hatchingPlot() and geom_hatching() outline each region by the union of the Voronoi tiles of its cells,
      clipped to the window, instead of a grid of nbp x nbp points: the outlines follow the cells exactly and
      `nbp` is no longer used. The hatching lines are clipped to each outline by polyclip, so they cannot cross
      into another region. Drawing an image of about 6,000 cells takes about 3 s, and printing it again 0.8 s.

    o The concave window is built without a loop over cells (about 3 times faster, same window).

CHANGES IN VERSION 1.21.2
-------------------------

    o A cell now counts itself among the cells of its type (at distance 0), as the local indicators are defined in
      Patrick et al. (2023). Before, it was left out of its own count. This changes the LISA of every cell for its
      own type, and so the regions; cells with no neighbour within the largest radius now have LISA values
      rather than zeros.

    o hatchingPlot() and geom_hatching(): a hatching line that passed exactly through or touched a corner of a
      region's outline could be counted as crossing it an odd number of times, which put later segments of the
      line out of step and drew them across neighbouring regions (with the warning "data length is not a
      multiple of split variable"). Crossings now follow a half-open rule, so each outline is crossed an even
      number of times.

    o geom_hatching() keeps the hatching of the most recently drawn panels, so printing a plot again (for
      example when resizing its window) does not recompute it.

CHANGES IN VERSION 1.21.1
-------------------------

    o The neighbour counts and edge corrections of lisa(), lisaClust() and inhomLocalK() are computed in C++
      (src/core, shared with the Python package lisaclust): about 8 to 18 times faster. The edge correction
      intersects each disc with the window exactly instead of through spatstat's integer-rounded polygon
      clipping, which changes the LISA by less than 1e-6; regions are otherwise unchanged.

    o hatchingPlot() and geom_hatching() are about 10 times faster: the hatching lines are intersected with the
      region outlines all at once, and the region of each grid point is that of the nearest cell, found in
      C++. Equidistant cells vote and a tied vote goes to the first region, so the plot no longer depends on the
      random seed.

    o Bug fix: lisaClust() assigned the regions to the wrong cells when the cells of different images were
      interleaved rather than ordered by image. Regions are now matched to cells by their position in the input.
      hatchingPlot() had the same problem with the region column, and now also accepts a data.frame.

    o Bug fix: regionMap() failed when a cell type had no cells (an unused factor level).

    o Bug fix: lisaClust() failed on a SpatialExperiment whose coordinates are only in spatialCoords().

    o lisaClust no longer depends on spicyR, simpleSeg, class, data.table or tidyr. The examples use simulated
      data, and the vignette finds tissue domains in triple-negative breast cancer and cellular niches in
      colorectal cancer, compared between groups of patients.
