decorate method
void
decorate(
- TreeMapRendererElement<
D> rendererElement, - ChartCanvas canvas,
- GraphicsFactory graphicsFactory, {
- required Rectangle<
num> drawBounds, - required double animationPercent,
- bool rtl = false,
- bool renderVertically = false,
- 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,
);
}
}