drawOverlay method

void drawOverlay({
  1. required Canvas canvas,
  2. required Rect bounds,
  3. required List<IndicatorResult> indicators,
  4. required VisibleIndices visible,
  5. required PriceRange priceRange,
  6. required CoordinateConverter converter,
})

Draws overlay indicators on the main chart pane.

Implementation

void drawOverlay({
  required Canvas canvas,
  required Rect bounds,
  required List<IndicatorResult> indicators,
  required VisibleIndices visible,
  required PriceRange priceRange,
  required CoordinateConverter converter,
}) {
  for (final indicator in indicators) {
    if (!indicator.isOverlay) continue;

    // Special rendering for Bollinger Bands / VWAP bands (fill area between upper and lower)
    if ((indicator.indicatorId.startsWith('BB_') ||
            indicator.indicatorId == 'VWAP') &&
        indicator.series.any((s) => s.id == 'upper') &&
        indicator.series.any((s) => s.id == 'lower')) {
      _drawBandFill(
        canvas: canvas,
        bounds: bounds,
        indicator: indicator,
        visible: visible,
        priceRange: priceRange,
        converter: converter,
      );
    }

    // Special rendering for Supertrend indicator (renders bull support and bear resistance)
    if (indicator.indicatorId.startsWith('SUPERTREND_')) {
      for (final s in indicator.series) {
        if (s.id == 'supertrend_bull' || s.id == 'supertrend_bear') {
          _drawSeriesLine(
            canvas: canvas,
            bounds: bounds,
            series: s,
            visible: visible,
            priceRange: priceRange,
            converter: converter,
          );
        }
      }
      continue;
    }

    // Draw each series line
    for (final s in indicator.series) {
      _drawSeriesLine(
        canvas: canvas,
        bounds: bounds,
        series: s,
        visible: visible,
        priceRange: priceRange,
        converter: converter,
      );
    }
  }
}