Class BaseRenderer

java.lang.Object
com.arbergashi.charts.render.BaseRenderer
All Implemented Interfaces:
ChartRenderer
Direct Known Subclasses:
AbstractMedicalSweepRenderer, AdaptiveFunctionRenderer, ADXRenderer, AlluvialRenderer, ArcDiagramRenderer, AreaRenderer, ATRRenderer, AutocorrelationRenderer, BandRenderer, BarRenderer, BaselineAreaRenderer, BeeswarmRenderer, BollingerBandsRenderer, BoxPlotRenderer, BubbleRenderer, BulletChartRenderer, CandlestickHollowRenderer, CandlestickHollowRenderer, CandlestickRenderer, ChangePointRenderer, ChernoffFacesRenderer, ChordDiagramRenderer, ChordFlowRenderer, ColumnRenderer, ConfidenceIntervalRenderer, ControlChartRenderer, DelaunayRenderer, DendrogramRenderer, DependencyWheelRenderer, DotPlotRenderer, ECDFRenderer, ECGRhythmRenderer, EEGRenderer, EnvelopeRenderer, ErrorBarRenderer, FibonacciRenderer, FibonacciRetracementRenderer, FourierOverlayRenderer, GanttRenderer, GanttResourceViewRenderer, GaugeBandsRenderer, GaugeRenderer, GroupedBarRenderer, HeatmapContourRenderer, HeatmapRenderer, HeikinAshiRenderer, HexbinRenderer, HighLowRenderer, HistogramRenderer, HorizonChartRenderer, HorizonRenderer, IchimokuCloudRenderer, IchimokuRenderer, ImpulseRenderer, JoyplotRenderer, KagiRenderer, KDERenderer, LineRenderer, LiveFFTRenderer, LoessRenderer, LollipopRenderer, MACDRenderer, MarimekkoRenderer, MedicalSweepRenderer, MinMaxMarkerRenderer, MovingAverageRenderer, NetworkRenderer, NightingaleRoseRenderer, OBVRenderer, OutlierDetectionRenderer, ParabolicSARRenderer, ParallelCoordinatesRenderer, ParetoRenderer, PeakDetectionRenderer, PieRenderer, PivotPointsRenderer, PointAndFigureAdvancedRenderer, PointAndFigureRenderer, PolarAdvancedRenderer, PolarLineRenderer, PolarRenderer, PolynomialRegressionRenderer, QQPlotRenderer, QuantileRegressionRenderer, RadarRenderer, RadialBarRenderer, RadialStackedRenderer, RangeRenderer, ReferenceLineRenderer, RegressionLineRenderer, RenkoRenderer, RidgeLineRenderer, RSIRenderer, RugPlotRenderer, SankeyProRenderer, SankeyRenderer, ScatterRenderer, SemiDonutRenderer, SlopeRenderer, SparklineRenderer, SpectrogramMedicalRenderer, SpectrogramRenderer, SpirometryRenderer, SplineRenderer, StackedAreaRenderer, StackedBarRenderer, StatisticalErrorBarRenderer, StepAreaRenderer, StepRenderer, StochasticRenderer, StreamgraphRenderer, SunburstRenderer, SunburstRenderer, SweepEraseEKGRenderer, TernaryContourRenderer, TernaryPhasediagramRenderer, TernaryPlotRenderer, ThresholdRenderer, TrendDecompositionRenderer, UltrasoundMModeRenderer, VCGRenderer, VectorFieldRenderer, VectorFieldRenderer, VentilatorWaveformRenderer, ViolinPlotRenderer, VolumeProfileRenderer, VolumeRenderer, VoronoiRenderer, WaterfallRenderer, WindRoseRenderer

public abstract class BaseRenderer extends Object implements ChartRenderer
Base class for all chart renderers, providing common functionality and utility methods.
Since:
2025-06-01
Version:
1.0.0
Author:
Arber Gashi
  • Field Details

    • PIXEL_BUF

      public static final ThreadLocal<double[]> PIXEL_BUF
    • PIXEL_BUF4

      public static final ThreadLocal<double[]> PIXEL_BUF4
  • Constructor Details

    • BaseRenderer

      protected BaseRenderer(String id)
  • Method Details

    • getId

      public String getId()
      Returns the renderer ID used for registry/legend wiring.
      Returns:
      renderer ID
    • setTheme

      public void setTheme(ChartTheme theme)
      Sets the theme for this renderer.

      Framework Note: This method is automatically called by ArberChartPanel when adding layers. Framework users should ensure that the panel has a theme set before rendering.

      Parameters:
      theme - The chart theme to apply. May be null, in which case fallbacks are used.
    • setLayerIndex

      public void setLayerIndex(int index)
      Sets the layer index for this renderer.

      Framework Note: This is automatically called by ArberChartPanel when adding layers. The index determines which color from the theme palette is used.

      Parameters:
      index - The 0-based layer index (0 = first color, 1 = second color, etc.)
    • getLayerIndex

      protected int getLayerIndex()
      Returns the current layer index used for theme palette selection.
      Returns:
      0-based layer index
    • setMultiColor

      public BaseRenderer setMultiColor(boolean enabled)
      Enables or disables multi-color rendering for supported renderers.
      Parameters:
      enabled - true to enable multi-color mode
      Returns:
      this renderer for chaining
    • isMultiColor

      protected boolean isMultiColor()
      Returns whether multi-color mode is enabled.
      Returns:
      true when the renderer should use per-series palette colors
    • resolveTheme

      protected ChartTheme resolveTheme(PlotContext context)
      Resolves the theme for the current render call.

      Framework contract (Option 1): PlotContext.theme() must be non-null during rendering. Failing fast here prevents silent dark/light inconsistencies.

    • themeForeground

      protected Color themeForeground(PlotContext context)
    • themeBackground

      protected Color themeBackground(PlotContext context)
    • themeAxisLabel

      protected Color themeAxisLabel(PlotContext context)
    • themeGrid

      protected Color themeGrid(PlotContext context)
    • themeAccent

      protected Color themeAccent(PlotContext context)
    • themeSeries

      protected Color themeSeries(PlotContext context, int index)
    • themeBullish

      protected Color themeBullish(PlotContext context)
    • themeBearish

      protected Color themeBearish(PlotContext context)
    • seriesOrBase

      protected Color seriesOrBase(ChartModel model, PlotContext context, int index)
    • getTheme

      protected ChartTheme getTheme()
      Gets the current theme for this renderer.
      Returns:
      The current theme, or null if not set
    • render

      public void render(Graphics2D g2, ChartModel model, PlotContext context)
      Main render method.
      Specified by:
      render in interface ChartRenderer
      Parameters:
      g2 - graphics context
      model - chart data model
      context - plot context
    • drawData

      protected abstract void drawData(Graphics2D g2, ChartModel model, PlotContext context)
      Implementation-specific drawing logic. Must follow Zero-Allocation rules.
    • getPointAt

      public Optional<Integer> getPointAt(Point2D pixel, ChartModel model, PlotContext context)
      Returns the data index nearest to the given pixel coordinate, if supported.
      Specified by:
      getPointAt in interface ChartRenderer
      Parameters:
      pixel - mouse/crosshair position in component coordinates
      model - data model for this layer
      context - current plot context
      Returns:
      optional point index
    • getTooltipText

      public String getTooltipText(int index, ChartModel model)
      Returns tooltip text for the given data index, or null when not supported.
      Specified by:
      getTooltipText in interface ChartRenderer
      Parameters:
      index - The index of the data point.
      model - The data model.
      Returns:
      A formatted string for the tooltip, or null if no tooltip should be shown.
    • getName

      public String getName()
      Returns the renderer name used by legends and UI labels.
      Specified by:
      getName in interface ChartRenderer
      Returns:
      renderer name
    • isLegendRequired

      public boolean isLegendRequired()
      Indicates whether this renderer should appear in the legend.
      Specified by:
      isLegendRequired in interface ChartRenderer
      Returns:
      true if the renderer should appear in the legend
    • getPathCache

      protected Path2D.Double getPathCache()
      Returns the shared Path2D.Double instance for building shapes. NOTE: This is a shared, reusable object and is reset at frame start. Do not retain a reference to this object across frames.
    • pBuffer

      protected double[] pBuffer()
      Return a small allocation-free buffer for mapToPixel results (length=2)
    • pBuffer4

      protected double[] pBuffer4()
      Return a small allocation-free buffer used for multi-value mapping (length=4)
    • getCachedStroke

      protected BasicStroke getCachedStroke(float width)
    • getCachedStroke

      protected BasicStroke getCachedStroke(float width, int cap, int join)
    • getCachedStroke

      protected BasicStroke getCachedStroke(float width, int cap, int join, float miterlimit, float[] dash, float dash_phase)
    • getSeriesColor

      protected Color getSeriesColor(ChartModel model)
    • getLegendColor

      public Color getLegendColor(ChartModel model)
      Returns the color for the legend.
      Parameters:
      model - The current data model
      Returns:
      color for legend swatches
    • getSeriesStroke

      protected Stroke getSeriesStroke()
    • getLine

      protected Line2D getLine(double x1, double y1, double x2, double y2)
    • getRect

      protected Rectangle2D getRect(double x, double y, double w, double h)
    • getEllipse

      protected Ellipse2D getEllipse(double x, double y, double w, double h)
    • getArc

      protected Arc2D getArc(double x, double y, double w, double h, double start, double extent, int type)
    • getRoundRectangle

      protected RoundRectangle2D getRoundRectangle(double x, double y, double w, double h, float arcw, float arch)
    • getCubicCurve

      protected Shape getCubicCurve(double x1, double y1, double cx1, double cy1, double cx2, double cy2, double x2, double y2)
    • drawHighlightPoint

      protected void drawHighlightPoint(Graphics2D g2, Point2D p, Color c)
    • drawLabel

      protected void drawLabel(Graphics2D g2, String text, Font font, Color color, float x, float y)
    • drawI18nLabel

      protected void drawI18nLabel(Graphics2D g2, String key, Font font, Color color, float x, float y)
      Draws a localized label. The key is resolved via ChartI18N and then drawn using drawLabel(Graphics2D, String, Font, Color, float, float).
    • getCachedGradient

      protected Paint getCachedGradient(Color base, float height)
    • getCachedFont

      protected Font getCachedFont(float baseSize, int style)
      Returns a cached Font for the requested base size and style. This avoids deriving/allocating fonts each frame in draw loops.
    • setupQualityHints

      protected void setupQualityHints(Graphics2D g2)
      Apply high-quality rendering hints for anti-aliasing / stroke control. Renderers that need pixel-perfect quality should call this at frame start.