pub use crate::math::{Math, Number, NumericConversion};
pub use crate::chart::traits::{
Chart, ChartBuilder, ChartConfig, IncrementalChart, Margins, StylableChart,
};
#[cfg(feature = "animations")]
pub use crate::chart::traits::{AnimatedChart, StreamingChart};
pub use crate::chart::traits::{AxisChart, LegendChart};
pub use crate::legend::{
BackgroundStyle, CompactLegend, CompactLegendBuilder, CustomLegend, CustomLegendBuilder,
DefaultLegend, DefaultLegendEntry, DefaultLegendRenderer, Legend, LegendAlignment,
LegendBuilder, LegendEntry, LegendEntryType, LegendMargins, LegendOrientation, LegendRenderer,
LegendStyle, PositionCalculator, SpacingStyle, StandardLegend, StandardLegendBuilder,
StandardLegendRenderer, SymbolStyle, TextStyle,
};
pub use crate::legend::types::{
CompactLegendEntry, CustomLayoutParams, CustomLegendEntry, MarkerShape as LegendMarkerShape,
MarkerStyle as LegendMarkerStyle, StandardLegendEntry, SymbolShape,
};
pub use crate::legend::position::LegendPosition as LegendPos;
pub use crate::axes::{
AxisConfig, AxisOrientation, AxisPosition, AxisStyle, AxisValue, CustomAxisBuilder,
CustomTickGenerator, LinearAxis, LinearAxisBuilder, LinearTickGenerator, TickStyle,
};
pub use crate::axes::builder::presets;
pub use crate::axes::traits::{Axis, AxisRenderer, Tick, TickGenerator};
pub use crate::axes::range::{
calculate_nice_range, calculate_nice_ranges_from_bounds, calculate_nice_ranges_separate_config,
RangeCalculationConfig,
};
pub use crate::grid::{
CustomGrid, CustomGridBuilder, GridBuilder, GridContainer, GridLineStyle, GridSpacing,
GridStyle, GridSystem, GridType, GridVisibility, LinearGrid, LinearGridBuilder, MajorGridStyle,
MinorGridStyle, TickBasedGrid, TickBasedGridBuilder,
};
pub use crate::grid::traits::{
DefaultGridRenderer, Grid, GridConfiguration, GridOrientation, GridRenderer,
};
pub use crate::grid::traits::TickAlignedGrid;
#[cfg(feature = "line")]
pub use crate::chart::{LineChart, LineChartBuilder, LineChartStyle, MarkerShape, MarkerStyle};
#[cfg(feature = "line")]
pub use crate::chart::{CurveChart, CurveChartBuilder};
#[cfg(feature = "line")]
pub use crate::math::interpolation::{InterpolationConfig, InterpolationType};
#[cfg(all(feature = "line", feature = "animations"))]
pub use crate::chart::{AnimatedLineChart, AnimatedLineChartBuilder};
#[cfg(feature = "bar")]
pub use crate::chart::{BarChart, BarChartBuilder, BarChartStyle, BarOrientation};
#[cfg(all(feature = "bar", feature = "animations"))]
pub use crate::chart::{AnimatedBarChart, AnimatedBarChartBuilder};
#[cfg(feature = "bar")]
pub use crate::chart::bar::BarWidth;
#[cfg(feature = "pie")]
pub use crate::chart::{PieChart, PieChartBuilder, PieChartStyle};
#[cfg(feature = "scatter")]
pub use crate::chart::{
CollisionSettings, CollisionStrategy, ColorMapping, ColorMappingStrategy, PointShape,
PointStyle, ScatterChart, ScatterChartBuilder, ScatterChartStyle, SizeMapping, SizeScaling,
};
#[cfg(feature = "gauge")]
pub use crate::chart::{
ArcStyle, CenterStyle, GaugeChart, GaugeChartBuilder, GaugeChartStyle, GaugeType, NeedleShape,
NeedleStyle, ThresholdZone, TickStyle as GaugeTickStyle, ValueDisplayStyle, ValueRange,
};
#[cfg(feature = "stacked-charts")]
pub use crate::chart::stacked::{
AnimatedStackedBarChart, AnimatedStackedBarChartBuilder, AnimatedStackedLineChart,
AnimatedStackedLineChartBuilder, StackedBarWidth, StackedData,
};
pub use crate::data::{
calculate_bounds, calculate_multi_series_bounds, DataBounds, DataPoint, DataSeries,
FloatBounds, IntBounds, IntPoint, MultiSeries, Point2D, StaticDataSeries, TimestampedPoint,
};
#[cfg(feature = "animations")]
pub use crate::data::SlidingWindowSeries;
#[cfg(feature = "animations")]
pub use crate::data::streaming::{
ChartInstance, ChartInstanceConfig, ChartType, ErrorRecovery, ManagerConfig, ManagerMetrics,
MemoryStrategy, MonitoringLevel, PipelineConfig, PipelineMetrics, SourceConfig, SourceState,
StreamingChartManager, StreamingConfig, StreamingDataPipeline, StreamingDataSource,
StreamingMetrics, SyncMode, SyncState, UnifiedStreamingBuffer,
};
pub use crate::style::{
BorderStyle, ColorInterpolation, ColorPalette, ColorUtils, FillPattern, FillStyle, LineCap,
LineJoin, LinePattern, LineStyle, StrokeStyle,
};
pub use crate::style::themes::Theme;
#[cfg(feature = "color-support")]
pub use crate::style::rgb565_palettes;
pub use crate::layout::{ChartLayout, ComponentPositioning, Viewport};
pub use crate::render::{
ChartRenderer, ClippingRenderer, EnhancedChartRenderer, PrimitiveRenderer,
};
#[cfg(feature = "animations")]
pub use crate::render::AnimationFrameRenderer;
pub use crate::render::text::TextRenderer;
pub use crate::memory::{
ChartMemoryManager, FixedCapacityCollections, LabelStorage, ManagedSlidingWindow, MemoryStats,
};
pub use crate::error::{
ChartError, ChartResult, DataError, DataResult, LayoutError, LayoutResult, RenderError,
RenderResult,
};
#[cfg(feature = "animations")]
pub use crate::error::{AnimationError, AnimationResult};
#[cfg(feature = "animations")]
pub use crate::animation::{
ChartAnimator, EasingFunction, Interpolatable, MultiStateAnimator, Progress, StreamingAnimator,
TimeBasedProgress,
};
pub use crate::time::{
ManualTimeProvider, Microseconds, Milliseconds, MonotonicTimeProvider, TimeProvider,
};
#[cfg(feature = "std")]
pub use crate::time::StdTimeProvider;
pub use crate::fluent::quick as fluent_quick;
pub use crate::fluent::{Chart as FluentChart, ChartPreset};
pub use embedded_graphics::{
pixelcolor::{BinaryColor, Rgb565},
prelude::*,
primitives::{Circle, Line, Rectangle},
};
pub use heapless::{String, Vec};
pub use crate::heapless_utils::{sizes, string, vec, CircularBuffer, HeaplessConfig, HeaplessPool};
pub use crate::{heapless_string, heapless_vec};
pub mod types {
use super::*;
#[cfg(feature = "line")]
pub type Rgb565LineChart = LineChart<Rgb565>;
#[cfg(feature = "line")]
pub type Rgb565LineChartBuilder = LineChartBuilder<Rgb565>;
#[cfg(feature = "line")]
pub type Rgb565CurveChart = CurveChart<Rgb565>;
#[cfg(feature = "line")]
pub type Rgb565CurveChartBuilder = CurveChartBuilder<Rgb565>;
pub type StandardDataSeries = StaticDataSeries<Point2D, 256>;
pub type StandardMultiSeries = MultiSeries<Point2D, 8, 256>;
pub type StandardColorPalette = ColorPalette<Rgb565, 8>;
#[cfg(feature = "animations")]
pub type StandardSlidingWindow = SlidingWindowSeries<Point2D, 100>;
pub type StandardMemoryManager = ChartMemoryManager<4096>;
pub type StandardLabelStorage = LabelStorage<16, 32>;
}
pub mod constants {
use super::*;
pub const DEFAULT_MARGINS: Margins = Margins {
top: 10,
right: 10,
bottom: 10,
left: 10,
};
pub const MINIMAL_MARGINS: Margins = Margins {
top: 5,
right: 5,
bottom: 5,
left: 5,
};
pub const DEFAULT_GRID_SPACING: Size = Size::new(20, 20);
pub const FINE_GRID_SPACING: Size = Size::new(10, 10);
pub const COARSE_GRID_SPACING: Size = Size::new(50, 50);
}
pub mod quick {
use super::*;
#[cfg(feature = "line")]
pub fn line_chart() -> LineChartBuilder<Rgb565> {
LineChart::builder()
}
#[cfg(feature = "line")]
pub fn professional_line_chart() -> LineChartBuilder<Rgb565> {
LineChart::builder()
.line_color(Rgb565::new(70 >> 3, 130 >> 2, 180 >> 3)) .line_width(2)
}
#[cfg(feature = "line")]
pub fn curve_chart() -> CurveChartBuilder<Rgb565> {
CurveChart::builder()
}
#[cfg(feature = "line")]
pub fn professional_curve_chart() -> CurveChartBuilder<Rgb565> {
CurveChart::builder()
.line_color(Rgb565::new(70 >> 3, 130 >> 2, 180 >> 3)) .line_width(2)
.interpolation_type(InterpolationType::CubicSpline)
.subdivisions(12)
}
pub fn data_series_from_tuples(data: &[(f32, f32)]) -> ChartResult<types::StandardDataSeries> {
StaticDataSeries::from_tuples(data).map_err(ChartError::from)
}
#[cfg(feature = "color-support")]
pub fn default_colors() -> types::StandardColorPalette {
rgb565_palettes::default_palette()
}
#[cfg(feature = "color-support")]
pub fn professional_colors() -> types::StandardColorPalette {
rgb565_palettes::professional_palette()
}
#[cfg(feature = "color-support")]
pub fn pastel_colors() -> types::StandardColorPalette {
rgb565_palettes::pastel_palette()
}
#[cfg(feature = "color-support")]
pub fn vibrant_colors() -> types::StandardColorPalette {
rgb565_palettes::vibrant_palette()
}
#[cfg(feature = "color-support")]
pub fn nature_colors() -> types::StandardColorPalette {
rgb565_palettes::nature_palette()
}
#[cfg(feature = "color-support")]
pub fn ocean_colors() -> types::StandardColorPalette {
rgb565_palettes::ocean_palette()
}
#[cfg(feature = "color-support")]
pub fn sunset_colors() -> types::StandardColorPalette {
rgb565_palettes::sunset_palette()
}
#[cfg(feature = "color-support")]
pub fn cyberpunk_colors() -> types::StandardColorPalette {
rgb565_palettes::cyberpunk_palette()
}
#[cfg(feature = "color-support")]
pub fn minimal_colors() -> ColorPalette<Rgb565, 6> {
rgb565_palettes::minimal_palette()
}
#[cfg(feature = "color-support")]
pub fn retro_colors() -> types::StandardColorPalette {
rgb565_palettes::retro_palette()
}
pub fn light_theme() -> Theme<Rgb565> {
Theme::light()
}
pub fn dark_theme() -> Theme<Rgb565> {
Theme::dark()
}
pub fn vibrant_theme() -> Theme<Rgb565> {
Theme::vibrant()
}
pub fn pastel_theme() -> Theme<Rgb565> {
Theme::pastel()
}
pub fn nature_theme() -> Theme<Rgb565> {
Theme::nature()
}
pub fn ocean_theme() -> Theme<Rgb565> {
Theme::ocean()
}
pub fn sunset_theme() -> Theme<Rgb565> {
Theme::sunset()
}
pub fn cyberpunk_theme() -> Theme<Rgb565> {
Theme::cyberpunk()
}
pub fn minimal_theme() -> Theme<Rgb565> {
Theme::minimal()
}
pub fn retro_theme() -> Theme<Rgb565> {
Theme::retro()
}
}
#[macro_export]
macro_rules! data_points {
[$(($x:expr, $y:expr)),* $(,)?] => {
{
let mut series = $crate::data::StaticDataSeries::<$crate::data::Point2D, 256>::new();
$(
series.push($crate::data::Point2D::new($x, $y)).unwrap();
)*
series
}
};
}
#[macro_export]
macro_rules! chart_config {
(
$(title: $title:expr,)?
$(background: $bg:expr,)?
$(margins: $margins:expr,)?
$(grid: $grid:expr,)?
) => {
{
let mut config = $crate::chart::traits::ChartConfig::default();
$(
config.title = Some($crate::heapless::String::try_from($title).unwrap());
)?
$(
config.background_color = Some($bg);
)?
$(
config.margins = $margins;
)?
$(
config.show_grid = $grid;
)?
config
}
};
}
pub use chart_config;
pub use data_points;