Exemplo n.º 1
0
    /// <summary>
    /// Initializes a new instance of the <see cref="PieChart"/> class.
    /// </summary>
    /// <param name="tooltip">The default tool tip control.</param>
    /// <param name="legend">The default legend.</param>
    public PieChart(IChartTooltip <SkiaSharpDrawingContext>?tooltip = null, IChartLegend <SkiaSharpDrawingContext>?legend = null)
        : base(tooltip, legend)
    {
        _seriesObserver = new CollectionDeepObserver <ISeries>(
            (object?sender, NotifyCollectionChangedEventArgs e) =>
        {
            if (sender is IStopNPC stop && !stop.IsNotifyingChanges)
            {
                return;
            }
            OnPropertyChanged();
        },
            (object?sender, PropertyChangedEventArgs e) =>
        {
            if (sender is IStopNPC stop && !stop.IsNotifyingChanges)
            {
                return;
            }
            OnPropertyChanged();
        },
            true);

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

        c.MouseDown += OnMouseDown;
    }
Exemplo n.º 2
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>());
    }
Exemplo n.º 3
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);

        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());
    }
Exemplo n.º 4
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;
    }
Exemplo n.º 5
0
        public CartesianChart()
        {
            seriesObserver = new CollectionDeepObserver <ISeries>(
                (object sender, NotifyCollectionChangedEventArgs e) =>
            {
                if (core == null)
                {
                    return;
                }
                Application.Current.Dispatcher.Invoke(core.Update);
            },
                (object sender, PropertyChangedEventArgs e) =>
            {
                if (core == null)
                {
                    return;
                }
                Application.Current.Dispatcher.Invoke(core.Update);
            },
                true);

            XAxes = new List <IAxis>()
            {
                new Axis()
            };
            YAxes = new List <IAxis>()
            {
                new Axis()
            };
            Series = new ObservableCollection <ISeries>();
        }
Exemplo n.º 6
0
    /// <summary>
    /// Called when the control is initalized.
    /// </summary>
    protected override void OnInitialized()
    {
        base.OnInitialized();

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

        if (_angleAxes is null)
        {
            AngleAxes = new List <IPolarAxis>()
            {
                LiveCharts.CurrentSettings.GetProvider <SkiaSharpDrawingContext>().GetDefaultPolarAxis()
            }
        }
        ;

        if (_radiusAxes is null)
        {
            RadiusAxes = new List <IPolarAxis>()
            {
                LiveCharts.CurrentSettings.GetProvider <SkiaSharpDrawingContext>().GetDefaultPolarAxis()
            }
        }
        ;

        //ToDo: pointer events.
        //var c = Controls[0].Controls[0];

        //c.MouseWheel += OnMouseWheel;
        //c.MouseDown += OnMouseDown;
        //c.MouseUp += OnMouseUp;
    }

    PolarChart <SkiaSharpDrawingContext> IPolarChartView <SkiaSharpDrawingContext> .Core => core is null ? throw new Exception("core not found") : (PolarChart <SkiaSharpDrawingContext>)core;
Exemplo n.º 7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CartesianChart"/> class.
        /// </summary>
        /// <param name="tooltip">The default tool tip control.</param>
        /// <param name="legend">The default legend control.</param>
        public CartesianChart(IChartTooltip <SkiaSharpDrawingContext>?tooltip = null, IChartLegend <SkiaSharpDrawingContext>?legend = null)
            : base(tooltip, legend)
        {
            _seriesObserver     = new CollectionDeepObserver <ISeries>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
            _xObserver          = new CollectionDeepObserver <ICartesianAxis>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
            _yObserver          = new CollectionDeepObserver <ICartesianAxis>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
            _sectionsObserverer = new CollectionDeepObserver <Section <SkiaSharpDrawingContext> >(
                OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);

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

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

            c.MouseWheel += OnMouseWheel;
            c.MouseDown  += OnMouseDown;
            c.MouseUp    += OnMouseUp;
        }
Exemplo n.º 8
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;
        }
Exemplo n.º 9
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CartesianChart"/> class.
        /// </summary>
        /// <param name="tooltip">The default tool tip control.</param>
        /// <param name="legend">The default legend control.</param>
        public CartesianChart(IChartTooltip <SkiaSharpDrawingContext>?tooltip = null, IChartLegend <SkiaSharpDrawingContext>?legend = null)
            : base(tooltip, legend)
        {
            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>();

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

            c.MouseWheel += OnMouseWheel;
            c.MouseDown  += OnMouseDown;
            c.MouseMove  += OnMoseMove;
            c.MouseUp    += OnMouseUp;

            panningThrottler = new ActionThrottler(DoPan, TimeSpan.FromMilliseconds(30));
        }
Exemplo n.º 10
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);

        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;
    }
Exemplo n.º 11
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;
    }
Exemplo n.º 12
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CartesianChart"/> class.
        /// </summary>
        public PieChart()
        {
            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;
        }
Exemplo n.º 13
0
 public TestObserver()
 {
     observerer = new CollectionDeepObserver <T>(
         (sender, e) =>
     {
         CollectionChangedCount++;
     },
         (sender, e) =>
     {
         PropertyChangedCount++;
     });
 }
 public TestObserver()
 {
     observerer = new CollectionDeepObserver <T>(
         (object sender, NotifyCollectionChangedEventArgs e) =>
     {
         CollectionChangedCount++;
     },
         (object sender, PropertyChangedEventArgs e) =>
     {
         PropertyChangedCount++;
     });
 }
Exemplo n.º 15
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;
        }
Exemplo n.º 16
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>();
        }
Exemplo n.º 17
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;
    }
Exemplo n.º 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();

        // 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;
    }
Exemplo n.º 19
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;
    }
Exemplo n.º 20
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;
        }
Exemplo n.º 21
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;
        }
Exemplo n.º 22
0
        public Series(SeriesProperties properties)
        {
            this.properties = properties;
            observer        = new CollectionDeepObserver <TModel>(
                (object sender, NotifyCollectionChangedEventArgs e) =>
            {
                NotifySubscribers();
            },
                (object sender, PropertyChangedEventArgs e) =>
            {
                NotifySubscribers();
            });
            var t = typeof(TModel);

            implementsICP = typeof(IChartPoint <TVisual, TLabel, TDrawingContext>).IsAssignableFrom(t);
            isValueType   = t.IsValueType;
        }
Exemplo n.º 23
0
    /// <summary>
    /// Called when the control renders.
    /// </summary>
    /// <param name="firstRender"></param>
    /// <returns></returns>
    /// <exception cref="Exception"></exception>
    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (!firstRender)
        {
            return;
        }

        _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);

        // ToDo: Pointer events.
        //var c = Controls[0].Controls[0];

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

        //Resize += GeoMap_Resize;

        if (_dom is null)
        {
            _dom = new DomJsInterop(JS);
        }
        var canvasBounds = await _dom.GetBoundingClientRect(_canvasContainer);

        _canvasWidth  = canvasBounds.Width;
        _canvasHeight = canvasBounds.Height;

        _core.Update();

        if (_motionCanvas is null)
        {
            throw new Exception("MotionCanvas not found");
        }
        _jsFlexibleContainer.Resized += OnResized;
    }
Exemplo n.º 24
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>();
        }
Exemplo n.º 25
0
 public CartesianChart()
 {
     seriesObserver = new CollectionDeepObserver <ISeries>(
         (object sender, NotifyCollectionChangedEventArgs e) =>
     {
         if (core == null)
         {
             return;
         }
         core.Update();
     },
         (object sender, PropertyChangedEventArgs e) =>
     {
         if (core == null)
         {
             return;
         }
         core.Update();
     });
 }
Exemplo n.º 26
0
    /// <summary>
    /// Initializes a new instance of the <see cref="PolarChart"/> class.
    /// </summary>
    public PolarChart()
    {
        _seriesObserver = new CollectionDeepObserver <ISeries>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
        _angleObserver  = new CollectionDeepObserver <IPolarAxis>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);
        _radiusObserver = new CollectionDeepObserver <IPolarAxis>(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true);

        SetCurrentValue(AngleAxesProperty, new ObservableCollection <IPolarAxis>()
        {
            LiveCharts.CurrentSettings.GetProvider <SkiaSharpDrawingContext>().GetDefaultPolarAxis()
        });
        SetCurrentValue(RadiusAxesProperty, new ObservableCollection <IPolarAxis>()
        {
            LiveCharts.CurrentSettings.GetProvider <SkiaSharpDrawingContext>().GetDefaultPolarAxis()
        });
        SetCurrentValue(SeriesProperty, new ObservableCollection <ISeries>());

        MouseWheel += OnMouseWheel;
        MouseDown  += OnMouseDown;
        MouseUp    += OnMouseUp;
    }
Exemplo n.º 27
0
 public PieChart()
 {
     seriesObserver = new CollectionDeepObserver <ISeries>(
         (object sender, NotifyCollectionChangedEventArgs e) =>
     {
         if (core == null)
         {
             return;
         }
         Application.Current.Dispatcher.Invoke(core.Update);
     },
         (object sender, PropertyChangedEventArgs e) =>
     {
         if (core == null)
         {
             return;
         }
         Application.Current.Dispatcher.Invoke(core.Update);
     });
 }
Exemplo n.º 28
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PolarChart"/> class.
        /// </summary>
        public PolarChart()
        {
            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.PolarAxisProvider()
            });
            SetValue(RadiusAxesProperty, new ObservableCollection <IPolarAxis>()
            {
                LiveCharts.CurrentSettings.PolarAxisProvider()
            });
            SetValue(SeriesProperty, new ObservableCollection <ISeries>());
        }
Exemplo n.º 29
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PieChart"/> class.
        /// </summary>
        public PieChart()
        {
            _seriesObserver = new CollectionDeepObserver <ISeries>(
                (object?sender, NotifyCollectionChangedEventArgs e) =>
            {
                if (core == null)
                {
                    return;
                }
                Application.Current.Dispatcher.Invoke(() => core.Update());
            },
                (object?sender, PropertyChangedEventArgs e) =>
            {
                if (core == null)
                {
                    return;
                }
                Application.Current.Dispatcher.Invoke(() => core.Update());
            });

            SetCurrentValue(SeriesProperty, new ObservableCollection <ISeries>());
        }
Exemplo n.º 30
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PieChart"/> class.
        /// </summary>
        public PieChart()
        {
            _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();
            });

            SetCurrentValue(SeriesProperty, new ObservableCollection <ISeries>());
        }