Example #1
0
    /// <summary>
    /// Initializes a new instance of the <see cref="PolarChart"/> class.
    /// </summary>
    public PolarChart()
    {
        if (!LiveCharts.IsConfigured)
        {
            LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
        }

        var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
        var initializer   = stylesBuilder.GetVisualsInitializer();

        if (stylesBuilder.CurrentColors is null || stylesBuilder.CurrentColors.Length == 0)
        {
            throw new Exception("Default colors are not valid");
        }
        initializer.ApplyStyleToChart(this);

        InitializeComponent();

        _seriesObserver = new CollectionDeepObserver <ISeries>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
        _angleObserver  = new CollectionDeepObserver <IPolarAxis>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
        _radiusObserver = new CollectionDeepObserver <IPolarAxis>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);

        Loaded   += OnLoaded;
        Unloaded += OnUnloaded;

        SetValue(AngleAxesProperty, new ObservableCollection <IPolarAxis>()
        {
            LiveCharts.CurrentSettings.GetProvider <SkiaSharpDrawingContext>().GetDefaultPolarAxis()
        });
        SetValue(RadiusAxesProperty, new ObservableCollection <IPolarAxis>()
        {
            LiveCharts.CurrentSettings.GetProvider <SkiaSharpDrawingContext>().GetDefaultPolarAxis()
        });
        SetValue(SeriesProperty, new ObservableCollection <ISeries>());
    }
Example #2
0
        public Chart()
        {
            motionCanvas = new MotionCanvas();
            SuspendLayout();
            motionCanvas.Anchor          = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
            motionCanvas.FramesPerSecond = 90D;
            motionCanvas.Location        = new Point(0, 0);
            motionCanvas.Name            = "motionCanvas";
            motionCanvas.Size            = new Size(150, 150);
            motionCanvas.TabIndex        = 0;
            motionCanvas.Resize         += OnResized;
            motionCanvas.MouseMove      += OnMouseMove;
            AutoScaleDimensions          = new SizeF(7F, 15F);
            AutoScaleMode = AutoScaleMode.Font;
            Controls.Add(motionCanvas);
            Name = "CartesianChart";
            ResumeLayout(false);

            if (!LiveCharts.IsConfigured)
            {
                LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
            }

            var stylesBuilder = LiveCharts.CurrentSettings.GetStylesBuilder <SkiaSharpDrawingContext>();
            var initializer   = stylesBuilder.GetInitializer();

            if (stylesBuilder.CurrentColors == null || stylesBuilder.CurrentColors.Length == 0)
            {
                throw new Exception("Default colors are not valid");
            }
            initializer.ConstructChart(this);

            InitializeCore();
            mouseMoveThrottler = new ActionThrottler(MouseMoveThrottlerUnlocked, TimeSpan.FromMilliseconds(10));
        }
Example #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GeoMap"/> class.
        /// </summary>
        public GeoMap()
        {
            InitializeComponent();
            if (!LiveCharts.IsConfigured)
            {
                LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
            }
            _activeMap = Maps.GetWorldMap <SkiaSharpDrawingContext>();

            _core           = new GeoMap <SkiaSharpDrawingContext>(this);
            _shapesObserver = new CollectionDeepObserver <IMapElement>(
                (object?sender, NotifyCollectionChangedEventArgs e) => _core?.Update(),
                (object?sender, PropertyChangedEventArgs e) => _core?.Update(),
                true);

            var c = Controls[0].Controls[0];

            c.MouseDown  += OnMouseDown;
            c.MouseMove  += OnMouseMove;
            c.MouseUp    += OnMouseUp;
            c.MouseLeave += OnMouseLeave;
            c.MouseWheel += OnMouseWheel;

            Resize += GeoMap_Resize;
        }
Example #4
0
    /// <summary>
    /// Initializes a new instance of the <see cref="GeoMap"/> class.
    /// </summary>
    public GeoMap()
    {
        InitializeComponent();
        if (!LiveCharts.IsConfigured)
        {
            LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
        }
        _core           = new GeoMap <SkiaSharpDrawingContext>(this);
        _shapesObserver = new CollectionDeepObserver <IMapElement>(
            (object?sender, NotifyCollectionChangedEventArgs e) => _core?.Update(),
            (object?sender, PropertyChangedEventArgs e) => _core?.Update(),
            true);
        _seriesObserver = new CollectionDeepObserver <IGeoSeries>(
            (object?sender, NotifyCollectionChangedEventArgs e) => _core?.Update(),
            (object?sender, PropertyChangedEventArgs e) => _core?.Update(),
            true);

        Background = new SolidColorBrush(new Color(0, 0, 0, 0));

        PointerWheelChanged += OnPointerWheelChanged;
        PointerPressed      += OnPointerPressed;
        PointerMoved        += OnPointerMoved;
        PointerLeave        += OnPointerLeave;

        //Shapes = Enumerable.Empty<MapShape<SkiaSharpDrawingContext>>();
        ActiveMap   = Maps.GetWorldMap <SkiaSharpDrawingContext>();
        SyncContext = new object();

        DetachedFromVisualTree += GeoMap_DetachedFromVisualTree;
    }
    /// <summary>
    /// Initializes a new instance of the <see cref="GeoMap"/> class.
    /// </summary>
    public GeoMap()
    {
        InitializeComponent();
        if (!LiveCharts.IsConfigured)
        {
            LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
        }
        _core = new GeoMap <SkiaSharpDrawingContext>(this);

        canvas.SkCanvasView.EnableTouchEvents = true;
        canvas.SkCanvasView.Touch            += OnSkCanvasTouched;

        SizeChanged += GeoMap_SizeChanged;

        _shapesObserver = new CollectionDeepObserver <IMapElement>(
            (object?sender, NotifyCollectionChangedEventArgs e) => _core?.Update(),
            (object?sender, PropertyChangedEventArgs e) => _core?.Update(),
            true);
        _seriesObserver = new CollectionDeepObserver <IGeoSeries>(
            (object?sender, NotifyCollectionChangedEventArgs e) => _core?.Update(),
            (object?sender, PropertyChangedEventArgs e) => _core?.Update(),
            true);
        SetValue(ShapesProperty, Enumerable.Empty <IMapElement>());
        SetValue(SeriesProperty, Enumerable.Empty <IGeoSeries>());
        SetValue(ActiveMapProperty, Maps.GetWorldMap <SkiaSharpDrawingContext>());
        SetValue(SyncContextProperty, new object());
    }
    /// <summary>
    /// Initializes a new instance of the <see cref="GeoMap"/> class.
    /// </summary>
    public GeoMap()
    {
        InitializeComponent();
        if (!LiveCharts.IsConfigured)
        {
            LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
        }
        _core = new GeoMap <SkiaSharpDrawingContext>(this);

        PointerPressed      += OnPointerPressed;
        PointerMoved        += OnPointerMoved;
        PointerReleased     += OnPointerReleased;
        PointerWheelChanged += OnWheelChanged;
        PointerExited       += OnPointerExited;

        SizeChanged += GeoMap_SizeChanged;

        _shapesObserver = new CollectionDeepObserver <IMapElement>(
            (object?sender, NotifyCollectionChangedEventArgs e) => _core?.Update(),
            (object?sender, PropertyChangedEventArgs e) => _core.Update(),
            true);
        _seriesObserver = new CollectionDeepObserver <IGeoSeries>(
            (object?sender, NotifyCollectionChangedEventArgs e) => _core?.Update(),
            (object?sender, PropertyChangedEventArgs e) => _core.Update(),
            true);
        SetValue(ShapesProperty, Enumerable.Empty <MapShape <SkiaSharpDrawingContext> >());
        SetValue(SeriesProperty, Enumerable.Empty <IGeoSeries>());
        SetValue(ActiveMapProperty, Maps.GetWorldMap <SkiaSharpDrawingContext>());
        SetValue(SyncContextProperty, new object());

        Unloaded += GeoMap_Unloaded;
    }
Example #7
0
    /// <summary>
    /// Initializes a new instance of the <see cref="GeoMap"/> class.
    /// </summary>
    public GeoMap()
    {
        if (!LiveCharts.IsConfigured)
        {
            LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
        }

        MouseDown  += OnMouseDown;
        MouseMove  += OnMouseMove;
        MouseUp    += OnMouseUp;
        MouseLeave += OnMouseLeave;
        MouseWheel += OnMouseWheel;

        SizeChanged += GeoMap_SizeChanged;

        _shapesObserver = new CollectionDeepObserver <IMapElement>(
            (object?sender, NotifyCollectionChangedEventArgs e) => _core?.Update(),
            (object?sender, PropertyChangedEventArgs e) => _core?.Update(),
            true);
        _seriesObserver = new CollectionDeepObserver <IGeoSeries>(
            (object?sender, NotifyCollectionChangedEventArgs e) => _core?.Update(),
            (object?sender, PropertyChangedEventArgs e) => _core?.Update(),
            true);
        SetCurrentValue(ShapesProperty, Enumerable.Empty <MapShape <SkiaSharpDrawingContext> >());
        SetCurrentValue(SeriesProperty, Enumerable.Empty <IGeoSeries>());
        SetCurrentValue(ActiveMapProperty, Maps.GetWorldMap <SkiaSharpDrawingContext>());
        SetCurrentValue(SyncContextProperty, new object());

        Unloaded += GeoMap_Unloaded;
    }
Example #8
0
 public MainWindowVM()
 {
     /*
      *    only for design
      *
      */
     LiveCharts.Configure(a => a.HasMap <DataModel>((b, c) => { c.PrimaryValue = (float)b.Value; c.SecondaryValue = b.Second; }));
 }
Example #9
0
    /// <summary>
    /// Called when the control initializes.
    /// </summary>
    protected override void OnInitialized()
    {
        base.OnInitialized();

        if (!LiveCharts.IsConfigured)
        {
            LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
        }
        _activeMap = Maps.GetWorldMap <SkiaSharpDrawingContext>();
    }
Example #10
0
 public ViewModel()
 {
     // you must normally call this when the application starts.
     LiveCharts.Configure(config =>
                          config.HasMap <LogaritmicPoint>((model, point) =>
     {
         point.SecondaryValue = (float)model.X;
         point.PrimaryValue   = (float)Math.Log(model.Y, s_logBase);
     }));
 }
Example #11
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Axis"/> class.
        /// </summary>
        public Axis()
        {
            if (!LiveCharts.IsConfigured)
            {
                LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
            }
            var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
            var initializer   = stylesBuilder.GetVisualsInitializer();

            initializer.ApplyStyleToAxis(this);
        }
Example #12
0
        public Axis()
        {
            if (!LiveCharts.IsConfigured)
            {
                LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
            }
            var stylesBuilder = LiveCharts.CurrentSettings.GetStylesBuilder <SkiaSharpDrawingContext>();
            var initializer   = stylesBuilder.GetInitializer();

            initializer.ConstructAxis(this);
        }
Example #13
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PieChart"/> class.
        /// </summary>
        /// <exception cref="Exception">Default colors are not valid</exception>
        public PieChart()
        {
            InitializeComponent();

            if (!LiveCharts.IsConfigured)
            {
                LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
            }

            var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
            var initializer   = stylesBuilder.GetVisualsInitializer();

            if (stylesBuilder.CurrentColors == null || stylesBuilder.CurrentColors.Length == 0)
            {
                throw new Exception("Default colors are not valid");
            }
            initializer.ApplyStyleToChart(this);

            InitializeCore();
            SizeChanged += OnSizeChanged;

            _seriesObserver = new CollectionDeepObserver <ISeries>(
                (object sender, NotifyCollectionChangedEventArgs e) =>
            {
                if (core == null)
                {
                    return;
                }
                MainThread.BeginInvokeOnMainThread(() => core.Update());
            },
                (object sender, PropertyChangedEventArgs e) =>
            {
                if (core == null)
                {
                    return;
                }
                MainThread.BeginInvokeOnMainThread(() => core.Update());
            });

            Series = new ObservableCollection <ISeries>();

            canvas.SkCanvasView.EnableTouchEvents = true;
            canvas.SkCanvasView.Touch            += OnSkCanvasTouched;

            if (core == null)
            {
                throw new Exception("Core not found!");
            }
            core.Measuring      += OnCoreMeasuring;
            core.UpdateStarted  += OnCoreUpdateStarted;
            core.UpdateFinished += OnCoreUpdateFinished;
        }
Example #14
0
    /// <summary>
    /// Initializes a new instance of the <see cref="PieChart"/> class.
    /// </summary>
    /// <exception cref="Exception">Default colors are not valid</exception>
    public PieChart()
    {
        InitializeComponent();

        // workaround to detect mouse events.
        // Avalonia do not seem to detect events if background is not set.
        Background = new SolidColorBrush(Colors.Transparent);

        if (!LiveCharts.IsConfigured)
        {
            LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
        }

        var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
        var initializer   = stylesBuilder.GetVisualsInitializer();

        if (stylesBuilder.CurrentColors is null || stylesBuilder.CurrentColors.Length == 0)
        {
            throw new Exception("Default colors are not valid");
        }
        initializer.ApplyStyleToChart(this);

        InitializeCore();

        AttachedToVisualTree += OnAttachedToVisualTree;

        _seriesObserver = new CollectionDeepObserver <ISeries>(
            (object?sender, NotifyCollectionChangedEventArgs e) =>
        {
            if (_core is null || (sender is IStopNPC stop && !stop.IsNotifyingChanges))
            {
                return;
            }
            _core.Update();
        },
            (object?sender, PropertyChangedEventArgs e) =>
        {
            if (_core is null || (sender is IStopNPC stop && !stop.IsNotifyingChanges))
            {
                return;
            }
            _core.Update();
        });

        Series        = new ObservableCollection <ISeries>();
        PointerLeave += Chart_PointerLeave;

        PointerMoved           += Chart_PointerMoved;
        PointerPressed         += Chart_PointerPressed;
        DetachedFromVisualTree += PieChart_DetachedFromVisualTree;
    }
Example #15
0
        public CartesianChart()
        {
            InitializeComponent();

            if (!LiveCharts.IsConfigured)
            {
                LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
            }

            var stylesBuilder = LiveCharts.CurrentSettings.GetStylesBuilder <SkiaSharpDrawingContext>();
            var initializer   = stylesBuilder.GetInitializer();

            if (stylesBuilder.CurrentColors == null || stylesBuilder.CurrentColors.Length == 0)
            {
                throw new Exception("Default colors are not valid");
            }
            initializer.ConstructChart(this);

            InitializeCore();
            SizeChanged       += OnSizeChanged;
            mouseMoveThrottler = new ActionThrottler(MouseMoveThrottlerUnlocked, TimeSpan.FromMilliseconds(10));

            seriesObserver = new CollectionDeepObserver <ISeries>(
                (object sender, NotifyCollectionChangedEventArgs e) =>
            {
                if (core == null)
                {
                    return;
                }
                MainThread.BeginInvokeOnMainThread(core.Update);
            },
                (object sender, PropertyChangedEventArgs e) =>
            {
                if (core == null)
                {
                    return;
                }
                MainThread.BeginInvokeOnMainThread(core.Update);
            },
                true);

            XAxes = new List <IAxis>()
            {
                new Axis()
            };
            YAxes = new List <IAxis>()
            {
                new Axis()
            };
            Series = new ObservableCollection <ISeries>();
        }
    /// <summary>
    /// Initializes a new instance of the <see cref="DrawMarginFrame"/> class.
    /// </summary>
    public DrawMarginFrame()
    {
        if (!LiveCharts.IsConfigured)
        {
            LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
        }
        var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
        var initializer   = stylesBuilder.GetVisualsInitializer();

        foreach (var rule in initializer.DrawMarginFrameBuilder)
        {
            rule(this);
        }
    }
Example #17
0
    /// <summary>
    /// Initializes a new instance of the <see cref="CartesianChart"/> class.
    /// </summary>
    /// <exception cref="Exception">Default colors are not valid</exception>
    public CartesianChart()
    {
        InitializeComponent();

        // workaround to detect mouse events.
        // Avalonia do not seem to detect pointer events if background is not set.
        ((IChartView)this).BackColor = LvcColor.FromArgb(0, 0, 0, 0);

        if (!LiveCharts.IsConfigured)
        {
            LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
        }

        var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
        var initializer   = stylesBuilder.GetVisualsInitializer();

        if (stylesBuilder.CurrentColors is null || stylesBuilder.CurrentColors.Length == 0)
        {
            throw new Exception("Default colors are not valid");
        }
        initializer.ApplyStyleToChart(this);

        InitializeCore();

        AttachedToVisualTree += CartesianChart_AttachedToVisualTree;

        _seriesObserver   = new CollectionDeepObserver <ISeries>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
        _xObserver        = new CollectionDeepObserver <ICartesianAxis>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
        _yObserver        = new CollectionDeepObserver <ICartesianAxis>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
        _sectionsObserver = new CollectionDeepObserver <Section <SkiaSharpDrawingContext> >(
            OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);

        XAxes = new List <ICartesianAxis>()
        {
            LiveCharts.CurrentSettings.GetProvider <SkiaSharpDrawingContext>().GetDefaultCartesianAxis()
        };
        YAxes = new List <ICartesianAxis>()
        {
            LiveCharts.CurrentSettings.GetProvider <SkiaSharpDrawingContext>().GetDefaultCartesianAxis()
        };
        Series = new ObservableCollection <ISeries>();

        PointerPressed += CartesianChart_PointerPressed;
        PointerMoved   += CartesianChart_PointerMoved;
        // .. special case in avalonia for pointer released... he handle our own pointer capture.
        PointerWheelChanged += CartesianChart_PointerWheelChanged;
        PointerLeave        += CartesianChart_PointerLeave;

        DetachedFromVisualTree += CartesianChart_DetachedFromVisualTree;
    }
Example #18
0
    /// <summary>
    /// Initializes a new instance of the <see cref="CartesianChart"/> class.
    /// </summary>
    /// <exception cref="Exception">Default colors are not valid</exception>
    public CartesianChart()
    {
        InitializeComponent();

        if (!LiveCharts.IsConfigured)
        {
            LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
        }

        var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
        var initializer   = stylesBuilder.GetVisualsInitializer();

        if (stylesBuilder.CurrentColors is null || stylesBuilder.CurrentColors.Length == 0)
        {
            throw new Exception("Default colors are not valid");
        }
        initializer.ApplyStyleToChart(this);

        InitializeCore();
        SizeChanged += OnSizeChanged;

        _seriesObserver   = new CollectionDeepObserver <ISeries>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
        _xObserver        = new CollectionDeepObserver <ICartesianAxis>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
        _yObserver        = new CollectionDeepObserver <ICartesianAxis>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
        _sectionsObserver = new CollectionDeepObserver <Section <SkiaSharpDrawingContext> >(
            OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);

        XAxes = new List <ICartesianAxis>()
        {
            LiveCharts.CurrentSettings.GetProvider <SkiaSharpDrawingContext>().GetDefaultCartesianAxis()
        };
        YAxes = new List <ICartesianAxis>()
        {
            LiveCharts.CurrentSettings.GetProvider <SkiaSharpDrawingContext>().GetDefaultCartesianAxis()
        };
        Series = new ObservableCollection <ISeries>();

        canvas.SkCanvasView.EnableTouchEvents = true;
        canvas.SkCanvasView.Touch            += OnSkCanvasTouched;

        if (core is null)
        {
            throw new Exception("Core not found!");
        }
        core.Measuring      += OnCoreMeasuring;
        core.UpdateStarted  += OnCoreUpdateStarted;
        core.UpdateFinished += OnCoreUpdateFinished;
    }
Example #19
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PolarChart"/> class.
        /// </summary>
        /// <exception cref="Exception">Default colors are not valid</exception>
        public PolarChart()
        {
            InitializeComponent();

            // workaround to detect mouse events.
            // Avalonia do not seem to detect pointer events if background is not set.
            ((IChartView)this).BackColor = LvcColor.FromArgb(0, 0, 0, 0);

            if (!LiveCharts.IsConfigured)
            {
                LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
            }

            var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
            var initializer   = stylesBuilder.GetVisualsInitializer();

            if (stylesBuilder.CurrentColors is null || stylesBuilder.CurrentColors.Length == 0)
            {
                throw new Exception("Default colors are not valid");
            }
            initializer.ApplyStyleToChart(this);

            InitializeCore();

            AttachedToVisualTree += OnAttachedToVisualTree;

            _seriesObserver = new CollectionDeepObserver <ISeries>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
            _angleObserver  = new CollectionDeepObserver <IPolarAxis>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
            _radiusObserver = new CollectionDeepObserver <IPolarAxis>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);

            AngleAxes = new List <IPolarAxis>()
            {
                LiveCharts.CurrentSettings.PolarAxisProvider()
            };
            RadiusAxes = new List <IPolarAxis>()
            {
                LiveCharts.CurrentSettings.PolarAxisProvider()
            };
            Series = new ObservableCollection <ISeries>();

            PointerWheelChanged += PolarChart_PointerWheelChanged;
            PointerPressed      += PolarChart_PointerPressed;
            PointerMoved        += PolarChart_PointerMoved;

            PointerLeave           += PolarChart_PointerLeave;
            DetachedFromVisualTree += PolarChart_DetachedFromVisualTree;
        }
Example #20
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PieChart"/> class.
        /// </summary>
        /// <exception cref="Exception">Default colors are not valid</exception>
        public PieChart()
        {
            InitializeComponent();

            // workaround to detect mouse events.
            // Avalonia do not seem to detect events if background is not set.
            Background = new SolidColorBrush(Colors.Transparent);

            if (!LiveCharts.IsConfigured)
            {
                LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
            }

            var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
            var initializer   = stylesBuilder.GetVisualsInitializer();

            if (stylesBuilder.CurrentColors == null || stylesBuilder.CurrentColors.Length == 0)
            {
                throw new Exception("Default colors are not valid");
            }
            initializer.ApplyStyleToChart(this);

            InitializeCore();

            _seriesObserver = new CollectionDeepObserver <ISeries>(
                (object?sender, NotifyCollectionChangedEventArgs e) =>
            {
                if (core == null)
                {
                    return;
                }
                _ = Dispatcher.UIThread.InvokeAsync(() => core.Update(), DispatcherPriority.Background);
            },
                (object?sender, PropertyChangedEventArgs e) =>
            {
                if (core == null)
                {
                    return;
                }
                _ = Dispatcher.UIThread.InvokeAsync(() => core.Update(), DispatcherPriority.Background);
            });

            Series        = new ObservableCollection <ISeries>();
            PointerLeave += CartesianChart_PointerLeave;

            PointerMoved += CartesianChart_PointerMoved;
        }
Example #21
0
    // Moved to css, probably remove?
    //private Font _tooltipFont = new(new FontFamily("Trebuchet MS"), 11, FontStyle.Regular);
    //private Color _tooltipBackColor = Color.FromArgb(255, 250, 250, 250);
    //private Font _legendFont = new(new FontFamily("Trebuchet MS"), 11, FontStyle.Regular);
    //private Color _legendBackColor = Color.FromArgb(255, 255, 255, 255);
    //private Color _legendTextColor = Color.FromArgb(255, 35, 35, 35);
    //private Color _tooltipTextColor;

    /// <summary>
    /// Called when the control is initialized.
    /// </summary>
    /// <exception cref="Exception"></exception>
    protected override void OnInitialized()
    {
        base.OnInitialized();

        if (!LiveCharts.IsConfigured)
        {
            LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
        }

        var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
        var initializer   = stylesBuilder.GetVisualsInitializer();

        if (stylesBuilder.CurrentColors is null || stylesBuilder.CurrentColors.Length == 0)
        {
            throw new Exception("Default colors are not valid");
        }
        initializer.ApplyStyleToChart(this);
    }
Example #22
0
        public TestCartesianChartView()
        {
            if (!LiveCharts.IsConfigured)
            {
                LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
            }

            var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
            var initializer   = stylesBuilder.GetVisualsInitializer();

            if (stylesBuilder.CurrentColors is null || stylesBuilder.CurrentColors.Length == 0)
            {
                throw new Exception("Default colors are not valid");
            }
            initializer.ApplyStyleToChart(this);

            Core = new CartesianChart <SkiaSharpDrawingContext>(
                this, LiveChartsSkiaSharp.DefaultPlatformBuilder, CoreCanvas);
        }
Example #23
0
        public PieChart()
        {
            InitializeComponent();

            if (!LiveCharts.IsConfigured)
            {
                LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
            }

            var stylesBuilder = LiveCharts.CurrentSettings.GetStylesBuilder <SkiaSharpDrawingContext>();
            var initializer   = stylesBuilder.GetInitializer();

            if (stylesBuilder.CurrentColors == null || stylesBuilder.CurrentColors.Length == 0)
            {
                throw new Exception("Default colors are not valid");
            }
            initializer.ConstructChart(this);

            InitializeCore();

            mouseMoveThrottler = new ActionThrottler(MouseMoveThrottlerUnlocked, TimeSpan.FromMilliseconds(10));

            seriesObserver = new CollectionDeepObserver <ISeries>(
                (object?sender, NotifyCollectionChangedEventArgs e) =>
            {
                if (core == null)
                {
                    return;
                }
                Dispatcher.UIThread.InvokeAsync(core.Update, DispatcherPriority.Background);
            },
                (object?sender, PropertyChangedEventArgs e) =>
            {
                if (core == null)
                {
                    return;
                }
                Dispatcher.UIThread.InvokeAsync(core.Update, DispatcherPriority.Background);
            });

            Series = new ObservableCollection <ISeries>();
        }
Example #24
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Chart"/> class.
        /// </summary>
        /// <exception cref="Exception">Default colors are not valid</exception>
        protected Chart()
        {
            if (!LiveCharts.IsConfigured)
            {
                LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
            }

            var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
            var initializer   = stylesBuilder.GetVisualsInitializer();

            if (stylesBuilder.CurrentColors is null || stylesBuilder.CurrentColors.Length == 0)
            {
                throw new Exception("Default colors are not valid");
            }
            initializer.ApplyStyleToChart(this);

            SizeChanged += OnSizeChanged;
            MouseMove   += OnMouseMove;
            MouseLeave  += OnMouseLeave;
        }
Example #25
0
        public MainWindow()
        {
            InitializeComponent();
#if DEBUG
            this.AttachDevTools();
#endif

            DataContext = new MainWindowViewModel();
            LoadContent("Home");

            LiveCharts.Configure(settings =>
                                 settings.
                                 AddDefaultMappers()
                                 .AddSkiaSharp()
                                 .AddLightTheme()

                                 // .., your custom settings here
                                 // .HasMap<Foo>( ... )

                                 );
        }
Example #26
0
    /// <summary>
    /// Initializes a new instance of the <see cref="SKPolarChart"/> class.
    /// </summary>
    public SKPolarChart()
    {
        if (!LiveCharts.IsConfigured)
        {
            LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
        }

        var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
        var initializer   = stylesBuilder.GetVisualsInitializer();

        if (stylesBuilder.CurrentColors is null || stylesBuilder.CurrentColors.Length == 0)
        {
            throw new Exception("Default colors are not valid");
        }
        initializer.ApplyStyleToChart(this);

        Core                 = new PolarChart <SkiaSharpDrawingContext>(this, LiveChartsSkiaSharp.DefaultPlatformBuilder, CoreCanvas);
        Core.Measuring      += OnCoreMeasuring;
        Core.UpdateStarted  += OnCoreUpdateStarted;
        Core.UpdateFinished += OnCoreUpdateFinished;
    }
Example #27
0
        public Chart()
        {
            if (!LiveCharts.IsConfigured)
            {
                LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
            }

            var stylesBuilder = LiveCharts.CurrentSettings.GetStylesBuilder <SkiaSharpDrawingContext>();
            var initializer   = stylesBuilder.GetInitializer();

            if (stylesBuilder.CurrentColors == null || stylesBuilder.CurrentColors.Length == 0)
            {
                throw new Exception("Default colors are not valid");
            }
            initializer.ConstructChart(this);

            SizeChanged                 += OnSizeChanged;
            MouseMove                   += OnMouseMove;
            mouseMoveThrottler           = new ActionThrottler(TimeSpan.FromMilliseconds(10));
            mouseMoveThrottler.Unlocked += MouseMoveThrottlerUnlocked;
        }
Example #28
0
        public ViewModel()
        {
            // in this case we have an array of the Dog class
            // we need to compare the Age property of every dog in our array
            // you normally should configure every intance you require to use only when your application starts.

            // by default LiveCharts already knows how to map the types:
            // short, int, long, float, double, decimal, short?, int?, long?, float?, double?, decimal?,
            // WeightedPoint, WeightedPointF, ObservablePoint, ObservablePointF, OversableValue and ObservableValueF
            // for more info see:
            // https://github.com/beto-rodriguez/LiveCharts2/blob/master/src/LiveChartsCore/LiveChartsSettings.cs#L122
            LiveCharts.Configure(config =>

                                 // The HasMap<T>() method helps us to define a map from a type T to a point in our chart
                                 config
                                 .HasMap <Dog>((dog, point) =>
            {
                // in this lambda function we take an intance of the Dog class (see dog parameter)
                // and the point in the chart for that instance (see point parameter)
                // LiveCharts will call this method for every instance of our Dog class,
                // now we need to populate the point coordinates from our Dog intance to our point

                // in this case we will use the Age property as our primary value (normally the Y coordinate)
                point.PrimaryValue = (float)dog.Age;

                // then the secondary value (normally the X coordinate)
                // will be the index of the given dog class in our array
                point.SecondaryValue = point.Context.Index;
            })

                                 // lets also set a mapper for the DogAverageAge class
                                 .HasMap <DogAverageAge>((dogAverageAge, point) =>
            {
                // in this case we are ignoring the point paramenter
                // every coordinate will be provided by our dogAverageAge instance
                point.PrimaryValue   = (float)dogAverageAge.Y;
                point.SecondaryValue = (float)dogAverageAge.X;
            })
                                 );
        }
Example #29
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CartesianChart"/> class.
        /// </summary>
        public PieChart()
        {
            if (!LiveCharts.IsConfigured)
            {
                LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
            }

            var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
            var initializer   = stylesBuilder.GetVisualsInitializer();

            if (stylesBuilder.CurrentColors is null || stylesBuilder.CurrentColors.Length == 0)
            {
                throw new Exception("Default colors are not valid");
            }
            initializer.ApplyStyleToChart(this);

            InitializeComponent();

            _seriesObserver = new CollectionDeepObserver <ISeries>(
                (object sender, NotifyCollectionChangedEventArgs e) =>
            {
                if (_core == null || (sender is IStopNPC stop && !stop.IsNotifyingChanges))
                {
                    return;
                }
                _core.Update();
            },
                (object sender, PropertyChangedEventArgs e) =>
            {
                if (_core == null || (sender is IStopNPC stop && !stop.IsNotifyingChanges))
                {
                    return;
                }
                _core.Update();
            });

            Loaded   += OnLoaded;
            Unloaded += OnUnloaded;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="CartesianChart"/> class.
        /// </summary>
        /// <exception cref="Exception">Default colors are not valid</exception>
        public CartesianChart()
        {
            InitializeComponent();

            if (!LiveCharts.IsConfigured)
            {
                LiveCharts.Configure(LiveChartsSkiaSharp.DefaultPlatformBuilder);
            }

            var stylesBuilder = LiveCharts.CurrentSettings.GetTheme <SkiaSharpDrawingContext>();
            var initializer   = stylesBuilder.GetVisualsInitializer();

            if (stylesBuilder.CurrentColors == null || stylesBuilder.CurrentColors.Length == 0)
            {
                throw new Exception("Default colors are not valid");
            }
            initializer.ApplyStyleToChart(this);

            InitializeCore();
            SizeChanged += OnSizeChanged;

            seriesObserver = new CollectionDeepObserver <ISeries>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
            xObserver      = new CollectionDeepObserver <IAxis>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
            yObserver      = new CollectionDeepObserver <IAxis>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);

            XAxes = new List <IAxis>()
            {
                new Axis()
            };
            YAxes = new List <IAxis>()
            {
                new Axis()
            };
            Series = new ObservableCollection <ISeries>();

            canvas.SkCanvasView.EnableTouchEvents = true;
            canvas.SkCanvasView.Touch            += OnSkCanvasTouched;
        }