decorate method

  1. @override
void decorate(
  1. TreeMapRendererElement<D> rendererElement,
  2. ChartCanvas canvas,
  3. GraphicsFactory graphicsFactory, {
  4. required Rectangle<num> drawBounds,
  5. required double animationPercent,
  6. bool rtl = false,
  7. bool renderVertically = false,
  8. bool renderMultiline = false,
})

Paints decorator on top of rendererElement.

Implementation

@override
void decorate(
  TreeMapRendererElement<D> rendererElement,
  ChartCanvas canvas,
  GraphicsFactory graphicsFactory, {
  required Rectangle drawBounds,
  required double animationPercent,
  bool rtl = false,
  bool renderVertically = false,
  bool renderMultiline = false,
}) {
  // Decorates the renderer elements when animation is completed.
  if (animationPercent != 1.0) return;

  // Creates [TextStyle] from [TextStyleSpec] to be used by all the elements.
  // The [GraphicsFactory] is needed since it cannot be created earlier.
  final labelStyle = _asTextStyle(graphicsFactory, labelStyleSpec);

  final labelFn = rendererElement.series.labelAccessorFn;
  final datumIndex = rendererElement.index;
  final label = labelFn != null ? labelFn(datumIndex) : null;

  // Skips if this element has no label.
  if (label == null || label.isEmpty) return;

  // Uses datum specific label style if provided.
  final datumLabelStyle = _datumStyle(
    rendererElement.series.insideLabelStyleAccessorFn,
    datumIndex,
    graphicsFactory,
    defaultStyle: labelStyle,
  );
  final rect = rendererElement.boundingRect;
  final labelElement = graphicsFactory.createTextElement(label)
    ..textStyle = datumLabelStyle
    ..textDirection = rtl ? TextDirection.rtl : TextDirection.ltr;
  final labelHeight = labelElement.measurement.verticalSliceWidth;
  final maxLabelHeight =
      (renderVertically ? rect.width : rect.height) - (labelPadding * 2);
  final maxLabelWidth =
      (renderVertically ? rect.height : rect.width) - (labelPadding * 2);
  final multiline = enableMultiline && renderMultiline;
  final parts = wrapLabelLines(
    labelElement,
    graphicsFactory,
    maxLabelWidth,
    maxLabelHeight,
    allowLabelOverflow: allowLabelOverflow,
    multiline: multiline,
  );

  for (var index = 0; index < parts.length; index++) {
    final segment = _createLabelSegment(
      rect,
      labelHeight,
      parts[index],
      index,
      rtl: rtl,
      rotate: renderVertically,
    );

    // Draws a label inside of a treemap renderer element.
    canvas.drawText(
      segment.text,
      segment.xOffset,
      segment.yOffset,
      rotation: segment.rotationAngle,
    );
  }
}