From 5804f9b780c5318ed52120acb07d65baf6bf3b81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sun, 12 Nov 2023 12:11:23 -0600 Subject: [PATCH 01/86] docs fixes and new articles --- docs/overview/1.2.install.md | 2 +- docs/samples/bars/custom/template.md | 2 +- docs/samples/general/drawOnCanvas/result.gif | Bin 0 -> 127258 bytes docs/samples/general/drawOnCanvas/template.md | 1 + docs/samples/pies/outlabels/result.png | Bin 0 -> 14103 bytes docs/samples/pies/outlabels/template.md | 1 + .../General/DrawOnCanvas/ViewModel.cs | 4 +++- .../Pies/Doughnut/ViewModel.cs | 2 +- .../Pies/NightingaleRose/ViewModel.cs | 2 +- 9 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 docs/samples/general/drawOnCanvas/result.gif create mode 100644 docs/samples/general/drawOnCanvas/template.md create mode 100644 docs/samples/pies/outlabels/result.png create mode 100644 docs/samples/pies/outlabels/template.md diff --git a/docs/overview/1.2.install.md b/docs/overview/1.2.install.md index 1832421dd..453e6f656 100644 --- a/docs/overview/1.2.install.md +++ b/docs/overview/1.2.install.md @@ -672,7 +672,7 @@ Go to the `Solution Explorer` and browse for `Program.cs` file, then edit the it Go to the `Solution Explorer` and browse for `UnoApp.Shared/App.xaml.cs` file, then edit the it as follows. ``` -{{ render this "~/../samples/UnoPlatformSample/UnoPlatformSample/App.cs" }} +{{ render this "~/../samples/UnoPlatform_v5/UnoPlatform_v5/App.cs" }} ``` {{~ end ~}} diff --git a/docs/samples/bars/custom/template.md b/docs/samples/bars/custom/template.md index 1370d86aa..b0fdad88c 100644 --- a/docs/samples/bars/custom/template.md +++ b/docs/samples/bars/custom/template.md @@ -8,7 +8,7 @@ ## MyGeometry.cs -{{~ "~/../samples/ViewModelsSamples/Lines/Custom/MyGeometry.cs" | render_file_as_code ~}} +{{~ "~/../samples/ViewModelsSamples/Bars/Custom/MyGeometry.cs" | render_file_as_code ~}} {{~ if xaml ~}} ## XAML diff --git a/docs/samples/general/drawOnCanvas/result.gif b/docs/samples/general/drawOnCanvas/result.gif new file mode 100644 index 0000000000000000000000000000000000000000..4afca550ca69ee8c6d8aa5d3fb96a8ece2c3ed3b GIT binary patch literal 127258 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
    c;am%4NfRWsSWxTu2 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 >m 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

    |#MdOa5heyZqHBqNB+<7r%q6RFs za&Lk#=e4+zGP6x%Uuh}twV1*>O1eOl<@LH4qw09kH+8bgpKGPZ=!&Rr-Au*OKRn{X zeDZK)R&Dkeo0(jiEr6s~D@=`P&WmWE0z(@`K|bq6$c@$GgS$J5;fvAO_RxN-zSYQc zE28q6He(VkhA{ntPO9+Dhmi|`9Mvl~d~V2UnLH=D>z$&7@}zI{6Al|A5u_6dpyd{$ zjC~;WokD=v>xuKqQaB;fKRHUr3g`Wc(O5?f;Rnw;NQC%fGiU70;yU^tX)_&O^{^2d z3*{Y3G?}(G9KDxde?2LR*b(hS&_HSueqq@CCC$lAsluG19%x}keQcWUXO>37kt!d3 zBVXfZ%u=u`mzr$8Jf+Oac8PPPAVBp<^G)RDef$<8Y%n17j?ZU6??XIZ;GASOUMx9; zpcw^xI6ZbFjgS(Sh#)&Ux8k=Y$9GLBlsTBq6uCMDE=l35>v`Mw5-Hs`R2IaeXo5s1 z{b3|G;mNB`$iQLtR$+H*Tulyn;eQbt{zt2a)sNL9RhF=%Ol+FM$>%E8@t(q*+Np^@ z2PUblG?SOu=0)}ZIa@jY2&v6J(olkQbtaV47W`{$7aV^fLuaOJG3C_c4QXn8FYmmZ zg>5M5+7v2;3Afz+gw*#s17dS}=~~UELYlIw_z&#iM*EJ&{t(R^Z3#W?@3H5fYUBTl zoYx&18dVw^3mTf2G&G^q)X5M?Athx!Ie9NB=>!qcA_2iV9v%z_XCE8;2n*{36B9T{ z5f~Uib_C*7&eTR=ey%#_vZHf~3LNG@_XAjyehQ9$AQlp!6fZAQSQy-%5Yo~JS=rNj z_f8ZQj}#RTl$78~N-!m*4JD;zC8Zf<DW> zBPAtWMMX7mKm%DSV1WVYC+9hqU}*vC3RqNt=hMW*meIGt_<>htc=eGhbtf;8Dq@<;+to7r^_NuDRPoMf~Ysc#9 z7V7F&>gqP?>b8MMzOD{lS9bvF8Ga1tX*jB{|8p7|jv5<5I^|(Y3s5=j{}9aYb$0G{ zb-{XicKZ5Y0|OvSWp8BU?EW=A4xgNaPffu=aOK<_P&onH=lYP2~1A5(Y!=?<0?nkU#+SlOy}rc*WLEHmyUU2i@HBE}K?`DeBWZjpt)ueDj>C?jO4Sp?WtPg5>I~CecmZR}X!T8{iGGeVYGZ_%jTd?rUL?9R#=U72Owq`za<0Y_y48?-%&+u&27*C@3dJxuCtb zz3ytxgY}u7Py8xDt)?DuoFh4b*)vU3FG<>`*3!EtY;;Y0dq5js(Hj%p-tHudg|Y_W zlP?|wHJJ`q@(s=wd2pA+o^>re2$F0LXW*o-MuPB3frRJWM|SFuV0dTYlbp?o?u;;g zU2h8QY+Bik+mXHZu;LyAZG4>n0Lw@*#f-&`%xq%^$k#hJ{5cCi9?BOZ3LnCbB3=a# z-h#ux##h$7g4g;~WWvGkgf>cej3G1mmyS(*2xqvgIf8Qs6-e!~>>W2N z*dF@?+ELbG>Js;Oey|Np;*#;XLlNmh!?Qk0K&Kwua69lWNg~e#$>ccOjz1)}i{fG$ zR!u0c+%Vev5=^-oT6HO2#%AUwL(CBIZO!mNeW(^Itet{xq)3CiAB{!>W6e(5mZ5FR zPYtpwjuwLWw~iJ=cwsf6kND^l00Ywd|~dlW%zyTPN#9ZJehYWn;Fdo0TgCr&~3LTc_LgIJXcx z%~Veiu=bmUh}~}fe*@>W&HqN+Q=R}k3al>x#Wif7f}Ng3EIjzQXh zZ`mMs6{^Z0bkuNB7Q>t6B-vN8GF7k0PJ)#}p7ybt1ce{7AH_2xd@-LUj8Rn?sD84M z?_*d!yyIf(FY5INx-Xe{5(|c& g8Piagl#EQxXk9IxENC@M9L&sYHJ`{?K1LJ%f41_uL;wH) literal 0 HcmV?d00001 diff --git a/docs/samples/general/drawOnCanvas/template.md b/docs/samples/general/drawOnCanvas/template.md new file mode 100644 index 000000000..1767d6c1d --- /dev/null +++ b/docs/samples/general/drawOnCanvas/template.md @@ -0,0 +1 @@ +{{ render this "~/shared/genericSampleJustGif.md" }} \ No newline at end of file diff --git a/docs/samples/pies/outlabels/result.png b/docs/samples/pies/outlabels/result.png new file mode 100644 index 0000000000000000000000000000000000000000..16ebfeb7d8430ef702a22bd8b1a5129c30d0f0d3 GIT binary patch literal 14103 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 NQBhEbR>_&a{4WS~1snhX literal 0 HcmV?d00001 diff --git a/docs/samples/pies/outlabels/template.md b/docs/samples/pies/outlabels/template.md new file mode 100644 index 000000000..9faab4bbc --- /dev/null +++ b/docs/samples/pies/outlabels/template.md @@ -0,0 +1 @@ +{{ render this "~/shared/genericSampleSimple.md" }} \ No newline at end of file diff --git a/samples/ViewModelsSamples/General/DrawOnCanvas/ViewModel.cs b/samples/ViewModelsSamples/General/DrawOnCanvas/ViewModel.cs index a0803ee30..989ba4df5 100644 --- a/samples/ViewModelsSamples/General/DrawOnCanvas/ViewModel.cs +++ b/samples/ViewModelsSamples/General/DrawOnCanvas/ViewModel.cs @@ -18,6 +18,7 @@ public partial class ViewModel private SolidColorPaint? _paint; private SimpleGeometry? _simpleGeometry; private MotionGeometry? _motionGeometry; + private bool _isBigCircle = true; [RelayCommand] public void ChartUpdated(ChartCommandArgs args) @@ -48,7 +49,8 @@ public void ChartUpdated(ChartCommandArgs args) _motionGeometry.X = (float)locationInPixels.X; _motionGeometry.Y = (float)locationInPixels.Y; - _motionGeometry.Diameter = 70; + // lets toggle the diameter of the circle between 20 and 70 + _motionGeometry.Diameter = (_isBigCircle = !_isBigCircle) ? 70 : 20; // if this is the first time we draw the geometry // we can complete the animations. diff --git a/samples/ViewModelsSamples/Pies/Doughnut/ViewModel.cs b/samples/ViewModelsSamples/Pies/Doughnut/ViewModel.cs index 39520ad48..eeacfaece 100644 --- a/samples/ViewModelsSamples/Pies/Doughnut/ViewModel.cs +++ b/samples/ViewModelsSamples/Pies/Doughnut/ViewModel.cs @@ -11,6 +11,6 @@ public partial class ViewModel : ObservableObject public IEnumerable Series { get; set; } = new[] { 2, 4, 1, 4, 3 }.AsPieSeries((value, series) => { - series.InnerRadius = 70; + series.MaxRadialColumnWidth = 60; }); } diff --git a/samples/ViewModelsSamples/Pies/NightingaleRose/ViewModel.cs b/samples/ViewModelsSamples/Pies/NightingaleRose/ViewModel.cs index 0a5f344e0..666b0c954 100644 --- a/samples/ViewModelsSamples/Pies/NightingaleRose/ViewModel.cs +++ b/samples/ViewModelsSamples/Pies/NightingaleRose/ViewModel.cs @@ -16,7 +16,7 @@ public ViewModel() Series = data.AsPieSeries((value, series) => { // this method is called once per element in the array - // we are decremting the outer radius 10 percent (0.1) + // we are decrementing the outer radius 50px // on every element in the array. series.InnerRadius = 50; From 4c4869f6c307f204f3782aa3e0363030357155c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sun, 12 Nov 2023 13:35:51 -0600 Subject: [PATCH 02/86] update ondrawcanvas article --- docs/samples/general/drawOnCanvas/template.md | 63 ++++++++++++++++++- .../General/DrawOnCanvas/ViewModel.cs | 45 +++++-------- 2 files changed, 76 insertions(+), 32 deletions(-) diff --git a/docs/samples/general/drawOnCanvas/template.md b/docs/samples/general/drawOnCanvas/template.md index 1767d6c1d..bd539a1b9 100644 --- a/docs/samples/general/drawOnCanvas/template.md +++ b/docs/samples/general/drawOnCanvas/template.md @@ -1 +1,62 @@ -{{ render this "~/shared/genericSampleJustGif.md" }} \ No newline at end of file +{{ render this "~/shared/genericSampleJustGifHeader.md" }} + +We can directly draw on the canvas to create custom shapes or effects, by default LiveCharts uses SkiaSharp +to render the controls, this means that you can use all the SkiaSharp API to draw on the canvas, you can find +more information about SkiaSharp [here](https://learn.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/basics/). + +In the next example we use the `UpdateStarted` command/event in the `CartesianChart`, this command/event is raised every time +the control is measured, a LiveCharts control is measured when the data changes or the control size change. + +## View model + +``` +{{ full_name | get_vm_from_docs }} +``` + +{{~ if xaml ~}} +## XAML +{{~ end ~}} + +{{~ if winforms ~}} +## Form code behind +{{~ end ~}} + +{{~ if blazor~}} +## HTML +{{~ end~}} + +``` +{{ full_name | get_view_from_docs }} +``` + +In the previous case we inherited from `Geometry`, this class already contains some useful properties that we +can use to set the location, rotation, opacity or transform of the geometry, you can find more information about +the `Geometry` class [here](https://livecharts.dev/api/{{ version }}/LiveChartsCore.SkiaSharpView.Drawing.Geometries.Geometry). + +We override the `OnDraw` method to define the drawing logic of our custom geometry, in this case we are only drawing a circle +based on the `X`, `Y` and `Diameter` properties. + +These properties are not regular properties, they are a special type defined by LiveCharts, the +[MotionProperty](https://livecharts.dev/api/{{ version }}/LiveChartsCore.Motion.MotionProperty-1) type is what handles animations +in LiveCharts. Every time we access a motion property we get the value of the property at the current time based on the +[IAnimatable](https://livecharts.dev/api/{{ version }}/LiveChartsCore.Drawing.IAnimatable) animation. + +We also created an instance of the `SolidColorPaint` class, this class defines how the geometry will be rendered on the canvas, +in this case a blue color with a stroke width of 2, then we added our geometry to the paint (you can add multiple geometries), +and we also added the paint to the canvas. + +The user interface update cycle is the following: + +1. The chart control is invalidated (data changed or size changed), so the control is measured and with it the `UpdateStarted` +command/event is raised. + +2. When the control is measured, we add Paints to the canvas, and geometries to the paints, this is only scheduling the drawing, +nothing is rendered yet at this point. + +3. Now the control starts drawing all the paints and geometries in the canvas, this is when the `OnDraw` method is called. + +4. LiveCharts defines the `MotionCanvas` class, it redraws the user interface as all the animations complete. This means that the +previous step is repeated multiple times per second (~60), so you must be careful when overriding the `OnDraw` method, you should only +perform drawing operations there. LiveCharts will keep drawing until all animations are finished. + +{{ render this "~/shared/relatedTo.md" }} diff --git a/samples/ViewModelsSamples/General/DrawOnCanvas/ViewModel.cs b/samples/ViewModelsSamples/General/DrawOnCanvas/ViewModel.cs index 989ba4df5..53106bbb3 100644 --- a/samples/ViewModelsSamples/General/DrawOnCanvas/ViewModel.cs +++ b/samples/ViewModelsSamples/General/DrawOnCanvas/ViewModel.cs @@ -16,8 +16,7 @@ namespace ViewModelsSamples.General.DrawOnCanvas; public partial class ViewModel { private SolidColorPaint? _paint; - private SimpleGeometry? _simpleGeometry; - private MotionGeometry? _motionGeometry; + private MotionGeometry? _geometry; private bool _isBigCircle = true; [RelayCommand] @@ -25,21 +24,17 @@ public void ChartUpdated(ChartCommandArgs args) { var chartView = (ICartesianChartView)args.Chart; - var isNewGeometry = _simpleGeometry is null; - - _simpleGeometry ??= new SimpleGeometry(); - if (_motionGeometry is null) + if (_geometry is null) { - _motionGeometry = new MotionGeometry(); - _motionGeometry.Animate( + _geometry = new MotionGeometry(); + _geometry.Animate( new(EasingFunctions.BounceOut, TimeSpan.FromMilliseconds(800))); } if (_paint is null) { _paint = new SolidColorPaint(SKColors.Blue) { IsStroke = true, StrokeThickness = 2 }; - _paint.AddGeometryToPaintTask(chartView.CoreCanvas, _simpleGeometry); - _paint.AddGeometryToPaintTask(chartView.CoreCanvas, _motionGeometry); + _paint.AddGeometryToPaintTask(chartView.CoreCanvas, _geometry); chartView.CoreCanvas.AddDrawableTask(_paint); } @@ -47,10 +42,10 @@ public void ChartUpdated(ChartCommandArgs args) var locationInChartValues = new LvcPointD(5, 5); var locationInPixels = chartView.ScaleDataToPixels(locationInChartValues); - _motionGeometry.X = (float)locationInPixels.X; - _motionGeometry.Y = (float)locationInPixels.Y; + _geometry.X = (float)locationInPixels.X; + _geometry.Y = (float)locationInPixels.Y; // lets toggle the diameter of the circle between 20 and 70 - _motionGeometry.Diameter = (_isBigCircle = !_isBigCircle) ? 70 : 20; + _geometry.Diameter = (_isBigCircle = !_isBigCircle) ? 70 : 20; // if this is the first time we draw the geometry // we can complete the animations. @@ -58,26 +53,9 @@ public void ChartUpdated(ChartCommandArgs args) } } -public class SimpleGeometry : Geometry -{ - public override void OnDraw(SkiaSharpDrawingContext context, SKPaint paint) - { - // we can use SkiaSharp here to draw anything we want - var skCanvas = context.Canvas; - skCanvas.DrawCircle(200, 200, 50, paint); - } - - protected override LvcSize OnMeasure(IPaint paintTasks) - { - // you can measure the geometry here, this method is used when the geometry - // is used inside a layout, in this case it is not necessary. - return new(); - } -} - public class MotionGeometry : Geometry { - // you can use Motion properties to animate the geometry + // use Motion properties to animate the geometry private readonly FloatMotionProperty _diameter; public MotionGeometry() @@ -93,6 +71,9 @@ public float Diameter public override void OnDraw(SkiaSharpDrawingContext context, SKPaint paint) { + // we can use SkiaSharp here to draw anything we need // mark + // https://learn.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/basics/ // mark + // because we inherited from Geometry, this class already contains the X, Y // and some other motion properties that we can use. @@ -101,6 +82,8 @@ public override void OnDraw(SkiaSharpDrawingContext context, SKPaint paint) protected override LvcSize OnMeasure(IPaint paintTasks) { + // you can measure the geometry here, this method is used when the geometry + // is used inside a layout, in this case it is not necessary. return new(); } } From a54808f469cff09c27be4bfa7e51d21db430ce03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Mon, 13 Nov 2023 16:59:23 -0600 Subject: [PATCH 03/86] fiex #887 --- .../Painting/LinearGradientPaint.cs | 6 +----- .../Painting/RadialGradientPaint.cs | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/LinearGradientPaint.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/LinearGradientPaint.cs index af3f14144..13b4b5928 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/LinearGradientPaint.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/LinearGradientPaint.cs @@ -262,10 +262,6 @@ public override void Dispose() private SKRect GetDrawRectangleSize(SkiaSharpDrawingContext drawingContext) { - var clip = GetClipRectangle(drawingContext.MotionCanvas); - - return clip == LvcRectangle.Empty - ? new SKRect(0, 0, drawingContext.Info.Width, drawingContext.Info.Width) - : new SKRect(clip.X, clip.Y, clip.X + clip.Width, clip.Y + clip.Height); + return new SKRect(0, 0, drawingContext.Info.Width, drawingContext.Info.Width); } } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/RadialGradientPaint.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/RadialGradientPaint.cs index 0fbebaf43..2822e619c 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/RadialGradientPaint.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/RadialGradientPaint.cs @@ -220,10 +220,6 @@ public override void Dispose() private SKRect GetDrawRectangleSize(SkiaSharpDrawingContext drawingContext) { - var clip = GetClipRectangle(drawingContext.MotionCanvas); - - return clip == LvcRectangle.Empty - ? new SKRect(0, 0, drawingContext.Info.Width, drawingContext.Info.Width) - : new SKRect(clip.X, clip.Y, clip.Width, clip.Height); + return new SKRect(0, 0, drawingContext.Info.Width, drawingContext.Info.Width); } } From 97f16306a421c9febc19bfdb801573e32da12a02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Tue, 14 Nov 2023 09:27:24 -0600 Subject: [PATCH 04/86] fixes #1354 --- build/pack.ps1 | 2 +- .../LiveChartsCore.SkiaSharpView.WinUI.nuspec | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/build/pack.ps1 b/build/pack.ps1 index 5b89a3513..6cfaa83c3 100644 --- a/build/pack.ps1 +++ b/build/pack.ps1 @@ -119,7 +119,7 @@ function Add-Pack { Invoke-WebRequest "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" -OutFile "./nuget.exe" } - ./nuget pack $project.nuspecFile -OutputDirectory $nupkgOutputPath -Symbols + ./nuget pack $project.nuspecFile -OutputDirectory $nupkgOutputPath -Symbols -SymbolPackageFormat snupkg } } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.nuspec b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.nuspec index 8dc1ad510..ffd47002f 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.nuspec +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.nuspec @@ -2,7 +2,7 @@ LiveChartsCore.SkiaSharpView.WinUI - 2.0.0-rc2 + 2.0.0-rc2.1 LiveChartsCore.SkiaSharpView.WinUI BetoRodriguez true @@ -19,11 +19,13 @@ + + From 570247a1bf33809326645c474b8ce1c70f1c650f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Thu, 16 Nov 2023 08:24:12 -0600 Subject: [PATCH 05/86] typo --- docs/overview/1.2.install.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/overview/1.2.install.md b/docs/overview/1.2.install.md index 453e6f656..cfe356661 100644 --- a/docs/overview/1.2.install.md +++ b/docs/overview/1.2.install.md @@ -445,7 +445,7 @@ namespace WinUISample { public class ViewModel { - public <ISeries[] Series { get; set; } + public ISeries[] Series { get; set; } = new ISeries[] { new LineSeries<double> @@ -469,13 +469,15 @@ then add a `CartesianChart` control and bind the `Series` property: xmlns:local="using:App3" xmlns:lvc="using:LiveChartsCore.SkiaSharpView.WinUI"> - <Window.DataContext> - <local:ViewModel /><!-- mark --> - </Window.DataContext> + <Grid> + <Grid.DataContext> + <local:ViewModel /><!-- mark --> + </Grid.DataContext> - <lvc:CartesianChart<!-- mark --> - Series="{Binding Series}"><!-- mark --> - </lvc:CartesianChart><!-- mark --> + <lvc:CartesianChart<!-- mark --> + Series="{Binding Series}"><!-- mark --> + </lvc:CartesianChart><!-- mark --> + </Grid> </Window> From 95b6f91940539b3597ab2a26841af0fac723bcb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Thu, 16 Nov 2023 11:13:00 -0600 Subject: [PATCH 06/86] add net 8 target, update netcoreapp (core) --- src/LiveChartsCore/LiveChartsCore.csproj | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/LiveChartsCore/LiveChartsCore.csproj b/src/LiveChartsCore/LiveChartsCore.csproj index 64c7f75a8..554da3a98 100644 --- a/src/LiveChartsCore/LiveChartsCore.csproj +++ b/src/LiveChartsCore/LiveChartsCore.csproj @@ -4,9 +4,17 @@ enable 11.0 - netstandard2.0;netcoreapp2.0;net6.0;net6.0-android;net6.0-ios;net6.0-maccatalyst + + netstandard2.0;netcoreapp2.0.3; + net6.0; + net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst; + net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst; + - $(TargetFrameworks);net6.0-windows10.0.19041;net462 + $(TargetFrameworks); + net462; + net7.0-windows10.0.19041; + net8.0-windows10.0.19041; 14.2 @@ -52,7 +60,9 @@ - + From 944e45809a0a29f2ffe3f6db2adfb111dcbc3004 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 10:53:33 -0600 Subject: [PATCH 07/86] min targets update --- src/LiveChartsCore/LiveChartsCore.csproj | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/LiveChartsCore/LiveChartsCore.csproj b/src/LiveChartsCore/LiveChartsCore.csproj index 554da3a98..149321268 100644 --- a/src/LiveChartsCore/LiveChartsCore.csproj +++ b/src/LiveChartsCore/LiveChartsCore.csproj @@ -6,22 +6,24 @@ netstandard2.0;netcoreapp2.0.3; - net6.0; + net6.0; net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst; net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst; - + $(TargetFrameworks); net462; + net6.0-windows10.0.19041; net7.0-windows10.0.19041; net8.0-windows10.0.19041; - 14.2 - 14.0 - 21.0 - 10.0.17763.0 - 10.0.17763.0 + 11.0 + 13.1 + 21.0 + 10.0.17763.0 + 10.0.17763.0 + 6.5 LiveChartsCore LiveChartsCore From 0425281e533559d665ec5139e67754da540c0cef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 13:37:03 -0600 Subject: [PATCH 08/86] update windows version --- src/LiveChartsCore/LiveChartsCore.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/LiveChartsCore/LiveChartsCore.csproj b/src/LiveChartsCore/LiveChartsCore.csproj index 149321268..cfc7d69e7 100644 --- a/src/LiveChartsCore/LiveChartsCore.csproj +++ b/src/LiveChartsCore/LiveChartsCore.csproj @@ -13,9 +13,9 @@ $(TargetFrameworks); net462; - net6.0-windows10.0.19041; - net7.0-windows10.0.19041; - net8.0-windows10.0.19041; + net6.0-windows10.0.19041.0; + net7.0-windows10.0.19041.0; + net8.0-windows10.0.19041.0; 11.0 From 877c5aa033114d16af27a5f1b7f5d55fa4f89649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 13:37:33 -0600 Subject: [PATCH 09/86] add dotnet 8 to behaviours assembly --- .../LiveChartsCore.Behaviours.csproj | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj index fd2ecf215..45af76485 100644 --- a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj +++ b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj @@ -1,14 +1,22 @@ + enable + 11.0 + - net6.0;net6.0-android;net6.0-ios;net6.0-maccatalyst; - net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst + netstandard2.0;netcoreapp2.0.3; + net6.0; + net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst; + net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst; - $(TargetFrameworks);net6.0-windows10.0.19041;net7.0-windows10.0.19041 + $(TargetFrameworks); + net462; + net6.0-windows10.0.19041.0; + net7.0-windows10.0.19041.0; + net8.0-windows10.0.19041.0 - enable 11.0 13.1 @@ -17,6 +25,8 @@ 10.0.17763.0 6.5 + win-x86;win-x64 + LiveChartsCore.Behaviours LiveChartsCore.Behaviours 2.0.0-rc2 @@ -35,7 +45,7 @@ - + From 2ca223e2f23b030bdc89641dbde304e3220f59ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 14:37:43 -0600 Subject: [PATCH 10/86] add net 8 to skiasharp view --- .../LiveChartsCore.SkiaSharpView.csproj | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj index e30b2adcf..4d2dc7827 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj @@ -3,17 +3,27 @@ enable 11.0 - - netstandard2.0;netcoreapp2.0;net6.0;net6.0-android;net6.0-ios;net6.0-maccatalyst - - $(TargetFrameworks);net6.0-windows10.0.19041;net462 + + + netstandard2.0;netcoreapp2.0.3; + net6.0; + net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst; + net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst; + + + $(TargetFrameworks); + net462; + net6.0-windows10.0.19041.0; + net7.0-windows10.0.19041.0; + net8.0-windows10.0.19041.0; - 14.2 - 14.0 - 21.0 - 10.0.17763.0 - 10.0.17763.0 + 11.0 + 13.1 + 21.0 + 10.0.17763.0 + 10.0.17763.0 + 6.5 LiveChartsCore.SkiaSharpView LiveChartsCore.SkiaSharpView From 7097fe47f3fb38bb859edf9c7590f4ec8126e96c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 15:00:00 -0600 Subject: [PATCH 11/86] remove uno (UWP) --- LiveCharts.sln | 80 -- samples/UWPSample/App.xaml | 11 - samples/UWPSample/App.xaml.cs | 91 -- .../Assets/LockScreenLogo.scale-200.png | Bin 1430 -> 0 bytes .../Assets/SplashScreen.scale-200.png | Bin 7700 -> 0 bytes .../Assets/Square150x150Logo.scale-200.png | Bin 2937 -> 0 bytes .../Assets/Square44x44Logo.scale-200.png | Bin 1647 -> 0 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 1255 -> 0 bytes samples/UWPSample/Assets/StoreLogo.png | Bin 1451 -> 0 bytes .../Assets/Wide310x150Logo.scale-200.png | Bin 3204 -> 0 bytes .../Axes/ColorsAndPosition/View.xaml | 31 - .../Axes/ColorsAndPosition/View.xaml.cs | 12 - .../Axes/CustomSeparatorsInterval/View.xaml | 16 - .../CustomSeparatorsInterval/View.xaml.cs | 12 - .../UWPSample/Axes/DateTimeScaled/View.xaml | 16 - .../Axes/DateTimeScaled/View.xaml.cs | 12 - samples/UWPSample/Axes/LabelsFormat/View.xaml | 17 - .../UWPSample/Axes/LabelsFormat/View.xaml.cs | 12 - .../UWPSample/Axes/LabelsFormat2/View.xaml | 17 - .../UWPSample/Axes/LabelsFormat2/View.xaml.cs | 12 - .../UWPSample/Axes/LabelsRotation/View.xaml | 39 - .../Axes/LabelsRotation/View.xaml.cs | 12 - samples/UWPSample/Axes/Logarithmic/View.xaml | 16 - .../UWPSample/Axes/Logarithmic/View.xaml.cs | 12 - samples/UWPSample/Axes/Multiple/View.xaml | 20 - samples/UWPSample/Axes/Multiple/View.xaml.cs | 12 - samples/UWPSample/Axes/NamedLabels/View.xaml | 29 - .../UWPSample/Axes/NamedLabels/View.xaml.cs | 12 - samples/UWPSample/Axes/Paging/View.xaml | 30 - samples/UWPSample/Axes/Paging/View.xaml.cs | 12 - samples/UWPSample/Axes/Shared/View.xaml | 36 - samples/UWPSample/Axes/Shared/View.xaml.cs | 12 - samples/UWPSample/Axes/Style/View.xaml | 24 - samples/UWPSample/Axes/Style/View.xaml.cs | 12 - .../UWPSample/Axes/TimeSpanScaled/View.xaml | 16 - .../Axes/TimeSpanScaled/View.xaml.cs | 12 - samples/UWPSample/Bars/AutoUpdate/View.xaml | 30 - .../UWPSample/Bars/AutoUpdate/View.xaml.cs | 30 - samples/UWPSample/Bars/Basic/View.xaml | 17 - samples/UWPSample/Bars/Basic/View.xaml.cs | 12 - samples/UWPSample/Bars/Custom/View.xaml | 18 - samples/UWPSample/Bars/Custom/View.xaml.cs | 12 - .../UWPSample/Bars/DelayedAnimation/View.xaml | 18 - .../Bars/DelayedAnimation/View.xaml.cs | 12 - samples/UWPSample/Bars/Layered/View.xaml | 18 - samples/UWPSample/Bars/Layered/View.xaml.cs | 12 - samples/UWPSample/Bars/Race/View.xaml | 21 - samples/UWPSample/Bars/Race/View.xaml.cs | 14 - .../UWPSample/Bars/RowsWithLabels/View.xaml | 18 - .../Bars/RowsWithLabels/View.xaml.cs | 12 - samples/UWPSample/Bars/Spacing/View.xaml | 18 - samples/UWPSample/Bars/Spacing/View.xaml.cs | 12 - .../UWPSample/Bars/WithBackground/View.xaml | 18 - .../Bars/WithBackground/View.xaml.cs | 12 - samples/UWPSample/Box/Basic/View.xaml | 17 - samples/UWPSample/Box/Basic/View.xaml.cs | 12 - .../Design/LinearGradients/View.xaml | 18 - .../Design/LinearGradients/View.xaml.cs | 12 - .../Design/RadialGradients/View.xaml | 18 - .../Design/RadialGradients/View.xaml.cs | 12 - .../Design/StrokeDashArray/View.xaml | 18 - .../Design/StrokeDashArray/View.xaml.cs | 12 - samples/UWPSample/Error/Basic/View.xaml | 35 - samples/UWPSample/Error/Basic/View.xaml.cs | 12 - .../Events/AddPointOnClick/View.xaml | 20 - .../Events/AddPointOnClick/View.xaml.cs | 15 - samples/UWPSample/Events/Cartesian/View.xaml | 21 - .../UWPSample/Events/Cartesian/View.xaml.cs | 17 - samples/UWPSample/Events/Pie/View.xaml | 22 - samples/UWPSample/Events/Pie/View.xaml.cs | 46 - samples/UWPSample/Events/Polar/View.xaml | 21 - samples/UWPSample/Events/Polar/View.xaml.cs | 46 - .../Financial/BasicCandlesticks/View.xaml | 21 - .../Financial/BasicCandlesticks/View.xaml.cs | 12 - .../UWPSample/General/Animations/View.xaml | 39 - .../UWPSample/General/Animations/View.xaml.cs | 12 - .../UWPSample/General/ChartToImage/View.xaml | 40 - .../General/ChartToImage/View.xaml.cs | 48 - .../General/ConditionalDraw/View.xaml | 17 - .../General/ConditionalDraw/View.xaml.cs | 12 - .../UWPSample/General/DrawOnCanvas/View.xaml | 19 - .../General/DrawOnCanvas/View.xaml.cs | 12 - samples/UWPSample/General/Legends/View.xaml | 32 - .../UWPSample/General/Legends/View.xaml.cs | 12 - samples/UWPSample/General/MapPoints/View.xaml | 17 - .../UWPSample/General/MapPoints/View.xaml.cs | 12 - .../General/MultiThreading/View.xaml | 21 - .../General/MultiThreading/View.xaml.cs | 12 - .../General/MultiThreading2/View.xaml | 15 - .../General/MultiThreading2/View.xaml.cs | 30 - .../UWPSample/General/NullPoints/View.xaml | 18 - .../UWPSample/General/NullPoints/View.xaml.cs | 12 - samples/UWPSample/General/RealTime/View.xaml | 19 - .../UWPSample/General/RealTime/View.xaml.cs | 12 - .../UWPSample/General/Scrollable/View.xaml | 45 - .../UWPSample/General/Scrollable/View.xaml.cs | 12 - samples/UWPSample/General/Sections/View.xaml | 24 - .../UWPSample/General/Sections/View.xaml.cs | 12 - samples/UWPSample/General/Sections2/View.xaml | 18 - .../UWPSample/General/Sections2/View.xaml.cs | 12 - .../General/TemplatedLegends/View.xaml | 23 - .../General/TemplatedLegends/View.xaml.cs | 12 - .../General/TemplatedTooltips/View.xaml | 23 - .../General/TemplatedTooltips/View.xaml.cs | 12 - samples/UWPSample/General/Tooltips/View.xaml | 27 - .../UWPSample/General/Tooltips/View.xaml.cs | 12 - .../General/UserDefinedTypes/View.xaml | 18 - .../General/UserDefinedTypes/View.xaml.cs | 12 - .../UWPSample/General/Visibility/View.xaml | 27 - .../UWPSample/General/Visibility/View.xaml.cs | 12 - .../General/VisualElements/View.xaml | 23 - .../General/VisualElements/View.xaml.cs | 12 - samples/UWPSample/Heat/Basic/View.xaml | 22 - samples/UWPSample/Heat/Basic/View.xaml.cs | 12 - samples/UWPSample/Lines/Area/View.xaml | 16 - samples/UWPSample/Lines/Area/View.xaml.cs | 12 - samples/UWPSample/Lines/AutoUpdate/View.xaml | 30 - .../UWPSample/Lines/AutoUpdate/View.xaml.cs | 30 - samples/UWPSample/Lines/Basic/View.xaml | 14 - samples/UWPSample/Lines/Basic/View.xaml.cs | 12 - samples/UWPSample/Lines/Custom/View.xaml | 13 - samples/UWPSample/Lines/Custom/View.xaml.cs | 12 - samples/UWPSample/Lines/Padding/View.xaml | 21 - samples/UWPSample/Lines/Padding/View.xaml.cs | 12 - samples/UWPSample/Lines/Properties/View.xaml | 34 - .../UWPSample/Lines/Properties/View.xaml.cs | 12 - samples/UWPSample/Lines/Straight/View.xaml | 13 - samples/UWPSample/Lines/Straight/View.xaml.cs | 12 - samples/UWPSample/Lines/XY/View.xaml | 14 - samples/UWPSample/Lines/XY/View.xaml.cs | 12 - samples/UWPSample/Lines/Zoom/View.xaml | 18 - samples/UWPSample/Lines/Zoom/View.xaml.cs | 12 - samples/UWPSample/MainPage.xaml | 63 -- samples/UWPSample/MainPage.xaml.cs | 31 - samples/UWPSample/Maps/World/View.xaml | 13 - samples/UWPSample/Maps/World/View.xaml.cs | 12 - samples/UWPSample/Package.appxmanifest | 49 - samples/UWPSample/Pies/AngularGauge/View.xaml | 30 - .../UWPSample/Pies/AngularGauge/View.xaml.cs | 12 - samples/UWPSample/Pies/AutoUpdate/View.xaml | 28 - .../UWPSample/Pies/AutoUpdate/View.xaml.cs | 30 - samples/UWPSample/Pies/Basic/View.xaml | 13 - samples/UWPSample/Pies/Basic/View.xaml.cs | 12 - samples/UWPSample/Pies/Custom/View.xaml | 13 - samples/UWPSample/Pies/Custom/View.xaml.cs | 12 - samples/UWPSample/Pies/Doughnut/View.xaml | 20 - samples/UWPSample/Pies/Doughnut/View.xaml.cs | 12 - samples/UWPSample/Pies/Gauge/View.xaml | 46 - samples/UWPSample/Pies/Gauge/View.xaml.cs | 12 - samples/UWPSample/Pies/Gauge1/View.xaml | 18 - samples/UWPSample/Pies/Gauge1/View.xaml.cs | 12 - samples/UWPSample/Pies/Gauge2/View.xaml | 19 - samples/UWPSample/Pies/Gauge2/View.xaml.cs | 12 - samples/UWPSample/Pies/Gauge3/View.xaml | 19 - samples/UWPSample/Pies/Gauge3/View.xaml.cs | 12 - samples/UWPSample/Pies/Gauge4/View.xaml | 18 - samples/UWPSample/Pies/Gauge4/View.xaml.cs | 12 - samples/UWPSample/Pies/Gauge5/View.xaml | 30 - samples/UWPSample/Pies/Gauge5/View.xaml.cs | 12 - samples/UWPSample/Pies/Gauges/View.xaml | 125 --- samples/UWPSample/Pies/Gauges/View.xaml.cs | 12 - .../UWPSample/Pies/NightingaleRose/View.xaml | 18 - .../Pies/NightingaleRose/View.xaml.cs | 12 - samples/UWPSample/Pies/OutLabels/View.xaml | 17 - samples/UWPSample/Pies/OutLabels/View.xaml.cs | 12 - samples/UWPSample/Pies/Processing/View.xaml | 51 - .../UWPSample/Pies/Processing/View.xaml.cs | 37 - samples/UWPSample/Pies/Pushout/View.xaml | 18 - samples/UWPSample/Pies/Pushout/View.xaml.cs | 12 - samples/UWPSample/Polar/Basic/View.xaml | 17 - samples/UWPSample/Polar/Basic/View.xaml.cs | 12 - samples/UWPSample/Polar/Coordinates/View.xaml | 13 - .../UWPSample/Polar/Coordinates/View.xaml.cs | 12 - samples/UWPSample/Polar/RadialArea/View.xaml | 13 - .../UWPSample/Polar/RadialArea/View.xaml.cs | 12 - samples/UWPSample/Properties/AssemblyInfo.cs | 28 - samples/UWPSample/Properties/Default.rd.xml | 31 - .../UWPSample/Scatter/AutoUpdate/View.xaml | 30 - .../UWPSample/Scatter/AutoUpdate/View.xaml.cs | 30 - samples/UWPSample/Scatter/Basic/View.xaml | 18 - samples/UWPSample/Scatter/Basic/View.xaml.cs | 12 - samples/UWPSample/Scatter/Bubbles/View.xaml | 18 - .../UWPSample/Scatter/Bubbles/View.xaml.cs | 12 - samples/UWPSample/Scatter/Custom/View.xaml | 18 - samples/UWPSample/Scatter/Custom/View.xaml.cs | 12 - samples/UWPSample/StackedArea/Basic/View.xaml | 18 - .../UWPSample/StackedArea/Basic/View.xaml.cs | 12 - .../UWPSample/StackedArea/StepArea/View.xaml | 18 - .../StackedArea/StepArea/View.xaml.cs | 12 - samples/UWPSample/StackedBars/Basic/View.xaml | 18 - .../UWPSample/StackedBars/Basic/View.xaml.cs | 12 - .../UWPSample/StackedBars/Groups/View.xaml | 13 - .../UWPSample/StackedBars/Groups/View.xaml.cs | 12 - samples/UWPSample/StepLines/Area/View.xaml | 17 - samples/UWPSample/StepLines/Area/View.xaml.cs | 12 - .../UWPSample/StepLines/AutoUpdate/View.xaml | 30 - .../StepLines/AutoUpdate/View.xaml.cs | 30 - samples/UWPSample/StepLines/Basic/View.xaml | 18 - .../UWPSample/StepLines/Basic/View.xaml.cs | 12 - samples/UWPSample/StepLines/Custom/View.xaml | 18 - .../UWPSample/StepLines/Custom/View.xaml.cs | 12 - .../UWPSample/StepLines/Properties/View.xaml | 34 - .../StepLines/Properties/View.xaml.cs | 12 - samples/UWPSample/StepLines/Zoom/View.xaml | 23 - samples/UWPSample/StepLines/Zoom/View.xaml.cs | 12 - samples/UWPSample/UWPSample.csproj | 878 ----------------- .../VisualTest/DataTemplate/View.xaml | 24 - .../VisualTest/DataTemplate/View.xaml.cs | 12 - .../VisualTest/ReattachVisual/View.xaml | 55 -- .../VisualTest/ReattachVisual/View.xaml.cs | 31 - samples/UWPSample/VisualTest/Tabs/View.xaml | 23 - .../UWPSample/VisualTest/Tabs/View.xaml.cs | 12 - .../VisualTest/TwoChartsOneSeries/View.xaml | 32 - .../TwoChartsOneSeries/View.xaml.cs | 12 - .../AssemblyInfo.cs | 32 - .../Behaviours/ChartBehaviour.Android.cs | 133 --- .../Behaviours/ChartBehaviour.MacCatalyst.cs | 149 --- .../Behaviours/ChartBehaviour.Windows.cs | 77 -- .../Behaviours/ChartBehaviour._shared.cs | 115 --- .../Behaviours/Events/EventArgs.cs | 43 - .../Behaviours/Events/Handler.cs | 30 - .../Behaviours/Events/PinchEventArgs.cs | 54 -- .../Behaviours/Events/PinchHandler.cs | 30 - .../Behaviours/Events/PressedEventArgs.cs | 48 - .../Behaviours/Events/PressedHandler.cs | 30 - .../Behaviours/Events/ScreenEventArgs.cs | 47 - .../Behaviours/Events/ScreenHandler.cs | 30 - .../Behaviours/Events/ScrollEventArgs.cs | 48 - .../Behaviours/Events/ScrollHandler.cs | 30 - .../CartesianChart.xaml | 14 - .../CartesianChart.xaml.cs | 911 ------------------ .../GeoMap.xaml | 14 - .../GeoMap.xaml.cs | 279 ------ .../Helpers/UnoPlatformHelpers.cs | 57 -- .../LiveChartsCore.SkiaSharpView.Uno.csproj | 69 -- .../MotionCanvas.xaml | 14 - .../MotionCanvas.xaml.cs | 150 --- .../PieChart.xaml | 14 - .../PieChart.xaml.cs | 770 --------------- .../PolarChart.xaml | 14 - .../PolarChart.xaml.cs | 845 ---------------- .../LiveChartsCore.SkiaSharpView.UWP.rd.xml | 33 - .../images/icon.png | Bin 7880 -> 0 bytes 243 files changed, 9114 deletions(-) delete mode 100644 samples/UWPSample/App.xaml delete mode 100644 samples/UWPSample/App.xaml.cs delete mode 100644 samples/UWPSample/Assets/LockScreenLogo.scale-200.png delete mode 100644 samples/UWPSample/Assets/SplashScreen.scale-200.png delete mode 100644 samples/UWPSample/Assets/Square150x150Logo.scale-200.png delete mode 100644 samples/UWPSample/Assets/Square44x44Logo.scale-200.png delete mode 100644 samples/UWPSample/Assets/Square44x44Logo.targetsize-24_altform-unplated.png delete mode 100644 samples/UWPSample/Assets/StoreLogo.png delete mode 100644 samples/UWPSample/Assets/Wide310x150Logo.scale-200.png delete mode 100644 samples/UWPSample/Axes/ColorsAndPosition/View.xaml delete mode 100644 samples/UWPSample/Axes/ColorsAndPosition/View.xaml.cs delete mode 100644 samples/UWPSample/Axes/CustomSeparatorsInterval/View.xaml delete mode 100644 samples/UWPSample/Axes/CustomSeparatorsInterval/View.xaml.cs delete mode 100644 samples/UWPSample/Axes/DateTimeScaled/View.xaml delete mode 100644 samples/UWPSample/Axes/DateTimeScaled/View.xaml.cs delete mode 100644 samples/UWPSample/Axes/LabelsFormat/View.xaml delete mode 100644 samples/UWPSample/Axes/LabelsFormat/View.xaml.cs delete mode 100644 samples/UWPSample/Axes/LabelsFormat2/View.xaml delete mode 100644 samples/UWPSample/Axes/LabelsFormat2/View.xaml.cs delete mode 100644 samples/UWPSample/Axes/LabelsRotation/View.xaml delete mode 100644 samples/UWPSample/Axes/LabelsRotation/View.xaml.cs delete mode 100644 samples/UWPSample/Axes/Logarithmic/View.xaml delete mode 100644 samples/UWPSample/Axes/Logarithmic/View.xaml.cs delete mode 100644 samples/UWPSample/Axes/Multiple/View.xaml delete mode 100644 samples/UWPSample/Axes/Multiple/View.xaml.cs delete mode 100644 samples/UWPSample/Axes/NamedLabels/View.xaml delete mode 100644 samples/UWPSample/Axes/NamedLabels/View.xaml.cs delete mode 100644 samples/UWPSample/Axes/Paging/View.xaml delete mode 100644 samples/UWPSample/Axes/Paging/View.xaml.cs delete mode 100644 samples/UWPSample/Axes/Shared/View.xaml delete mode 100644 samples/UWPSample/Axes/Shared/View.xaml.cs delete mode 100644 samples/UWPSample/Axes/Style/View.xaml delete mode 100644 samples/UWPSample/Axes/Style/View.xaml.cs delete mode 100644 samples/UWPSample/Axes/TimeSpanScaled/View.xaml delete mode 100644 samples/UWPSample/Axes/TimeSpanScaled/View.xaml.cs delete mode 100644 samples/UWPSample/Bars/AutoUpdate/View.xaml delete mode 100644 samples/UWPSample/Bars/AutoUpdate/View.xaml.cs delete mode 100644 samples/UWPSample/Bars/Basic/View.xaml delete mode 100644 samples/UWPSample/Bars/Basic/View.xaml.cs delete mode 100644 samples/UWPSample/Bars/Custom/View.xaml delete mode 100644 samples/UWPSample/Bars/Custom/View.xaml.cs delete mode 100644 samples/UWPSample/Bars/DelayedAnimation/View.xaml delete mode 100644 samples/UWPSample/Bars/DelayedAnimation/View.xaml.cs delete mode 100644 samples/UWPSample/Bars/Layered/View.xaml delete mode 100644 samples/UWPSample/Bars/Layered/View.xaml.cs delete mode 100644 samples/UWPSample/Bars/Race/View.xaml delete mode 100644 samples/UWPSample/Bars/Race/View.xaml.cs delete mode 100644 samples/UWPSample/Bars/RowsWithLabels/View.xaml delete mode 100644 samples/UWPSample/Bars/RowsWithLabels/View.xaml.cs delete mode 100644 samples/UWPSample/Bars/Spacing/View.xaml delete mode 100644 samples/UWPSample/Bars/Spacing/View.xaml.cs delete mode 100644 samples/UWPSample/Bars/WithBackground/View.xaml delete mode 100644 samples/UWPSample/Bars/WithBackground/View.xaml.cs delete mode 100644 samples/UWPSample/Box/Basic/View.xaml delete mode 100644 samples/UWPSample/Box/Basic/View.xaml.cs delete mode 100644 samples/UWPSample/Design/LinearGradients/View.xaml delete mode 100644 samples/UWPSample/Design/LinearGradients/View.xaml.cs delete mode 100644 samples/UWPSample/Design/RadialGradients/View.xaml delete mode 100644 samples/UWPSample/Design/RadialGradients/View.xaml.cs delete mode 100644 samples/UWPSample/Design/StrokeDashArray/View.xaml delete mode 100644 samples/UWPSample/Design/StrokeDashArray/View.xaml.cs delete mode 100644 samples/UWPSample/Error/Basic/View.xaml delete mode 100644 samples/UWPSample/Error/Basic/View.xaml.cs delete mode 100644 samples/UWPSample/Events/AddPointOnClick/View.xaml delete mode 100644 samples/UWPSample/Events/AddPointOnClick/View.xaml.cs delete mode 100644 samples/UWPSample/Events/Cartesian/View.xaml delete mode 100644 samples/UWPSample/Events/Cartesian/View.xaml.cs delete mode 100644 samples/UWPSample/Events/Pie/View.xaml delete mode 100644 samples/UWPSample/Events/Pie/View.xaml.cs delete mode 100644 samples/UWPSample/Events/Polar/View.xaml delete mode 100644 samples/UWPSample/Events/Polar/View.xaml.cs delete mode 100644 samples/UWPSample/Financial/BasicCandlesticks/View.xaml delete mode 100644 samples/UWPSample/Financial/BasicCandlesticks/View.xaml.cs delete mode 100644 samples/UWPSample/General/Animations/View.xaml delete mode 100644 samples/UWPSample/General/Animations/View.xaml.cs delete mode 100644 samples/UWPSample/General/ChartToImage/View.xaml delete mode 100644 samples/UWPSample/General/ChartToImage/View.xaml.cs delete mode 100644 samples/UWPSample/General/ConditionalDraw/View.xaml delete mode 100644 samples/UWPSample/General/ConditionalDraw/View.xaml.cs delete mode 100644 samples/UWPSample/General/DrawOnCanvas/View.xaml delete mode 100644 samples/UWPSample/General/DrawOnCanvas/View.xaml.cs delete mode 100644 samples/UWPSample/General/Legends/View.xaml delete mode 100644 samples/UWPSample/General/Legends/View.xaml.cs delete mode 100644 samples/UWPSample/General/MapPoints/View.xaml delete mode 100644 samples/UWPSample/General/MapPoints/View.xaml.cs delete mode 100644 samples/UWPSample/General/MultiThreading/View.xaml delete mode 100644 samples/UWPSample/General/MultiThreading/View.xaml.cs delete mode 100644 samples/UWPSample/General/MultiThreading2/View.xaml delete mode 100644 samples/UWPSample/General/MultiThreading2/View.xaml.cs delete mode 100644 samples/UWPSample/General/NullPoints/View.xaml delete mode 100644 samples/UWPSample/General/NullPoints/View.xaml.cs delete mode 100644 samples/UWPSample/General/RealTime/View.xaml delete mode 100644 samples/UWPSample/General/RealTime/View.xaml.cs delete mode 100644 samples/UWPSample/General/Scrollable/View.xaml delete mode 100644 samples/UWPSample/General/Scrollable/View.xaml.cs delete mode 100644 samples/UWPSample/General/Sections/View.xaml delete mode 100644 samples/UWPSample/General/Sections/View.xaml.cs delete mode 100644 samples/UWPSample/General/Sections2/View.xaml delete mode 100644 samples/UWPSample/General/Sections2/View.xaml.cs delete mode 100644 samples/UWPSample/General/TemplatedLegends/View.xaml delete mode 100644 samples/UWPSample/General/TemplatedLegends/View.xaml.cs delete mode 100644 samples/UWPSample/General/TemplatedTooltips/View.xaml delete mode 100644 samples/UWPSample/General/TemplatedTooltips/View.xaml.cs delete mode 100644 samples/UWPSample/General/Tooltips/View.xaml delete mode 100644 samples/UWPSample/General/Tooltips/View.xaml.cs delete mode 100644 samples/UWPSample/General/UserDefinedTypes/View.xaml delete mode 100644 samples/UWPSample/General/UserDefinedTypes/View.xaml.cs delete mode 100644 samples/UWPSample/General/Visibility/View.xaml delete mode 100644 samples/UWPSample/General/Visibility/View.xaml.cs delete mode 100644 samples/UWPSample/General/VisualElements/View.xaml delete mode 100644 samples/UWPSample/General/VisualElements/View.xaml.cs delete mode 100644 samples/UWPSample/Heat/Basic/View.xaml delete mode 100644 samples/UWPSample/Heat/Basic/View.xaml.cs delete mode 100644 samples/UWPSample/Lines/Area/View.xaml delete mode 100644 samples/UWPSample/Lines/Area/View.xaml.cs delete mode 100644 samples/UWPSample/Lines/AutoUpdate/View.xaml delete mode 100644 samples/UWPSample/Lines/AutoUpdate/View.xaml.cs delete mode 100644 samples/UWPSample/Lines/Basic/View.xaml delete mode 100644 samples/UWPSample/Lines/Basic/View.xaml.cs delete mode 100644 samples/UWPSample/Lines/Custom/View.xaml delete mode 100644 samples/UWPSample/Lines/Custom/View.xaml.cs delete mode 100644 samples/UWPSample/Lines/Padding/View.xaml delete mode 100644 samples/UWPSample/Lines/Padding/View.xaml.cs delete mode 100644 samples/UWPSample/Lines/Properties/View.xaml delete mode 100644 samples/UWPSample/Lines/Properties/View.xaml.cs delete mode 100644 samples/UWPSample/Lines/Straight/View.xaml delete mode 100644 samples/UWPSample/Lines/Straight/View.xaml.cs delete mode 100644 samples/UWPSample/Lines/XY/View.xaml delete mode 100644 samples/UWPSample/Lines/XY/View.xaml.cs delete mode 100644 samples/UWPSample/Lines/Zoom/View.xaml delete mode 100644 samples/UWPSample/Lines/Zoom/View.xaml.cs delete mode 100644 samples/UWPSample/MainPage.xaml delete mode 100644 samples/UWPSample/MainPage.xaml.cs delete mode 100644 samples/UWPSample/Maps/World/View.xaml delete mode 100644 samples/UWPSample/Maps/World/View.xaml.cs delete mode 100644 samples/UWPSample/Package.appxmanifest delete mode 100644 samples/UWPSample/Pies/AngularGauge/View.xaml delete mode 100644 samples/UWPSample/Pies/AngularGauge/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/AutoUpdate/View.xaml delete mode 100644 samples/UWPSample/Pies/AutoUpdate/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/Basic/View.xaml delete mode 100644 samples/UWPSample/Pies/Basic/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/Custom/View.xaml delete mode 100644 samples/UWPSample/Pies/Custom/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/Doughnut/View.xaml delete mode 100644 samples/UWPSample/Pies/Doughnut/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/Gauge/View.xaml delete mode 100644 samples/UWPSample/Pies/Gauge/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/Gauge1/View.xaml delete mode 100644 samples/UWPSample/Pies/Gauge1/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/Gauge2/View.xaml delete mode 100644 samples/UWPSample/Pies/Gauge2/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/Gauge3/View.xaml delete mode 100644 samples/UWPSample/Pies/Gauge3/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/Gauge4/View.xaml delete mode 100644 samples/UWPSample/Pies/Gauge4/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/Gauge5/View.xaml delete mode 100644 samples/UWPSample/Pies/Gauge5/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/Gauges/View.xaml delete mode 100644 samples/UWPSample/Pies/Gauges/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/NightingaleRose/View.xaml delete mode 100644 samples/UWPSample/Pies/NightingaleRose/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/OutLabels/View.xaml delete mode 100644 samples/UWPSample/Pies/OutLabels/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/Processing/View.xaml delete mode 100644 samples/UWPSample/Pies/Processing/View.xaml.cs delete mode 100644 samples/UWPSample/Pies/Pushout/View.xaml delete mode 100644 samples/UWPSample/Pies/Pushout/View.xaml.cs delete mode 100644 samples/UWPSample/Polar/Basic/View.xaml delete mode 100644 samples/UWPSample/Polar/Basic/View.xaml.cs delete mode 100644 samples/UWPSample/Polar/Coordinates/View.xaml delete mode 100644 samples/UWPSample/Polar/Coordinates/View.xaml.cs delete mode 100644 samples/UWPSample/Polar/RadialArea/View.xaml delete mode 100644 samples/UWPSample/Polar/RadialArea/View.xaml.cs delete mode 100644 samples/UWPSample/Properties/AssemblyInfo.cs delete mode 100644 samples/UWPSample/Properties/Default.rd.xml delete mode 100644 samples/UWPSample/Scatter/AutoUpdate/View.xaml delete mode 100644 samples/UWPSample/Scatter/AutoUpdate/View.xaml.cs delete mode 100644 samples/UWPSample/Scatter/Basic/View.xaml delete mode 100644 samples/UWPSample/Scatter/Basic/View.xaml.cs delete mode 100644 samples/UWPSample/Scatter/Bubbles/View.xaml delete mode 100644 samples/UWPSample/Scatter/Bubbles/View.xaml.cs delete mode 100644 samples/UWPSample/Scatter/Custom/View.xaml delete mode 100644 samples/UWPSample/Scatter/Custom/View.xaml.cs delete mode 100644 samples/UWPSample/StackedArea/Basic/View.xaml delete mode 100644 samples/UWPSample/StackedArea/Basic/View.xaml.cs delete mode 100644 samples/UWPSample/StackedArea/StepArea/View.xaml delete mode 100644 samples/UWPSample/StackedArea/StepArea/View.xaml.cs delete mode 100644 samples/UWPSample/StackedBars/Basic/View.xaml delete mode 100644 samples/UWPSample/StackedBars/Basic/View.xaml.cs delete mode 100644 samples/UWPSample/StackedBars/Groups/View.xaml delete mode 100644 samples/UWPSample/StackedBars/Groups/View.xaml.cs delete mode 100644 samples/UWPSample/StepLines/Area/View.xaml delete mode 100644 samples/UWPSample/StepLines/Area/View.xaml.cs delete mode 100644 samples/UWPSample/StepLines/AutoUpdate/View.xaml delete mode 100644 samples/UWPSample/StepLines/AutoUpdate/View.xaml.cs delete mode 100644 samples/UWPSample/StepLines/Basic/View.xaml delete mode 100644 samples/UWPSample/StepLines/Basic/View.xaml.cs delete mode 100644 samples/UWPSample/StepLines/Custom/View.xaml delete mode 100644 samples/UWPSample/StepLines/Custom/View.xaml.cs delete mode 100644 samples/UWPSample/StepLines/Properties/View.xaml delete mode 100644 samples/UWPSample/StepLines/Properties/View.xaml.cs delete mode 100644 samples/UWPSample/StepLines/Zoom/View.xaml delete mode 100644 samples/UWPSample/StepLines/Zoom/View.xaml.cs delete mode 100644 samples/UWPSample/UWPSample.csproj delete mode 100644 samples/UWPSample/VisualTest/DataTemplate/View.xaml delete mode 100644 samples/UWPSample/VisualTest/DataTemplate/View.xaml.cs delete mode 100644 samples/UWPSample/VisualTest/ReattachVisual/View.xaml delete mode 100644 samples/UWPSample/VisualTest/ReattachVisual/View.xaml.cs delete mode 100644 samples/UWPSample/VisualTest/Tabs/View.xaml delete mode 100644 samples/UWPSample/VisualTest/Tabs/View.xaml.cs delete mode 100644 samples/UWPSample/VisualTest/TwoChartsOneSeries/View.xaml delete mode 100644 samples/UWPSample/VisualTest/TwoChartsOneSeries/View.xaml.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/AssemblyInfo.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour.Android.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour.MacCatalyst.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour.Windows.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour._shared.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/EventArgs.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/Handler.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PinchEventArgs.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PinchHandler.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PressedEventArgs.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PressedHandler.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScreenEventArgs.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScreenHandler.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScrollEventArgs.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScrollHandler.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/CartesianChart.xaml delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/CartesianChart.xaml.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/GeoMap.xaml delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/GeoMap.xaml.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Helpers/UnoPlatformHelpers.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/LiveChartsCore.SkiaSharpView.Uno.csproj delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/MotionCanvas.xaml delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/MotionCanvas.xaml.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PieChart.xaml delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PieChart.xaml.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PolarChart.xaml delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PolarChart.xaml.cs delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Properties/LiveChartsCore.SkiaSharpView.UWP.rd.xml delete mode 100644 src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/images/icon.png diff --git a/LiveCharts.sln b/LiveCharts.sln index 8e25960fe..8e751e27d 100644 --- a/LiveCharts.sln +++ b/LiveCharts.sln @@ -46,10 +46,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .editorconfig = .editorconfig EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UWP", "UWP", "{E54BED97-FCF3-4B6D-80EA-F973D974B879}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UWPSample", "samples\UWPSample\UWPSample.csproj", "{3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BlazorWasm", "BlazorWasm", "{0E557B2A-2E41-43B6-86C4-DF581AC5AC87}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorSample", "samples\BlazorSample\BlazorSample.csproj", "{AC34AC1D-3283-4717-9F77-76AB92F42A2C}" @@ -897,80 +893,6 @@ Global {3C2531FA-92D4-4281-BE52-02AF6AE0CF80}.Release|x64.Build.0 = Release|Any CPU {3C2531FA-92D4-4281-BE52-02AF6AE0CF80}.Release|x86.ActiveCfg = Release|Any CPU {3C2531FA-92D4-4281-BE52-02AF6AE0CF80}.Release|x86.Build.0 = Release|Any CPU - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|Any CPU.ActiveCfg = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|Any CPU.Build.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|Any CPU.Deploy.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|ARM.ActiveCfg = Debug|ARM - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|ARM.Build.0 = Debug|ARM - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|ARM.Deploy.0 = Debug|ARM - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|ARM64.ActiveCfg = Debug|ARM64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|ARM64.Build.0 = Debug|ARM64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|ARM64.Deploy.0 = Debug|ARM64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|iPhone.ActiveCfg = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|iPhone.Build.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|iPhone.Deploy.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|x64.ActiveCfg = Debug|x64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|x64.Build.0 = Debug|x64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|x64.Deploy.0 = Debug|x64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|x86.ActiveCfg = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|x86.Build.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Ad-Hoc|x86.Deploy.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|Any CPU.ActiveCfg = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|Any CPU.Build.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|Any CPU.Deploy.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|ARM.ActiveCfg = Debug|ARM - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|ARM.Build.0 = Debug|ARM - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|ARM.Deploy.0 = Debug|ARM - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|ARM64.ActiveCfg = Debug|ARM64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|ARM64.Build.0 = Debug|ARM64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|ARM64.Deploy.0 = Debug|ARM64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|iPhone.ActiveCfg = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|iPhone.Build.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|iPhone.Deploy.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|iPhoneSimulator.ActiveCfg = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|iPhoneSimulator.Build.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|iPhoneSimulator.Deploy.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|x64.ActiveCfg = Debug|x64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|x64.Build.0 = Debug|x64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|x64.Deploy.0 = Debug|x64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|x86.ActiveCfg = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|x86.Build.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.AppStore|x86.Deploy.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|Any CPU.ActiveCfg = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|Any CPU.Build.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|Any CPU.Deploy.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|ARM.ActiveCfg = Debug|ARM - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|ARM.Build.0 = Debug|ARM - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|ARM.Deploy.0 = Debug|ARM - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|ARM64.Build.0 = Debug|ARM64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|ARM64.Deploy.0 = Debug|ARM64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|iPhone.ActiveCfg = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|x64.ActiveCfg = Debug|x64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|x64.Build.0 = Debug|x64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|x64.Deploy.0 = Debug|x64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|x86.ActiveCfg = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|x86.Build.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Debug|x86.Deploy.0 = Debug|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|Any CPU.ActiveCfg = Release|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|ARM.ActiveCfg = Release|ARM - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|ARM.Build.0 = Release|ARM - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|ARM.Deploy.0 = Release|ARM - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|ARM64.ActiveCfg = Release|ARM64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|ARM64.Build.0 = Release|ARM64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|ARM64.Deploy.0 = Release|ARM64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|iPhone.ActiveCfg = Release|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|iPhoneSimulator.ActiveCfg = Release|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|x64.ActiveCfg = Release|x64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|x64.Build.0 = Release|x64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|x64.Deploy.0 = Release|x64 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|x86.ActiveCfg = Release|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|x86.Build.0 = Release|x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3}.Release|x86.Deploy.0 = Release|x86 {AC34AC1D-3283-4717-9F77-76AB92F42A2C}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU {AC34AC1D-3283-4717-9F77-76AB92F42A2C}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU {AC34AC1D-3283-4717-9F77-76AB92F42A2C}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU @@ -2109,8 +2031,6 @@ Global {3C2531FA-92D4-4281-BE52-02AF6AE0CF80} = {8E110D49-2060-4709-85FB-90E18515D201} {2F6A1323-9B22-4AFC-9199-A705B72B7885} = {2E9ED2C0-0C15-4890-8070-4A3B8A5C7704} {A90B0463-5752-4835-A2BB-D1BF356068B3} = {2E9ED2C0-0C15-4890-8070-4A3B8A5C7704} - {E54BED97-FCF3-4B6D-80EA-F973D974B879} = {2E9ED2C0-0C15-4890-8070-4A3B8A5C7704} - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3} = {E54BED97-FCF3-4B6D-80EA-F973D974B879} {0E557B2A-2E41-43B6-86C4-DF581AC5AC87} = {2E9ED2C0-0C15-4890-8070-4A3B8A5C7704} {AC34AC1D-3283-4717-9F77-76AB92F42A2C} = {0E557B2A-2E41-43B6-86C4-DF581AC5AC87} {1FCEEFAB-AB76-47D1-94E3-3FE729813B51} = {2E9ED2C0-0C15-4890-8070-4A3B8A5C7704} diff --git a/samples/UWPSample/App.xaml b/samples/UWPSample/App.xaml deleted file mode 100644 index 05501df72..000000000 --- a/samples/UWPSample/App.xaml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/App.xaml.cs b/samples/UWPSample/App.xaml.cs deleted file mode 100644 index 128eb9859..000000000 --- a/samples/UWPSample/App.xaml.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using Windows.ApplicationModel; -using Windows.ApplicationModel.Activation; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Navigation; - -namespace UWPSample -{ - ///

    - /// Provides application-specific behavior to supplement the default Application class. - /// - sealed partial class App : Application - { - /// - /// Initializes the singleton application object. This is the first line of authored code - /// executed, and as such is the logical equivalent of main() or WinMain(). - /// - public App() - { - InitializeComponent(); - Suspending += OnSuspending; - DebugSettings.EnableFrameRateCounter = true; - } - - /// - /// Invoked when the application is launched normally by the end user. Other entry points - /// will be used such as when the application is launched to open a specific file. - /// - /// Details about the launch request and process. - protected override void OnLaunched(LaunchActivatedEventArgs e) - { - var rootFrame = Window.Current.Content as Frame; - - // Do not repeat app initialization when the Window already has content, - // just ensure that the window is active - if (rootFrame == null) - { - // Create a Frame to act as the navigation context and navigate to the first page - rootFrame = new Frame(); - - rootFrame.NavigationFailed += OnNavigationFailed; - - if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) - { - //TODO: Load state from previously suspended application - } - - // Place the frame in the current Window - Window.Current.Content = rootFrame; - } - - if (e.PrelaunchActivated == false) - { - if (rootFrame.Content == null) - { - // When the navigation stack isn't restored navigate to the first page, - // configuring the new page by passing required information as a navigation - // parameter - rootFrame.Navigate(typeof(MainPage), e.Arguments); - } - // Ensure the current window is active - Window.Current.Activate(); - } - } - - /// - /// Invoked when Navigation to a certain page fails - /// - /// The Frame which failed navigation - /// Details about the navigation failure - void OnNavigationFailed(object sender, NavigationFailedEventArgs e) - { - throw new Exception("Failed to load Page " + e.SourcePageType.FullName); - } - - /// - /// Invoked when application execution is being suspended. Application state is saved - /// without knowing whether the application will be terminated or resumed with the contents - /// of memory still intact. - /// - /// The source of the suspend request. - /// Details about the suspend request. - private void OnSuspending(object sender, SuspendingEventArgs e) - { - var deferral = e.SuspendingOperation.GetDeferral(); - //TODO: Save application state and stop any background activity - deferral.Complete(); - } - } -} diff --git a/samples/UWPSample/Assets/LockScreenLogo.scale-200.png b/samples/UWPSample/Assets/LockScreenLogo.scale-200.png deleted file mode 100644 index 735f57adb5dfc01886d137b4e493d7e97cf13af3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1430 zcmaJ>TTC2P7~aKltDttVHYH6u8Io4i*}3fO&d$gd*bA_<3j~&e7%8(eXJLfhS!M@! zKrliY>>6yT4+Kr95$!DoD(Qn-5TP|{V_KS`k~E6(LGS@#`v$hQo&^^BKsw3HIsZBT z_y6C2n`lK@apunKojRQ^(_P}Mgewt$(^BBKCTZ;*xa?J3wQ7~@S0lUvbcLeq1Bg4o zH-bvQi|wt~L7q$~a-gDFP!{&TQfc3fX*6=uHv* zT&1&U(-)L%Xp^djI2?~eBF2cxC@YOP$+9d?P&h?lPy-9M2UT9fg5jKm1t$m#iWE{M zIf%q9@;fyT?0UP>tcw-bLkz;s2LlKl2qeP0w zECS7Ate+Awk|KQ+DOk;fl}Xsy4o^CY=pwq%QAAKKl628_yNPsK>?A>%D8fQG6IgdJ ztnxttBz#NI_a@fk7SU`WtrpsfZsNs9^0(2a z@C3#YO3>k~w7?2hipBf{#b6`}Xw1hlG$yi?;1dDs7k~xDAw@jiI*+tc;t2Lflg&bM)0!Y;0_@=w%`LW^8DsYpS#-bLOklX9r?Ei}TScw|4DbpW%+7 zFgAI)f51s}{y-eWb|vrU-Ya!GuYKP)J7z#*V_k^Xo>4!1Yqj*m)x&0L^tg3GJbVAJ zJ-Pl$R=NAabouV=^z_t;^K*0AvFs!vYU>_<|I^#c?>>CR<(T?=%{;U=aI*SbZADLH z&(f2wz_Y0??Tf|g;?|1Znw6}6U43Q#qNRwv1vp9uFn1)V#*4p&%$mP9x&15^OaBiDS(XppT|z^>;B{PLVEbS3IFYV yGvCsSX*m diff --git a/samples/UWPSample/Assets/SplashScreen.scale-200.png b/samples/UWPSample/Assets/SplashScreen.scale-200.png deleted file mode 100644 index 023e7f1feda78d5100569825acedfd213a0d84e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7700 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 diff --git a/samples/UWPSample/Assets/Square150x150Logo.scale-200.png b/samples/UWPSample/Assets/Square150x150Logo.scale-200.png deleted file mode 100644 index af49fec1a5484db1d52a7f9b5ec90a27c7030186..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2937 zcma)84OCO-8BSud5)jwMLRVKgX(S?$n?Ld|vrsm<$CF7)&zTbyy1FE5bU`Q17MRv`9ue$;R(@8kR;#vJ*IM0>cJIAOte!d7oRgdH zd%ySjdB6L9=gX^A6)VzH7p2l@v~3zJAMw|DFy#^)F@@F*`mqUn=Il>l)8_+ab;nOW{%+iPx z+s{Eu|&pIs)Z7{La9~?xKfyl z#43?gjEL15d4WbOZo#SiP%>DB^+BcnJ=7dHEe;r#G=tuw|ka z%q@}##Uh7;tc%L_64m(kHtw74ty%BJMb)_1)#S0j`)F8_1jF7vScpsnH=0V19bO8y zR`0SjIdCUo&=>JwMQF8KHA<{ODHTiQh}0^@5QRmCA?gOH6_H3K^-_sNB^RrdNuK-R zOO*vOrKCVvDwgUck`kF(E7j{I#iiN;b*ZdCt4m@HPA`EuEqGGf4%!K<;(=I=&Vyrw z%TwcWtxa}8mCZ%Cyf&ActJ6_$ox5z6-D!0-dvnRx6t7y3d+h6QYpKWO;8OdnvERo7 zuEf>ih5`wqY)~o@OeVt-wM?Q!>QzdGRj!bz6fzYrfw$hZfAKzr2-M+D+R>}~oT574c;_3zquHcElqKIsryILt3g8n3jcMb+j?i?-L3FpZJ z2WRVBRdDPc+G5aaYg#5hpE+6nQ|(VSoxT3|biF;BUq#==-27Xi=gihDPYP$7?=9cP zYKE$jeQ|3~_L0VG-(F~2ZPyD0=k{J4Q~h(t__{-mz_w8{JDY9{`1ouzz!Vr5!ECdE z6U~O1k8c}24V7~zzXWTV-Pe4)y}wQJS&q%H5`Fo_f_JvIU489aCX$;P`u#!I-=^4ijC2{&9!O&h>mi?9oYD=GC#%)6{GzN6nQYw+Fal50!#x^asjBBR50i`+mho*ttoqV)ubM2KD9S~k7+FR4>{29?6 z{!l6kDdyTN0YJ9LgkPWeXm|gyi@zM3?0@{&pXT12w|78&W-q!RRF)&iLCEZVH<|fR zN0fr2^t8H(>L?>K#>^+jWROLral(Qy-xoBq1U7A&DV||wClb)Otd9?(gZ|8znMF}D zf<1haWz^s0qgecz;RFGt0C-B4g`jNGHsFU+;{<%t65v^sjk^h$lmWn#B0#_)9ij&d z-~lc`A)YYExi^7sBuPM^Y|wA2g*5?`K?#7tzELQYNxGo$UB$4J8RJp1k(8Jj+~hMT zlN~>M@KTTh^--8y3PK_NZ@AC!{PT=CziBzGd+wTJ^@icH!Bd}%)g8V)%K?|c&WTUk zy}qv1C%(fjRoZ4ozC3{O%@5?)XzH35zHns$pgU*Q?fj4v?fp1Qbm+j;3l;9jam9Da zXVcKjPlQ73x78QPu|Ffm6x?`~e3oD=gl=4kYK?={kD5j~QCXU)`HSdduNNENzA*2$ zOm3PzF!lN5e*06-f1Uot67wY#{o-S1!KZ7E=!~7ynnk9_iJR#kFoNbAOT#^2Gd17F zMmvU6>lndZQGd|ax9kUoXXO+$N?|j@6qpsF&_j7YXvwo_C{JpmLw5&#e6k>atv%es z5)7r*Wvv_JkUpT}M!_o!nVlEk1Zbl=a*2hQ*<|%*K1Glj^FcF`6kTzGQ3lz~2tCc@ z&x|tj;aH&1&9HwcJBcT`;{?a+pnej;M1HO(6Z{#J!cZA04hnFl;NXA+&`=7bjW_^o zfC40u3LMG?NdPtwGl>Tq6u}*QG)}-y;)lu-_>ee3kibW(69n0$0Zy!}9rQz%*v1iO zT9_H>99yIrSPYVy6^);rR}7Yo=J_T@hi+qhTZXnVWyf;JDYm5#eYLTxr*?kiNn!+Y zQ+LUkBafNJ#rH#C(?d5^;gw9o#%daEI{mA*LHPIHPU`#|H$hD zwm>0&+kahQ)E#%~k>&5@&#Vg82H?s%71=)(soi@174pi9--2{w{1$}Sz4zGn3Du&x bht0Iza^2ykEt4(epJ78uh5nDlX8(TxzDYwP diff --git a/samples/UWPSample/Assets/Square44x44Logo.scale-200.png b/samples/UWPSample/Assets/Square44x44Logo.scale-200.png deleted file mode 100644 index ce342a2ec8a61291ba76c54604aea7e9d20af11b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1647 zcmaJ?eM}Q)7(e+G1Q(|`V9JhTI2>MkceK4;p;PR&$Pi?ejk3YQ_3o`S&|W_dsOZ8# zWPTt69g`t$ab`0cj-Y0yiBSOqmd)tG7G(}M5aP0_%&9TijB#&)I{zSE^4@#z^FF`l z`8{8`o%wlL(UI|y2!cdsuVamHH~H86F!*-15em4)NqUpCQM5?aoC_eCf@lV4wvF2a zjDQn1JBL69f&@2M3rvzJcfE!eZ8FZUBlFlC5RD)it33{mF9#B82AiyQE%w)`vlwa> zv{<1sm&kSKK$&%2jSFn7$t&P%%6Ue>R=EAnG8N7fqynWG8L3p!4801a;8{+nliO(qd(jNJ_?+9W3#hLIDLoT6~3fx9=`CC-D}-AMrpEO7HK zt3$GicGPc?GmDjy7K2P@La;eu4!$zWCZ`ym{Z$b zu-O6RM&K4JT|BIZB`E-gxqG%FzanI#+2FFmqHqXG7yxWB=w55RGOM)$xMb(>kSNR z2w=1AZi%z=AmG~yea~XaXJR!v7vLn(RUnELfiB1|6D84ICOS}^Zo2AdN}<&*h}G_u z{xZ!(%>tLT3J3<5XhWy-tg+6)0nmUUENLW8TWA{R6bgVd3X;anYFZ^IRis*_P-C-r z;i>%1^eL3UI2-{w8nuFFcs0e~7J{O2k^~Ce%+Ly4U?|=!0LH=t6()xi<^I-rs+9sF z*q{E-CxZbGPeu#a;XJwE;9S1?#R&uns>^0G3p`hEUF*v`M?@h%T%J%RChmD|EVydq zmHWh*_=S%emRC*mhxaVLzT@>Z2SX0u9v*DIJ@WC^kLVdlGV6LpK$KIrlJqc zpJ921)+3JJdTx|<`G&kXpKkjGJv=76R`yYIQ{#c-`%+`#V(7}Q;&@6U8!Td1`d;?N z_9mnI#?AA}4J!r)LN4!E-@H5eXauuB7TOawS>Y|{-P?NNx-lq+z1W-+y(;39P&&LP zL{N80?&=C*qKmdA^moMZRuPcD!B<*mq$ch=0Cnlitw#txRWhb3%TQvPqjkC`F69G4b! ze7z9MZ#+;_#l?H37UqUhDFb^l&s2{oM$3I0o^Q!yx;;V)QmCMo)Tb_ui|mit8MS?U zm##6$sZZ1$@|s%?l@>4Z<*Q}sRBSKMhb4I{e5LdEhsHIHTe8Bod5c>6QtT>$XgUBz z6MK`kO$=jmt@FqggOhJ5j~e@ygRbG;<{Vu)*+nn9aQeo0;$#j;|MS=S$&L?BeV25z xs3B`@=#`5TF{^6(A1rvdY@|-RtQ|iS5{tyX+wH?;n8E)G$kykv-D^wh{{!TZT%7;_ diff --git a/samples/UWPSample/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/samples/UWPSample/Assets/Square44x44Logo.targetsize-24_altform-unplated.png deleted file mode 100644 index f6c02ce97e0a802b85f6021e822c89f8bf57d5cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1255 zcmaJ>TWs4@7*5+{G#S+&C!qC#> zf>5N3P6jO*Cz>ug*(_DmW=)kea&m$gZ^+nyiF`;j%w@}y8)>p*SH}C`m?DXeieF2U zyQHecc_L%Gh!7GMt+hG06y;+|p4>m~}PjA}rKViGiEnn7G0ZO<>G|7q;2?NwGCM3s?eued6%hd$B+ z*kQJ{#~$S=DFE(%=E+UkmlEI*%3llUf~8Ja9YU1Vui0IbGBkW_gHB%Rd&!!ioX zs40O?i9I{};kle7GMvE7(rk`la=gTI)47=>%?q@^iL-nUo3}h4S}N-KHn8t5mVP8w z&bSErwp+37 zNJJ8?a|{r5Q3R0Z5s-LB1WHOwYC@7pCHWND#cL1cZ?{kJ368_*(UDWUDyb<}0y@o# zfMF016iMWPCb6obAxT$JlB6(2DrlXDTB&!0`!m??4F(qWMhjVZo?JXQmz`1*58Z=& zcDmB|S-E@j?BoFGix0flckqdS4jsPNzhfWyWIM98GxcLs89C(~dw%$_t;JjX-SD}E zfiGV;{8Q%8r}w9x>EEigW81>`kvnU@pK)4+xk9@+bNj9L!AAZ@SZ@q|)&BmY3+HZx zul~BeG4|}-;L%cHViQGQX?^zFfO0&#cHwel=d`lH9sJ-@Sl@n*(8J2>%Ac`IxyY?Q z{=GhWvC#gu-~Ia7*n{=+;qM?Ul_wy1+u7ho;=`>EwP^g~R@{unBds`!#@}tluZQpS zm)M~nYEifJWJGx?_6DcTy>#uh%>!H9=hb^(v`=m3F1{L>db=<5_tm+_&knAQ2EU$s Mu9UqpbNZeC0BbUo^Z)<= diff --git a/samples/UWPSample/Assets/StoreLogo.png b/samples/UWPSample/Assets/StoreLogo.png deleted file mode 100644 index 7385b56c0e4d3c6b0efe3324aa1194157d837826..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1451 zcmaJ>eN5D57_Z|bH;{0+1#mbl)eTU3{h)Wf7EZV?;HD@XL@{B`Ui%(2aMxQ~xdXSv z5nzWi(LW)U2=Vc-cY@s7nPt{i0hc6!7xN4NNHI#EQl>YNBy8l4%x9gr_W-j zEZMQmmTIy(>;lblRfh`dIyTgc9W5d!VP$L4(kKrN1c5G~(O_#xG zAJCNTstD^5SeXFB+&$h=ToJP2H>xr$iqPs-#O*;4(!Fjw25-!gEb*)mU}=)J;Iu>w zxK(5XoD0wrPSKQ~rbL^Cw6O_03*l*}i=ydbu7adJ6y;%@tjFeXIXT+ms30pmbOP%Q zX}S;+LBh8Tea~TSkHzvX6$rYb)+n&{kSbIqh|c7hmlxmwSiq5iVhU#iEQ<>a18|O^Sln-8t&+t`*{qBWo5M?wFM(JuimAOb5!K#D}XbslM@#1ZVz_;!9U zpfEpLAOz=0g@bd6Xj_ILi-x^!M}73h^o@}hM$1jflTs|Yuj9AL@A3<-?MV4!^4q`e z)fO@A;{9K^?W?DbnesnPr6kK>$zaKo&;FhFd(GYFCIU^T+OIMb%Tqo+P%oq(IdX7S zf6+HLO?7o0m+p>~Tp5UrXWh!UH!wZ5kv!E`_w)PTpI(#Iw{AS`gH4^b(bm^ZCq^FZ zY9DD7bH}rq9mg88+KgA$Zp!iWncuU2n1AuIa@=sWvUR-s`Qb{R*kk(SPU^`$6BXz8 zn#7yaFOIK%qGxyi`dYtm#&qqox0$h=pNi#u=M8zUG@bpiZ=3sT=1}Trr}39cC)H|v zbL?W)=&s4zrh)7>L(|cc%$1#!zfL?HjpeP%T+x_a+jZ16b^iKOHxFEX$7d|8${H-* zIrOJ5w&i$>*D>AKaIoYg`;{L@jM((Kt?$N$5OnuPqVvq**Nm}(f0wwOF%iX_Pba;V z;m@wxX&NcV3?<1+u?A{y_DIj7#m3Af1rCE)o`D&Y3}0%7E;iX1yMDiS)sh0wKi!36 zL!Wmq?P^Ku&rK~HJd97KkLTRl>ScGFYZNlYytWnhmuu|)L&ND8_PmkayQb{HOY640 bno1(wj@u8DCVuFR|31B*4ek@pZJqxCDDe1x diff --git a/samples/UWPSample/Assets/Wide310x150Logo.scale-200.png b/samples/UWPSample/Assets/Wide310x150Logo.scale-200.png deleted file mode 100644 index 288995b397fdbef1fb7e85afd71445d5de1952c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3204 zcmbVPeQXow8NYmBd90>}0NP?GhXW~VaeThm=a0tV#EwJMI!)6M3}|c4_Bl3=Kd>G0 z(GHx1wl<7(tP?FsOQkTilSo*iIvF%uArExJ73~P zSv1xEy!U(Wd4A9D`FQV@W3@F^qJ@PEF$@z`Z!*BbFsS(^?B zyiAzJ+q})bkgiQHWqEb*jJD-coHYr1^iocg)l!Qa{Xqs-l~6J}p-|##ZHYofskQ3$ zI0;xzXyhazBeXhIsg5A=%ufo@f)1yy&ScKS0;HF^!r_2UE^lpZEom(+@duma3awTv zCrCL-%D_SvYWIcdHkmI}#50(fkUi)Qgx!80ju>g1za^}ff>JI8Z@^-iCiaCgg@TgF z+vtE?Q9{VQUX&MW9SYYmGcxA14%N2@7FwBTD4N<(2{nWgV8$e3?-F=L^&FrtWn~(U_Q~~^uYiyeY6-KoTnfh9AWz@ zIKje0)u!_Lw)E}G!#kEfwKVdNt(UAf9*f>tEL_(=xco-T%jTi@7YlC3hs2ik%Le0H ztj}RTeCF(5mwvi3_56>-yB?l;J>-1%!9~=fs|QcNG3J~a@JCu`4SB460s0ZO+##4fFUSGLcj_ja^fL4&BKALfb#$6$O?>P@qx2Agl^x0i&ugt zsy5Pyu=()`7HRMG3IB7F1@`_ z+-!J%#i6e^U$e#+C%Q>_qVRzWRsG^W_n+@OcX@vzI&z;mzHNb!GQ?LWA(wtpqHqTM z1OFw_{Zn?fD)p)`c`kOgv{de=v@suGRqY{N^U7gI1VF3*F=obwaXI6ob5__Yn zVTguS!%(NI09J8x#AO_aW!9W7k*UvB;IWDFC3srwftr{kHj%g)fvnAm;&h_dnl~

    MY- zf+K}sCe8qU6Ujs`3ua{U0Of$R_gVQBuUA za0v=mu#vIOqiiAZOr&h*$WyOw&k-xr$;G4Ixa!#TJNr>95(h>l%)PUy4p+^SgR(uR zta%k*?ny-+nAr8spEk1fo{J4i!b^Fia`N{_F6@zidA2ZTTrjl#^5Z-2KfB@Cu}l9s z(*|Z2jc?p~vn2f)3y9i*7zJV1L{$?|&q)4oaT;uXi6>1GkRXVTOzAz(RHEmr=eFIi z`}<>-Q?K0GN8!IYxeP1XKXO+jsJbp~o^);Bc;%b7Flpe7;1`Ny@3r7ZR;?R)aJt8C ziNlEC<@3f_lIV4TwV}&e;D!Ee5_|e#g0LUh=5vmYWYm7&2h*M>QPKvGh9-)wfMMW3 z8J9b%1k7dzPzO0_NGQy92BZ^FR6R~6;^6?lqO;-QUP4BY%cG%3vEhbm#>4vIhPBh3 z-+pZGjh$x%Hp{?=FHsMp0&wNPlj00us{&`1ZOZTqs8%4X&xH=UDr*xyBW(Zp&Em94 zf)ZSfn#yg0N)>!1kWdkqJ^S*z0FF5|fj&qcE#Na|%OY0$uO>!&hP+1ywfD_WXk@4J(?MBftK7>$Nvqh@tDuarN%PrTLQ2Uzysx>UV=V zk^RrDSvdQ?0;=hY67EgII-f4`t=+i*yS=Y~!XlqIy_4x&%+OdfbKOFPXS2X5%4R{N z$SQMX^AK6(fA - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Axes/ColorsAndPosition/View.xaml.cs b/samples/UWPSample/Axes/ColorsAndPosition/View.xaml.cs deleted file mode 100644 index beee29ef9..000000000 --- a/samples/UWPSample/Axes/ColorsAndPosition/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Axes.ColorsAndPosition -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Axes/CustomSeparatorsInterval/View.xaml b/samples/UWPSample/Axes/CustomSeparatorsInterval/View.xaml deleted file mode 100644 index 6cbb288ea..000000000 --- a/samples/UWPSample/Axes/CustomSeparatorsInterval/View.xaml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Axes/CustomSeparatorsInterval/View.xaml.cs b/samples/UWPSample/Axes/CustomSeparatorsInterval/View.xaml.cs deleted file mode 100644 index fa99b10c6..000000000 --- a/samples/UWPSample/Axes/CustomSeparatorsInterval/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Axes.CustomSeparatorsInterval -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Axes/DateTimeScaled/View.xaml b/samples/UWPSample/Axes/DateTimeScaled/View.xaml deleted file mode 100644 index bdbd8d00b..000000000 --- a/samples/UWPSample/Axes/DateTimeScaled/View.xaml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Axes/DateTimeScaled/View.xaml.cs b/samples/UWPSample/Axes/DateTimeScaled/View.xaml.cs deleted file mode 100644 index 4a79a5f79..000000000 --- a/samples/UWPSample/Axes/DateTimeScaled/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Axes.DateTimeScaled -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Axes/LabelsFormat/View.xaml b/samples/UWPSample/Axes/LabelsFormat/View.xaml deleted file mode 100644 index 87131317b..000000000 --- a/samples/UWPSample/Axes/LabelsFormat/View.xaml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Axes/LabelsFormat/View.xaml.cs b/samples/UWPSample/Axes/LabelsFormat/View.xaml.cs deleted file mode 100644 index 1027b3671..000000000 --- a/samples/UWPSample/Axes/LabelsFormat/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Axes.LabelsFormat -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Axes/LabelsFormat2/View.xaml b/samples/UWPSample/Axes/LabelsFormat2/View.xaml deleted file mode 100644 index e2b90e573..000000000 --- a/samples/UWPSample/Axes/LabelsFormat2/View.xaml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Axes/LabelsFormat2/View.xaml.cs b/samples/UWPSample/Axes/LabelsFormat2/View.xaml.cs deleted file mode 100644 index ca791d521..000000000 --- a/samples/UWPSample/Axes/LabelsFormat2/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Axes.LabelsFormat2 -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Axes/LabelsRotation/View.xaml b/samples/UWPSample/Axes/LabelsRotation/View.xaml deleted file mode 100644 index 86c8a9970..000000000 --- a/samples/UWPSample/Axes/LabelsRotation/View.xaml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Axes/LabelsRotation/View.xaml.cs b/samples/UWPSample/Axes/LabelsRotation/View.xaml.cs deleted file mode 100644 index c0a065e84..000000000 --- a/samples/UWPSample/Axes/LabelsRotation/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Axes.LabelsRotation -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Axes/Logarithmic/View.xaml b/samples/UWPSample/Axes/Logarithmic/View.xaml deleted file mode 100644 index 920385230..000000000 --- a/samples/UWPSample/Axes/Logarithmic/View.xaml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Axes/Logarithmic/View.xaml.cs b/samples/UWPSample/Axes/Logarithmic/View.xaml.cs deleted file mode 100644 index 7ba0fb9ea..000000000 --- a/samples/UWPSample/Axes/Logarithmic/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Axes.Logarithmic -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Axes/Multiple/View.xaml b/samples/UWPSample/Axes/Multiple/View.xaml deleted file mode 100644 index a83836d85..000000000 --- a/samples/UWPSample/Axes/Multiple/View.xaml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Axes/Multiple/View.xaml.cs b/samples/UWPSample/Axes/Multiple/View.xaml.cs deleted file mode 100644 index b64b87d90..000000000 --- a/samples/UWPSample/Axes/Multiple/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Axes.Multiple -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Axes/NamedLabels/View.xaml b/samples/UWPSample/Axes/NamedLabels/View.xaml deleted file mode 100644 index f0fee05a7..000000000 --- a/samples/UWPSample/Axes/NamedLabels/View.xaml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Axes/NamedLabels/View.xaml.cs b/samples/UWPSample/Axes/NamedLabels/View.xaml.cs deleted file mode 100644 index c01f955d2..000000000 --- a/samples/UWPSample/Axes/NamedLabels/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Axes.NamedLabels -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Axes/Paging/View.xaml b/samples/UWPSample/Axes/Paging/View.xaml deleted file mode 100644 index 52468c754..000000000 --- a/samples/UWPSample/Axes/Paging/View.xaml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Axes/Paging/View.xaml.cs b/samples/UWPSample/Axes/Paging/View.xaml.cs deleted file mode 100644 index 068809093..000000000 --- a/samples/UWPSample/Axes/Paging/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Axes.Paging -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Axes/Shared/View.xaml b/samples/UWPSample/Axes/Shared/View.xaml deleted file mode 100644 index 4cfd842a6..000000000 --- a/samples/UWPSample/Axes/Shared/View.xaml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Axes/Shared/View.xaml.cs b/samples/UWPSample/Axes/Shared/View.xaml.cs deleted file mode 100644 index 314e5c102..000000000 --- a/samples/UWPSample/Axes/Shared/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Axes.Shared -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Axes/Style/View.xaml b/samples/UWPSample/Axes/Style/View.xaml deleted file mode 100644 index b3305180b..000000000 --- a/samples/UWPSample/Axes/Style/View.xaml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - diff --git a/samples/UWPSample/Axes/Style/View.xaml.cs b/samples/UWPSample/Axes/Style/View.xaml.cs deleted file mode 100644 index 8a822b5c3..000000000 --- a/samples/UWPSample/Axes/Style/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Axes.Style -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Axes/TimeSpanScaled/View.xaml b/samples/UWPSample/Axes/TimeSpanScaled/View.xaml deleted file mode 100644 index 534c91ef8..000000000 --- a/samples/UWPSample/Axes/TimeSpanScaled/View.xaml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Axes/TimeSpanScaled/View.xaml.cs b/samples/UWPSample/Axes/TimeSpanScaled/View.xaml.cs deleted file mode 100644 index 784fe927b..000000000 --- a/samples/UWPSample/Axes/TimeSpanScaled/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Axes.TimeSpanScaled -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Bars/AutoUpdate/View.xaml b/samples/UWPSample/Bars/AutoUpdate/View.xaml deleted file mode 100644 index e29f8d895..000000000 --- a/samples/UWPSample/Bars/AutoUpdate/View.xaml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Bars/AutoUpdate/View.xaml.cs b/samples/UWPSample/Bars/AutoUpdate/View.xaml.cs deleted file mode 100644 index 7f52bc12d..000000000 --- a/samples/UWPSample/Bars/AutoUpdate/View.xaml.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Threading.Tasks; -using ViewModelsSamples.Bars.AutoUpdate; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Input; - -namespace UWPSample.Bars.AutoUpdate -{ - public sealed partial class View : UserControl - { - private bool? _isStreaming = false; - - public View() - { - InitializeComponent(); - } - - private async void Button_PointerPressed(object sender, PointerRoutedEventArgs e) - { - var vm = (ViewModel)DataContext; - _isStreaming = _isStreaming is null ? true : !_isStreaming; - - while (_isStreaming.Value) - { - vm.RemoveItem(); - vm.AddItem(); - await Task.Delay(1000); - } - } - } -} diff --git a/samples/UWPSample/Bars/Basic/View.xaml b/samples/UWPSample/Bars/Basic/View.xaml deleted file mode 100644 index 369d30e5f..000000000 --- a/samples/UWPSample/Bars/Basic/View.xaml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Bars/Basic/View.xaml.cs b/samples/UWPSample/Bars/Basic/View.xaml.cs deleted file mode 100644 index 41969405b..000000000 --- a/samples/UWPSample/Bars/Basic/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Bars.Basic -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Bars/Custom/View.xaml b/samples/UWPSample/Bars/Custom/View.xaml deleted file mode 100644 index ea7360eba..000000000 --- a/samples/UWPSample/Bars/Custom/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Bars/Custom/View.xaml.cs b/samples/UWPSample/Bars/Custom/View.xaml.cs deleted file mode 100644 index 769296eeb..000000000 --- a/samples/UWPSample/Bars/Custom/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Bars.Custom -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Bars/DelayedAnimation/View.xaml b/samples/UWPSample/Bars/DelayedAnimation/View.xaml deleted file mode 100644 index bf2422e05..000000000 --- a/samples/UWPSample/Bars/DelayedAnimation/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Bars/DelayedAnimation/View.xaml.cs b/samples/UWPSample/Bars/DelayedAnimation/View.xaml.cs deleted file mode 100644 index 0df43a739..000000000 --- a/samples/UWPSample/Bars/DelayedAnimation/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Bars.DelayedAnimation -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Bars/Layered/View.xaml b/samples/UWPSample/Bars/Layered/View.xaml deleted file mode 100644 index 1f1c8ef56..000000000 --- a/samples/UWPSample/Bars/Layered/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Bars/Layered/View.xaml.cs b/samples/UWPSample/Bars/Layered/View.xaml.cs deleted file mode 100644 index efbc531d9..000000000 --- a/samples/UWPSample/Bars/Layered/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Bars.Layered -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Bars/Race/View.xaml b/samples/UWPSample/Bars/Race/View.xaml deleted file mode 100644 index 8f270db12..000000000 --- a/samples/UWPSample/Bars/Race/View.xaml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - diff --git a/samples/UWPSample/Bars/Race/View.xaml.cs b/samples/UWPSample/Bars/Race/View.xaml.cs deleted file mode 100644 index 2b3f96e2e..000000000 --- a/samples/UWPSample/Bars/Race/View.xaml.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Threading.Tasks; -using ViewModelsSamples.Bars.Race; -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Bars.Race -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Bars/RowsWithLabels/View.xaml b/samples/UWPSample/Bars/RowsWithLabels/View.xaml deleted file mode 100644 index 6b1d329bf..000000000 --- a/samples/UWPSample/Bars/RowsWithLabels/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Bars/RowsWithLabels/View.xaml.cs b/samples/UWPSample/Bars/RowsWithLabels/View.xaml.cs deleted file mode 100644 index e6a801e2f..000000000 --- a/samples/UWPSample/Bars/RowsWithLabels/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Bars.RowsWithLabels -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Bars/Spacing/View.xaml b/samples/UWPSample/Bars/Spacing/View.xaml deleted file mode 100644 index d7c97ddd3..000000000 --- a/samples/UWPSample/Bars/Spacing/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Bars/Spacing/View.xaml.cs b/samples/UWPSample/Bars/Spacing/View.xaml.cs deleted file mode 100644 index c77b0cb0a..000000000 --- a/samples/UWPSample/Bars/Spacing/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Bars.Spacing -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Bars/WithBackground/View.xaml b/samples/UWPSample/Bars/WithBackground/View.xaml deleted file mode 100644 index d222299c8..000000000 --- a/samples/UWPSample/Bars/WithBackground/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Bars/WithBackground/View.xaml.cs b/samples/UWPSample/Bars/WithBackground/View.xaml.cs deleted file mode 100644 index 9d5731d9f..000000000 --- a/samples/UWPSample/Bars/WithBackground/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Bars.WithBackground -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Box/Basic/View.xaml b/samples/UWPSample/Box/Basic/View.xaml deleted file mode 100644 index 5cc75b8d9..000000000 --- a/samples/UWPSample/Box/Basic/View.xaml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Box/Basic/View.xaml.cs b/samples/UWPSample/Box/Basic/View.xaml.cs deleted file mode 100644 index ee80c35ff..000000000 --- a/samples/UWPSample/Box/Basic/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Box.Basic -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Design/LinearGradients/View.xaml b/samples/UWPSample/Design/LinearGradients/View.xaml deleted file mode 100644 index 58c8a0a10..000000000 --- a/samples/UWPSample/Design/LinearGradients/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Design/LinearGradients/View.xaml.cs b/samples/UWPSample/Design/LinearGradients/View.xaml.cs deleted file mode 100644 index 5f7f88c58..000000000 --- a/samples/UWPSample/Design/LinearGradients/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Design.LinearGradients -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Design/RadialGradients/View.xaml b/samples/UWPSample/Design/RadialGradients/View.xaml deleted file mode 100644 index 93a11d42c..000000000 --- a/samples/UWPSample/Design/RadialGradients/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Design/RadialGradients/View.xaml.cs b/samples/UWPSample/Design/RadialGradients/View.xaml.cs deleted file mode 100644 index ec4160ab0..000000000 --- a/samples/UWPSample/Design/RadialGradients/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Design.RadialGradients -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Design/StrokeDashArray/View.xaml b/samples/UWPSample/Design/StrokeDashArray/View.xaml deleted file mode 100644 index d6348a13d..000000000 --- a/samples/UWPSample/Design/StrokeDashArray/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Design/StrokeDashArray/View.xaml.cs b/samples/UWPSample/Design/StrokeDashArray/View.xaml.cs deleted file mode 100644 index 9568b823e..000000000 --- a/samples/UWPSample/Design/StrokeDashArray/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Design.StrokeDashArray -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Error/Basic/View.xaml b/samples/UWPSample/Error/Basic/View.xaml deleted file mode 100644 index 600f8154a..000000000 --- a/samples/UWPSample/Error/Basic/View.xaml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Error/Basic/View.xaml.cs b/samples/UWPSample/Error/Basic/View.xaml.cs deleted file mode 100644 index 0ed4fddbf..000000000 --- a/samples/UWPSample/Error/Basic/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Error.Basic -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Events/AddPointOnClick/View.xaml b/samples/UWPSample/Events/AddPointOnClick/View.xaml deleted file mode 100644 index 5cc3dc619..000000000 --- a/samples/UWPSample/Events/AddPointOnClick/View.xaml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - diff --git a/samples/UWPSample/Events/AddPointOnClick/View.xaml.cs b/samples/UWPSample/Events/AddPointOnClick/View.xaml.cs deleted file mode 100644 index 69f20ac94..000000000 --- a/samples/UWPSample/Events/AddPointOnClick/View.xaml.cs +++ /dev/null @@ -1,15 +0,0 @@ -using LiveChartsCore.Defaults; -using LiveChartsCore.Drawing; -using ViewModelsSamples.Events.AddPointOnClick; -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Events.AddPointOnClick -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Events/Cartesian/View.xaml b/samples/UWPSample/Events/Cartesian/View.xaml deleted file mode 100644 index fa434e52a..000000000 --- a/samples/UWPSample/Events/Cartesian/View.xaml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - diff --git a/samples/UWPSample/Events/Cartesian/View.xaml.cs b/samples/UWPSample/Events/Cartesian/View.xaml.cs deleted file mode 100644 index 41ab4c8c2..000000000 --- a/samples/UWPSample/Events/Cartesian/View.xaml.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics; -using LiveChartsCore.Kernel; -using LiveChartsCore.Kernel.Sketches; -using ViewModelsSamples.Events.Cartesian; -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Events.Cartesian -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Events/Pie/View.xaml b/samples/UWPSample/Events/Pie/View.xaml deleted file mode 100644 index e1bb37535..000000000 --- a/samples/UWPSample/Events/Pie/View.xaml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - diff --git a/samples/UWPSample/Events/Pie/View.xaml.cs b/samples/UWPSample/Events/Pie/View.xaml.cs deleted file mode 100644 index a849b73bc..000000000 --- a/samples/UWPSample/Events/Pie/View.xaml.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics; -using LiveChartsCore.Kernel; -using LiveChartsCore.Kernel.Sketches; -using ViewModelsSamples.Events.Pie; -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Events.Pie -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - - private void Chart_DataPointerDown( - IChartView chart, - IEnumerable points) - { - // notice in the chart event we are not able to use strongly typed points - // but we can cast the point.Context.DataSource to the actual type. - - foreach (var point in points) - { - if (point.Context.DataSource is City city) - { - Trace.WriteLine($"[chart.dataPointerDownEvent] clicked on {city.Name}"); - continue; - } - - if (point.Context.DataSource is int integer) - { - Trace.WriteLine($"[chart.dataPointerDownEvent] clicked on number {integer}"); - continue; - } - - // handle more possible types here... - // if (point.Context.DataSource is Foo foo) - // { - // ... - // } - } - } - } -} diff --git a/samples/UWPSample/Events/Polar/View.xaml b/samples/UWPSample/Events/Polar/View.xaml deleted file mode 100644 index bfd578f8c..000000000 --- a/samples/UWPSample/Events/Polar/View.xaml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Events/Polar/View.xaml.cs b/samples/UWPSample/Events/Polar/View.xaml.cs deleted file mode 100644 index 082937300..000000000 --- a/samples/UWPSample/Events/Polar/View.xaml.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics; -using LiveChartsCore.Kernel; -using LiveChartsCore.Kernel.Sketches; -using ViewModelsSamples.Events.Polar; -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Events.Polar -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - - private void Chart_DataPointerDown( - IChartView chart, - IEnumerable points) - { - // notice in the chart event we are not able to use strongly typed points - // but we can cast the point.Context.DataSource to the actual type. - - foreach (var point in points) - { - if (point.Context.DataSource is City city) - { - Trace.WriteLine($"[chart.dataPointerDownEvent] clicked on {city.Name}"); - continue; - } - - if (point.Context.DataSource is int integer) - { - Trace.WriteLine($"[chart.dataPointerDownEvent] clicked on number {integer}"); - continue; - } - - // handle more possible types here... - // if (point.Context.DataSource is Foo foo) - // { - // ... - // } - } - } - } -} diff --git a/samples/UWPSample/Financial/BasicCandlesticks/View.xaml b/samples/UWPSample/Financial/BasicCandlesticks/View.xaml deleted file mode 100644 index 64b62703b..000000000 --- a/samples/UWPSample/Financial/BasicCandlesticks/View.xaml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - diff --git a/samples/UWPSample/Financial/BasicCandlesticks/View.xaml.cs b/samples/UWPSample/Financial/BasicCandlesticks/View.xaml.cs deleted file mode 100644 index 01d57bbc6..000000000 --- a/samples/UWPSample/Financial/BasicCandlesticks/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Financial.BasicCandlesticks -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/Animations/View.xaml b/samples/UWPSample/General/Animations/View.xaml deleted file mode 100644 index 9122b81e4..000000000 --- a/samples/UWPSample/General/Animations/View.xaml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/General/Animations/View.xaml.cs b/samples/UWPSample/General/Animations/View.xaml.cs deleted file mode 100644 index 14a93e4bb..000000000 --- a/samples/UWPSample/General/Animations/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.Animations -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/ChartToImage/View.xaml b/samples/UWPSample/General/ChartToImage/View.xaml deleted file mode 100644 index 41876a400..000000000 --- a/samples/UWPSample/General/ChartToImage/View.xaml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/General/ChartToImage/View.xaml.cs b/samples/UWPSample/General/ChartToImage/View.xaml.cs deleted file mode 100644 index cc81ae5e2..000000000 --- a/samples/UWPSample/General/ChartToImage/View.xaml.cs +++ /dev/null @@ -1,48 +0,0 @@ -using LiveChartsCore.SkiaSharpView.SKCharts; -using LiveChartsCore.SkiaSharpView.Uno; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.ChartToImage -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - - // in this case, when the view is loaded // mark - // we render our chart controls as images // mark - Loaded += View_Loaded; - } - - private void View_Loaded(object sender, RoutedEventArgs e) - { - CreateImageFromCartesianControl(); - CreateImageFromPieControl(); - CreateImageFromGeoControl(); - } - - private void CreateImageFromCartesianControl() - { - // you can take any chart in the UI, and build an image from it // mark - var chartControl = (CartesianChart)FindName("cartesianChart"); - var skChart = new SKCartesianChart(chartControl) { Width = 900, Height = 600, }; - skChart.SaveImage("CartesianImageFromControl.png"); - } - - private void CreateImageFromPieControl() - { - var chartControl = (PieChart)FindName("pieChart"); - var skChart = new SKPieChart(chartControl) { Width = 900, Height = 600, }; - skChart.SaveImage("PieImageFromControl.png"); - } - - private void CreateImageFromGeoControl() - { - var chartControl = (GeoMap)FindName("geoChart"); - var skChart = new SKGeoMap(chartControl) { Width = 900, Height = 600, }; - skChart.SaveImage("MapImageFromControl.png"); - } - } -} diff --git a/samples/UWPSample/General/ConditionalDraw/View.xaml b/samples/UWPSample/General/ConditionalDraw/View.xaml deleted file mode 100644 index 1201ca655..000000000 --- a/samples/UWPSample/General/ConditionalDraw/View.xaml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/General/ConditionalDraw/View.xaml.cs b/samples/UWPSample/General/ConditionalDraw/View.xaml.cs deleted file mode 100644 index 51d018186..000000000 --- a/samples/UWPSample/General/ConditionalDraw/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.ConditionalDraw -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/DrawOnCanvas/View.xaml b/samples/UWPSample/General/DrawOnCanvas/View.xaml deleted file mode 100644 index 2dcc40312..000000000 --- a/samples/UWPSample/General/DrawOnCanvas/View.xaml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - diff --git a/samples/UWPSample/General/DrawOnCanvas/View.xaml.cs b/samples/UWPSample/General/DrawOnCanvas/View.xaml.cs deleted file mode 100644 index 44b3ab187..000000000 --- a/samples/UWPSample/General/DrawOnCanvas/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.DrawOnCanvas -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/Legends/View.xaml b/samples/UWPSample/General/Legends/View.xaml deleted file mode 100644 index 20ecb887c..000000000 --- a/samples/UWPSample/General/Legends/View.xaml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/General/Legends/View.xaml.cs b/samples/UWPSample/General/Legends/View.xaml.cs deleted file mode 100644 index 7ed418b30..000000000 --- a/samples/UWPSample/General/Legends/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.Legends -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/MapPoints/View.xaml b/samples/UWPSample/General/MapPoints/View.xaml deleted file mode 100644 index 5af09a397..000000000 --- a/samples/UWPSample/General/MapPoints/View.xaml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - diff --git a/samples/UWPSample/General/MapPoints/View.xaml.cs b/samples/UWPSample/General/MapPoints/View.xaml.cs deleted file mode 100644 index c96377c5e..000000000 --- a/samples/UWPSample/General/MapPoints/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.MapPoints -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/MultiThreading/View.xaml b/samples/UWPSample/General/MultiThreading/View.xaml deleted file mode 100644 index bf5bd247c..000000000 --- a/samples/UWPSample/General/MultiThreading/View.xaml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - diff --git a/samples/UWPSample/General/MultiThreading/View.xaml.cs b/samples/UWPSample/General/MultiThreading/View.xaml.cs deleted file mode 100644 index cb67c6c4d..000000000 --- a/samples/UWPSample/General/MultiThreading/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.MultiThreading -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/MultiThreading2/View.xaml b/samples/UWPSample/General/MultiThreading2/View.xaml deleted file mode 100644 index 7b1a97168..000000000 --- a/samples/UWPSample/General/MultiThreading2/View.xaml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/General/MultiThreading2/View.xaml.cs b/samples/UWPSample/General/MultiThreading2/View.xaml.cs deleted file mode 100644 index f8bfaed9f..000000000 --- a/samples/UWPSample/General/MultiThreading2/View.xaml.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using Windows.ApplicationModel.Core; -using Windows.UI.Core; -using Windows.UI.Xaml.Controls; -using ViewModelsSamples.General.MultiThreading2; - -namespace UWPSample.General.MultiThreading2 -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - - var vm = new ViewModel(InvokeOnUIThread); - DataContext = vm; - } - - // this method takes another function as an argument. - // the idea is that we are invoking the passed action in the UI thread - // but the UI framework will let the view model how to do this. - // we will pass the InvokeOnUIThread method to our view model so the view model knows how - // to invoke an action in the UI thred. - private void InvokeOnUIThread(Action action) - { - _ = CoreApplication.MainView.CoreWindow.Dispatcher - .RunAsync(CoreDispatcherPriority.High, () => action()); - } - } -} diff --git a/samples/UWPSample/General/NullPoints/View.xaml b/samples/UWPSample/General/NullPoints/View.xaml deleted file mode 100644 index 2acee9f05..000000000 --- a/samples/UWPSample/General/NullPoints/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/General/NullPoints/View.xaml.cs b/samples/UWPSample/General/NullPoints/View.xaml.cs deleted file mode 100644 index 162f57ae9..000000000 --- a/samples/UWPSample/General/NullPoints/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.NullPoints -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/RealTime/View.xaml b/samples/UWPSample/General/RealTime/View.xaml deleted file mode 100644 index 0d381b9cb..000000000 --- a/samples/UWPSample/General/RealTime/View.xaml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - diff --git a/samples/UWPSample/General/RealTime/View.xaml.cs b/samples/UWPSample/General/RealTime/View.xaml.cs deleted file mode 100644 index 7f01b5516..000000000 --- a/samples/UWPSample/General/RealTime/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.RealTime -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/Scrollable/View.xaml b/samples/UWPSample/General/Scrollable/View.xaml deleted file mode 100644 index ddaa0b98a..000000000 --- a/samples/UWPSample/General/Scrollable/View.xaml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/General/Scrollable/View.xaml.cs b/samples/UWPSample/General/Scrollable/View.xaml.cs deleted file mode 100644 index 7378c9053..000000000 --- a/samples/UWPSample/General/Scrollable/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.Scrollable -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/Sections/View.xaml b/samples/UWPSample/General/Sections/View.xaml deleted file mode 100644 index 132a1144c..000000000 --- a/samples/UWPSample/General/Sections/View.xaml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/General/Sections/View.xaml.cs b/samples/UWPSample/General/Sections/View.xaml.cs deleted file mode 100644 index b77603c4c..000000000 --- a/samples/UWPSample/General/Sections/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.Sections -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/Sections2/View.xaml b/samples/UWPSample/General/Sections2/View.xaml deleted file mode 100644 index 1484d0c40..000000000 --- a/samples/UWPSample/General/Sections2/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - diff --git a/samples/UWPSample/General/Sections2/View.xaml.cs b/samples/UWPSample/General/Sections2/View.xaml.cs deleted file mode 100644 index 0b97e9bd5..000000000 --- a/samples/UWPSample/General/Sections2/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.Sections2 -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/TemplatedLegends/View.xaml b/samples/UWPSample/General/TemplatedLegends/View.xaml deleted file mode 100644 index 425190e61..000000000 --- a/samples/UWPSample/General/TemplatedLegends/View.xaml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/General/TemplatedLegends/View.xaml.cs b/samples/UWPSample/General/TemplatedLegends/View.xaml.cs deleted file mode 100644 index c849d52e7..000000000 --- a/samples/UWPSample/General/TemplatedLegends/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.TemplatedLegends -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/TemplatedTooltips/View.xaml b/samples/UWPSample/General/TemplatedTooltips/View.xaml deleted file mode 100644 index 72e4a74fc..000000000 --- a/samples/UWPSample/General/TemplatedTooltips/View.xaml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/General/TemplatedTooltips/View.xaml.cs b/samples/UWPSample/General/TemplatedTooltips/View.xaml.cs deleted file mode 100644 index 189ece5b6..000000000 --- a/samples/UWPSample/General/TemplatedTooltips/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.TemplatedTooltips -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/Tooltips/View.xaml b/samples/UWPSample/General/Tooltips/View.xaml deleted file mode 100644 index d0545e202..000000000 --- a/samples/UWPSample/General/Tooltips/View.xaml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/General/Tooltips/View.xaml.cs b/samples/UWPSample/General/Tooltips/View.xaml.cs deleted file mode 100644 index 1894f6c64..000000000 --- a/samples/UWPSample/General/Tooltips/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.Tooltips -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/UserDefinedTypes/View.xaml b/samples/UWPSample/General/UserDefinedTypes/View.xaml deleted file mode 100644 index 452b43d76..000000000 --- a/samples/UWPSample/General/UserDefinedTypes/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/General/UserDefinedTypes/View.xaml.cs b/samples/UWPSample/General/UserDefinedTypes/View.xaml.cs deleted file mode 100644 index aab53191a..000000000 --- a/samples/UWPSample/General/UserDefinedTypes/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.UserDefinedTypes -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/Visibility/View.xaml b/samples/UWPSample/General/Visibility/View.xaml deleted file mode 100644 index 415b38182..000000000 --- a/samples/UWPSample/General/Visibility/View.xaml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/General/Visibility/View.xaml.cs b/samples/UWPSample/General/Visibility/View.xaml.cs deleted file mode 100644 index 8cf5bda3b..000000000 --- a/samples/UWPSample/General/Visibility/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.Visibility -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/General/VisualElements/View.xaml b/samples/UWPSample/General/VisualElements/View.xaml deleted file mode 100644 index 6ffd2b714..000000000 --- a/samples/UWPSample/General/VisualElements/View.xaml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - diff --git a/samples/UWPSample/General/VisualElements/View.xaml.cs b/samples/UWPSample/General/VisualElements/View.xaml.cs deleted file mode 100644 index 49e931815..000000000 --- a/samples/UWPSample/General/VisualElements/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.General.VisualElements -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Heat/Basic/View.xaml b/samples/UWPSample/Heat/Basic/View.xaml deleted file mode 100644 index 7c7e1e71e..000000000 --- a/samples/UWPSample/Heat/Basic/View.xaml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - diff --git a/samples/UWPSample/Heat/Basic/View.xaml.cs b/samples/UWPSample/Heat/Basic/View.xaml.cs deleted file mode 100644 index 18fd35778..000000000 --- a/samples/UWPSample/Heat/Basic/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Heat.Basic -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Lines/Area/View.xaml b/samples/UWPSample/Lines/Area/View.xaml deleted file mode 100644 index d9182521a..000000000 --- a/samples/UWPSample/Lines/Area/View.xaml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Lines/Area/View.xaml.cs b/samples/UWPSample/Lines/Area/View.xaml.cs deleted file mode 100644 index a100a5b89..000000000 --- a/samples/UWPSample/Lines/Area/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Lines.Area -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Lines/AutoUpdate/View.xaml b/samples/UWPSample/Lines/AutoUpdate/View.xaml deleted file mode 100644 index 3adc8529b..000000000 --- a/samples/UWPSample/Lines/AutoUpdate/View.xaml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Lines/AutoUpdate/View.xaml.cs b/samples/UWPSample/Lines/AutoUpdate/View.xaml.cs deleted file mode 100644 index ced51531d..000000000 --- a/samples/UWPSample/Lines/AutoUpdate/View.xaml.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Threading.Tasks; -using ViewModelsSamples.Lines.AutoUpdate; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Input; - -namespace UWPSample.Lines.AutoUpdate -{ - public sealed partial class View : UserControl - { - private bool? _isStreaming = false; - - public View() - { - InitializeComponent(); - } - - private async void Button_PointerPressed(object sender, PointerRoutedEventArgs e) - { - var vm = (ViewModel)DataContext; - _isStreaming = _isStreaming is null ? true : !_isStreaming; - - while (_isStreaming.Value) - { - vm.RemoveItem(); - vm.AddItem(); - await Task.Delay(1000); - } - } - } -} diff --git a/samples/UWPSample/Lines/Basic/View.xaml b/samples/UWPSample/Lines/Basic/View.xaml deleted file mode 100644 index 29f25918e..000000000 --- a/samples/UWPSample/Lines/Basic/View.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/samples/UWPSample/Lines/Basic/View.xaml.cs b/samples/UWPSample/Lines/Basic/View.xaml.cs deleted file mode 100644 index 6083b7b98..000000000 --- a/samples/UWPSample/Lines/Basic/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Lines.Basic -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Lines/Custom/View.xaml b/samples/UWPSample/Lines/Custom/View.xaml deleted file mode 100644 index b201b8aae..000000000 --- a/samples/UWPSample/Lines/Custom/View.xaml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/samples/UWPSample/Lines/Custom/View.xaml.cs b/samples/UWPSample/Lines/Custom/View.xaml.cs deleted file mode 100644 index cf95d6bb3..000000000 --- a/samples/UWPSample/Lines/Custom/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Lines.Custom -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Lines/Padding/View.xaml b/samples/UWPSample/Lines/Padding/View.xaml deleted file mode 100644 index bfde8f55e..000000000 --- a/samples/UWPSample/Lines/Padding/View.xaml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - diff --git a/samples/UWPSample/Lines/Padding/View.xaml.cs b/samples/UWPSample/Lines/Padding/View.xaml.cs deleted file mode 100644 index 08750030d..000000000 --- a/samples/UWPSample/Lines/Padding/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Lines.Padding -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Lines/Properties/View.xaml b/samples/UWPSample/Lines/Properties/View.xaml deleted file mode 100644 index b0de713a5..000000000 --- a/samples/UWPSample/Lines/Properties/View.xaml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Lines/Properties/View.xaml.cs b/samples/UWPSample/Lines/Properties/View.xaml.cs deleted file mode 100644 index cf9548ced..000000000 --- a/samples/UWPSample/Lines/Properties/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Lines.Properties -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Lines/Straight/View.xaml b/samples/UWPSample/Lines/Straight/View.xaml deleted file mode 100644 index d11d5a403..000000000 --- a/samples/UWPSample/Lines/Straight/View.xaml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/samples/UWPSample/Lines/Straight/View.xaml.cs b/samples/UWPSample/Lines/Straight/View.xaml.cs deleted file mode 100644 index fdd7002a4..000000000 --- a/samples/UWPSample/Lines/Straight/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Lines.Straight -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Lines/XY/View.xaml b/samples/UWPSample/Lines/XY/View.xaml deleted file mode 100644 index 49cb6ed1f..000000000 --- a/samples/UWPSample/Lines/XY/View.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/samples/UWPSample/Lines/XY/View.xaml.cs b/samples/UWPSample/Lines/XY/View.xaml.cs deleted file mode 100644 index ae824f1e9..000000000 --- a/samples/UWPSample/Lines/XY/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Lines.XY -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Lines/Zoom/View.xaml b/samples/UWPSample/Lines/Zoom/View.xaml deleted file mode 100644 index 6bfdcbc43..000000000 --- a/samples/UWPSample/Lines/Zoom/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - diff --git a/samples/UWPSample/Lines/Zoom/View.xaml.cs b/samples/UWPSample/Lines/Zoom/View.xaml.cs deleted file mode 100644 index 6be2c4f30..000000000 --- a/samples/UWPSample/Lines/Zoom/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Lines.Zoom -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/MainPage.xaml b/samples/UWPSample/MainPage.xaml deleted file mode 100644 index ee657a044..000000000 --- a/samples/UWPSample/MainPage.xaml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/MainPage.xaml.cs b/samples/UWPSample/MainPage.xaml.cs deleted file mode 100644 index b52e17309..000000000 --- a/samples/UWPSample/MainPage.xaml.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Input; - -namespace UWPSample -{ - ///

    - /// An empty page that can be used on its own or navigated to within a Frame. - /// - public sealed partial class MainPage : Page - { - public MainPage() - { - InitializeComponent(); - - Samples = ViewModelsSamples.Index.Samples; - grid.DataContext = this; - } - - public string[] Samples { get; set; } - - private void Border_PointerPressed(object sender, PointerRoutedEventArgs e) - { - var ctx = (string)((FrameworkElement)sender).DataContext; - - var t = Type.GetType($"UWPSample.{ctx.Replace('/', '.')}.View"); - content.Content = Activator.CreateInstance(t); - } - } -} diff --git a/samples/UWPSample/Maps/World/View.xaml b/samples/UWPSample/Maps/World/View.xaml deleted file mode 100644 index 103055443..000000000 --- a/samples/UWPSample/Maps/World/View.xaml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/samples/UWPSample/Maps/World/View.xaml.cs b/samples/UWPSample/Maps/World/View.xaml.cs deleted file mode 100644 index df54b1cc8..000000000 --- a/samples/UWPSample/Maps/World/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Maps.World -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Package.appxmanifest b/samples/UWPSample/Package.appxmanifest deleted file mode 100644 index 8025d91d9..000000000 --- a/samples/UWPSample/Package.appxmanifest +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - UWPSample - btord - Assets\StoreLogo.png - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/UWPSample/Pies/AngularGauge/View.xaml b/samples/UWPSample/Pies/AngularGauge/View.xaml deleted file mode 100644 index 1fe9bf839..000000000 --- a/samples/UWPSample/Pies/AngularGauge/View.xaml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Pies/AngularGauge/View.xaml.cs b/samples/UWPSample/Pies/AngularGauge/View.xaml.cs deleted file mode 100644 index ceb43e466..000000000 --- a/samples/UWPSample/Pies/AngularGauge/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Pies.AngularGauge -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Pies/AutoUpdate/View.xaml b/samples/UWPSample/Pies/AutoUpdate/View.xaml deleted file mode 100644 index c48914379..000000000 --- a/samples/UWPSample/Pies/AutoUpdate/View.xaml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Pies/AutoUpdate/View.xaml.cs b/samples/UWPSample/Pies/AutoUpdate/View.xaml.cs deleted file mode 100644 index d2d7cb9c2..000000000 --- a/samples/UWPSample/Pies/AutoUpdate/View.xaml.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Threading.Tasks; -using ViewModelsSamples.Pies.AutoUpdate; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Input; - -namespace UWPSample.Pies.AutoUpdate -{ - public sealed partial class View : UserControl - { - private bool? _isStreaming = false; - - public View() - { - InitializeComponent(); - } - - private async void Button_PointerPressed(object sender, PointerRoutedEventArgs e) - { - var vm = (ViewModel)DataContext; - _isStreaming = _isStreaming is null ? true : !_isStreaming; - - while (_isStreaming.Value) - { - vm.RemoveSeries(); - vm.AddSeries(); - await Task.Delay(1000); - } - } - } -} diff --git a/samples/UWPSample/Pies/Basic/View.xaml b/samples/UWPSample/Pies/Basic/View.xaml deleted file mode 100644 index 405136fc0..000000000 --- a/samples/UWPSample/Pies/Basic/View.xaml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/samples/UWPSample/Pies/Basic/View.xaml.cs b/samples/UWPSample/Pies/Basic/View.xaml.cs deleted file mode 100644 index 896c5890d..000000000 --- a/samples/UWPSample/Pies/Basic/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Pies.Basic -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Pies/Custom/View.xaml b/samples/UWPSample/Pies/Custom/View.xaml deleted file mode 100644 index 6be0bfeea..000000000 --- a/samples/UWPSample/Pies/Custom/View.xaml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/samples/UWPSample/Pies/Custom/View.xaml.cs b/samples/UWPSample/Pies/Custom/View.xaml.cs deleted file mode 100644 index 87c6165fd..000000000 --- a/samples/UWPSample/Pies/Custom/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Pies.Custom -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Pies/Doughnut/View.xaml b/samples/UWPSample/Pies/Doughnut/View.xaml deleted file mode 100644 index a19d220c6..000000000 --- a/samples/UWPSample/Pies/Doughnut/View.xaml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - diff --git a/samples/UWPSample/Pies/Doughnut/View.xaml.cs b/samples/UWPSample/Pies/Doughnut/View.xaml.cs deleted file mode 100644 index 23bad9abe..000000000 --- a/samples/UWPSample/Pies/Doughnut/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Pies.Doughnut -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Pies/Gauge/View.xaml b/samples/UWPSample/Pies/Gauge/View.xaml deleted file mode 100644 index 03763f715..000000000 --- a/samples/UWPSample/Pies/Gauge/View.xaml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Pies/Gauge/View.xaml.cs b/samples/UWPSample/Pies/Gauge/View.xaml.cs deleted file mode 100644 index 1a4b12385..000000000 --- a/samples/UWPSample/Pies/Gauge/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Pies.Gauge -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Pies/Gauge1/View.xaml b/samples/UWPSample/Pies/Gauge1/View.xaml deleted file mode 100644 index 40f25e97a..000000000 --- a/samples/UWPSample/Pies/Gauge1/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Pies/Gauge1/View.xaml.cs b/samples/UWPSample/Pies/Gauge1/View.xaml.cs deleted file mode 100644 index 229b8fc63..000000000 --- a/samples/UWPSample/Pies/Gauge1/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Pies.Gauge1 -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Pies/Gauge2/View.xaml b/samples/UWPSample/Pies/Gauge2/View.xaml deleted file mode 100644 index aa151def7..000000000 --- a/samples/UWPSample/Pies/Gauge2/View.xaml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Pies/Gauge2/View.xaml.cs b/samples/UWPSample/Pies/Gauge2/View.xaml.cs deleted file mode 100644 index 275f62e74..000000000 --- a/samples/UWPSample/Pies/Gauge2/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Pies.Gauge2 -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Pies/Gauge3/View.xaml b/samples/UWPSample/Pies/Gauge3/View.xaml deleted file mode 100644 index 714b91f34..000000000 --- a/samples/UWPSample/Pies/Gauge3/View.xaml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Pies/Gauge3/View.xaml.cs b/samples/UWPSample/Pies/Gauge3/View.xaml.cs deleted file mode 100644 index dd1235675..000000000 --- a/samples/UWPSample/Pies/Gauge3/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Pies.Gauge3 -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Pies/Gauge4/View.xaml b/samples/UWPSample/Pies/Gauge4/View.xaml deleted file mode 100644 index 6900c1550..000000000 --- a/samples/UWPSample/Pies/Gauge4/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Pies/Gauge4/View.xaml.cs b/samples/UWPSample/Pies/Gauge4/View.xaml.cs deleted file mode 100644 index f0b2abfbd..000000000 --- a/samples/UWPSample/Pies/Gauge4/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Pies.Gauge4 -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Pies/Gauge5/View.xaml b/samples/UWPSample/Pies/Gauge5/View.xaml deleted file mode 100644 index 00a580e78..000000000 --- a/samples/UWPSample/Pies/Gauge5/View.xaml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Pies/Gauge5/View.xaml.cs b/samples/UWPSample/Pies/Gauge5/View.xaml.cs deleted file mode 100644 index c7f1a126b..000000000 --- a/samples/UWPSample/Pies/Gauge5/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Pies.Gauge5 -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Pies/Gauges/View.xaml b/samples/UWPSample/Pies/Gauges/View.xaml deleted file mode 100644 index 5fa8bb934..000000000 --- a/samples/UWPSample/Pies/Gauges/View.xaml +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Pies/Gauges/View.xaml.cs b/samples/UWPSample/Pies/Gauges/View.xaml.cs deleted file mode 100644 index d5dce6a75..000000000 --- a/samples/UWPSample/Pies/Gauges/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Pies.Gauges -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Pies/NightingaleRose/View.xaml b/samples/UWPSample/Pies/NightingaleRose/View.xaml deleted file mode 100644 index df19a8278..000000000 --- a/samples/UWPSample/Pies/NightingaleRose/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Pies/NightingaleRose/View.xaml.cs b/samples/UWPSample/Pies/NightingaleRose/View.xaml.cs deleted file mode 100644 index 853584a62..000000000 --- a/samples/UWPSample/Pies/NightingaleRose/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Pies.NightingaleRose -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Pies/OutLabels/View.xaml b/samples/UWPSample/Pies/OutLabels/View.xaml deleted file mode 100644 index de71ca8f8..000000000 --- a/samples/UWPSample/Pies/OutLabels/View.xaml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - diff --git a/samples/UWPSample/Pies/OutLabels/View.xaml.cs b/samples/UWPSample/Pies/OutLabels/View.xaml.cs deleted file mode 100644 index d2e45f45d..000000000 --- a/samples/UWPSample/Pies/OutLabels/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Pies.OutLabels -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Pies/Processing/View.xaml b/samples/UWPSample/Pies/Processing/View.xaml deleted file mode 100644 index c0c350455..000000000 --- a/samples/UWPSample/Pies/Processing/View.xaml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Pies/Processing/View.xaml.cs b/samples/UWPSample/Pies/Processing/View.xaml.cs deleted file mode 100644 index 5d8d0892e..000000000 --- a/samples/UWPSample/Pies/Processing/View.xaml.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using LiveChartsCore.SkiaSharpView.Painting; -using Windows.UI; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Data; -using Windows.UI.Xaml.Media; - -namespace UWPSample.Pies.Processing -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } - - public class PaintTaskToBrushConverter : IValueConverter - { - public object Convert(object value, Type targetType, object parameter, string language) - { - return value is SolidColorPaint solidColor - ? new SolidColorBrush( - Color.FromArgb( - solidColor.Color.Alpha, - solidColor.Color.Red, - solidColor.Color.Green, - solidColor.Color.Blue)) - : null; - } - - public object ConvertBack(object value, Type targetType, object parameter, string language) - { - throw new NotImplementedException(); - } - } -} diff --git a/samples/UWPSample/Pies/Pushout/View.xaml b/samples/UWPSample/Pies/Pushout/View.xaml deleted file mode 100644 index b0931adb6..000000000 --- a/samples/UWPSample/Pies/Pushout/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Pies/Pushout/View.xaml.cs b/samples/UWPSample/Pies/Pushout/View.xaml.cs deleted file mode 100644 index 834715270..000000000 --- a/samples/UWPSample/Pies/Pushout/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Pies.Pushout -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Polar/Basic/View.xaml b/samples/UWPSample/Polar/Basic/View.xaml deleted file mode 100644 index b3a9adef0..000000000 --- a/samples/UWPSample/Polar/Basic/View.xaml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - diff --git a/samples/UWPSample/Polar/Basic/View.xaml.cs b/samples/UWPSample/Polar/Basic/View.xaml.cs deleted file mode 100644 index 9908e6c50..000000000 --- a/samples/UWPSample/Polar/Basic/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Polar.Basic -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Polar/Coordinates/View.xaml b/samples/UWPSample/Polar/Coordinates/View.xaml deleted file mode 100644 index e4b945aec..000000000 --- a/samples/UWPSample/Polar/Coordinates/View.xaml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/samples/UWPSample/Polar/Coordinates/View.xaml.cs b/samples/UWPSample/Polar/Coordinates/View.xaml.cs deleted file mode 100644 index 492bdafb9..000000000 --- a/samples/UWPSample/Polar/Coordinates/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Polar.Coordinates -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Polar/RadialArea/View.xaml b/samples/UWPSample/Polar/RadialArea/View.xaml deleted file mode 100644 index 2620c2718..000000000 --- a/samples/UWPSample/Polar/RadialArea/View.xaml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/samples/UWPSample/Polar/RadialArea/View.xaml.cs b/samples/UWPSample/Polar/RadialArea/View.xaml.cs deleted file mode 100644 index 7b29cd3f9..000000000 --- a/samples/UWPSample/Polar/RadialArea/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Polar.RadialArea -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Properties/AssemblyInfo.cs b/samples/UWPSample/Properties/AssemblyInfo.cs deleted file mode 100644 index 9b1b819a1..000000000 --- a/samples/UWPSample/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("UWPSample")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("UWPSample")] -[assembly: AssemblyCopyright("Copyright © 2021")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] -[assembly: ComVisible(false)] \ No newline at end of file diff --git a/samples/UWPSample/Properties/Default.rd.xml b/samples/UWPSample/Properties/Default.rd.xml deleted file mode 100644 index af00722cd..000000000 --- a/samples/UWPSample/Properties/Default.rd.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/UWPSample/Scatter/AutoUpdate/View.xaml b/samples/UWPSample/Scatter/AutoUpdate/View.xaml deleted file mode 100644 index 267fb3a41..000000000 --- a/samples/UWPSample/Scatter/AutoUpdate/View.xaml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/Scatter/AutoUpdate/View.xaml.cs b/samples/UWPSample/Scatter/AutoUpdate/View.xaml.cs deleted file mode 100644 index b8f1ca37f..000000000 --- a/samples/UWPSample/Scatter/AutoUpdate/View.xaml.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Threading.Tasks; -using ViewModelsSamples.Scatter.AutoUpdate; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Input; - -namespace UWPSample.Scatter.AutoUpdate -{ - public sealed partial class View : UserControl - { - private bool? _isStreaming = false; - - public View() - { - InitializeComponent(); - } - - private async void Button_PointerPressed(object sender, PointerRoutedEventArgs e) - { - var vm = (ViewModel)DataContext; - _isStreaming = _isStreaming is null ? true : !_isStreaming; - - while (_isStreaming.Value) - { - vm.RemoveItem(); - vm.AddItem(); - await Task.Delay(1000); - } - } - } -} diff --git a/samples/UWPSample/Scatter/Basic/View.xaml b/samples/UWPSample/Scatter/Basic/View.xaml deleted file mode 100644 index 1f17231eb..000000000 --- a/samples/UWPSample/Scatter/Basic/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Scatter/Basic/View.xaml.cs b/samples/UWPSample/Scatter/Basic/View.xaml.cs deleted file mode 100644 index ccc7df8bb..000000000 --- a/samples/UWPSample/Scatter/Basic/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Scatter.Basic -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Scatter/Bubbles/View.xaml b/samples/UWPSample/Scatter/Bubbles/View.xaml deleted file mode 100644 index 00a3eb83c..000000000 --- a/samples/UWPSample/Scatter/Bubbles/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Scatter/Bubbles/View.xaml.cs b/samples/UWPSample/Scatter/Bubbles/View.xaml.cs deleted file mode 100644 index 9311f3ec1..000000000 --- a/samples/UWPSample/Scatter/Bubbles/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Scatter.Bubbles -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/Scatter/Custom/View.xaml b/samples/UWPSample/Scatter/Custom/View.xaml deleted file mode 100644 index 8c4accbea..000000000 --- a/samples/UWPSample/Scatter/Custom/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/Scatter/Custom/View.xaml.cs b/samples/UWPSample/Scatter/Custom/View.xaml.cs deleted file mode 100644 index 9b93e000a..000000000 --- a/samples/UWPSample/Scatter/Custom/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.Scatter.Custom -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/StackedArea/Basic/View.xaml b/samples/UWPSample/StackedArea/Basic/View.xaml deleted file mode 100644 index 3f7b53020..000000000 --- a/samples/UWPSample/StackedArea/Basic/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/StackedArea/Basic/View.xaml.cs b/samples/UWPSample/StackedArea/Basic/View.xaml.cs deleted file mode 100644 index df6d9dc77..000000000 --- a/samples/UWPSample/StackedArea/Basic/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.StackedArea.Basic -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/StackedArea/StepArea/View.xaml b/samples/UWPSample/StackedArea/StepArea/View.xaml deleted file mode 100644 index ebc4e1b0a..000000000 --- a/samples/UWPSample/StackedArea/StepArea/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/StackedArea/StepArea/View.xaml.cs b/samples/UWPSample/StackedArea/StepArea/View.xaml.cs deleted file mode 100644 index 16ed87e48..000000000 --- a/samples/UWPSample/StackedArea/StepArea/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.StackedArea.StepArea -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/StackedBars/Basic/View.xaml b/samples/UWPSample/StackedBars/Basic/View.xaml deleted file mode 100644 index 0c113add9..000000000 --- a/samples/UWPSample/StackedBars/Basic/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/StackedBars/Basic/View.xaml.cs b/samples/UWPSample/StackedBars/Basic/View.xaml.cs deleted file mode 100644 index f9b4b8fb1..000000000 --- a/samples/UWPSample/StackedBars/Basic/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.StackedBars.Basic -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/StackedBars/Groups/View.xaml b/samples/UWPSample/StackedBars/Groups/View.xaml deleted file mode 100644 index 478db4874..000000000 --- a/samples/UWPSample/StackedBars/Groups/View.xaml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/samples/UWPSample/StackedBars/Groups/View.xaml.cs b/samples/UWPSample/StackedBars/Groups/View.xaml.cs deleted file mode 100644 index 91078f089..000000000 --- a/samples/UWPSample/StackedBars/Groups/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.StackedBars.Groups -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/StepLines/Area/View.xaml b/samples/UWPSample/StepLines/Area/View.xaml deleted file mode 100644 index 903eef63d..000000000 --- a/samples/UWPSample/StepLines/Area/View.xaml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - diff --git a/samples/UWPSample/StepLines/Area/View.xaml.cs b/samples/UWPSample/StepLines/Area/View.xaml.cs deleted file mode 100644 index 7bc6e1261..000000000 --- a/samples/UWPSample/StepLines/Area/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.StepLines.Area -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/StepLines/AutoUpdate/View.xaml b/samples/UWPSample/StepLines/AutoUpdate/View.xaml deleted file mode 100644 index 7107aaeee..000000000 --- a/samples/UWPSample/StepLines/AutoUpdate/View.xaml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/StepLines/AutoUpdate/View.xaml.cs b/samples/UWPSample/StepLines/AutoUpdate/View.xaml.cs deleted file mode 100644 index 91d95054a..000000000 --- a/samples/UWPSample/StepLines/AutoUpdate/View.xaml.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Threading.Tasks; -using ViewModelsSamples.StepLines.AutoUpdate; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Input; - -namespace UWPSample.StepLines.AutoUpdate -{ - public sealed partial class View : UserControl - { - private bool? _isStreaming = false; - - public View() - { - InitializeComponent(); - } - - private async void Button_PointerPressed(object sender, PointerRoutedEventArgs e) - { - var vm = (ViewModel)DataContext; - _isStreaming = _isStreaming is null ? true : !_isStreaming; - - while (_isStreaming.Value) - { - vm.RemoveItem(); - vm.AddItem(); - await Task.Delay(1000); - } - } - } -} diff --git a/samples/UWPSample/StepLines/Basic/View.xaml b/samples/UWPSample/StepLines/Basic/View.xaml deleted file mode 100644 index 616208003..000000000 --- a/samples/UWPSample/StepLines/Basic/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/StepLines/Basic/View.xaml.cs b/samples/UWPSample/StepLines/Basic/View.xaml.cs deleted file mode 100644 index 379c5900b..000000000 --- a/samples/UWPSample/StepLines/Basic/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.StepLines.Basic -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/StepLines/Custom/View.xaml b/samples/UWPSample/StepLines/Custom/View.xaml deleted file mode 100644 index 258282659..000000000 --- a/samples/UWPSample/StepLines/Custom/View.xaml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/samples/UWPSample/StepLines/Custom/View.xaml.cs b/samples/UWPSample/StepLines/Custom/View.xaml.cs deleted file mode 100644 index cef387e0f..000000000 --- a/samples/UWPSample/StepLines/Custom/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.StepLines.Custom -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/StepLines/Properties/View.xaml b/samples/UWPSample/StepLines/Properties/View.xaml deleted file mode 100644 index 9f13e84cf..000000000 --- a/samples/UWPSample/StepLines/Properties/View.xaml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/StepLines/Properties/View.xaml.cs b/samples/UWPSample/StepLines/Properties/View.xaml.cs deleted file mode 100644 index 7d7100ed5..000000000 --- a/samples/UWPSample/StepLines/Properties/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.StepLines.Properties -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/StepLines/Zoom/View.xaml b/samples/UWPSample/StepLines/Zoom/View.xaml deleted file mode 100644 index d2330d1f9..000000000 --- a/samples/UWPSample/StepLines/Zoom/View.xaml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/StepLines/Zoom/View.xaml.cs b/samples/UWPSample/StepLines/Zoom/View.xaml.cs deleted file mode 100644 index 0213f51ca..000000000 --- a/samples/UWPSample/StepLines/Zoom/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.StepLines.Zoom -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/UWPSample.csproj b/samples/UWPSample/UWPSample.csproj deleted file mode 100644 index 8b6c35ba7..000000000 --- a/samples/UWPSample/UWPSample.csproj +++ /dev/null @@ -1,878 +0,0 @@ - - - - - enable - 9.0 - Debug - x86 - {3EE1E8CC-075A-4E54-9E65-2D0390D6C5A3} - AppContainerExe - Properties - UWPSample - UWPSample - en-US - UAP - 10.0.19041.0 - 10.0.17763.0 - 14 - 512 - {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - true - false - - - true - bin\x86\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - x86 - false - prompt - true - - - bin\x86\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - x86 - false - prompt - true - true - - - true - bin\ARM\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - ARM - false - prompt - true - - - bin\ARM\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - ARM - false - prompt - true - true - - - true - bin\ARM64\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - ARM64 - false - prompt - true - true - - - bin\ARM64\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - ARM64 - false - prompt - true - true - - - true - bin\x64\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - x64 - false - prompt - true - - - bin\x64\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - x64 - false - prompt - true - true - - - PackageReference - - - - App.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - MainPage.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - View.xaml - - - - - Designer - - - - - - - - - - - - - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - - - 6.2.13 - - - 2.5.0 - - - - - {b4853153-b34f-4909-9b8f-a0ad00a3ee85} - LiveChartsCore - - - {dfcdb92d-2678-464d-a679-3866702fc6bf} - LiveChartsCore.SkiaSharpView.Uno - - - {3b6f3fa0-d35d-49db-90da-709cc481ceee} - LiveChartsCore.SkiaSharpView - - - {bde9c3d2-5801-4be1-b79e-63686d04ce0f} - ViewModelsSamples - - - - - 14.0 - - - - \ No newline at end of file diff --git a/samples/UWPSample/VisualTest/DataTemplate/View.xaml b/samples/UWPSample/VisualTest/DataTemplate/View.xaml deleted file mode 100644 index 00ca1b660..000000000 --- a/samples/UWPSample/VisualTest/DataTemplate/View.xaml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/VisualTest/DataTemplate/View.xaml.cs b/samples/UWPSample/VisualTest/DataTemplate/View.xaml.cs deleted file mode 100644 index 20eb65370..000000000 --- a/samples/UWPSample/VisualTest/DataTemplate/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.VisualTest.DataTemplate -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/VisualTest/ReattachVisual/View.xaml b/samples/UWPSample/VisualTest/ReattachVisual/View.xaml deleted file mode 100644 index c1c0819aa..000000000 --- a/samples/UWPSample/VisualTest/ReattachVisual/View.xaml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/VisualTest/ReattachVisual/View.xaml.cs b/samples/UWPSample/VisualTest/ReattachVisual/View.xaml.cs deleted file mode 100644 index 508affee4..000000000 --- a/samples/UWPSample/VisualTest/ReattachVisual/View.xaml.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.VisualTest.ReattachVisual -{ - public sealed partial class View : UserControl - { - private bool _isInVisualTree = true; - - public View() - { - InitializeComponent(); - } - - private void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) - { - if (_isInVisualTree) - { - _ = parent.Children.Remove(chart); - _ = parent.Children.Remove(pieChart); - _ = parent.Children.Remove(polarChart); - _isInVisualTree = false; - return; - } - - parent.Children.Add(chart); - parent.Children.Add(pieChart); - parent.Children.Add(polarChart); - _isInVisualTree = true; - } - } -} diff --git a/samples/UWPSample/VisualTest/Tabs/View.xaml b/samples/UWPSample/VisualTest/Tabs/View.xaml deleted file mode 100644 index e7f72e998..000000000 --- a/samples/UWPSample/VisualTest/Tabs/View.xaml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - diff --git a/samples/UWPSample/VisualTest/Tabs/View.xaml.cs b/samples/UWPSample/VisualTest/Tabs/View.xaml.cs deleted file mode 100644 index 0802c3075..000000000 --- a/samples/UWPSample/VisualTest/Tabs/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.VisualTest.Tabs -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/samples/UWPSample/VisualTest/TwoChartsOneSeries/View.xaml b/samples/UWPSample/VisualTest/TwoChartsOneSeries/View.xaml deleted file mode 100644 index d759c35c8..000000000 --- a/samples/UWPSample/VisualTest/TwoChartsOneSeries/View.xaml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/samples/UWPSample/VisualTest/TwoChartsOneSeries/View.xaml.cs b/samples/UWPSample/VisualTest/TwoChartsOneSeries/View.xaml.cs deleted file mode 100644 index 5b4f8f608..000000000 --- a/samples/UWPSample/VisualTest/TwoChartsOneSeries/View.xaml.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Windows.UI.Xaml.Controls; - -namespace UWPSample.VisualTest.TwoChartsOneSeries -{ - public sealed partial class View : UserControl - { - public View() - { - InitializeComponent(); - } - } -} diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/AssemblyInfo.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/AssemblyInfo.cs deleted file mode 100644 index 9f5a39c7a..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/AssemblyInfo.cs +++ /dev/null @@ -1,32 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using System.Runtime.CompilerServices; -#if !DEBUG -using System.Reflection; - -[assembly: AssemblyKeyFile("./../../../LiveCharts.snk")] -[assembly: InternalsVisibleTo("LiveChartsCore.BackersPackage, PublicKey=0024000004800000940000000602000000240000525341310004000001000100d53791eaa0d98b405ca858f39169be6af36ceb7a1bca3ca76c6905fd22fddf8c5e4ef2778a5d7a77ad12f08da711fecfc44795c7923739a2acac946b3f1719a6dfc238695bc69cf5d959b3fb6bc4d18d57a97ff8ed897e6b22a6b8155401ee368d77431e74178104b4adca73520b058b9be28d4ec129beb54871778167afa5ce")] -#else -[assembly: InternalsVisibleTo("LiveChartsCore.BackersPackage")] -#endif - diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour.Android.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour.Android.cs deleted file mode 100644 index 30fb379cb..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour.Android.cs +++ /dev/null @@ -1,133 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -#if ANDROID - -using Android.Views; -using LiveChartsCore.Drawing; - -namespace LiveChartsCore.SkiaSharpView.Uno.Behaviours; - -/// -/// A class that adds platform-specific events to the chart. -/// -public partial class ChartBehaviour -{ - private bool _isPinching; - private bool _isDown; - private LvcPoint _lastTouch; - private ScaleGestureDetector? _scaleDetector; - private CustomScaleListener _customScaleListener = null!; - private DateTime _previousPress = DateTime.MinValue; - - protected void OnAndroidHover(object? sender, View.HoverEventArgs e) - { - if (e.Event is null) return; - - var p = new LvcPoint(e.Event.GetX() / Density, e.Event.GetY() / Density); - Moved?.Invoke(sender, new(p, e.Event)); - } - - protected void OnAndroidTouched(object? sender, View.TouchEventArgs e) - { - if (e.Event is null) return; - - var p = new LvcPoint(e.Event.GetX() / Density, e.Event.GetY() / Density); - var isRightClick = (DateTime.Now - _previousPress).TotalMilliseconds < 500; - var isPinch = e.Event.PointerCount > 1; - - _scaleDetector ??= new ScaleGestureDetector( - ((View)sender!).Context!, _customScaleListener = new CustomScaleListener(scale => - { - Pinched?.Invoke(sender, new(scale, _lastTouch, _scaleDetector!)); - })); - - _ = _scaleDetector.OnTouchEvent(e.Event); - - switch (e.Event.ActionMasked) - { - case MotionEventActions.ButtonPress: - case MotionEventActions.Pointer1Down: - case MotionEventActions.Pointer2Down: - case MotionEventActions.Pointer3Down: - case MotionEventActions.Down: - _isPinching = isPinch; - _isDown = true; - if (!_isPinching) - Pressed?.Invoke(sender, new(p, isRightClick, e.Event)); - _previousPress = DateTime.Now; - _customScaleListener.Paused = isRightClick && !isPinch; - break; - case MotionEventActions.Move: - case MotionEventActions.HoverMove: - // the Moved event is only raised when the pointer is down, - // it is also fired from the hover handler when the pointer is not down. - if (!_isPinching && _isDown) - Moved?.Invoke(sender, new(p, e.Event)); - break; - case MotionEventActions.ButtonRelease: - case MotionEventActions.Pointer1Up: - case MotionEventActions.Pointer2Up: - case MotionEventActions.Pointer3Up: - case MotionEventActions.Up: - case MotionEventActions.Cancel: - if (!_isPinching && _isDown) - Released?.Invoke(sender, new(p, isRightClick, e.Event)); - else - _isPinching = false; - _isDown = false; - _customScaleListener.Paused = false; - break; - case MotionEventActions.HoverEnter: - case MotionEventActions.HoverExit: - case MotionEventActions.Mask: - case MotionEventActions.Outside: - case MotionEventActions.PointerIdMask: - case MotionEventActions.PointerIdShift: - default: - break; - } - - _lastTouch = p; - } - - private class CustomScaleListener : ScaleGestureDetector.SimpleOnScaleGestureListener - { - private readonly Action _onScaled; - - public CustomScaleListener(Action onSacaled) - { - _onScaled = onSacaled; - } - - public bool Paused { get; set; } - - public override bool OnScale(ScaleGestureDetector? detector) - { - if (detector is null || detector.ScaleFactor == 1 || Paused) return false; - _onScaled(detector.ScaleFactor); - return true; - } - } -} - -#endif diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour.MacCatalyst.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour.MacCatalyst.cs deleted file mode 100644 index 5f0c12a13..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour.MacCatalyst.cs +++ /dev/null @@ -1,149 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -#if MACCATALYST || IOS - -using System; -using LiveChartsCore.Drawing; -using UIKit; - -namespace LiveChartsCore.SkiaSharpView.Uno.Behaviours; - -/// -/// A class that adds platform-specific events to the chart. -/// -public partial class ChartBehaviour -{ - private DateTime _previousPress = DateTime.MinValue; - - protected UIHoverGestureRecognizer GetMacCatalystHover(UIView view) - { - return new UIHoverGestureRecognizer((UIHoverGestureRecognizer e) => - { - switch (e.State) - { - case UIGestureRecognizerState.Changed: - var p = e.LocationInView(view); - Moved?.Invoke(view, new(new(p.X, p.Y), e)); - break; - case UIGestureRecognizerState.Cancelled: - case UIGestureRecognizerState.Failed: - case UIGestureRecognizerState.Ended: - Exited?.Invoke(view, new(e)); - break; - case UIGestureRecognizerState.Possible: - case UIGestureRecognizerState.Began: - default: - break; - } - }); - } - - protected UILongPressGestureRecognizer GetMacCatalystLongPress(UIView view) - { - return new UILongPressGestureRecognizer((UILongPressGestureRecognizer e) => - { - var location = e.LocationInView(view); - var p = new LvcPoint((float)location.X, (float)location.Y); - var isRightClick = (DateTime.Now - _previousPress).TotalMilliseconds < 500; - var isPinch = e.NumberOfTouches > 1; - - switch (e.State) - { - case UIGestureRecognizerState.Began: - Pressed?.Invoke(view, new(p, isRightClick, e)); - _previousPress = DateTime.Now; - break; - case UIGestureRecognizerState.Changed: - Moved?.Invoke(view, new(p, e)); - break; - case UIGestureRecognizerState.Cancelled: - case UIGestureRecognizerState.Ended: - Released?.Invoke(view, new(p, isRightClick, e)); - break; - case UIGestureRecognizerState.Possible: - case UIGestureRecognizerState.Failed: - default: - break; - } - }) - { - MinimumPressDuration = 0, - ShouldRecognizeSimultaneously = (g1, g2) => true - }; - } - - private float _previousScale = 1; - protected UIPinchGestureRecognizer GetMacCatalystPinch(UIView view) - { - return new UIPinchGestureRecognizer((UIPinchGestureRecognizer e) => - { - var p = e.LocationInView(view); - - switch (e.State) - { - case UIGestureRecognizerState.Began: - _previousScale = 1; - break; - case UIGestureRecognizerState.Changed: - var s = (float)e.Scale; - var delta = _previousScale - s; - Pinched?.Invoke(view, new(1 - delta, new(p.X, p.Y), e)); - _previousScale = s; - break; - case UIGestureRecognizerState.Ended: - case UIGestureRecognizerState.Cancelled: - break; - case UIGestureRecognizerState.Possible: - case UIGestureRecognizerState.Failed: - default: - break; - } - }) - { - ShouldRecognizeSimultaneously = (g1, g2) => true - }; - } - - private CGPoint? _last; - protected UIPanGestureRecognizer GetMacCatalystOnPan(UIView view) - { - return new UIPanGestureRecognizer((UIPanGestureRecognizer e) => - { - var l = e.LocationInView(view); - _last ??= l; - var delta = _last.Value.Y - l.Y; - var isZoom = e.NumberOfTouches == 0; - var tolerance = 5; // just a fator to avoid multiple calls. - - if (e.State == UIGestureRecognizerState.Ended || !isZoom || Math.Abs(delta) < tolerance) return; - Scrolled?.Invoke(view, new(new(l.X, l.Y), delta, e)); - _last = l; - }) - { - AllowedScrollTypesMask = UIScrollTypeMask.Discrete | UIScrollTypeMask.Continuous, - MinimumNumberOfTouches = 0 - }; - } -} - -#endif diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour.Windows.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour.Windows.cs deleted file mode 100644 index b90e64e3e..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour.Windows.cs +++ /dev/null @@ -1,77 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -#if UAP10_0_18362 - -using Windows.UI.Xaml; -using Windows.UI.Xaml.Input; - -namespace LiveChartsCore.SkiaSharpView.Uno.Behaviours; - -/// -/// A class that adds platform-specific events to the chart. -/// -public partial class ChartBehaviour -{ - protected void OnWindowsPointerPressed(object sender, PointerRoutedEventArgs e) - { - var p = e.GetCurrentPoint(sender as UIElement); - if (p is null) return; - - Pressed?.Invoke( - sender, - new(new(p.Position.X, p.Position.Y), p.Properties.IsRightButtonPressed, e)); - } - - protected void OnWindowsPointerMoved(object sender, PointerRoutedEventArgs e) - { - var p = e.GetCurrentPoint(sender as UIElement); - if (p is null) return; - - Moved?.Invoke( - sender, - new(new(p.Position.X, p.Position.Y), e)); - } - - protected void OnWindowsPointerReleased(object sender, PointerRoutedEventArgs e) - { - var p = e.GetCurrentPoint(sender as UIElement); - if (p is null) return; - - Released?.Invoke( - sender, - new(new(p.Position.X, p.Position.Y), p.Properties.IsRightButtonPressed, e)); - } - - protected void OnWindowsPointerWheelChanged(object sender, PointerRoutedEventArgs e) - { - var p = e.GetCurrentPoint(sender as UIElement); - Scrolled?.Invoke(sender, new(new(p.Position.X, p.Position.Y), p.Properties.MouseWheelDelta, e)); - } - - protected void OnWindowsPointerExited(object sender, PointerRoutedEventArgs e) - { - Exited?.Invoke(sender, new(e)); - } -} - -#endif diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour._shared.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour._shared.cs deleted file mode 100644 index 21fdb27e8..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/ChartBehaviour._shared.cs +++ /dev/null @@ -1,115 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using LiveChartsCore.SkiaSharpView.Uno.Behaviours.Events; -using Windows.UI.Xaml; - -namespace LiveChartsCore.SkiaSharpView.Uno.Behaviours; - -// ----- -// NOTE (HELP WANTED?) -// this code is repeated, ideally it should be shared between all the projects -// but I am not able to consume the LiveChartsCore.Behaviours project from here -// the thing is that the #IF WINDOWS is not working as expected, already ttried with -// uap10.0.19041 withhour success. -// ----- - -/// -/// A class that adds platform-specific events to the chart. -/// -public partial class ChartBehaviour -{ - /// - /// Gets or sets the screen density. - /// - public double Density { get; set; } - - /// - /// Called when the pointer/tap is pressed. - /// - public event PressedHandler? Pressed; - - /// - /// Called when the pointer/tap is released. - /// - public event PressedHandler? Released; - - /// - /// Called when the pointer/tap moves. - /// - public event ScreenHandler? Moved; - - /// - /// Called when the pointer exits the control. - /// - public event Handler? Exited; - - /// - /// Called when the control is pinched. - /// - public event PinchHandler? Pinched; - - /// - /// Called when the control is scrolled. - /// - public event ScrollHandler? Scrolled; - - /// - /// Attaches the native events on the specified element. - /// - /// The element. - public void On(FrameworkElement element) - { -#if HAS_UNO_WINUI - Density = Windows.Graphics.Display.DisplayInformation.GetForCurrentView().LogicalDpi / 96.0f; -#else - Density = element.XamlRoot.RasterizationScale; -#endif - -#if ANDROID - - element.Touch += OnAndroidTouched; - element.Hover += OnAndroidHover; - -#endif - -#if MACCATALYST || IOS - - element.UserInteractionEnabled = true; - element.AddGestureRecognizer(GetMacCatalystHover(element)); - element.AddGestureRecognizer(GetMacCatalystLongPress(element)); - element.AddGestureRecognizer(GetMacCatalystPinch(element)); - element.AddGestureRecognizer(GetMacCatalystOnPan(element)); - -#endif - -#if UAP10_0_18362 - - element.PointerPressed += OnWindowsPointerPressed; - element.PointerMoved += OnWindowsPointerMoved; - element.PointerReleased += OnWindowsPointerReleased; - element.PointerWheelChanged += OnWindowsPointerWheelChanged; - element.PointerExited += OnWindowsPointerExited; - -#endif - } -} diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/EventArgs.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/EventArgs.cs deleted file mode 100644 index 07c6f320b..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/EventArgs.cs +++ /dev/null @@ -1,43 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -namespace LiveChartsCore.SkiaSharpView.Uno.Behaviours.Events; - -/// -/// Defines the screen event args. -/// -public class EventArgs -{ - /// - /// Initializes a new instance of the class. - /// - /// The original event. - public EventArgs(object originalEvent) - { - OriginalEvent = originalEvent; - } - - /// - /// Gets the original event. - /// - public object OriginalEvent { get; } -} diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/Handler.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/Handler.cs deleted file mode 100644 index e13012e70..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/Handler.cs +++ /dev/null @@ -1,30 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -namespace LiveChartsCore.SkiaSharpView.Uno.Behaviours.Events; - -/// -/// Defines the pinch event handler. -/// -/// The sender. -/// The args. -public delegate void Handler(object? sender, EventArgs args); diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PinchEventArgs.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PinchEventArgs.cs deleted file mode 100644 index 155343d9c..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PinchEventArgs.cs +++ /dev/null @@ -1,54 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using LiveChartsCore.Drawing; - -namespace LiveChartsCore.SkiaSharpView.Uno.Behaviours.Events; - -/// -/// Defines the pinch event args. -/// -public class PinchEventArgs : EventArgs -{ - /// - /// Initializes a new instance of the class. - /// - /// The scale. - /// The start. - /// The original event. - public PinchEventArgs(float scale, LvcPoint pinchStart, object originalEvent) - : base(originalEvent) - { - Scale = scale; - PinchStart = pinchStart; - } - - /// - /// Gets the scale. - /// - public float Scale { get; } - - /// - /// Gets the pinch star location. - /// - public LvcPoint PinchStart { get; set; } -} diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PinchHandler.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PinchHandler.cs deleted file mode 100644 index b556a50d4..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PinchHandler.cs +++ /dev/null @@ -1,30 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -namespace LiveChartsCore.SkiaSharpView.Uno.Behaviours.Events; - -/// -/// Defines the pinch event handler. -/// -/// The sender. -/// The args. -public delegate void PinchHandler(object? sender, PinchEventArgs args); diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PressedEventArgs.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PressedEventArgs.cs deleted file mode 100644 index a5bd9cb80..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PressedEventArgs.cs +++ /dev/null @@ -1,48 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using LiveChartsCore.Drawing; - -namespace LiveChartsCore.SkiaSharpView.Uno.Behaviours.Events; - -/// -/// Defines the pointer event args. -/// -public class PressedEventArgs : ScreenEventArgs -{ - /// - /// Initializes a new instance of the class. - /// - /// The pointer location. - /// Indicates whether the action is secondary. - /// The original event. - public PressedEventArgs(LvcPoint location, bool isSecondaryPress, object originalEvent) - : base(location, originalEvent) - { - IsSecondaryPress = isSecondaryPress; - } - - /// - /// Gets a value indicating whether the action is a secondary press. - /// - public bool IsSecondaryPress { get; } -} diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PressedHandler.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PressedHandler.cs deleted file mode 100644 index 639b9653c..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/PressedHandler.cs +++ /dev/null @@ -1,30 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -namespace LiveChartsCore.SkiaSharpView.Uno.Behaviours.Events; - -/// -/// Defines the sreen event handler. -/// -/// The sender. -/// The args. -public delegate void PressedHandler(object? sender, PressedEventArgs args); diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScreenEventArgs.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScreenEventArgs.cs deleted file mode 100644 index 7fc312251..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScreenEventArgs.cs +++ /dev/null @@ -1,47 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using LiveChartsCore.Drawing; - -namespace LiveChartsCore.SkiaSharpView.Uno.Behaviours.Events; - -/// -/// Defines the screen event args. -/// -public class ScreenEventArgs : EventArgs -{ - /// - /// Initializes a new instance of the class. - /// - /// The pointer location. - /// The original event. - public ScreenEventArgs(LvcPoint location, object originalEvent) - : base(originalEvent) - { - Location = location; - } - - /// - /// Gets the pointer location. - /// - public LvcPoint Location { get; } -} diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScreenHandler.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScreenHandler.cs deleted file mode 100644 index 3aedd72a5..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScreenHandler.cs +++ /dev/null @@ -1,30 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -namespace LiveChartsCore.SkiaSharpView.Uno.Behaviours.Events; - -/// -/// Defines the sreen event handler. -/// -/// The sender. -/// The args. -public delegate void ScreenHandler(object? sender, ScreenEventArgs args); diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScrollEventArgs.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScrollEventArgs.cs deleted file mode 100644 index 91d741360..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScrollEventArgs.cs +++ /dev/null @@ -1,48 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using LiveChartsCore.Drawing; - -namespace LiveChartsCore.SkiaSharpView.Uno.Behaviours.Events; - -/// -/// Defines the scroll event args. -/// -public class ScrollEventArgs : ScreenEventArgs -{ - /// - /// Initializes a new instance of the class. - /// - /// The pointer location. - /// Indicates the scroll delta. - /// The original event. - public ScrollEventArgs(LvcPoint location, double scrollDelta, object originalEvent) - : base(location, originalEvent) - { - ScrollDelta = scrollDelta; - } - - /// - /// Gets the scroll delta. - /// - public double ScrollDelta { get; } -} diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScrollHandler.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScrollHandler.cs deleted file mode 100644 index 2852f9967..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Behaviours/Events/ScrollHandler.cs +++ /dev/null @@ -1,30 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -namespace LiveChartsCore.SkiaSharpView.Uno.Behaviours.Events; - -/// -/// Defines the scrroll event handler. -/// -/// The sender. -/// The args. -public delegate void ScrollHandler(object? sender, ScrollEventArgs args); diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/CartesianChart.xaml b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/CartesianChart.xaml deleted file mode 100644 index 4aee1794f..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/CartesianChart.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/CartesianChart.xaml.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/CartesianChart.xaml.cs deleted file mode 100644 index 22fdd82fa..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/CartesianChart.xaml.cs +++ /dev/null @@ -1,911 +0,0 @@ - -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Collections.Specialized; -using System.ComponentModel; -using System.Linq; -using System.Windows.Input; -using LiveChartsCore.Drawing; -using LiveChartsCore.Kernel; -using LiveChartsCore.Kernel.Events; -using LiveChartsCore.Kernel.Sketches; -using LiveChartsCore.Measure; -using LiveChartsCore.Motion; -using LiveChartsCore.SkiaSharpView.Drawing; -using LiveChartsCore.SkiaSharpView.Painting; -using LiveChartsCore.SkiaSharpView.SKCharts; -using LiveChartsCore.SkiaSharpView.Uno.Helpers; -using LiveChartsCore.VisualElements; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Media; - -// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236 - -namespace LiveChartsCore.SkiaSharpView.Uno; - -/// -public sealed partial class CartesianChart : UserControl, ICartesianChartView -{ - #region fields - - private Chart? _core; - private MotionCanvas? _motionCanvas; - private readonly CollectionDeepObserver _seriesObserver; - private readonly CollectionDeepObserver _xObserver; - private readonly CollectionDeepObserver _yObserver; - private readonly CollectionDeepObserver> _sectionsObserver; - private readonly CollectionDeepObserver> _visualsObserver; - - #endregion - - /// - /// Initializes a new instance of the class. - /// - public CartesianChart() - { - LiveCharts.Configure(config => config.UseDefaults()); - - InitializeComponent(); - - _seriesObserver = new CollectionDeepObserver(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true); - _xObserver = new CollectionDeepObserver(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true); - _yObserver = new CollectionDeepObserver(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true); - _sectionsObserver = new CollectionDeepObserver>( - OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true); - _visualsObserver = new CollectionDeepObserver>( - OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true); - - Loaded += OnLoaded; - Unloaded += OnUnloaded; - - SetValue(XAxesProperty, new ObservableCollection() - { - LiveCharts.DefaultSettings.GetProvider().GetDefaultCartesianAxis() - }); - SetValue(YAxesProperty, new ObservableCollection() - { - LiveCharts.DefaultSettings.GetProvider().GetDefaultCartesianAxis() - }); - SetValue(SeriesProperty, new ObservableCollection()); - SetValue(SectionsProperty, new ObservableCollection>()); - SetValue(VisualElementsProperty, new ObservableCollection>()); - SetValue(SyncContextProperty, new object()); - } - - #region dependency properties - - /// - /// The title property - /// - public static readonly DependencyProperty TitleProperty = - DependencyProperty.Register( - nameof(Title), typeof(VisualElement), typeof(CartesianChart), new PropertyMetadata(null)); - - /// - /// The series property - /// - public static readonly DependencyProperty SeriesProperty = - DependencyProperty.Register( - nameof(Series), typeof(IEnumerable), typeof(CartesianChart), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (CartesianChart)o; - var seriesObserver = chart._seriesObserver; - seriesObserver?.Dispose((IEnumerable)args.OldValue); - seriesObserver?.Initialize((IEnumerable)args.NewValue); - if (chart._core == null) return; - chart._core.Update(); - })); - - /// - /// The x axes property - /// - public static readonly DependencyProperty XAxesProperty = - DependencyProperty.Register( - nameof(XAxes), typeof(IEnumerable), typeof(CartesianChart), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (CartesianChart)o; - var observer = chart._xObserver; - observer?.Dispose((IEnumerable)args.OldValue); - observer?.Initialize((IEnumerable)args.NewValue); - if (chart._core == null) return; - chart._core.Update(); - })); - - /// - /// The y axes property - /// - public static readonly DependencyProperty YAxesProperty = - DependencyProperty.Register( - nameof(YAxes), typeof(IEnumerable), typeof(CartesianChart), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (CartesianChart)o; - var observer = chart._yObserver; - observer?.Dispose((IEnumerable)args.OldValue); - observer?.Initialize((IEnumerable)args.NewValue); - if (chart._core == null) return; - chart._core.Update(); - })); - - /// - /// The sections property - /// - public static readonly DependencyProperty SectionsProperty = - DependencyProperty.Register( - nameof(Sections), typeof(IEnumerable>), typeof(CartesianChart), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (CartesianChart)o; - var observer = chart._sectionsObserver; - observer?.Dispose((IEnumerable>)args.OldValue); - observer?.Initialize((IEnumerable>)args.NewValue); - if (chart._core == null) return; - chart._core.Update(); - })); - - /// - /// The visual elements property - /// - public static readonly DependencyProperty VisualElementsProperty = - DependencyProperty.Register( - nameof(VisualElements), typeof(IEnumerable>), typeof(CartesianChart), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (CartesianChart)o; - var observer = chart._visualsObserver; - observer?.Dispose((IEnumerable>)args.OldValue); - observer?.Initialize((IEnumerable>)args.NewValue); - if (chart._core == null) return; - chart._core.Update(); - })); - - /// - /// The sync context property - /// - public static readonly DependencyProperty SyncContextProperty = - DependencyProperty.Register( - nameof(SyncContext), typeof(object), typeof(CartesianChart), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (CartesianChart)o; - if (chart._motionCanvas != null) chart.CoreCanvas.Sync = args.NewValue; - if (chart._core == null) return; - chart._core.Update(); - })); - - /// - /// The zoom mode property - /// - public static readonly DependencyProperty DrawMarginFrameProperty = - DependencyProperty.Register( - nameof(DrawMarginFrame), typeof(DrawMarginFrame), typeof(CartesianChart), new PropertyMetadata(null)); - - /// - /// The zoom mode property - /// - public static readonly DependencyProperty ZoomModeProperty = - DependencyProperty.Register( - nameof(ZoomMode), typeof(ZoomAndPanMode), typeof(CartesianChart), - new PropertyMetadata(LiveCharts.DefaultSettings.ZoomMode)); - - /// - /// The zooming speed property - /// - public static readonly DependencyProperty ZoomingSpeedProperty = - DependencyProperty.Register( - nameof(ZoomingSpeed), typeof(double), typeof(CartesianChart), - new PropertyMetadata(LiveCharts.DefaultSettings.ZoomSpeed)); - - /// - /// The tool tip finding strategy property - /// - public static readonly DependencyProperty TooltipFindingStrategyProperty = - DependencyProperty.Register( - nameof(TooltipFindingStrategy), typeof(TooltipFindingStrategy), typeof(CartesianChart), - new PropertyMetadata(LiveCharts.DefaultSettings.TooltipFindingStrategy, OnDependencyPropertyChanged)); - - /// - /// The draw margin property - /// - public static readonly DependencyProperty DrawMarginProperty = - DependencyProperty.Register( - nameof(DrawMargin), typeof(Margin), typeof(CartesianChart), new PropertyMetadata(null, OnDependencyPropertyChanged)); - - /// - /// The animations speed property - /// - public static readonly DependencyProperty AnimationsSpeedProperty = - DependencyProperty.Register( - nameof(AnimationsSpeed), typeof(TimeSpan), typeof(CartesianChart), - new PropertyMetadata(LiveCharts.DefaultSettings.AnimationsSpeed, OnDependencyPropertyChanged)); - - /// - /// The easing function property - /// - public static readonly DependencyProperty EasingFunctionProperty = - DependencyProperty.Register( - nameof(EasingFunction), typeof(Func), typeof(CartesianChart), - new PropertyMetadata(LiveCharts.DefaultSettings.EasingFunction, OnDependencyPropertyChanged)); - - /// - /// The legend position property - /// - public static readonly DependencyProperty LegendPositionProperty = - DependencyProperty.Register( - nameof(LegendPosition), typeof(LegendPosition), typeof(CartesianChart), - new PropertyMetadata(LiveCharts.DefaultSettings.LegendPosition, OnDependencyPropertyChanged)); - - /// - /// The legend background paint property - /// - public static readonly DependencyProperty LegendBackgroundPaintProperty = - DependencyProperty.Register( - nameof(LegendBackgroundPaint), typeof(IPaint), typeof(CartesianChart), - new PropertyMetadata(LiveCharts.DefaultSettings.LegendBackgroundPaint, OnDependencyPropertyChanged)); - - /// - /// The legend text paint property - /// - public static readonly DependencyProperty LegendTextPaintProperty = - DependencyProperty.Register( - nameof(LegendTextPaint), typeof(IPaint), typeof(CartesianChart), - new PropertyMetadata(LiveCharts.DefaultSettings.LegendTextPaint, OnDependencyPropertyChanged)); - - /// - /// The legend text size property - /// - public static readonly DependencyProperty LegendTextSizeProperty = - DependencyProperty.Register( - nameof(LegendTextSize), typeof(double?), typeof(CartesianChart), - new PropertyMetadata(LiveCharts.DefaultSettings.LegendTextSize, OnDependencyPropertyChanged)); - - /// - /// The tool tip position property - /// - public static readonly DependencyProperty TooltipPositionProperty = - DependencyProperty.Register( - nameof(TooltipPosition), typeof(TooltipPosition), typeof(CartesianChart), - new PropertyMetadata(LiveCharts.DefaultSettings.TooltipPosition, OnDependencyPropertyChanged)); - - /// - /// The tooltip background paint property - /// - public static readonly DependencyProperty TooltipBackgroundPaintProperty = - DependencyProperty.Register( - nameof(TooltipBackgroundPaint), typeof(IPaint), typeof(CartesianChart), - new PropertyMetadata(LiveCharts.DefaultSettings.TooltipBackgroundPaint, OnDependencyPropertyChanged)); - - /// - /// The tooltip text paint property - /// - public static readonly DependencyProperty TooltipTextPaintProperty = - DependencyProperty.Register( - nameof(TooltipTextPaint), typeof(IPaint), typeof(CartesianChart), - new PropertyMetadata(LiveCharts.DefaultSettings.TooltipTextPaint, OnDependencyPropertyChanged)); - - /// - /// The tooltip text size property - /// - public static readonly DependencyProperty TooltipTextSizeProperty = - DependencyProperty.Register( - nameof(TooltipTextSize), typeof(double?), typeof(CartesianChart), - new PropertyMetadata(LiveCharts.DefaultSettings.TooltipTextSize, OnDependencyPropertyChanged)); - - /// - /// The update started command. - /// - public static readonly DependencyProperty UpdateStartedCommandProperty = - DependencyProperty.Register( - nameof(UpdateStartedCommand), typeof(ICommand), typeof(CartesianChart), - new PropertyMetadata(null)); - - /// - /// The pointer pressed command. - /// - public static readonly DependencyProperty PointerPressedCommandProperty = - DependencyProperty.Register( - nameof(PointerPressedCommand), typeof(ICommand), typeof(CartesianChart), - new PropertyMetadata(null)); - - /// - /// The pointer released command. - /// - public static readonly DependencyProperty PointerReleasedCommandProperty = - DependencyProperty.Register( - nameof(PointerReleasedCommand), typeof(ICommand), typeof(CartesianChart), - new PropertyMetadata(null)); - - /// - /// The pointer move command. - /// - public static readonly DependencyProperty PointerMoveCommandProperty = - DependencyProperty.Register( - nameof(PointerMoveCommand), typeof(ICommand), typeof(CartesianChart), - new PropertyMetadata(null)); - - /// - /// The data pointer down command property - /// - public static readonly DependencyProperty DataPointerDownCommandProperty = - DependencyProperty.Register( - nameof(DataPointerDownCommand), typeof(ICommand), typeof(CartesianChart), new PropertyMetadata(null)); - - /// - /// The chart point pointer down command property - /// - public static readonly DependencyProperty ChartPointPointerDownCommandProperty = - DependencyProperty.Register( - nameof(ChartPointPointerDownCommand), typeof(ICommand), typeof(CartesianChart), new PropertyMetadata(null)); - - /// - /// The chart point pointer down command property - /// - public static readonly DependencyProperty VisualElementsPointerDownCommandProperty = - DependencyProperty.Register( - nameof(VisualElementsPointerDownCommand), typeof(ICommand), typeof(CartesianChart), new PropertyMetadata(null)); - - #endregion - - #region events - - /// - public event ChartEventHandler? Measuring; - - /// - public event ChartEventHandler? UpdateStarted; - - /// - public event ChartEventHandler? UpdateFinished; - - /// - public event ChartPointsHandler? DataPointerDown; - - /// - public event ChartPointHandler? ChartPointPointerDown; - - /// - public event VisualElementsHandler? VisualElementsPointerDown; - - #endregion - - #region properties - - /// - bool IChartView.DesignerMode => Windows.ApplicationModel.DesignMode.DesignModeEnabled; - - /// - public IChart CoreChart => _core ?? throw new Exception("Core not set yet."); - - /// - public object SyncContext - { - get => GetValue(SyncContextProperty); - set => SetValue(SyncContextProperty, value); - } - - LvcColor IChartView.BackColor - { - get => Background is not SolidColorBrush b - ? new LvcColor() - : LvcColor.FromArgb(b.Color.A, b.Color.R, b.Color.G, b.Color.B); - set => SetValue(BackgroundProperty, new SolidColorBrush(Windows.UI.Color.FromArgb(value.A, value.R, value.G, value.B))); - } - - /// - public Margin DrawMargin - { - get => (Margin)GetValue(DrawMarginProperty); - set => SetValue(DrawMarginProperty, value); - } - - Margin? IChartView.DrawMargin - { - get => DrawMargin; - set => SetValue(DrawMarginProperty, value); - } - - LvcSize IChartView.ControlSize => _motionCanvas == null - ? throw new Exception("Canvas not found") - : new LvcSize { Width = (float)_motionCanvas.ActualWidth, Height = (float)_motionCanvas.ActualHeight }; - - /// - public MotionCanvas CoreCanvas => _motionCanvas == null ? throw new Exception("Canvas not found") : _motionCanvas.CanvasCore; - - CartesianChart ICartesianChartView.Core => - _core == null ? throw new Exception("core not found") : (CartesianChart)_core; - - /// - public VisualElement? Title - { - get => (VisualElement?)GetValue(TitleProperty); - set => SetValue(TitleProperty, value); - } - - /// - public IEnumerable Series - { - get => (IEnumerable)GetValue(SeriesProperty); - set => SetValue(SeriesProperty, value); - } - - /// - public IEnumerable XAxes - { - get => (IEnumerable)GetValue(XAxesProperty); - set => SetValue(XAxesProperty, value); - } - - /// - public IEnumerable YAxes - { - get => (IEnumerable)GetValue(YAxesProperty); - set => SetValue(YAxesProperty, value); - } - - /// - public IEnumerable> Sections - { - get => (IEnumerable>)GetValue(SectionsProperty); - set => SetValue(SectionsProperty, value); - } - - /// - public IEnumerable> VisualElements - { - get => (IEnumerable>)GetValue(VisualElementsProperty); - set => SetValue(VisualElementsProperty, value); - } - - /// - public DrawMarginFrame? DrawMarginFrame - { - get => (DrawMarginFrame)GetValue(DrawMarginFrameProperty); - set => SetValue(DrawMarginFrameProperty, value); - } - - /// - public ZoomAndPanMode ZoomMode - { - get => (ZoomAndPanMode)GetValue(ZoomModeProperty); - set => SetValue(ZoomModeProperty, value); - } - - ZoomAndPanMode ICartesianChartView.ZoomMode - { - get => ZoomMode; - set => SetValue(ZoomModeProperty, value); - } - - /// - public double ZoomingSpeed - { - get => (double)GetValue(ZoomingSpeedProperty); - set => SetValue(ZoomingSpeedProperty, value); - } - - double ICartesianChartView.ZoomingSpeed - { - get => ZoomingSpeed; - set => SetValue(ZoomingSpeedProperty, value); - } - - /// - public TooltipFindingStrategy TooltipFindingStrategy - { - get => (TooltipFindingStrategy)GetValue(TooltipFindingStrategyProperty); - set => SetValue(TooltipFindingStrategyProperty, value); - } - - /// - public TimeSpan AnimationsSpeed - { - get => (TimeSpan)GetValue(AnimationsSpeedProperty); - set => SetValue(AnimationsSpeedProperty, value); - } - - TimeSpan IChartView.AnimationsSpeed - { - get => AnimationsSpeed; - set => SetValue(AnimationsSpeedProperty, value); - } - - /// - public Func EasingFunction - { - get => (Func)GetValue(EasingFunctionProperty); - set => SetValue(EasingFunctionProperty, value); - } - - Func? IChartView.EasingFunction - { - get => EasingFunction; - set => SetValue(EasingFunctionProperty, value); - } - - /// - public LegendPosition LegendPosition - { - get => (LegendPosition)GetValue(LegendPositionProperty); - set => SetValue(LegendPositionProperty, value); - } - - /// - public TooltipPosition TooltipPosition - { - get => (TooltipPosition)GetValue(TooltipPositionProperty); - set => SetValue(TooltipPositionProperty, value); - } - - /// - public IPaint? TooltipBackgroundPaint - { - get => (IPaint?)GetValue(TooltipBackgroundPaintProperty); - set => SetValue(TooltipBackgroundPaintProperty, value); - } - - /// - public IPaint? TooltipTextPaint - { - get => (IPaint?)GetValue(TooltipTextPaintProperty); - set => SetValue(TooltipTextPaintProperty, value); - } - - /// - public double? TooltipTextSize - { - get => (double?)GetValue(TooltipTextSizeProperty); - set => SetValue(TooltipTextSizeProperty, value); - } - - /// - public IChartTooltip? Tooltip { get; set; } = new SKDefaultTooltip(); - - /// - public IPaint? LegendBackgroundPaint - { - get => (IPaint?)GetValue(LegendBackgroundPaintProperty); - set => SetValue(LegendBackgroundPaintProperty, value); - } - - /// - public IPaint? LegendTextPaint - { - get => (IPaint?)GetValue(LegendTextPaintProperty); - set => SetValue(LegendTextPaintProperty, value); - } - - /// - public double? LegendTextSize - { - get => (double?)GetValue(LegendTextSizeProperty); - set => SetValue(LegendTextSizeProperty, value); - } - - /// - public IChartLegend? Legend { get; set; } = new SKDefaultLegend(); - - /// - public bool AutoUpdateEnabled { get; set; } = true; - - /// - public TimeSpan UpdaterThrottler { get; set; } = LiveCharts.DefaultSettings.UpdateThrottlingTimeout; - - /// - /// Gets or sets a command to execute when the chart update started. - /// - public ICommand? UpdateStartedCommand - { - get => (ICommand?)GetValue(UpdateStartedCommandProperty); - set => SetValue(UpdateStartedCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer is pressed on the chart. - /// - public ICommand? PointerPressedCommand - { - get => (ICommand?)GetValue(PointerPressedCommandProperty); - set => SetValue(PointerPressedCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer is released on the chart. - /// - public ICommand? PointerReleasedCommand - { - get => (ICommand?)GetValue(PointerReleasedCommandProperty); - set => SetValue(PointerReleasedCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer moves over the chart. - /// - public ICommand? PointerMoveCommand - { - get => (ICommand?)GetValue(PointerMoveCommandProperty); - set => SetValue(PointerMoveCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer goes down on a data or data points. - /// - public ICommand DataPointerDownCommand - { - get => (ICommand)GetValue(DataPointerDownCommandProperty); - set => SetValue(DataPointerDownCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer goes down on a chart point. - /// - public ICommand ChartPointPointerDownCommand - { - get => (ICommand)GetValue(ChartPointPointerDownCommandProperty); - set => SetValue(ChartPointPointerDownCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer goes down on a chart point. - /// - public ICommand? VisualElementsPointerDownCommand - { - get => (ICommand?)GetValue(VisualElementsPointerDownCommandProperty); - set => SetValue(VisualElementsPointerDownCommandProperty, value); - } - - #endregion - - /// - [Obsolete("Use the ScalePixelsToData method instead.")] - public double[] ScaleUIPoint(LvcPoint point, int xAxisIndex = 0, int yAxisIndex = 0) - { - if (_core == null) throw new Exception("core not found"); - var cartesianCore = (CartesianChart)_core; - return cartesianCore.ScaleUIPoint(point, xAxisIndex, yAxisIndex); - } - - /// - public LvcPointD ScalePixelsToData(LvcPointD point, int xAxisIndex = 0, int yAxisIndex = 0) - { - if (_core is not CartesianChart cc) throw new Exception("core not found"); - var xScaler = new Scaler(cc.DrawMarginLocation, cc.DrawMarginSize, cc.XAxes[xAxisIndex]); - var yScaler = new Scaler(cc.DrawMarginLocation, cc.DrawMarginSize, cc.YAxes[yAxisIndex]); - - return new LvcPointD { X = xScaler.ToChartValues(point.X), Y = yScaler.ToChartValues(point.Y) }; - } - - /// - public LvcPointD ScaleDataToPixels(LvcPointD point, int xAxisIndex = 0, int yAxisIndex = 0) - { - if (_core is not CartesianChart cc) throw new Exception("core not found"); - - var xScaler = new Scaler(cc.DrawMarginLocation, cc.DrawMarginSize, cc.XAxes[xAxisIndex]); - var yScaler = new Scaler(cc.DrawMarginLocation, cc.DrawMarginSize, cc.YAxes[yAxisIndex]); - - return new LvcPointD { X = xScaler.ToPixels(point.X), Y = yScaler.ToPixels(point.Y) }; - } - - /// - public IEnumerable GetPointsAt(LvcPoint point, TooltipFindingStrategy strategy = TooltipFindingStrategy.Automatic) - { - if (_core is not CartesianChart cc) throw new Exception("core not found"); - - if (strategy == TooltipFindingStrategy.Automatic) - strategy = cc.Series.GetTooltipFindingStrategy(); - - return cc.Series.SelectMany(series => series.FindHitPoints(cc, point, strategy)); - } - - /// - public IEnumerable> GetVisualsAt(LvcPoint point) - { - return _core is not CartesianChart cc - ? throw new Exception("core not found") - : cc.VisualElements.SelectMany(visual => ((VisualElement)visual).IsHitBy(_core, point)); - } - - void IChartView.InvokeOnUIThread(Action action) - { - UnoPlatformHelpers.InvokeOnUIThread(action); - } - - private void OnLoaded(object sender, RoutedEventArgs e) - { - var canvas = (MotionCanvas)FindName("motionCanvas"); - - _motionCanvas = canvas; - - if (_core is null) - { - var zoomingSection = new Drawing.Geometries.RectangleGeometry(); - var zoomingSectionPaint = new SolidColorPaint - { - IsFill = true, - Color = new SkiaSharp.SKColor(33, 150, 243, 50), - ZIndex = int.MaxValue - }; - zoomingSectionPaint.AddGeometryToPaintTask(canvas.CanvasCore, zoomingSection); - canvas.CanvasCore.AddDrawableTask(zoomingSectionPaint); - - _core = new CartesianChart( - this, config => config.UseDefaults(), canvas.CanvasCore, zoomingSection); - - if (SyncContext != null) - _motionCanvas.CanvasCore.Sync = SyncContext; - - if (_core == null) throw new Exception("Core not found!"); - _core.Measuring += OnCoreMeasuring; - _core.UpdateStarted += OnCoreUpdateStarted; - _core.UpdateFinished += OnCoreUpdateFinished; - - SizeChanged += OnSizeChanged; - - var chartBehaviour = new Behaviours.ChartBehaviour(); - - chartBehaviour.Pressed += OnPressed; - chartBehaviour.Moved += OnMoved; - chartBehaviour.Released += OnReleased; - chartBehaviour.Scrolled += OnScrolled; - chartBehaviour.Pinched += OnPinched; - chartBehaviour.Exited += OnExited; - - chartBehaviour.On(this); - } - - _core.Load(); - _core.Update(); - } - - private void OnDeepCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e) - { - _core?.Update(); - } - - private void OnDeepCollectionPropertyChanged(object? sender, PropertyChangedEventArgs e) - { - _core?.Update(); - } - - private void OnSizeChanged(object? sender, SizeChangedEventArgs e) - { - if (_core == null) throw new Exception("Core not found!"); - _core.Update(); - } - - private void OnPressed(object? sender, Behaviours.Events.PressedEventArgs args) - { - // is this working on all platforms? - //if (args.KeyModifiers > 0) return; - - var cArgs = new PointerCommandArgs(this, new(args.Location.X, args.Location.Y), args); - if (PointerPressedCommand?.CanExecute(cArgs) == true) PointerPressedCommand.Execute(cArgs); - - _core?.InvokePointerDown(args.Location, args.IsSecondaryPress); - } - - private void OnMoved(object? sender, Behaviours.Events.ScreenEventArgs args) - { - var location = args.Location; - - var cArgs = new PointerCommandArgs(this, new(location.X, location.Y), args.OriginalEvent); - if (PointerMoveCommand?.CanExecute(cArgs) == true) PointerMoveCommand.Execute(cArgs); - - _core?.InvokePointerMove(location); - } - - private void OnReleased(object? sender, Behaviours.Events.PressedEventArgs args) - { - var cArgs = new PointerCommandArgs(this, new(args.Location.X, args.Location.Y), args); - if (PointerReleasedCommand?.CanExecute(cArgs) == true) PointerReleasedCommand.Execute(cArgs); - - _core?.InvokePointerUp(args.Location, args.IsSecondaryPress); - } - - private void OnScrolled(object? sender, Behaviours.Events.ScrollEventArgs args) - { - if (_core is null) throw new Exception("core not found"); - var c = (CartesianChart)_core; - c.Zoom(args.Location, args.ScrollDelta > 0 ? ZoomDirection.ZoomIn : ZoomDirection.ZoomOut); - } - - private void OnPinched(object? sender, Behaviours.Events.PinchEventArgs args) - { - if (_core is null) return; - - var c = (CartesianChart)_core; - var p = args.PinchStart; - var s = c.ControlSize; - var pivot = new LvcPoint((float)(p.X * s.Width), (float)(p.Y * s.Height)); - c.Zoom(pivot, ZoomDirection.DefinedByScaleFactor, args.Scale, true); - } - - private void OnExited(object? sender, Behaviours.Events.EventArgs args) - { - _core?.InvokePointerLeft(); - } - - private void OnCoreUpdateFinished(IChartView chart) - { - UpdateFinished?.Invoke(this); - } - - private void OnCoreUpdateStarted(IChartView chart) - { - if (UpdateStartedCommand is not null) - { - var args = new ChartCommandArgs(this); - if (UpdateStartedCommand.CanExecute(args)) UpdateStartedCommand.Execute(args); - } - - UpdateStarted?.Invoke(this); - } - - private void OnCoreMeasuring(IChartView chart) - { - Measuring?.Invoke(this); - } - - private void OnUnloaded(object? sender, RoutedEventArgs e) - { - _core?.Unload(); - } - - private static void OnDependencyPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs args) - { - var chart = (CartesianChart)o; - if (chart._core == null) return; - - chart._core.Update(); - } - - void IChartView.OnDataPointerDown(IEnumerable points, LvcPoint pointer) - { - DataPointerDown?.Invoke(this, points); - if (DataPointerDownCommand is not null && DataPointerDownCommand.CanExecute(points)) DataPointerDownCommand.Execute(points); - - var closest = points.FindClosestTo(pointer); - ChartPointPointerDown?.Invoke(this, closest); - if (ChartPointPointerDownCommand is not null && ChartPointPointerDownCommand.CanExecute(closest)) ChartPointPointerDownCommand.Execute(closest); - } - - void IChartView.OnVisualElementPointerDown( - IEnumerable> visualElements, LvcPoint pointer) - { - var args = new VisualElementsEventArgs(CoreChart, visualElements, pointer); - - VisualElementsPointerDown?.Invoke(this, args); - if (VisualElementsPointerDownCommand is not null && VisualElementsPointerDownCommand.CanExecute(args)) - VisualElementsPointerDownCommand.Execute(args); - } - - void IChartView.Invalidate() - { - CoreCanvas.Invalidate(); - } -} diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/GeoMap.xaml b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/GeoMap.xaml deleted file mode 100644 index ab54524fe..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/GeoMap.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/GeoMap.xaml.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/GeoMap.xaml.cs deleted file mode 100644 index 86ccd459f..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/GeoMap.xaml.cs +++ /dev/null @@ -1,279 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.ComponentModel; -using System.Linq; -using LiveChartsCore.Drawing; -using LiveChartsCore.Geo; -using LiveChartsCore.Kernel; -using LiveChartsCore.Measure; -using LiveChartsCore.Motion; -using LiveChartsCore.SkiaSharpView.Drawing; -using LiveChartsCore.SkiaSharpView.Painting; -using LiveChartsCore.SkiaSharpView.Uno.Helpers; -using SkiaSharp; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Input; - -namespace LiveChartsCore.SkiaSharpView.Uno; - -/// -/// Defines a geographic map. -/// -public sealed partial class GeoMap : UserControl, IGeoMapView -{ - private CollectionDeepObserver _seriesObserver; - private readonly GeoMap _core; - - /// - /// Initializes a new instance of the class. - /// - public GeoMap() - { - InitializeComponent(); - LiveCharts.Configure(config => config.UseDefaults()); - _core = new GeoMap(this); - - PointerPressed += OnPointerPressed; - PointerMoved += OnPointerMoved; - PointerReleased += OnPointerReleased; - PointerWheelChanged += OnWheelChanged; - PointerExited += OnPointerExited; - - SizeChanged += GeoMap_SizeChanged; - - _seriesObserver = new CollectionDeepObserver( - (object sender, NotifyCollectionChangedEventArgs e) => _core?.Update(), - (object sender, PropertyChangedEventArgs e) => _core.Update(), - true); - - SetValue(SeriesProperty, Enumerable.Empty()); - SetValue(ActiveMapProperty, Maps.GetWorldMap()); - SetValue(SyncContextProperty, new object()); - - Unloaded += GeoMap_Unloaded; - } - - #region dependency props - - /// - /// The active map property - /// - public static readonly DependencyProperty ActiveMapProperty = - DependencyProperty.Register(nameof(ActiveMap), typeof(CoreMap), typeof(GeoMap), - new PropertyMetadata(null, OnDependencyPropertyChanged)); - - /// - /// The sync context property. - /// - public static readonly DependencyProperty SyncContextProperty = - DependencyProperty.Register( - nameof(SyncContext), typeof(object), typeof(GeoMap), new PropertyMetadata(null, OnDependencyPropertyChanged)); - - /// - /// The view command property. - /// - public static readonly DependencyProperty ViewCommandProperty = - DependencyProperty.Register( - nameof(ViewCommand), typeof(object), typeof(GeoMap), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (GeoMap)o; - chart._core.ViewTo(args.NewValue); - })); - - /// - /// The map projection property - /// - public static readonly DependencyProperty MapProjectionProperty = - DependencyProperty.Register(nameof(MapProjection), typeof(MapProjection), typeof(GeoMap), - new PropertyMetadata(MapProjection.Default, OnDependencyPropertyChanged)); - - /// - /// The series property - /// - public static readonly DependencyProperty SeriesProperty = - DependencyProperty.Register(nameof(Series), typeof(IEnumerable), - typeof(GeoMap), new PropertyMetadata(null, (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (GeoMap)o; - var seriesObserver = chart._seriesObserver; - seriesObserver?.Dispose((IEnumerable)args.OldValue); - seriesObserver?.Initialize((IEnumerable)args.NewValue); - chart._core.Update(); - })); - - /// - /// The stroke property - /// - public static readonly DependencyProperty StrokeProperty = - DependencyProperty.Register( - nameof(Stroke), typeof(IPaint), typeof(GeoMap), - new PropertyMetadata(new SolidColorPaint(new SKColor(255, 255, 255, 255)) { IsStroke = true }, OnDependencyPropertyChanged)); - - /// - /// The fill property - /// - public static readonly DependencyProperty FillProperty = - DependencyProperty.Register( - nameof(Fill), typeof(IPaint), typeof(GeoMap), - new PropertyMetadata(new SolidColorPaint(new SKColor(240, 240, 240, 255)) { IsFill = true }, OnDependencyPropertyChanged)); - - #endregion - - #region properties - - /// - public bool AutoUpdateEnabled { get; set; } = true; - - /// - bool IGeoMapView.DesignerMode => Windows.ApplicationModel.DesignMode.DesignModeEnabled; - - /// - public object SyncContext - { - get => GetValue(SyncContextProperty); - set => SetValue(SyncContextProperty, value); - } - - /// - public object? ViewCommand - { - get => GetValue(ViewCommandProperty); - set => SetValue(ViewCommandProperty, value); - } - - /// - public MotionCanvas Canvas => canvas.CanvasCore; - - /// - public CoreMap ActiveMap - { - get => (CoreMap)GetValue(ActiveMapProperty); - set => SetValue(ActiveMapProperty, value); - } - - /// - float IGeoMapView.Width => (float)ActualWidth; - - /// - float IGeoMapView.Height => (float)ActualHeight; - - /// - public MapProjection MapProjection - { - get => (MapProjection)GetValue(MapProjectionProperty); - set => SetValue(MapProjectionProperty, value); - } - - /// - public IPaint? Stroke - { - get => (IPaint)GetValue(StrokeProperty); - set - { - if (value is not null) value.IsStroke = true; - SetValue(StrokeProperty, value); - } - } - - /// - public IPaint? Fill - { - get => (IPaint)GetValue(FillProperty); - set - { - if (value is not null) value.IsFill = true; - SetValue(FillProperty, value); - } - } - - /// - public IEnumerable Series - { - get => (IEnumerable)GetValue(SeriesProperty); - set => SetValue(SeriesProperty, value); - } - - #endregion - - void IGeoMapView.InvokeOnUIThread(Action action) - { - UnoPlatformHelpers.InvokeOnUIThread(action); - } - - private void GeoMap_SizeChanged(object sender, SizeChangedEventArgs e) - { - _core.Update(); - } - - private void GeoMap_Unloaded(object sender, RoutedEventArgs e) - { - _core.Unload(); - } - - private void OnPointerPressed(object sender, PointerRoutedEventArgs e) - { - _ = CapturePointer(e.Pointer); - var p = e.GetCurrentPoint(this); - _core?.InvokePointerDown(new LvcPoint((float)p.Position.X, (float)p.Position.Y)); - } - - private void OnPointerMoved(object sender, PointerRoutedEventArgs e) - { - var p = e.GetCurrentPoint(this); - _core?.InvokePointerMove(new LvcPoint((float)p.Position.X, (float)p.Position.Y)); - } - - private void OnPointerReleased(object sender, PointerRoutedEventArgs e) - { - var p = e.GetCurrentPoint(this); - _core?.InvokePointerUp(new LvcPoint((float)p.Position.X, (float)p.Position.Y)); - ReleasePointerCapture(e.Pointer); - } - - private void OnPointerExited(object sender, PointerRoutedEventArgs e) - { - _core?.InvokePointerLeft(); - } - - private void OnWheelChanged(object sender, PointerRoutedEventArgs e) - { - if (_core == null) throw new Exception("core not found"); - var p = e.GetCurrentPoint(this); - - _core.ViewTo( - new ZoomOnPointerView( - new LvcPoint((float)p.Position.X, (float)p.Position.Y), - p.Properties.MouseWheelDelta > 0 ? ZoomDirection.ZoomIn : ZoomDirection.ZoomOut)); - } - - private static void OnDependencyPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs args) - { - var chart = (GeoMap)o; - chart._core.Update(); - } -} diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Helpers/UnoPlatformHelpers.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Helpers/UnoPlatformHelpers.cs deleted file mode 100644 index 6937a5b23..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Helpers/UnoPlatformHelpers.cs +++ /dev/null @@ -1,57 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using System; -using System.Runtime.InteropServices; -using Windows.ApplicationModel.Core; -using Windows.UI.Core; - -namespace LiveChartsCore.SkiaSharpView.Uno.Helpers; - -// based on https://youtu.be/RInO5Jqru4s?t=4083 - -/// -/// Defines Uno platform helpers. -/// -public static class UnoPlatformHelpers -{ - /// - /// Determines whether the assembly is running in web assembly. - /// - public static bool IsWebAssembly { get; } = RuntimeInformation.IsOSPlatform(OSPlatform.Create("BROWSER")); - - /// - /// Invokes a given acction in the UI thread. - /// - /// The action. - public static void InvokeOnUIThread(Action action) - { - if (IsWebAssembly) - { - action(); - return; - } - - _ = CoreApplication.MainView.CoreWindow.Dispatcher - .RunAsync(CoreDispatcherPriority.High, () => action()); - } -} diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/LiveChartsCore.SkiaSharpView.Uno.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/LiveChartsCore.SkiaSharpView.Uno.csproj deleted file mode 100644 index a59c51f93..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/LiveChartsCore.SkiaSharpView.Uno.csproj +++ /dev/null @@ -1,69 +0,0 @@ - - - - uap10.0.18362;netstandard2.0;net6.0-ios;net6.0-macos;net6.0-maccatalyst;net6.0-android - - 14.2 - 14.0 - 21.0 - 10.0.18362.0 - 10.0.18362.0 - - - true - - enable - 11.0 - 2.0.0-rc2 - icon.png - Simple, flexible, interactive and powerful data visualization for Uno. - MIT - BetoRodriguez - true - snupkg - https://github.com/beto-rodriguez/LiveCharts2 - Properties - LiveChartsCore.SkiaSharpView.Uno - LiveChartsCore.SkiaSharpView.Uno - en-US - bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml - - - - - - 2.88.6 - - - - - - - - - - - - - - - - %(Filename) - - - - - - - - - - - - - - - diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/MotionCanvas.xaml b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/MotionCanvas.xaml deleted file mode 100644 index 264024e58..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/MotionCanvas.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - - diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/MotionCanvas.xaml.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/MotionCanvas.xaml.cs deleted file mode 100644 index 18965e7c2..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/MotionCanvas.xaml.cs +++ /dev/null @@ -1,150 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using LiveChartsCore.Drawing; -using LiveChartsCore.Kernel; -using LiveChartsCore.Motion; -using LiveChartsCore.SkiaSharpView.Drawing; -using SkiaSharp.Views.UWP; -using Windows.Graphics.Display; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; - -namespace LiveChartsCore.SkiaSharpView.Uno; - -/// -public sealed partial class MotionCanvas : UserControl -{ - private readonly SKXamlCanvas _skiaElement; - private bool _isDrawingLoopRunning; - - /// - /// Initializes a new instance of the class. - /// - public MotionCanvas() - { - InitializeComponent(); - Loaded += OnLoaded; - Unloaded += OnUnloaded; - - var canvas = (SKXamlCanvas)FindName("canvas"); - _skiaElement = canvas; - _skiaElement.PaintSurface += OnPaintSurface; - } - - #region properties - - /// - /// The paint tasks property - /// - public static readonly DependencyProperty PaintTasksProperty = - DependencyProperty.Register( - nameof(PaintTasks), typeof(List>), typeof(MotionCanvas), - new PropertyMetadata(new List>(), new PropertyChangedCallback(OnPaintTaskChanged))); - - /// - /// Gets or sets the paint tasks. - /// - /// - /// The paint tasks. - /// - public List> PaintTasks - { - get => (List>)GetValue(PaintTasksProperty); - set => SetValue(PaintTasksProperty, value); - } - - /// - /// Gets or sets the frames per second. - /// - /// - /// The frames per second. - /// - public double MaxFps { get; set; } = 60; - - /// - /// Gets the canvas core. - /// - /// - /// The canvas core. - /// - public MotionCanvas CanvasCore { get; } = new(); - - #endregion - - private void OnLoaded(object sender, RoutedEventArgs e) - { - CanvasCore.Invalidated += OnCanvasCoreInvalidated; - } - - private void OnPaintSurface(object? sender, SKPaintSurfaceEventArgs args) - { - var scale = DisplayInformation.GetForCurrentView().LogicalDpi / 96.0f; - args.Surface.Canvas.Scale((float)scale, (float)scale); - CanvasCore.DrawFrame(new SkiaSharpDrawingContext(CanvasCore, args.Info, args.Surface, args.Surface.Canvas)); - } - - private async void RunDrawingLoop() - { - if (_isDrawingLoopRunning || _skiaElement == null) return; - _isDrawingLoopRunning = true; - - var ts = TimeSpan.FromSeconds(1 / MaxFps); - while (!CanvasCore.IsValid) - { - _skiaElement.Invalidate(); - await Task.Delay(ts); - } - - _isDrawingLoopRunning = false; - } - - private void OnCanvasCoreInvalidated(MotionCanvas sender) - { - RunDrawingLoop(); - } - - private static void OnPaintTaskChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) - { - var motionCanvas = (MotionCanvas)sender; - - var tasks = new HashSet>(); - - foreach (var item in motionCanvas.PaintTasks ?? Enumerable.Empty>()) - { - item.PaintTask.SetGeometries(motionCanvas.CanvasCore, item.Geometries); - _ = tasks.Add(item.PaintTask); - } - - motionCanvas.CanvasCore.SetPaintTasks(tasks); - } - - private void OnUnloaded(object sender, RoutedEventArgs e) - { - CanvasCore.Invalidated -= OnCanvasCoreInvalidated; - CanvasCore.Dispose(); - } -} diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PieChart.xaml b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PieChart.xaml deleted file mode 100644 index ba406b29a..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PieChart.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PieChart.xaml.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PieChart.xaml.cs deleted file mode 100644 index c75e965b8..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PieChart.xaml.cs +++ /dev/null @@ -1,770 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Collections.Specialized; -using System.ComponentModel; -using System.Linq; -using System.Windows.Input; -using LiveChartsCore.Drawing; -using LiveChartsCore.Kernel; -using LiveChartsCore.Kernel.Events; -using LiveChartsCore.Kernel.Sketches; -using LiveChartsCore.Measure; -using LiveChartsCore.Motion; -using LiveChartsCore.SkiaSharpView.Drawing; -using LiveChartsCore.SkiaSharpView.SKCharts; -using LiveChartsCore.SkiaSharpView.Uno.Helpers; -using LiveChartsCore.VisualElements; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Media; - -namespace LiveChartsCore.SkiaSharpView.Uno; - -/// -public sealed partial class PieChart : UserControl, IPieChartView -{ - private Chart? _core; - private MotionCanvas? _canvas; - private readonly CollectionDeepObserver _seriesObserver; - private readonly CollectionDeepObserver> _visualsObserver; - - /// - /// Initializes a new instance of the class. - /// - public PieChart() - { - LiveCharts.Configure(config => config.UseDefaults()); - - InitializeComponent(); - - _seriesObserver = new CollectionDeepObserver( - (object? sender, NotifyCollectionChangedEventArgs e) => _core?.Update(), - (object? sender, PropertyChangedEventArgs e) => _core?.Update()); - _visualsObserver = new CollectionDeepObserver>( - (object? sender, NotifyCollectionChangedEventArgs e) => _core?.Update(), - (object? sender, PropertyChangedEventArgs e) => _core?.Update()); - - SetValue(SeriesProperty, new ObservableCollection()); - SetValue(VisualElementsProperty, new ObservableCollection>()); - SetValue(SyncContextProperty, new object()); - - Loaded += OnLoaded; - Unloaded += OnUnloaded; - } - - #region dependency properties - - /// - /// The title property - /// - public static readonly DependencyProperty TitleProperty = - DependencyProperty.Register( - nameof(Title), typeof(VisualElement), typeof(PieChart), new PropertyMetadata(null)); - - /// - /// The series property - /// - public static readonly DependencyProperty SeriesProperty = - DependencyProperty.Register( - nameof(Series), typeof(IEnumerable), typeof(PieChart), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (PieChart)o; - var seriesObserver = chart._seriesObserver; - seriesObserver?.Dispose((IEnumerable)args.OldValue); - seriesObserver?.Initialize((IEnumerable)args.NewValue); - if (chart._core == null) return; - chart._core.Update(); - })); - - /// - /// The visual elements property - /// - public static readonly DependencyProperty VisualElementsProperty = - DependencyProperty.Register( - nameof(VisualElements), typeof(IEnumerable>), typeof(PieChart), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (PieChart)o; - var observer = chart._visualsObserver; - observer?.Dispose((IEnumerable>)args.OldValue); - observer?.Initialize((IEnumerable>)args.NewValue); - if (chart._core == null) return; - chart._core.Update(); - })); - - /// - /// The sync context property - /// - public static readonly DependencyProperty SyncContextProperty = - DependencyProperty.Register( - nameof(SyncContext), typeof(object), typeof(PieChart), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (PieChart)o; - if (chart._canvas != null) chart.CoreCanvas.Sync = args.NewValue; - if (chart._core == null) return; - chart._core.Update(); - })); - - /// - /// The IsClockwise property - /// - public static readonly DependencyProperty IsClockwiseProperty = - DependencyProperty.Register( - nameof(IsClockwise), typeof(bool), typeof(PieChart), new PropertyMetadata(true, OnDependencyPropertyChanged)); - - /// - /// The initial rotation property - /// - public static readonly DependencyProperty InitialRotationProperty = - DependencyProperty.Register( - nameof(InitialRotation), typeof(double), typeof(PieChart), new PropertyMetadata(0d, OnDependencyPropertyChanged)); - - /// - /// The maximum angle property - /// - public static readonly DependencyProperty MaxAngleProperty = - DependencyProperty.Register( - nameof(MaxAngle), typeof(double), typeof(PieChart), new PropertyMetadata(360d, OnDependencyPropertyChanged)); - - /// - /// The total property - /// - public static readonly DependencyProperty MaxValueProperty = - DependencyProperty.Register( - nameof(MaxValue), typeof(double?), typeof(PieChart), new PropertyMetadata(null, OnDependencyPropertyChanged)); - - /// - /// The start property - /// - public static readonly DependencyProperty MinValueProperty = - DependencyProperty.Register( - nameof(MinValue), typeof(double), typeof(PieChart), new PropertyMetadata(0d, OnDependencyPropertyChanged)); - - /// - /// The draw margin property - /// - public static readonly DependencyProperty DrawMarginProperty = - DependencyProperty.Register( - nameof(DrawMargin), typeof(Margin), typeof(PieChart), new PropertyMetadata(null, OnDependencyPropertyChanged)); - - /// - /// The animations speed property - /// - public static readonly DependencyProperty AnimationsSpeedProperty = - DependencyProperty.Register( - nameof(AnimationsSpeed), typeof(TimeSpan), typeof(PieChart), - new PropertyMetadata(LiveCharts.DefaultSettings.AnimationsSpeed, OnDependencyPropertyChanged)); - - /// - /// The easing function property - /// - public static readonly DependencyProperty EasingFunctionProperty = - DependencyProperty.Register( - nameof(EasingFunction), typeof(Func), typeof(PieChart), - new PropertyMetadata(LiveCharts.DefaultSettings.EasingFunction, OnDependencyPropertyChanged)); - - /// - /// The legend position property - /// - public static readonly DependencyProperty LegendPositionProperty = - DependencyProperty.Register( - nameof(LegendPosition), typeof(LegendPosition), typeof(PieChart), - new PropertyMetadata(LiveCharts.DefaultSettings.LegendPosition, OnDependencyPropertyChanged)); - - /// - /// The legend background paint property - /// - public static readonly DependencyProperty LegendBackgroundPaintProperty = - DependencyProperty.Register( - nameof(LegendBackgroundPaint), typeof(IPaint), typeof(PieChart), - new PropertyMetadata(LiveCharts.DefaultSettings.LegendBackgroundPaint, OnDependencyPropertyChanged)); - - /// - /// The legend text paint property - /// - public static readonly DependencyProperty LegendTextPaintProperty = - DependencyProperty.Register( - nameof(LegendTextPaint), typeof(IPaint), typeof(PieChart), - new PropertyMetadata(LiveCharts.DefaultSettings.LegendTextPaint, OnDependencyPropertyChanged)); - - /// - /// The legend text size property - /// - public static readonly DependencyProperty LegendTextSizeProperty = - DependencyProperty.Register( - nameof(LegendTextSize), typeof(double?), typeof(PieChart), - new PropertyMetadata(LiveCharts.DefaultSettings.LegendTextSize, OnDependencyPropertyChanged)); - - /// - /// The tool tip position property - /// - public static readonly DependencyProperty TooltipPositionProperty = - DependencyProperty.Register( - nameof(TooltipPosition), typeof(TooltipPosition), typeof(PieChart), - new PropertyMetadata(LiveCharts.DefaultSettings.TooltipPosition, OnDependencyPropertyChanged)); - - /// - /// The tooltip background paint property - /// - public static readonly DependencyProperty TooltipBackgroundPaintProperty = - DependencyProperty.Register( - nameof(TooltipBackgroundPaint), typeof(IPaint), typeof(PieChart), - new PropertyMetadata(LiveCharts.DefaultSettings.TooltipBackgroundPaint, OnDependencyPropertyChanged)); - - /// - /// The tooltip text paint property - /// - public static readonly DependencyProperty TooltipTextPaintProperty = - DependencyProperty.Register( - nameof(TooltipTextPaint), typeof(IPaint), typeof(PieChart), - new PropertyMetadata(LiveCharts.DefaultSettings.TooltipTextPaint, OnDependencyPropertyChanged)); - - /// - /// The tooltip text size property - /// - public static readonly DependencyProperty TooltipTextSizeProperty = - DependencyProperty.Register( - nameof(TooltipTextSize), typeof(double?), typeof(PieChart), - new PropertyMetadata(LiveCharts.DefaultSettings.TooltipTextSize, OnDependencyPropertyChanged)); - - /// - /// The update started command. - /// - public static readonly DependencyProperty UpdateStartedCommandProperty = - DependencyProperty.Register( - nameof(UpdateStartedCommand), typeof(ICommand), typeof(PieChart), - new PropertyMetadata(null)); - - /// - /// The pointer pressed command. - /// - public static readonly DependencyProperty PointerPressedCommandProperty = - DependencyProperty.Register( - nameof(PointerPressedCommand), typeof(ICommand), typeof(PieChart), - new PropertyMetadata(null)); - - /// - /// The pointer released command. - /// - public static readonly DependencyProperty PointerReleasedCommandProperty = - DependencyProperty.Register( - nameof(PointerReleasedCommand), typeof(ICommand), typeof(PieChart), - new PropertyMetadata(null)); - - /// - /// The pointer move command. - /// - public static readonly DependencyProperty PointerMoveCommandProperty = - DependencyProperty.Register( - nameof(PointerMoveCommand), typeof(ICommand), typeof(PieChart), - new PropertyMetadata(null)); - - /// - /// The data pointer down command property - /// - public static readonly DependencyProperty DataPointerDownCommandProperty = - DependencyProperty.Register( - nameof(DataPointerDownCommand), typeof(ICommand), typeof(PieChart), new PropertyMetadata(null)); - - /// - /// The data pointer down command property - /// - public static readonly DependencyProperty ChartPointPointerDownCommandProperty = - DependencyProperty.Register( - nameof(ChartPointPointerDownCommand), typeof(ICommand), typeof(PieChart), new PropertyMetadata(null)); - - /// - /// The chart point pointer down command property - /// - public static readonly DependencyProperty VisualElementsPointerDownCommandProperty = - DependencyProperty.Register( - nameof(VisualElementsPointerDownCommand), typeof(ICommand), typeof(PieChart), new PropertyMetadata(null)); - - #endregion - - #region events - - /// - public event ChartEventHandler? Measuring; - - /// - public event ChartEventHandler? UpdateStarted; - - /// - public event ChartEventHandler? UpdateFinished; - - /// - public event ChartPointsHandler? DataPointerDown; - - /// - public event ChartPointHandler? ChartPointPointerDown; - - /// - public event VisualElementsHandler? VisualElementsPointerDown; - - #endregion - - #region properties - - /// - bool IChartView.DesignerMode => Windows.ApplicationModel.DesignMode.DesignModeEnabled; - - /// - public IChart CoreChart => _core ?? throw new Exception("Core not set yet."); - - PieChart IPieChartView.Core - => _core == null ? throw new Exception("core not found") : (PieChart)_core; - - LvcColor IChartView.BackColor - { - get => Background is not SolidColorBrush b - ? new LvcColor() - : LvcColor.FromArgb(b.Color.A, b.Color.R, b.Color.G, b.Color.B); - set => SetValue(BackgroundProperty, new SolidColorBrush(Windows.UI.Color.FromArgb(value.A, value.R, value.G, value.B))); - } - - /// - public object SyncContext - { - get => GetValue(SyncContextProperty); - set => SetValue(SyncContextProperty, value); - } - - /// - public VisualElement? Title - { - get => (VisualElement?)GetValue(TitleProperty); - set => SetValue(TitleProperty, value); - } - - /// - public IEnumerable Series - { - get => (IEnumerable)GetValue(SeriesProperty); - set => SetValue(SeriesProperty, value); - } - - /// - public IEnumerable> VisualElements - { - get => (IEnumerable>)GetValue(VisualElementsProperty); - set => SetValue(VisualElementsProperty, value); - } - - /// - public bool IsClockwise - { - get => (bool)GetValue(IsClockwiseProperty); - set => SetValue(IsClockwiseProperty, value); - } - - /// - public double InitialRotation - { - get => (double)GetValue(InitialRotationProperty); - set => SetValue(InitialRotationProperty, value); - } - - /// - public double MaxAngle - { - get => (double)GetValue(MaxAngleProperty); - set => SetValue(MaxAngleProperty, value); - } - - /// - [Obsolete($"Use {nameof(MaxValue)} instead.")] - public double? Total - { - get => (double?)GetValue(MaxValueProperty); - set => SetValue(MaxValueProperty, value); - } - - /// - public double? MaxValue - { - get => (double?)GetValue(MaxValueProperty); - set => SetValue(MaxValueProperty, value); - } - - /// - public double MinValue - { - get => (double)GetValue(MinValueProperty); - set => SetValue(MinValueProperty, value); - } - - /// - public Margin DrawMargin - { - get => (Margin)GetValue(DrawMarginProperty); - set => SetValue(DrawMarginProperty, value); - } - - Margin? IChartView.DrawMargin - { - get => DrawMargin; - set => SetValue(DrawMarginProperty, value); - } - - LvcSize IChartView.ControlSize => _canvas == null - ? throw new Exception("Canvas not found") - : new LvcSize { Width = (float)_canvas.ActualWidth, Height = (float)_canvas.ActualHeight }; - - /// - public MotionCanvas CoreCanvas => _canvas == null ? throw new Exception("Canvas not found") : _canvas.CanvasCore; - - /// - public TimeSpan AnimationsSpeed - { - get => (TimeSpan)GetValue(AnimationsSpeedProperty); - set => SetValue(AnimationsSpeedProperty, value); - } - - TimeSpan IChartView.AnimationsSpeed - { - get => AnimationsSpeed; - set => SetValue(AnimationsSpeedProperty, value); - } - - /// - public Func EasingFunction - { - get => (Func)GetValue(EasingFunctionProperty); - set => SetValue(EasingFunctionProperty, value); - } - - Func? IChartView.EasingFunction - { - get => EasingFunction; - set => SetValue(EasingFunctionProperty, value); - } - - /// - public LegendPosition LegendPosition - { - get => (LegendPosition)GetValue(LegendPositionProperty); - set => SetValue(LegendPositionProperty, value); - } - - /// - public TooltipPosition TooltipPosition - { - get => (TooltipPosition)GetValue(TooltipPositionProperty); - set => SetValue(TooltipPositionProperty, value); - } - - /// - public IPaint? TooltipBackgroundPaint - { - get => (IPaint?)GetValue(TooltipBackgroundPaintProperty); - set => SetValue(TooltipBackgroundPaintProperty, value); - } - - /// - public IPaint? TooltipTextPaint - { - get => (IPaint?)GetValue(TooltipTextPaintProperty); - set => SetValue(TooltipTextPaintProperty, value); - } - - /// - public double? TooltipTextSize - { - get => (double?)GetValue(TooltipTextSizeProperty); - set => SetValue(TooltipTextSizeProperty, value); - } - - /// - public IChartTooltip? Tooltip { get; set; } = new SKDefaultTooltip(); - - /// - public IPaint? LegendBackgroundPaint - { - get => (IPaint?)GetValue(LegendBackgroundPaintProperty); - set => SetValue(LegendBackgroundPaintProperty, value); - } - - /// - public IPaint? LegendTextPaint - { - get => (IPaint?)GetValue(LegendTextPaintProperty); - set => SetValue(LegendTextPaintProperty, value); - } - - /// - public double? LegendTextSize - { - get => (double?)GetValue(LegendTextSizeProperty); - set => SetValue(LegendTextSizeProperty, value); - } - - /// - public IChartLegend? Legend { get; set; } = new SKDefaultLegend(); - - /// - public bool AutoUpdateEnabled { get; set; } = true; - - /// - public TimeSpan UpdaterThrottler { get; set; } = LiveCharts.DefaultSettings.UpdateThrottlingTimeout; - - /// - /// Gets or sets a command to execute when the chart update started. - /// - public ICommand? UpdateStartedCommand - { - get => (ICommand?)GetValue(UpdateStartedCommandProperty); - set => SetValue(UpdateStartedCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer is pressed on the chart. - /// - public ICommand? PointerPressedCommand - { - get => (ICommand?)GetValue(PointerPressedCommandProperty); - set => SetValue(PointerPressedCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer is released on the chart. - /// - public ICommand? PointerReleasedCommand - { - get => (ICommand?)GetValue(PointerReleasedCommandProperty); - set => SetValue(PointerReleasedCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer moves over the chart. - /// - public ICommand? PointerMoveCommand - { - get => (ICommand?)GetValue(PointerMoveCommandProperty); - set => SetValue(PointerMoveCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer goes down on a data or data points. - /// - public ICommand DataPointerDownCommand - { - get => (ICommand)GetValue(DataPointerDownCommandProperty); - set => SetValue(DataPointerDownCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer goes down on a chart point. - /// - public ICommand ChartPointPointerDownCommand - { - get => (ICommand)GetValue(ChartPointPointerDownCommandProperty); - set => SetValue(ChartPointPointerDownCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer goes down on a chart point. - /// - public ICommand? VisualElementsPointerDownCommand - { - get => (ICommand?)GetValue(VisualElementsPointerDownCommandProperty); - set => SetValue(VisualElementsPointerDownCommandProperty, value); - } - - #endregion - - /// - public IEnumerable GetPointsAt(LvcPoint point, TooltipFindingStrategy strategy = TooltipFindingStrategy.Automatic) - { - if (_core is not PieChart cc) throw new Exception("core not found"); - - if (strategy == TooltipFindingStrategy.Automatic) - strategy = cc.Series.GetTooltipFindingStrategy(); - - return cc.Series.SelectMany(series => series.FindHitPoints(cc, point, strategy)); - } - - /// - public IEnumerable> GetVisualsAt(LvcPoint point) - { - return _core is not PieChart cc - ? throw new Exception("core not found") - : cc.VisualElements.SelectMany(visual => ((VisualElement)visual).IsHitBy(_core, point)); - } - - void IChartView.InvokeOnUIThread(Action action) - { - UnoPlatformHelpers.InvokeOnUIThread(action); - } - - private void OnLoaded(object sender, RoutedEventArgs e) - { - var canvas = (MotionCanvas)FindName("motionCanvas"); - _canvas = canvas; - - if (_core is null) - { - _core = new PieChart(this, config => config.UseDefaults(), canvas.CanvasCore); - - if (SyncContext != null) - _canvas.CanvasCore.Sync = SyncContext; - - if (_core == null) throw new Exception("Core not found!"); - _core.Update(); - - _core.Measuring += OnCoreMeasuring; - _core.UpdateStarted += OnCoreUpdateStarted; - _core.UpdateFinished += OnCoreUpdateFinished; - - SizeChanged += OnSizeChanged; - - var chartBehaviour = new Behaviours.ChartBehaviour(); - - chartBehaviour.Pressed += OnPressed; - chartBehaviour.Moved += OnMoved; - chartBehaviour.Released += OnReleased; - chartBehaviour.Pinched += OnPinched; - chartBehaviour.Exited += OnExited; - - chartBehaviour.On(this); - } - - _core.Load(); - _core.Update(); - } - - private void OnSizeChanged(object sender, SizeChangedEventArgs e) - { - if (_core == null) throw new Exception("Core not found!"); - _core.Update(); - } - - private void OnPressed(object? sender, Behaviours.Events.PressedEventArgs args) - { - // is this working on all platforms? - //if (args.KeyModifiers > 0) return; - - var cArgs = new PointerCommandArgs(this, new(args.Location.X, args.Location.Y), args); - if (PointerPressedCommand?.CanExecute(cArgs) == true) PointerPressedCommand.Execute(cArgs); - - _core?.InvokePointerDown(args.Location, args.IsSecondaryPress); - } - - private void OnMoved(object? sender, Behaviours.Events.ScreenEventArgs args) - { - var location = args.Location; - - var cArgs = new PointerCommandArgs(this, new(location.X, location.Y), args.OriginalEvent); - if (PointerMoveCommand?.CanExecute(cArgs) == true) PointerMoveCommand.Execute(cArgs); - - _core?.InvokePointerMove(location); - } - - private void OnReleased(object? sender, Behaviours.Events.PressedEventArgs args) - { - var cArgs = new PointerCommandArgs(this, new(args.Location.X, args.Location.Y), args); - if (PointerReleasedCommand?.CanExecute(cArgs) == true) PointerReleasedCommand.Execute(cArgs); - - _core?.InvokePointerUp(args.Location, args.IsSecondaryPress); - } - - private void OnPinched(object? sender, Behaviours.Events.PinchEventArgs args) - { - if (_core is null) return; - - var c = (CartesianChart)_core; - var p = args.PinchStart; - var s = c.ControlSize; - var pivot = new LvcPoint((float)(p.X * s.Width), (float)(p.Y * s.Height)); - c.Zoom(pivot, ZoomDirection.DefinedByScaleFactor, args.Scale, true); - } - - private void OnExited(object? sender, Behaviours.Events.EventArgs args) - { - _core?.InvokePointerLeft(); - } - - private void OnCoreUpdateFinished(IChartView chart) - { - UpdateFinished?.Invoke(this); - } - - private void OnCoreUpdateStarted(IChartView chart) - { - if (UpdateStartedCommand is not null) - { - var args = new ChartCommandArgs(this); - if (UpdateStartedCommand.CanExecute(args)) UpdateStartedCommand.Execute(args); - } - - UpdateStarted?.Invoke(this); - } - - private void OnCoreMeasuring(IChartView chart) - { - Measuring?.Invoke(this); - } - - private void OnUnloaded(object sender, RoutedEventArgs e) - { - _core?.Unload(); - } - - private static void OnDependencyPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs args) - { - var chart = (PieChart)o; - if (chart._core == null) return; - - chart._core.Update(); - } - - void IChartView.OnDataPointerDown(IEnumerable points, LvcPoint pointer) - { - DataPointerDown?.Invoke(this, points); - if (DataPointerDownCommand is not null && DataPointerDownCommand.CanExecute(points)) DataPointerDownCommand.Execute(points); - - var closest = points.FindClosestTo(pointer); - ChartPointPointerDown?.Invoke(this, closest); - if (ChartPointPointerDownCommand is not null && ChartPointPointerDownCommand.CanExecute(closest)) ChartPointPointerDownCommand.Execute(closest); - } - - void IChartView.OnVisualElementPointerDown( - IEnumerable> visualElements, LvcPoint pointer) - { - var args = new VisualElementsEventArgs(CoreChart, visualElements, pointer); - - VisualElementsPointerDown?.Invoke(this, args); - if (VisualElementsPointerDownCommand is not null && VisualElementsPointerDownCommand.CanExecute(args)) - VisualElementsPointerDownCommand.Execute(args); - } - - void IChartView.Invalidate() - { - CoreCanvas.Invalidate(); - } -} diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PolarChart.xaml b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PolarChart.xaml deleted file mode 100644 index e7453ad95..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PolarChart.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PolarChart.xaml.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PolarChart.xaml.cs deleted file mode 100644 index df50a3621..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/PolarChart.xaml.cs +++ /dev/null @@ -1,845 +0,0 @@ -// The MIT License(MIT) -// -// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Collections.Specialized; -using System.ComponentModel; -using System.Linq; -using System.Windows.Input; -using LiveChartsCore.Drawing; -using LiveChartsCore.Kernel; -using LiveChartsCore.Kernel.Events; -using LiveChartsCore.Kernel.Sketches; -using LiveChartsCore.Measure; -using LiveChartsCore.Motion; -using LiveChartsCore.SkiaSharpView.Drawing; -using LiveChartsCore.SkiaSharpView.SKCharts; -using LiveChartsCore.SkiaSharpView.Uno.Helpers; -using LiveChartsCore.VisualElements; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Media; - -// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236 - -namespace LiveChartsCore.SkiaSharpView.Uno; - -/// -public sealed partial class PolarChart : UserControl, IPolarChartView -{ - #region fields - - private Chart? _core; - private MotionCanvas? _canvas; - private readonly CollectionDeepObserver _seriesObserver; - private readonly CollectionDeepObserver _angleObserver; - private readonly CollectionDeepObserver _radiusObserver; - private readonly CollectionDeepObserver> _visualsObserver; - - #endregion - - /// - /// Initializes a new instance of the class. - /// - public PolarChart() - { - LiveCharts.Configure(config => config.UseDefaults()); - - InitializeComponent(); - - _seriesObserver = new CollectionDeepObserver(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true); - _angleObserver = new CollectionDeepObserver(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true); - _radiusObserver = new CollectionDeepObserver(OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true); - _visualsObserver = new CollectionDeepObserver>( - OnDeepCollectionChanged, OnDeepCollectionPropertyChanged, true); - - Loaded += OnLoaded; - Unloaded += OnUnloaded; - - SetValue(AngleAxesProperty, new ObservableCollection() - { - LiveCharts.DefaultSettings.GetProvider().GetDefaultPolarAxis() - }); - SetValue(RadiusAxesProperty, new ObservableCollection() - { - LiveCharts.DefaultSettings.GetProvider().GetDefaultPolarAxis() - }); - SetValue(SeriesProperty, new ObservableCollection()); - SetValue(VisualElementsProperty, new ObservableCollection>()); - SetValue(SyncContextProperty, new object()); - } - - #region dependency properties - - /// - /// The fit to bounds property. - /// - public static readonly DependencyProperty FitToBoundsProperty = - DependencyProperty.Register( - nameof(FitToBounds), typeof(bool), typeof(PolarChart), new PropertyMetadata(false, OnDependencyPropertyChanged)); - - /// - /// The inner radius property. - /// - public static readonly DependencyProperty TotalAngleProperty = - DependencyProperty.Register( - nameof(TotalAngle), typeof(double), typeof(PolarChart), new PropertyMetadata(360d, OnDependencyPropertyChanged)); - - /// - /// The inner radius property. - /// - public static readonly DependencyProperty InnerRadiusProperty = - DependencyProperty.Register( - nameof(InnerRadius), typeof(double), typeof(PolarChart), new PropertyMetadata(0d, OnDependencyPropertyChanged)); - - /// - /// The initial rotation property. - /// - public static readonly DependencyProperty InitialRotationProperty = - DependencyProperty.Register( - nameof(InitialRotation), typeof(double), typeof(PolarChart), - new PropertyMetadata(LiveCharts.DefaultSettings.PolarInitialRotation, OnDependencyPropertyChanged)); - - /// - /// The title property - /// - public static readonly DependencyProperty TitleProperty = - DependencyProperty.Register( - nameof(Title), typeof(VisualElement), typeof(PolarChart), new PropertyMetadata(null)); - - /// - /// The series property. - /// - public static readonly DependencyProperty SeriesProperty = - DependencyProperty.Register( - nameof(Series), typeof(IEnumerable), typeof(PolarChart), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (PolarChart)o; - var seriesObserver = chart._seriesObserver; - seriesObserver?.Dispose((IEnumerable)args.OldValue); - seriesObserver?.Initialize((IEnumerable)args.NewValue); - if (chart._core == null) return; - chart._core.Update(); - })); - - /// - /// The x axes property. - /// - public static readonly DependencyProperty AngleAxesProperty = - DependencyProperty.Register( - nameof(AngleAxes), typeof(IEnumerable), typeof(PolarChart), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (PolarChart)o; - var observer = chart._angleObserver; - observer?.Dispose((IEnumerable)args.OldValue); - observer?.Initialize((IEnumerable)args.NewValue); - if (chart._core == null) return; - chart._core.Update(); - })); - - /// - /// The y axes property. - /// - public static readonly DependencyProperty RadiusAxesProperty = - DependencyProperty.Register( - nameof(RadiusAxes), typeof(IEnumerable), typeof(PolarChart), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (PolarChart)o; - var observer = chart._radiusObserver; - observer?.Dispose((IEnumerable)args.OldValue); - observer?.Initialize((IEnumerable)args.NewValue); - if (chart._core == null) return; - chart._core.Update(); - })); - - /// - /// The visual elements property - /// - public static readonly DependencyProperty VisualElementsProperty = - DependencyProperty.Register( - nameof(VisualElements), typeof(IEnumerable>), typeof(PolarChart), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (PolarChart)o; - var observer = chart._visualsObserver; - observer?.Dispose((IEnumerable>)args.OldValue); - observer?.Initialize((IEnumerable>)args.NewValue); - if (chart._core == null) return; - chart._core.Update(); - })); - - /// - /// The sync context property. - /// - public static readonly DependencyProperty SyncContextProperty = - DependencyProperty.Register( - nameof(SyncContext), typeof(object), typeof(PolarChart), new PropertyMetadata(null, - (DependencyObject o, DependencyPropertyChangedEventArgs args) => - { - var chart = (PolarChart)o; - if (chart._canvas != null) chart.CoreCanvas.Sync = args.NewValue; - if (chart._core == null) return; - chart._core.Update(); - })); - - /// - /// The tool tip finding strategy property. - /// - public static readonly DependencyProperty TooltipFindingStrategyProperty = - DependencyProperty.Register( - nameof(TooltipFindingStrategy), typeof(TooltipFindingStrategy), typeof(PolarChart), - new PropertyMetadata(LiveCharts.DefaultSettings.TooltipFindingStrategy, OnDependencyPropertyChanged)); - - /// - /// The animations speed property. - /// - public static readonly DependencyProperty AnimationsSpeedProperty = - DependencyProperty.Register( - nameof(AnimationsSpeed), typeof(TimeSpan), typeof(PolarChart), - new PropertyMetadata(LiveCharts.DefaultSettings.AnimationsSpeed, OnDependencyPropertyChanged)); - - /// - /// The easing function property. - /// - public static readonly DependencyProperty EasingFunctionProperty = - DependencyProperty.Register( - nameof(EasingFunction), typeof(Func), typeof(PolarChart), - new PropertyMetadata(LiveCharts.DefaultSettings.EasingFunction, OnDependencyPropertyChanged)); - - /// - /// The legend position property. - /// - public static readonly DependencyProperty LegendPositionProperty = - DependencyProperty.Register( - nameof(LegendPosition), typeof(LegendPosition), typeof(PolarChart), - new PropertyMetadata(LiveCharts.DefaultSettings.LegendPosition, OnDependencyPropertyChanged)); - - /// - /// The legend background paint property - /// - public static readonly DependencyProperty LegendBackgroundPaintProperty = - DependencyProperty.Register( - nameof(LegendBackgroundPaint), typeof(IPaint), typeof(PolarChart), - new PropertyMetadata(LiveCharts.DefaultSettings.LegendBackgroundPaint, OnDependencyPropertyChanged)); - - /// - /// The legend text paint property - /// - public static readonly DependencyProperty LegendTextPaintProperty = - DependencyProperty.Register( - nameof(LegendTextPaint), typeof(IPaint), typeof(PolarChart), - new PropertyMetadata(LiveCharts.DefaultSettings.LegendTextPaint, OnDependencyPropertyChanged)); - - /// - /// The legend text size property - /// - public static readonly DependencyProperty LegendTextSizeProperty = - DependencyProperty.Register( - nameof(LegendTextSize), typeof(double?), typeof(PolarChart), - new PropertyMetadata(LiveCharts.DefaultSettings.LegendTextSize, OnDependencyPropertyChanged)); - - /// - /// The tool tip position property. - /// - public static readonly DependencyProperty TooltipPositionProperty = - DependencyProperty.Register( - nameof(TooltipPosition), typeof(TooltipPosition), typeof(PolarChart), - new PropertyMetadata(LiveCharts.DefaultSettings.TooltipPosition, OnDependencyPropertyChanged)); - - /// - /// The tooltip background paint property - /// - public static readonly DependencyProperty TooltipBackgroundPaintProperty = - DependencyProperty.Register( - nameof(TooltipBackgroundPaint), typeof(IPaint), typeof(PolarChart), - new PropertyMetadata(LiveCharts.DefaultSettings.TooltipBackgroundPaint, OnDependencyPropertyChanged)); - - /// - /// The tooltip text paint property - /// - public static readonly DependencyProperty TooltipTextPaintProperty = - DependencyProperty.Register( - nameof(TooltipTextPaint), typeof(IPaint), typeof(PolarChart), - new PropertyMetadata(LiveCharts.DefaultSettings.TooltipTextPaint, OnDependencyPropertyChanged)); - - /// - /// The tooltip text size property - /// - public static readonly DependencyProperty TooltipTextSizeProperty = - DependencyProperty.Register( - nameof(TooltipTextSize), typeof(double?), typeof(PolarChart), - new PropertyMetadata(LiveCharts.DefaultSettings.TooltipTextSize, OnDependencyPropertyChanged)); - - /// - /// The update started command. - /// - public static readonly DependencyProperty UpdateStartedCommandProperty = - DependencyProperty.Register( - nameof(UpdateStartedCommand), typeof(ICommand), typeof(PolarChart), - new PropertyMetadata(null)); - - /// - /// The pointer pressed command. - /// - public static readonly DependencyProperty PointerPressedCommandProperty = - DependencyProperty.Register( - nameof(PointerPressedCommand), typeof(ICommand), typeof(PolarChart), - new PropertyMetadata(null)); - - /// - /// The pointer released command. - /// - public static readonly DependencyProperty PointerReleasedCommandProperty = - DependencyProperty.Register( - nameof(PointerReleasedCommand), typeof(ICommand), typeof(PolarChart), - new PropertyMetadata(null)); - - /// - /// The pointer move command. - /// - public static readonly DependencyProperty PointerMoveCommandProperty = - DependencyProperty.Register( - nameof(PointerMoveCommand), typeof(ICommand), typeof(PolarChart), - new PropertyMetadata(null)); - - /// - /// The data pointer down command property - /// - public static readonly DependencyProperty DataPointerDownCommandProperty = - DependencyProperty.Register( - nameof(DataPointerDownCommand), typeof(ICommand), typeof(PolarChart), new PropertyMetadata(null)); - - /// - /// The chart point pointer down command property - /// - public static readonly DependencyProperty ChartPointPointerDownCommandProperty = - DependencyProperty.Register( - nameof(ChartPointPointerDownCommand), typeof(ICommand), typeof(PolarChart), new PropertyMetadata(null)); - - /// - /// The chart point pointer down command property - /// - public static readonly DependencyProperty VisualElementsPointerDownCommandProperty = - DependencyProperty.Register( - nameof(VisualElementsPointerDownCommand), typeof(ICommand), typeof(PolarChart), new PropertyMetadata(null)); - - #endregion - - #region events - - /// - public event ChartEventHandler? Measuring; - - /// - public event ChartEventHandler? UpdateStarted; - - /// - public event ChartEventHandler? UpdateFinished; - - /// - public event ChartPointsHandler? DataPointerDown; - - /// - public event ChartPointHandler? ChartPointPointerDown; - - /// - public event VisualElementsHandler? VisualElementsPointerDown; - - #endregion - - #region properties - - /// - bool IChartView.DesignerMode => Windows.ApplicationModel.DesignMode.DesignModeEnabled; - - /// - public IChart CoreChart => _core ?? throw new Exception("Core not set yet."); - - /// - public object SyncContext - { - get => GetValue(SyncContextProperty); - set => SetValue(SyncContextProperty, value); - } - - LvcColor IChartView.BackColor - { - get => Background is not SolidColorBrush b - ? new LvcColor() - : LvcColor.FromArgb(b.Color.A, b.Color.R, b.Color.G, b.Color.B); - set => SetValue(BackgroundProperty, new SolidColorBrush(Windows.UI.Color.FromArgb(value.A, value.R, value.G, value.B))); - } - - /// - public Margin? DrawMargin - { - get => null; - set => throw new NotImplementedException(); - } - - Margin? IChartView.DrawMargin - { - get => DrawMargin; - set => throw new NotImplementedException(); - } - - LvcSize IChartView.ControlSize => _canvas == null - ? throw new Exception("Canvas not found") - : new LvcSize { Width = (float)_canvas.ActualWidth, Height = (float)_canvas.ActualHeight }; - - /// - public MotionCanvas CoreCanvas => _canvas == null ? throw new Exception("Canvas not found") : _canvas.CanvasCore; - - PolarChart IPolarChartView.Core => - _core == null ? throw new Exception("core not found") : (PolarChart)_core; - - /// - public bool FitToBounds - { - get => (bool)GetValue(FitToBoundsProperty); - set => SetValue(FitToBoundsProperty, value); - } - - /// - public double TotalAngle - { - get => (double)GetValue(TotalAngleProperty); - set => SetValue(TotalAngleProperty, value); - } - - /// - public double InnerRadius - { - get => (double)GetValue(InnerRadiusProperty); - set => SetValue(InnerRadiusProperty, value); - } - - /// - public double InitialRotation - { - get => (double)GetValue(InitialRotationProperty); - set => SetValue(InitialRotationProperty, value); - } - - /// - public VisualElement? Title - { - get => (VisualElement?)GetValue(TitleProperty); - set => SetValue(TitleProperty, value); - } - - /// - public IEnumerable Series - { - get => (IEnumerable)GetValue(SeriesProperty); - set => SetValue(SeriesProperty, value); - } - - /// - public IEnumerable AngleAxes - { - get => (IEnumerable)GetValue(AngleAxesProperty); - set => SetValue(AngleAxesProperty, value); - } - - /// - public IEnumerable RadiusAxes - { - get => (IEnumerable)GetValue(RadiusAxesProperty); - set => SetValue(RadiusAxesProperty, value); - } - - /// - public IEnumerable> VisualElements - { - get => (IEnumerable>)GetValue(VisualElementsProperty); - set => SetValue(VisualElementsProperty, value); - } - - /// - public TimeSpan AnimationsSpeed - { - get => (TimeSpan)GetValue(AnimationsSpeedProperty); - set => SetValue(AnimationsSpeedProperty, value); - } - - TimeSpan IChartView.AnimationsSpeed - { - get => AnimationsSpeed; - set => SetValue(AnimationsSpeedProperty, value); - } - - /// - public Func EasingFunction - { - get => (Func)GetValue(EasingFunctionProperty); - set => SetValue(EasingFunctionProperty, value); - } - - Func? IChartView.EasingFunction - { - get => EasingFunction; - set => SetValue(EasingFunctionProperty, value); - } - - /// - public LegendPosition LegendPosition - { - get => (LegendPosition)GetValue(LegendPositionProperty); - set => SetValue(LegendPositionProperty, value); - } - - /// - public TooltipPosition TooltipPosition - { - get => (TooltipPosition)GetValue(TooltipPositionProperty); - set => SetValue(TooltipPositionProperty, value); - } - - /// - public IPaint? TooltipBackgroundPaint - { - get => (IPaint?)GetValue(TooltipBackgroundPaintProperty); - set => SetValue(TooltipBackgroundPaintProperty, value); - } - - /// - public IPaint? TooltipTextPaint - { - get => (IPaint?)GetValue(TooltipTextPaintProperty); - set => SetValue(TooltipTextPaintProperty, value); - } - - /// - public double? TooltipTextSize - { - get => (double?)GetValue(TooltipTextSizeProperty); - set => SetValue(TooltipTextSizeProperty, value); - } - - /// - public IChartTooltip? Tooltip { get; set; } = new SKDefaultTooltip(); - - /// - public IPaint? LegendBackgroundPaint - { - get => (IPaint?)GetValue(LegendBackgroundPaintProperty); - set => SetValue(LegendBackgroundPaintProperty, value); - } - - /// - public IPaint? LegendTextPaint - { - get => (IPaint?)GetValue(LegendTextPaintProperty); - set => SetValue(LegendTextPaintProperty, value); - } - - /// - public double? LegendTextSize - { - get => (double?)GetValue(LegendTextSizeProperty); - set => SetValue(LegendTextSizeProperty, value); - } - - /// - public IChartLegend? Legend { get; set; } = new SKDefaultLegend(); - - /// - public bool AutoUpdateEnabled { get; set; } = true; - - /// - public TimeSpan UpdaterThrottler { get; set; } = LiveCharts.DefaultSettings.UpdateThrottlingTimeout; - - /// - /// Gets or sets a command to execute when the chart update started. - /// - public ICommand? UpdateStartedCommand - { - get => (ICommand?)GetValue(UpdateStartedCommandProperty); - set => SetValue(UpdateStartedCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer is pressed on the chart. - /// - public ICommand? PointerPressedCommand - { - get => (ICommand?)GetValue(PointerPressedCommandProperty); - set => SetValue(PointerPressedCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer is released on the chart. - /// - public ICommand? PointerReleasedCommand - { - get => (ICommand?)GetValue(PointerReleasedCommandProperty); - set => SetValue(PointerReleasedCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer moves over the chart. - /// - public ICommand? PointerMoveCommand - { - get => (ICommand?)GetValue(PointerMoveCommandProperty); - set => SetValue(PointerMoveCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer goes down on a data or data points. - /// - public ICommand DataPointerDownCommand - { - get => (ICommand)GetValue(DataPointerDownCommandProperty); - set => SetValue(DataPointerDownCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer goes down on a data or data points. - /// - public ICommand ChartPointPointerDownCommand - { - get => (ICommand)GetValue(ChartPointPointerDownCommandProperty); - set => SetValue(ChartPointPointerDownCommandProperty, value); - } - - /// - /// Gets or sets a command to execute when the pointer goes down on a chart point. - /// - public ICommand? VisualElementsPointerDownCommand - { - get => (ICommand?)GetValue(VisualElementsPointerDownCommandProperty); - set => SetValue(VisualElementsPointerDownCommandProperty, value); - } - - #endregion - - /// - public LvcPointD ScalePixelsToData(LvcPointD point, int angleAxisIndex = 0, int radiusAxisIndex = 0) - { - if (_core is not PolarChart cc) throw new Exception("core not found"); - - var scaler = new PolarScaler( - cc.DrawMarginLocation, cc.DrawMarginSize, cc.AngleAxes[angleAxisIndex], cc.RadiusAxes[radiusAxisIndex], - cc.InnerRadius, cc.InitialRotation, cc.TotalAnge); - - return scaler.ToChartValues(point.X, point.Y); - } - - /// - public LvcPointD ScaleDataToPixels(LvcPointD point, int angleAxisIndex = 0, int radiusAxisIndex = 0) - { - if (_core is not PolarChart cc) throw new Exception("core not found"); - - var scaler = new PolarScaler( - cc.DrawMarginLocation, cc.DrawMarginSize, cc.AngleAxes[angleAxisIndex], cc.RadiusAxes[radiusAxisIndex], - cc.InnerRadius, cc.InitialRotation, cc.TotalAnge); - - var r = scaler.ToPixels(point.X, point.Y); - - return new LvcPointD { X = (float)r.X, Y = (float)r.Y }; - } - - /// - public IEnumerable GetPointsAt(LvcPoint point, TooltipFindingStrategy strategy = TooltipFindingStrategy.Automatic) - { - if (_core is not PolarChart cc) throw new Exception("core not found"); - - if (strategy == TooltipFindingStrategy.Automatic) - strategy = cc.Series.GetTooltipFindingStrategy(); - - return cc.Series.SelectMany(series => series.FindHitPoints(cc, point, strategy)); - } - - /// - public IEnumerable> GetVisualsAt(LvcPoint point) - { - return _core is not PolarChart cc - ? throw new Exception("core not found") - : cc.VisualElements.SelectMany(visual => ((VisualElement)visual).IsHitBy(_core, point)); - } - - void IChartView.InvokeOnUIThread(Action action) - { - UnoPlatformHelpers.InvokeOnUIThread(action); - } - - private void OnLoaded(object sender, RoutedEventArgs e) - { - var canvas = (MotionCanvas)FindName("motionCanvas"); - _canvas = canvas; - - if (_core is null) - { - _core = new PolarChart(this, config => config.UseDefaults(), canvas.CanvasCore); - - if (SyncContext != null) - _canvas.CanvasCore.Sync = SyncContext; - - if (_core == null) throw new Exception("Core not found!"); - _core.Measuring += OnCoreMeasuring; - _core.UpdateStarted += OnCoreUpdateStarted; - _core.UpdateFinished += OnCoreUpdateFinished; - - SizeChanged += OnSizeChanged; - - var chartBehaviour = new Behaviours.ChartBehaviour(); - - chartBehaviour.Pressed += OnPressed; - chartBehaviour.Moved += OnMoved; - chartBehaviour.Released += OnReleased; - chartBehaviour.Pinched += OnPinched; - chartBehaviour.Exited += OnExited; - - chartBehaviour.On(this); - } - - _core.Load(); - _core.Update(); - } - - private void OnDeepCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e) - { - _core?.Update(); - } - - private void OnDeepCollectionPropertyChanged(object? sender, PropertyChangedEventArgs e) - { - _core?.Update(); - } - - private void OnSizeChanged(object? sender, SizeChangedEventArgs e) - { - if (_core == null) throw new Exception("Core not found!"); - _core.Update(); - } - - private void OnPressed(object? sender, Behaviours.Events.PressedEventArgs args) - { - // is this working on all platforms? - //if (args.KeyModifiers > 0) return; - - var cArgs = new PointerCommandArgs(this, new(args.Location.X, args.Location.Y), args); - if (PointerPressedCommand?.CanExecute(cArgs) == true) PointerPressedCommand.Execute(cArgs); - - _core?.InvokePointerDown(args.Location, args.IsSecondaryPress); - } - - private void OnMoved(object? sender, Behaviours.Events.ScreenEventArgs args) - { - var location = args.Location; - - var cArgs = new PointerCommandArgs(this, new(location.X, location.Y), args.OriginalEvent); - if (PointerMoveCommand?.CanExecute(cArgs) == true) PointerMoveCommand.Execute(cArgs); - - _core?.InvokePointerMove(location); - } - - private void OnReleased(object? sender, Behaviours.Events.PressedEventArgs args) - { - var cArgs = new PointerCommandArgs(this, new(args.Location.X, args.Location.Y), args); - if (PointerReleasedCommand?.CanExecute(cArgs) == true) PointerReleasedCommand.Execute(cArgs); - - _core?.InvokePointerUp(args.Location, args.IsSecondaryPress); - } - - private void OnPinched(object? sender, Behaviours.Events.PinchEventArgs args) - { - if (_core is null) return; - - var c = (CartesianChart)_core; - var p = args.PinchStart; - var s = c.ControlSize; - var pivot = new LvcPoint((float)(p.X * s.Width), (float)(p.Y * s.Height)); - c.Zoom(pivot, ZoomDirection.DefinedByScaleFactor, args.Scale, true); - } - - private void OnExited(object? sender, Behaviours.Events.EventArgs args) - { - _core?.InvokePointerLeft(); - } - - private void OnCoreUpdateFinished(IChartView chart) - { - UpdateFinished?.Invoke(this); - } - - private void OnCoreUpdateStarted(IChartView chart) - { - if (UpdateStartedCommand is not null) - { - var args = new ChartCommandArgs(this); - if (UpdateStartedCommand.CanExecute(args)) UpdateStartedCommand.Execute(args); - } - - UpdateStarted?.Invoke(this); - } - - private void OnCoreMeasuring(IChartView chart) - { - Measuring?.Invoke(this); - } - - private void OnUnloaded(object sender, RoutedEventArgs e) - { - _core?.Unload(); - } - - private static void OnDependencyPropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs args) - { - var chart = (PolarChart)o; - if (chart._core == null) return; - - chart._core.Update(); - } - - void IChartView.OnDataPointerDown(IEnumerable points, LvcPoint pointer) - { - DataPointerDown?.Invoke(this, points); - if (DataPointerDownCommand is not null && DataPointerDownCommand.CanExecute(points)) DataPointerDownCommand.Execute(points); - - var closest = points.FindClosestTo(pointer); - ChartPointPointerDown?.Invoke(this, closest); - if (ChartPointPointerDownCommand is not null && ChartPointPointerDownCommand.CanExecute(closest)) ChartPointPointerDownCommand.Execute(closest); - } - - void IChartView.OnVisualElementPointerDown( - IEnumerable> visualElements, LvcPoint pointer) - { - var args = new VisualElementsEventArgs(CoreChart, visualElements, pointer); - - VisualElementsPointerDown?.Invoke(this, args); - if (VisualElementsPointerDownCommand is not null && VisualElementsPointerDownCommand.CanExecute(args)) - VisualElementsPointerDownCommand.Execute(args); - } - - void IChartView.Invalidate() - { - CoreCanvas.Invalidate(); - } -} diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Properties/LiveChartsCore.SkiaSharpView.UWP.rd.xml b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Properties/LiveChartsCore.SkiaSharpView.UWP.rd.xml deleted file mode 100644 index 6f2d3278d..000000000 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/Properties/LiveChartsCore.SkiaSharpView.UWP.rd.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/images/icon.png b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno/images/icon.png deleted file mode 100644 index d0c1c566005cbef8d7c17888043cabb90abe923c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7880 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 Date: Fri, 17 Nov 2023 15:01:34 -0600 Subject: [PATCH 12/86] remove uno (uwp) view --- LiveCharts.sln | 58 -------------------------------------------------- 1 file changed, 58 deletions(-) diff --git a/LiveCharts.sln b/LiveCharts.sln index 8e751e27d..5f3c1b160 100644 --- a/LiveCharts.sln +++ b/LiveCharts.sln @@ -68,8 +68,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LiveChartsCore.SkiaSharpVie EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiSample", "samples\MauiSample\MauiSample.csproj", "{60FAD94A-2E69-4FDA-BF39-DC29CD44214B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LiveChartsCore.SkiaSharpView.Uno", "src\skiasharp\LiveChartsCore.SkiaSharpView.Uno\LiveChartsCore.SkiaSharpView.Uno.csproj", "{DFCDB92D-2678-464D-A679-3866702FC6BF}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LiveChartsCore.SkiaSharpView.WinUI", "src\skiasharp\LiveChartsCore.SkiaSharpView.WinUI\LiveChartsCore.SkiaSharpView.WinUI.csproj", "{E050FFE3-98AC-4D3E-99CC-136443921B6F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WinUI", "WinUI", "{39D52D6D-70BC-40D3-84E3-CF8CD0D73D10}" @@ -1313,62 +1311,6 @@ Global {60FAD94A-2E69-4FDA-BF39-DC29CD44214B}.Release|x86.ActiveCfg = Release|Any CPU {60FAD94A-2E69-4FDA-BF39-DC29CD44214B}.Release|x86.Build.0 = Release|Any CPU {60FAD94A-2E69-4FDA-BF39-DC29CD44214B}.Release|x86.Deploy.0 = Release|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Ad-Hoc|ARM64.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Ad-Hoc|ARM64.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Ad-Hoc|x64.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Ad-Hoc|x86.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.AppStore|Any CPU.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.AppStore|ARM.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.AppStore|ARM.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.AppStore|ARM64.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.AppStore|ARM64.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.AppStore|iPhone.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.AppStore|iPhone.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.AppStore|x64.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.AppStore|x64.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.AppStore|x86.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.AppStore|x86.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Debug|ARM.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Debug|ARM.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Debug|ARM64.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Debug|iPhone.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Debug|x64.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Debug|x64.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Debug|x86.ActiveCfg = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Debug|x86.Build.0 = Debug|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Release|Any CPU.Build.0 = Release|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Release|ARM.ActiveCfg = Release|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Release|ARM.Build.0 = Release|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Release|ARM64.ActiveCfg = Release|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Release|ARM64.Build.0 = Release|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Release|iPhone.ActiveCfg = Release|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Release|iPhone.Build.0 = Release|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Release|x64.ActiveCfg = Release|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Release|x64.Build.0 = Release|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Release|x86.ActiveCfg = Release|Any CPU - {DFCDB92D-2678-464D-A679-3866702FC6BF}.Release|x86.Build.0 = Release|Any CPU {E050FFE3-98AC-4D3E-99CC-136443921B6F}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU {E050FFE3-98AC-4D3E-99CC-136443921B6F}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU {E050FFE3-98AC-4D3E-99CC-136443921B6F}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU From dada725ee67264113d33dfc3a714c0815cd72f19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 15:14:41 -0600 Subject: [PATCH 13/86] update all views --- .../LiveChartsCore.Behaviours.csproj | 4 ++ ...veChartsCore.SkiaSharpView.Avalonia.csproj | 4 +- ...veChartsCore.SkiaSharpView.WinForms.csproj | 7 +-- ...LiveChartsCore.SkiaSharpView.Blazor.csproj | 44 ++++++++++++------- .../LiveChartsCore.SkiaSharpView.Maui.csproj | 30 ++++++++++--- ...eChartsCore.SkiaSharpView.Uno.WinUI.csproj | 32 +++++++++++--- .../LiveChartsCore.SkiaSharpView.WinUI.csproj | 20 +++++++-- 7 files changed, 105 insertions(+), 36 deletions(-) diff --git a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj index 45af76485..4be07bfa4 100644 --- a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj +++ b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj @@ -25,6 +25,10 @@ 10.0.17763.0 6.5 + win-x86;win-x64 LiveChartsCore.Behaviours diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj index dbbab79a0..02d785699 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj @@ -3,7 +3,9 @@ Library 11.0 enable - netcoreapp2.0;netstandard2.0;net462;net6.0 + + netstandard2.0;netcoreapp2.0.3;net462;net7.0;net8.0; + LiveChartsCore.SkiaSharpView.Avalonia LiveChartsCore.SkiaSharpView.Avalonia 2.0.0-rc2 diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj index d16ce0cf1..12c2e54f7 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj @@ -1,11 +1,12 @@ - + + 11.0 + enable + WinExe true Library - 11.0 - enable net462;netcoreapp3.1 LiveChartsCore.SkiaSharpView.WinForms LiveChartsCore.SkiaSharpView.WinForms diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj index 3b19ece68..4e44b2f0b 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj @@ -1,21 +1,11 @@ - - True - - ES6 - - - - True - - ES6 - - 11.0 - net6.0 enable + + net6.0;net7.0;net8.0 + enable 2.0.0-rc2 icon.png @@ -30,6 +20,18 @@ True + + True + + ES6 + + + + True + + ES6 + + @@ -39,13 +41,23 @@ - - + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj index 50a90467e..20cd24fe1 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj @@ -1,13 +1,23 @@ - net6.0;net6.0-android;net6.0-ios;net6.0-maccatalyst - $(TargetFrameworks);net6.0-windows10.0.19041.0 - true - true enable 11.0 + true + true + + + + net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst; + net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst; + + + $(TargetFrameworks); + net7.0-windows10.0.19041.0; + net8.0-windows10.0.19041.0 + + 11.0 13.1 21.0 @@ -29,11 +39,19 @@ + + - - + + diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj index a4bf59762..76da967d7 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj @@ -1,15 +1,35 @@ - - $(TargetFrameworks);net7.0-windows10.0.19041 + enable + 11.0 + + + + net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst; + net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst; - $(TargetFrameworks);net7.0;net7.0-ios;net7.0-maccatalyst;net7.0-android + + $(TargetFrameworks); + net7.0-windows10.0.19041.0; + net8.0-windows10.0.19041.0 + + + 11.0 + 13.1 + 21.0 + 10.0.17763.0 + 10.0.17763.0 + 6.5 + + + win-x86;win-x64 + true - enable - 11.0 2.0.0-rc2 icon.png Simple, flexible, interactive and powerful data visualization for Uno.WinUI. diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj index 3500ed13d..a124dc731 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj @@ -3,12 +3,24 @@ 11.0 enable - net6.0-windows10.0.19041;net7.0-windows10.0.19041 + + net6.0-windows10.0.19041.0; + net7.0-windows10.0.19041.0; + net8.0-windows10.0.19041.0 + + 10.0.17763.0 - LiveChartsCore.SkiaSharpView.WinUI - win10-x86;win10-x64;win10-arm64 - true + + win-x86;win-x64 + win10-x86;win10-x64;win10-arm64 + + true + + LiveChartsCore.SkiaSharpView.WinUI 2.0.0-rc2 icon.png Simple, flexible, interactive and powerful data visualization for WindowsAppSDK. From 8780ac4b69a818f4685c85903bf0a65cb7778855 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 15:16:53 -0600 Subject: [PATCH 14/86] add net to avalonia view --- .../LiveChartsCore.SkiaSharpView.Avalonia.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj index 02d785699..66d9212b9 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj @@ -4,7 +4,7 @@ 11.0 enable - netstandard2.0;netcoreapp2.0.3;net462;net7.0;net8.0; + netstandard2.0;netcoreapp2.0.3;net462;net6.0;net7.0;net8.0; LiveChartsCore.SkiaSharpView.Avalonia LiveChartsCore.SkiaSharpView.Avalonia From fcd9bc0d1803aebfb5abd7af82e73a55dc0aa750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 15:25:29 -0600 Subject: [PATCH 15/86] add net 8 target to tests --- .../LiveChartsCore.UnitTesting.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/LiveChartsCore.UnitTesting/LiveChartsCore.UnitTesting.csproj b/tests/LiveChartsCore.UnitTesting/LiveChartsCore.UnitTesting.csproj index f1e37abae..76bdf9331 100644 --- a/tests/LiveChartsCore.UnitTesting/LiveChartsCore.UnitTesting.csproj +++ b/tests/LiveChartsCore.UnitTesting/LiveChartsCore.UnitTesting.csproj @@ -2,7 +2,7 @@ 11.0 - net462;net6.0;net7.0 + net462;net6.0;net7.0;net8.0 false From e48e955cfde522fd1b2df9cae1018797f5758624 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 15:25:51 -0600 Subject: [PATCH 16/86] try setup-dotnet --- .github/workflows/compile-all-views.yml | 4 ++++ .github/workflows/run-unit-tests.yml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/compile-all-views.yml b/.github/workflows/compile-all-views.yml index fb5724ddd..6286dfe18 100644 --- a/.github/workflows/compile-all-views.yml +++ b/.github/workflows/compile-all-views.yml @@ -23,5 +23,9 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 + - uses: actions/setup-dotnet@v2 + with: + dotnet-version: '8.0.0' + - name: Compile Debug run: ./build/build-windows.ps1 -configuration "Debug" diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index 11a309c83..fc46baaf7 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -23,5 +23,9 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 + - uses: actions/setup-dotnet@v2 + with: + dotnet-version: '8.0.0' + - name: Run unit tests run: dotnet test ./tests/LiveChartsCore.UnitTesting From d0345d1b6e1c319801d8ae75ce691997f2c70db8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 15:35:02 -0600 Subject: [PATCH 17/86] use setup-dotnet@v3 --- .github/workflows/compile-all-views.yml | 4 ++-- .github/workflows/run-unit-tests.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/compile-all-views.yml b/.github/workflows/compile-all-views.yml index 6286dfe18..5f26263cd 100644 --- a/.github/workflows/compile-all-views.yml +++ b/.github/workflows/compile-all-views.yml @@ -23,9 +23,9 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 - - uses: actions/setup-dotnet@v2 + - uses: actions/setup-dotnet@v3 with: - dotnet-version: '8.0.0' + dotnet-version: '8.0.x' - name: Compile Debug run: ./build/build-windows.ps1 -configuration "Debug" diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index fc46baaf7..d13366253 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -23,9 +23,9 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 - - uses: actions/setup-dotnet@v2 + - uses: actions/setup-dotnet@v3 with: - dotnet-version: '8.0.0' + dotnet-version: '8.0.x' - name: Run unit tests run: dotnet test ./tests/LiveChartsCore.UnitTesting From b4242fd82ca462c304e2433b0bae34c8bd1c348a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 15:41:38 -0600 Subject: [PATCH 18/86] install MAUI workload --- .github/workflows/compile-all-views.yml | 3 +++ .github/workflows/run-unit-tests.yml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/.github/workflows/compile-all-views.yml b/.github/workflows/compile-all-views.yml index 5f26263cd..e3b238bfa 100644 --- a/.github/workflows/compile-all-views.yml +++ b/.github/workflows/compile-all-views.yml @@ -27,5 +27,8 @@ jobs: with: dotnet-version: '8.0.x' + - name: Install MAUI workload + run: dotnet workload install maui + - name: Compile Debug run: ./build/build-windows.ps1 -configuration "Debug" diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index d13366253..1e823bcb4 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -27,5 +27,8 @@ jobs: with: dotnet-version: '8.0.x' + - name: Install MAUI workload + run: dotnet workload install maui + - name: Run unit tests run: dotnet test ./tests/LiveChartsCore.UnitTesting From 7e3f353d84f0546e264bf81f4ae120205aaf6451 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 16:30:52 -0600 Subject: [PATCH 19/86] update samples to net 8 --- samples/AvaloniaSample/AvaloniaSample.csproj | 2 +- .../AvaloniaSample.Android.csproj | 2 +- .../AvaloniaSample.Desktop.csproj | 2 +- samples/BlazorSample/BlazorSample.csproj | 8 ++-- .../ConsoleSample/ConsoleSample.csproj | 2 +- samples/EtoFormsSample/EtoFormsSample.csproj | 2 +- .../IChartEntitySample.csproj | 2 +- samples/MappersSamples/MappersSamples.csproj | 2 +- samples/MauiSample/MauiSample.csproj | 39 ++++++++++--------- samples/QuestPDFSample/QuestPDFSample.csproj | 2 +- .../ViewModelsSamples.csproj | 15 +++---- samples/WPFSample/WPFSample.csproj | 2 +- samples/WinFormsSample/WinFormsSample.csproj | 2 +- .../WinUISample/WinUISample.csproj | 4 +- .../XamarinSample.Android.csproj | 2 + .../LiveChartsCore.Behaviours.csproj | 2 +- ...eChartsCore.SkiaSharpView.Uno.WinUI.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.WinUI.csproj | 2 +- 18 files changed, 49 insertions(+), 45 deletions(-) diff --git a/samples/AvaloniaSample/AvaloniaSample.csproj b/samples/AvaloniaSample/AvaloniaSample.csproj index 3427c876d..2c093e0f3 100644 --- a/samples/AvaloniaSample/AvaloniaSample.csproj +++ b/samples/AvaloniaSample/AvaloniaSample.csproj @@ -1,6 +1,6 @@ - net7.0 + net8.0 enable 11.0 diff --git a/samples/AvaloniaSample/Platforms/AvaloniaSample.Android/AvaloniaSample.Android.csproj b/samples/AvaloniaSample/Platforms/AvaloniaSample.Android/AvaloniaSample.Android.csproj index bf1270ab2..17076019b 100644 --- a/samples/AvaloniaSample/Platforms/AvaloniaSample.Android/AvaloniaSample.Android.csproj +++ b/samples/AvaloniaSample/Platforms/AvaloniaSample.Android/AvaloniaSample.Android.csproj @@ -2,7 +2,7 @@ Exe - net7.0-android + net8.0-android 21 enable com.CompanyName.AvaloniaSample diff --git a/samples/AvaloniaSample/Platforms/AvaloniaSample.Desktop/AvaloniaSample.Desktop.csproj b/samples/AvaloniaSample/Platforms/AvaloniaSample.Desktop/AvaloniaSample.Desktop.csproj index 1f953cba5..dc6d174f0 100644 --- a/samples/AvaloniaSample/Platforms/AvaloniaSample.Desktop/AvaloniaSample.Desktop.csproj +++ b/samples/AvaloniaSample/Platforms/AvaloniaSample.Desktop/AvaloniaSample.Desktop.csproj @@ -4,7 +4,7 @@ WinExe - net7.0 + net8.0 enable true app.manifest diff --git a/samples/BlazorSample/BlazorSample.csproj b/samples/BlazorSample/BlazorSample.csproj index ed9deab51..d65eea841 100644 --- a/samples/BlazorSample/BlazorSample.csproj +++ b/samples/BlazorSample/BlazorSample.csproj @@ -1,15 +1,15 @@ - net7.0 + net8.0 enable enable 11.0 - - + + @@ -17,6 +17,8 @@ + + diff --git a/samples/ConsoleSample/ConsoleSample/ConsoleSample.csproj b/samples/ConsoleSample/ConsoleSample/ConsoleSample.csproj index 351ed02c3..8502622a4 100644 --- a/samples/ConsoleSample/ConsoleSample/ConsoleSample.csproj +++ b/samples/ConsoleSample/ConsoleSample/ConsoleSample.csproj @@ -2,7 +2,7 @@ Exe - net6.0 + net8.0 enable enable diff --git a/samples/EtoFormsSample/EtoFormsSample.csproj b/samples/EtoFormsSample/EtoFormsSample.csproj index 70eb3d8b4..c81e71af6 100644 --- a/samples/EtoFormsSample/EtoFormsSample.csproj +++ b/samples/EtoFormsSample/EtoFormsSample.csproj @@ -8,7 +8,7 @@ WinExe - net6.0 + net8.0 - + net8.0-android;net8.0-ios;net8.0-maccatalyst + $(TargetFrameworks);net8.0-windows10.0.19041.0 + + + + + + Exe MauiSample true @@ -22,12 +30,12 @@ 1.0 1 - 11.0 - 13.1 - 21.0 - 10.0.17763.0 - 10.0.17763.0 - 6.5 + 11.0 + 13.1 + 21.0 + 10.0.17763.0 + 10.0.17763.0 + 6.5 @@ -39,7 +47,6 @@ - @@ -48,16 +55,12 @@ - - - - - - - + + + diff --git a/samples/QuestPDFSample/QuestPDFSample.csproj b/samples/QuestPDFSample/QuestPDFSample.csproj index 3bbe728db..6c44b8e85 100644 --- a/samples/QuestPDFSample/QuestPDFSample.csproj +++ b/samples/QuestPDFSample/QuestPDFSample.csproj @@ -2,7 +2,7 @@ Exe - net6.0 + net8.0 enable enable diff --git a/samples/ViewModelsSamples/ViewModelsSamples.csproj b/samples/ViewModelsSamples/ViewModelsSamples.csproj index b4530735c..e84c6c8d5 100644 --- a/samples/ViewModelsSamples/ViewModelsSamples.csproj +++ b/samples/ViewModelsSamples/ViewModelsSamples.csproj @@ -1,15 +1,12 @@ - - netstandard2.0;net6.0-android;net6.0-ios;net6.0-maccatalyst - $(TargetFrameworks);net6.0-windows10.0.19041 - - 14.2 - 14.0 - 21.0 - 10.0.17763.0 - 10.0.17763.0 + netstandard2.0;net8.0-android;net8.0-ios;net8.0-maccatalyst + + $(TargetFrameworks); + net462; + net8.0-windows10.0.19041.0; + false 11.0 diff --git a/samples/WPFSample/WPFSample.csproj b/samples/WPFSample/WPFSample.csproj index 3c0e4b579..4a0d26f24 100644 --- a/samples/WPFSample/WPFSample.csproj +++ b/samples/WPFSample/WPFSample.csproj @@ -2,7 +2,7 @@ WinExe - net6.0-windows + net8.0-windows true false 11.0 diff --git a/samples/WinFormsSample/WinFormsSample.csproj b/samples/WinFormsSample/WinFormsSample.csproj index 5179eb22d..aa6b1e305 100644 --- a/samples/WinFormsSample/WinFormsSample.csproj +++ b/samples/WinFormsSample/WinFormsSample.csproj @@ -2,7 +2,7 @@ WinExe - net6.0-windows + net8.0-windows true false 11.0 diff --git a/samples/WinUISample/WinUISample/WinUISample.csproj b/samples/WinUISample/WinUISample/WinUISample.csproj index 25029a47c..79b65d54b 100644 --- a/samples/WinUISample/WinUISample/WinUISample.csproj +++ b/samples/WinUISample/WinUISample/WinUISample.csproj @@ -1,12 +1,12 @@ WinExe - net6.0-windows10.0.19041.0 + net8.0-windows10.0.19041.0 10.0.17763.0 WinUISample app.manifest x86;x64;arm64 - win10-x86;win10-x64;win10-arm64 + win-x86;win-x64;win-arm64 win10-$(Platform).pubxml true true diff --git a/samples/XamarinSample/XamarinSample/XamarinSample.Android/XamarinSample.Android.csproj b/samples/XamarinSample/XamarinSample/XamarinSample.Android/XamarinSample.Android.csproj index e535939a9..5ac815558 100644 --- a/samples/XamarinSample/XamarinSample/XamarinSample.Android/XamarinSample.Android.csproj +++ b/samples/XamarinSample/XamarinSample/XamarinSample.Android/XamarinSample.Android.csproj @@ -90,6 +90,8 @@ {bde9c3d2-5801-4be1-b79e-63686d04ce0f} ViewModelsSamples + Android + false {EC154436-ED83-4EBD-8021-26CD4B758F70} diff --git a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj index 4be07bfa4..9161d4b22 100644 --- a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj +++ b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj @@ -29,7 +29,7 @@ net 8 breaking changes: https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/8.0/rid-graph --> - win-x86;win-x64 + win-x86;win-x64;win-arm64 LiveChartsCore.Behaviours LiveChartsCore.Behaviours diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj index 76da967d7..c28535b5e 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj @@ -25,7 +25,7 @@ net 8 breaking changes: https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/8.0/rid-graph --> - win-x86;win-x64 + win-x86;win-x64;win-arm64 true diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj index a124dc731..e083eebc2 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj @@ -15,7 +15,7 @@ net 8 breaking changes: https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/8.0/rid-graph --> - win-x86;win-x64 + win-x86;win-x64;win-arm64 win10-x86;win10-x64;win10-arm64 true From ef218fed8ca19219f570f77df615b667d5c3d643 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 16:42:57 -0600 Subject: [PATCH 20/86] uodate uno sample to net 8 --- .../UnoPlatform_v5.Base/UnoPlatform_v5.Base.csproj | 2 +- .../UnoPlatform_v5.DataContracts.csproj | 2 +- .../UnoPlatform_v5.Mobile/UnoPlatform_v5.Mobile.csproj | 2 +- .../UnoPlatform_v5.Server/UnoPlatform_v5.Server.csproj | 2 +- .../UnoPlatform_v5.Skia.Gtk/UnoPlatform_v5.Skia.Gtk.csproj | 2 +- .../UnoPlatform_v5.Tests/UnoPlatform_v5.Tests.csproj | 2 +- .../UnoPlatform_v5.UITests/UnoPlatform_v5.UITests.csproj | 2 +- .../UnoPlatform_v5.Wasm/UnoPlatform_v5.Wasm.csproj | 2 +- .../UnoPlatform_v5.Windows/UnoPlatform_v5.Windows.csproj | 2 +- samples/UnoPlatform_v5/UnoPlatform_v5/UnoPlatform_v5.csproj | 4 ++-- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/samples/UnoPlatform_v5/UnoPlatform_v5.Base/UnoPlatform_v5.Base.csproj b/samples/UnoPlatform_v5/UnoPlatform_v5.Base/UnoPlatform_v5.Base.csproj index 8d78f515e..e7623475e 100644 --- a/samples/UnoPlatform_v5/UnoPlatform_v5.Base/UnoPlatform_v5.Base.csproj +++ b/samples/UnoPlatform_v5/UnoPlatform_v5.Base/UnoPlatform_v5.Base.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 false diff --git a/samples/UnoPlatform_v5/UnoPlatform_v5.DataContracts/UnoPlatform_v5.DataContracts.csproj b/samples/UnoPlatform_v5/UnoPlatform_v5.DataContracts/UnoPlatform_v5.DataContracts.csproj index 60d4bd525..46cf70947 100644 --- a/samples/UnoPlatform_v5/UnoPlatform_v5.DataContracts/UnoPlatform_v5.DataContracts.csproj +++ b/samples/UnoPlatform_v5/UnoPlatform_v5.DataContracts/UnoPlatform_v5.DataContracts.csproj @@ -1,6 +1,6 @@ - net7.0 + net8.0 true diff --git a/samples/UnoPlatform_v5/UnoPlatform_v5.Mobile/UnoPlatform_v5.Mobile.csproj b/samples/UnoPlatform_v5/UnoPlatform_v5.Mobile/UnoPlatform_v5.Mobile.csproj index 9274c4efb..c74c265ca 100644 --- a/samples/UnoPlatform_v5/UnoPlatform_v5.Mobile/UnoPlatform_v5.Mobile.csproj +++ b/samples/UnoPlatform_v5/UnoPlatform_v5.Mobile/UnoPlatform_v5.Mobile.csproj @@ -1,6 +1,6 @@ - net7.0-android;net7.0-ios;net7.0-maccatalyst + net8.0-android;net8.0-ios;net8.0-maccatalyst $(OverrideTargetFrameworks) true Exe diff --git a/samples/UnoPlatform_v5/UnoPlatform_v5.Server/UnoPlatform_v5.Server.csproj b/samples/UnoPlatform_v5/UnoPlatform_v5.Server/UnoPlatform_v5.Server.csproj index dbfbc4317..0a96b4874 100644 --- a/samples/UnoPlatform_v5/UnoPlatform_v5.Server/UnoPlatform_v5.Server.csproj +++ b/samples/UnoPlatform_v5/UnoPlatform_v5.Server/UnoPlatform_v5.Server.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 true diff --git a/samples/UnoPlatform_v5/UnoPlatform_v5.Skia.Gtk/UnoPlatform_v5.Skia.Gtk.csproj b/samples/UnoPlatform_v5/UnoPlatform_v5.Skia.Gtk/UnoPlatform_v5.Skia.Gtk.csproj index 18bd2acff..6228a42ce 100644 --- a/samples/UnoPlatform_v5/UnoPlatform_v5.Skia.Gtk/UnoPlatform_v5.Skia.Gtk.csproj +++ b/samples/UnoPlatform_v5/UnoPlatform_v5.Skia.Gtk/UnoPlatform_v5.Skia.Gtk.csproj @@ -2,7 +2,7 @@ WinExe Exe - net7.0 + net8.0 app.manifest diff --git a/samples/UnoPlatform_v5/UnoPlatform_v5.Tests/UnoPlatform_v5.Tests.csproj b/samples/UnoPlatform_v5/UnoPlatform_v5.Tests/UnoPlatform_v5.Tests.csproj index b084cc606..8621c3a06 100644 --- a/samples/UnoPlatform_v5/UnoPlatform_v5.Tests/UnoPlatform_v5.Tests.csproj +++ b/samples/UnoPlatform_v5/UnoPlatform_v5.Tests/UnoPlatform_v5.Tests.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 false diff --git a/samples/UnoPlatform_v5/UnoPlatform_v5.UITests/UnoPlatform_v5.UITests.csproj b/samples/UnoPlatform_v5/UnoPlatform_v5.UITests/UnoPlatform_v5.UITests.csproj index 59c8c2133..915899900 100644 --- a/samples/UnoPlatform_v5/UnoPlatform_v5.UITests/UnoPlatform_v5.UITests.csproj +++ b/samples/UnoPlatform_v5/UnoPlatform_v5.UITests/UnoPlatform_v5.UITests.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 diff --git a/samples/UnoPlatform_v5/UnoPlatform_v5.Wasm/UnoPlatform_v5.Wasm.csproj b/samples/UnoPlatform_v5/UnoPlatform_v5.Wasm/UnoPlatform_v5.Wasm.csproj index 5255ac3d4..793f70670 100644 --- a/samples/UnoPlatform_v5/UnoPlatform_v5.Wasm/UnoPlatform_v5.Wasm.csproj +++ b/samples/UnoPlatform_v5/UnoPlatform_v5.Wasm/UnoPlatform_v5.Wasm.csproj @@ -1,7 +1,7 @@ Exe - net7.0 + net8.0 $(NoWarn);NU1504;NU1505;NU1701 disable diff --git a/samples/UnoPlatform_v5/UnoPlatform_v5.Windows/UnoPlatform_v5.Windows.csproj b/samples/UnoPlatform_v5/UnoPlatform_v5.Windows/UnoPlatform_v5.Windows.csproj index 14723509f..54bc17266 100644 --- a/samples/UnoPlatform_v5/UnoPlatform_v5.Windows/UnoPlatform_v5.Windows.csproj +++ b/samples/UnoPlatform_v5/UnoPlatform_v5.Windows/UnoPlatform_v5.Windows.csproj @@ -1,7 +1,7 @@ WinExe - net7.0-windows10.0.19041.0 + net8.0-windows10.0.19041.0 UnoPlatform_v5.Windows app.manifest x86;x64;arm64 diff --git a/samples/UnoPlatform_v5/UnoPlatform_v5/UnoPlatform_v5.csproj b/samples/UnoPlatform_v5/UnoPlatform_v5/UnoPlatform_v5.csproj index 046c470e3..b0aee0ab4 100644 --- a/samples/UnoPlatform_v5/UnoPlatform_v5/UnoPlatform_v5.csproj +++ b/samples/UnoPlatform_v5/UnoPlatform_v5/UnoPlatform_v5.csproj @@ -1,7 +1,7 @@ - $(TargetFrameworks);net7.0-windows10.0.19041 - $(TargetFrameworks);net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst + $(TargetFrameworks);net8.0-windows10.0.19041 + $(TargetFrameworks);net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst $(OverrideTargetFrameworks) From 1ca45dc21e50a59599d6af5eb68cf271d2516483 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 16:44:55 -0600 Subject: [PATCH 21/86] enable c# 12 --- samples/AvaloniaSample/AvaloniaSample.csproj | 2 +- samples/BlazorSample/BlazorSample.csproj | 2 +- samples/EtoFormsSample/EtoFormsSample.csproj | 2 +- samples/ViewModelsSamples/ViewModelsSamples.csproj | 2 +- samples/WPFSample/WPFSample.csproj | 2 +- samples/WinFormsSample/WinFormsSample.csproj | 2 +- .../XamarinSample/XamarinSample/XamarinSample.csproj | 4 ++-- .../LiveChartsCore.Behaviours.csproj | 2 +- src/LiveChartsCore/LiveChartsCore.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.Avalonia.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.WPF.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.WinForms.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.Blazor.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.Eto.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.Maui.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.WinUI.csproj | 2 +- .../LiveChartsCore.UnitTesting.csproj | 2 +- 20 files changed, 21 insertions(+), 21 deletions(-) diff --git a/samples/AvaloniaSample/AvaloniaSample.csproj b/samples/AvaloniaSample/AvaloniaSample.csproj index 2c093e0f3..d4de816b0 100644 --- a/samples/AvaloniaSample/AvaloniaSample.csproj +++ b/samples/AvaloniaSample/AvaloniaSample.csproj @@ -2,7 +2,7 @@ net8.0 enable - 11.0 + 12.0 diff --git a/samples/BlazorSample/BlazorSample.csproj b/samples/BlazorSample/BlazorSample.csproj index d65eea841..92868dc7e 100644 --- a/samples/BlazorSample/BlazorSample.csproj +++ b/samples/BlazorSample/BlazorSample.csproj @@ -4,7 +4,7 @@ net8.0 enable enable - 11.0 + 12.0 diff --git a/samples/EtoFormsSample/EtoFormsSample.csproj b/samples/EtoFormsSample/EtoFormsSample.csproj index c81e71af6..257d96a74 100644 --- a/samples/EtoFormsSample/EtoFormsSample.csproj +++ b/samples/EtoFormsSample/EtoFormsSample.csproj @@ -13,7 +13,7 @@ Windows Gtk --> - 11.0 + 12.0 diff --git a/samples/ViewModelsSamples/ViewModelsSamples.csproj b/samples/ViewModelsSamples/ViewModelsSamples.csproj index e84c6c8d5..a6acc1c75 100644 --- a/samples/ViewModelsSamples/ViewModelsSamples.csproj +++ b/samples/ViewModelsSamples/ViewModelsSamples.csproj @@ -9,7 +9,7 @@ false - 11.0 + 12.0 Enable diff --git a/samples/WPFSample/WPFSample.csproj b/samples/WPFSample/WPFSample.csproj index 4a0d26f24..9cc42bde6 100644 --- a/samples/WPFSample/WPFSample.csproj +++ b/samples/WPFSample/WPFSample.csproj @@ -5,7 +5,7 @@ net8.0-windows true false - 11.0 + 12.0 diff --git a/samples/WinFormsSample/WinFormsSample.csproj b/samples/WinFormsSample/WinFormsSample.csproj index aa6b1e305..43cc65038 100644 --- a/samples/WinFormsSample/WinFormsSample.csproj +++ b/samples/WinFormsSample/WinFormsSample.csproj @@ -5,7 +5,7 @@ net8.0-windows true false - 11.0 + 12.0 diff --git a/samples/XamarinSample/XamarinSample/XamarinSample/XamarinSample.csproj b/samples/XamarinSample/XamarinSample/XamarinSample/XamarinSample.csproj index 38e5b7f06..036452400 100644 --- a/samples/XamarinSample/XamarinSample/XamarinSample/XamarinSample.csproj +++ b/samples/XamarinSample/XamarinSample/XamarinSample/XamarinSample.csproj @@ -4,7 +4,7 @@ netstandard2.0 true false - 11.0 + 12.0 @@ -32,4 +32,4 @@ - \ No newline at end of file + diff --git a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj index 9161d4b22..ea7bdb3ba 100644 --- a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj +++ b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj @@ -2,7 +2,7 @@ enable - 11.0 + 12.0 netstandard2.0;netcoreapp2.0.3; diff --git a/src/LiveChartsCore/LiveChartsCore.csproj b/src/LiveChartsCore/LiveChartsCore.csproj index cfc7d69e7..9c4b9dc28 100644 --- a/src/LiveChartsCore/LiveChartsCore.csproj +++ b/src/LiveChartsCore/LiveChartsCore.csproj @@ -2,7 +2,7 @@ enable - 11.0 + 12.0 netstandard2.0;netcoreapp2.0.3; diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj index 66d9212b9..73291c94c 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj @@ -1,7 +1,7 @@ Library - 11.0 + 12.0 enable netstandard2.0;netcoreapp2.0.3;net462;net6.0;net7.0;net8.0; diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj index dbe0f419c..78606ad1b 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj @@ -2,7 +2,7 @@ enable - 11.0 + 12.0 true net462;netcoreapp3.1 LiveChartsCore.SkiaSharpView.WPF diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj index 12c2e54f7..a5eafa041 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj @@ -1,7 +1,7 @@ - 11.0 + 12.0 enable WinExe diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj index 15151f9e4..5d79db756 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj @@ -1,7 +1,7 @@  - 11.0 + 12.0 enable netstandard2.0; LiveChartsCore.SkiaSharpView.XamarinForms diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj index 4d2dc7827..bc6677a4a 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj @@ -2,7 +2,7 @@ enable - 11.0 + 12.0 netstandard2.0;netcoreapp2.0.3; diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj index 4e44b2f0b..7cb2b775e 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj @@ -1,7 +1,7 @@ - 11.0 + 12.0 enable net6.0;net7.0;net8.0 diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/LiveChartsCore.SkiaSharpView.Eto.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/LiveChartsCore.SkiaSharpView.Eto.csproj index 3313ed535..5bb70b92f 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/LiveChartsCore.SkiaSharpView.Eto.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/LiveChartsCore.SkiaSharpView.Eto.csproj @@ -2,7 +2,7 @@ Library - 11.0 + 12.0 enable netstandard2.0 LiveChartsCore.SkiaSharpView.Eto diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj index 20cd24fe1..076d8db22 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj @@ -2,7 +2,7 @@ enable - 11.0 + 12.0 true true diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj index c28535b5e..8c89f5534 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj @@ -1,7 +1,7 @@ enable - 11.0 + 12.0 diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj index e083eebc2..6d8da1b2e 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj @@ -1,6 +1,6 @@ - 11.0 + 12.0 enable diff --git a/tests/LiveChartsCore.UnitTesting/LiveChartsCore.UnitTesting.csproj b/tests/LiveChartsCore.UnitTesting/LiveChartsCore.UnitTesting.csproj index 76bdf9331..7254c728c 100644 --- a/tests/LiveChartsCore.UnitTesting/LiveChartsCore.UnitTesting.csproj +++ b/tests/LiveChartsCore.UnitTesting/LiveChartsCore.UnitTesting.csproj @@ -1,7 +1,7 @@ - 11.0 + 12.0 net462;net6.0;net7.0;net8.0 false From 987bfe464a43035b9155dcda0dbb96a176bd30dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 17:48:45 -0600 Subject: [PATCH 22/86] use Collection expressions --- samples/MauiSample/AppShell.xaml.cs | 2 +- .../Bars/AutoUpdate/ViewModel.cs | 12 ++--- .../Bars/DelayedAnimation/ViewModel.cs | 2 +- .../General/ConditionalDraw/ViewModel.cs | 8 ++-- .../General/RealTime/ViewModel.cs | 8 ++-- .../General/Scrollable/ViewModel.cs | 2 +- .../Lines/AutoUpdate/ViewModel.cs | 12 ++--- .../Pies/AutoUpdate/ViewModel.cs | 6 +-- .../Scatter/AutoUpdate/ViewModel.cs | 12 ++--- .../StepLines/AutoUpdate/ViewModel.cs | 12 ++--- .../XamarinSample/AppShell.xaml.cs | 2 +- src/LiveChartsCore/CartesianChart.cs | 4 +- src/LiveChartsCore/Chart.cs | 10 ++-- src/LiveChartsCore/CoreAxis.cs | 4 +- src/LiveChartsCore/CoreHeatLandSeries.cs | 4 +- src/LiveChartsCore/CoreHeatSeries.cs | 2 +- src/LiveChartsCore/CoreLineSeries.cs | 8 ++-- src/LiveChartsCore/CorePolarAxis.cs | 4 +- src/LiveChartsCore/CorePolarLineSeries.cs | 8 ++-- src/LiveChartsCore/CoreStepLineSeries.cs | 8 ++-- src/LiveChartsCore/Drawing/Animatable.cs | 2 +- src/LiveChartsCore/Geo/CoreMap.cs | 2 +- src/LiveChartsCore/Geo/MapLayer.cs | 2 +- src/LiveChartsCore/GeoMap.cs | 2 +- src/LiveChartsCore/Kernel/ChartElement.cs | 4 +- .../Kernel/ChartEntityMetaData.cs | 2 +- .../Kernel/CollectionDeepObserver.cs | 2 +- src/LiveChartsCore/Kernel/Drawing/Sketch.cs | 2 +- .../Kernel/LiveChartsSettings.cs | 2 +- .../Kernel/Providers/DataFactory.cs | 4 +- src/LiveChartsCore/Kernel/SeriesContext.cs | 12 ++--- src/LiveChartsCore/Kernel/Stacker.cs | 6 +-- src/LiveChartsCore/Motion/MotionCanvas.cs | 6 +-- src/LiveChartsCore/Series.cs | 28 ++--------- src/LiveChartsCore/Themes/Theme.cs | 48 +++++++++---------- .../VisualElements/AngularTicksVisual.cs | 2 +- .../VisualElements/RelativePanel.cs | 2 +- .../VisualElements/StackPanel.cs | 6 +-- .../VisualElements/TableLayout.cs | 4 +- .../MotionCanvas.cs | 2 +- .../Drawing/Geometries/SVGPathGeometry.cs | 2 +- .../Extensions/GaugeGenerator.cs | 4 +- .../Extensions/PieChartExtensions.cs | 4 +- .../LiveChartsCore.SkiaSharp/GaugeBuilder.cs | 4 +- .../LiveChartsCore.SkiaSharp/MapFactory.cs | 6 +-- .../Painting/Paint.cs | 6 +-- .../SKCharts/Helpers/DoubleDict.cs | 4 +- .../JsInterop/DomJsInterop.cs | 4 +- .../MotionCanvas.razor.cs | 2 +- .../MotionCanvas.cs | 2 +- 50 files changed, 143 insertions(+), 165 deletions(-) diff --git a/samples/MauiSample/AppShell.xaml.cs b/samples/MauiSample/AppShell.xaml.cs index 8c6cb7a92..094925761 100644 --- a/samples/MauiSample/AppShell.xaml.cs +++ b/samples/MauiSample/AppShell.xaml.cs @@ -3,7 +3,7 @@ public partial class AppShell : Shell { private bool _isLoaded = false; - private readonly Dictionary _routesSamples = new(); + private readonly Dictionary _routesSamples = []; public AppShell() { diff --git a/samples/ViewModelsSamples/Bars/AutoUpdate/ViewModel.cs b/samples/ViewModelsSamples/Bars/AutoUpdate/ViewModel.cs index 0c6a9c7d7..e588efa21 100644 --- a/samples/ViewModelsSamples/Bars/AutoUpdate/ViewModel.cs +++ b/samples/ViewModelsSamples/Bars/AutoUpdate/ViewModel.cs @@ -18,8 +18,8 @@ public partial class ViewModel : ObservableObject public ViewModel() { // Use ObservableCollections to let the chart listen for changes (or any INotifyCollectionChanged). // mark - _observableValues = new ObservableCollection - { + _observableValues = + [ // Use the ObservableValue or ObservablePoint types to let the chart listen for property changes // mark // or use any INotifyPropertyChanged implementation // mark new ObservablePoint(_index++, 2), @@ -35,15 +35,15 @@ public ViewModel() new(_index++, 3), new(_index++, 8), new(_index++, 3) - }; + ]; - Series = new ObservableCollection - { + Series = + [ new ColumnSeries { Values = _observableValues } - }; + ]; // in the following sample notice that the type int does not implement INotifyPropertyChanged // and our Series.Values property is of type List diff --git a/samples/ViewModelsSamples/Bars/DelayedAnimation/ViewModel.cs b/samples/ViewModelsSamples/Bars/DelayedAnimation/ViewModel.cs index 9696f92c9..2fa32acd7 100644 --- a/samples/ViewModelsSamples/Bars/DelayedAnimation/ViewModel.cs +++ b/samples/ViewModelsSamples/Bars/DelayedAnimation/ViewModel.cs @@ -43,7 +43,7 @@ public ViewModel() columnSeries1.PointMeasured += OnPointMeasured; columnSeries2.PointMeasured += OnPointMeasured; - Series = new List { columnSeries1, columnSeries2 }; + Series = [columnSeries1, columnSeries2]; } private void OnPointMeasured(ChartPoint point) diff --git a/samples/ViewModelsSamples/General/ConditionalDraw/ViewModel.cs b/samples/ViewModelsSamples/General/ConditionalDraw/ViewModel.cs index bad676fa7..b8cd03d99 100644 --- a/samples/ViewModelsSamples/General/ConditionalDraw/ViewModel.cs +++ b/samples/ViewModelsSamples/General/ConditionalDraw/ViewModel.cs @@ -13,16 +13,16 @@ namespace ViewModelsSamples.General.ConditionalDraw; public partial class ViewModel : ObservableObject { - private readonly ObservableCollection _values = new(); + private readonly ObservableCollection _values = []; public ViewModel() { var dangerPaint = new SolidColorPaint(SKColors.Red); - _values = new ObservableCollection - { + _values = + [ new(2), new(5), new(4), new(6), new(8), new(3), new(2), new(4), new(6) - }; + ]; var series = new ColumnSeries { diff --git a/samples/ViewModelsSamples/General/RealTime/ViewModel.cs b/samples/ViewModelsSamples/General/RealTime/ViewModel.cs index bec4a2ef0..3f411faf4 100644 --- a/samples/ViewModelsSamples/General/RealTime/ViewModel.cs +++ b/samples/ViewModelsSamples/General/RealTime/ViewModel.cs @@ -14,13 +14,13 @@ namespace ViewModelsSamples.General.RealTime; public partial class ViewModel : ObservableObject { private readonly Random _random = new(); - private readonly List _values = new(); + private readonly List _values = []; private readonly DateTimeAxis _customAxis; public ViewModel() { - Series = new ObservableCollection - { + Series = + [ new LineSeries { Values = _values, @@ -28,7 +28,7 @@ public ViewModel() GeometryFill = null, GeometryStroke = null } - }; + ]; _customAxis = new DateTimeAxis(TimeSpan.FromSeconds(1), Formatter) { diff --git a/samples/ViewModelsSamples/General/Scrollable/ViewModel.cs b/samples/ViewModelsSamples/General/Scrollable/ViewModel.cs index 341f8f4ea..e48552f83 100644 --- a/samples/ViewModelsSamples/General/Scrollable/ViewModel.cs +++ b/samples/ViewModelsSamples/General/Scrollable/ViewModel.cs @@ -16,7 +16,7 @@ namespace ViewModelsSamples.General.Scrollable; public partial class ViewModel { private bool _isDown = false; - private readonly ObservableCollection _values = new(); + private readonly ObservableCollection _values = []; public ViewModel() { diff --git a/samples/ViewModelsSamples/Lines/AutoUpdate/ViewModel.cs b/samples/ViewModelsSamples/Lines/AutoUpdate/ViewModel.cs index 67398a217..3bb7e5786 100644 --- a/samples/ViewModelsSamples/Lines/AutoUpdate/ViewModel.cs +++ b/samples/ViewModelsSamples/Lines/AutoUpdate/ViewModel.cs @@ -18,8 +18,8 @@ public partial class ViewModel : ObservableObject public ViewModel() { // Use ObservableCollections to let the chart listen for changes (or any INotifyCollectionChanged). // mark - _observableValues = new ObservableCollection - { + _observableValues = + [ // Use the ObservableValue or ObservablePoint types to let the chart listen for property changes // mark // or use any INotifyPropertyChanged implementation // mark new ObservableValue(2), @@ -35,16 +35,16 @@ public ViewModel() new(3), new(4), new(3) - }; + ]; - Series = new ObservableCollection - { + Series = + [ new LineSeries { Values = _observableValues, Fill = null } - }; + ]; // in the following sample notice that the type int does not implement INotifyPropertyChanged // and our Series.Values property is of type List diff --git a/samples/ViewModelsSamples/Pies/AutoUpdate/ViewModel.cs b/samples/ViewModelsSamples/Pies/AutoUpdate/ViewModel.cs index d7bb498d1..5ccd9e9c0 100644 --- a/samples/ViewModelsSamples/Pies/AutoUpdate/ViewModel.cs +++ b/samples/ViewModelsSamples/Pies/AutoUpdate/ViewModel.cs @@ -15,8 +15,8 @@ public partial class ViewModel : ObservableObject public ViewModel() { // Use ObservableCollections to let the chart listen for changes (or any INotifyCollectionChanged). // mark - Series = new ObservableCollection - { + Series = + [ // Use the ObservableValue or ObservablePoint types to let the chart listen for property changes // mark // or use any INotifyPropertyChanged implementation // mark new PieSeries { Values = new[] { new ObservableValue(2) } }, @@ -25,7 +25,7 @@ public ViewModel() new PieSeries { Values = new[] { new ObservableValue(7) } }, new PieSeries { Values = new[] { new ObservableValue(4) } }, new PieSeries { Values = new[] { new ObservableValue(3) } } - }; + ]; } public ObservableCollection Series { get; set; } diff --git a/samples/ViewModelsSamples/Scatter/AutoUpdate/ViewModel.cs b/samples/ViewModelsSamples/Scatter/AutoUpdate/ViewModel.cs index ba675fa62..174917151 100644 --- a/samples/ViewModelsSamples/Scatter/AutoUpdate/ViewModel.cs +++ b/samples/ViewModelsSamples/Scatter/AutoUpdate/ViewModel.cs @@ -18,8 +18,8 @@ public partial class ViewModel : ObservableObject public ViewModel() { // Use ObservableCollections to let the chart listen for changes (or any INotifyCollectionChanged). // mark - _observableValues = new ObservableCollection - { + _observableValues = + [ // Use the WeightedPoint, ObservableValue or ObservablePoint types to let the chart listen for property changes // mark // or use any INotifyPropertyChanged implementation // mark new WeightedPoint(_index++, 2, 6), @@ -35,12 +35,12 @@ public ViewModel() new(_index++, 3, 8), new(_index++, 8, 9), new(_index++, 3, 4) - }; + ]; - Series = new ObservableCollection - { + Series = + [ new ScatterSeries { Values = _observableValues, GeometrySize = 50 } - }; + ]; // in the following series notice that the type int does not implement INotifyPropertyChanged // and our Series.Values collection is of type List diff --git a/samples/ViewModelsSamples/StepLines/AutoUpdate/ViewModel.cs b/samples/ViewModelsSamples/StepLines/AutoUpdate/ViewModel.cs index 549d038a3..05dc04353 100644 --- a/samples/ViewModelsSamples/StepLines/AutoUpdate/ViewModel.cs +++ b/samples/ViewModelsSamples/StepLines/AutoUpdate/ViewModel.cs @@ -18,8 +18,8 @@ public partial class ViewModel : ObservableObject public ViewModel() { // Use ObservableCollections to let the chart listen for changes (or any INotifyCollectionChanged). // mark - _observableValues = new ObservableCollection - { + _observableValues = + [ // Use the ObservableValue or ObservablePoint types to let the chart listen for property changes // mark // or use any INotifyPropertyChanged implementation // mark new ObservablePoint(_index++, 2), @@ -35,16 +35,16 @@ public ViewModel() new(_index++, 3), new(_index++, 4), new(_index++, 3) - }; + ]; - Series = new ObservableCollection - { + Series = + [ new StepLineSeries { Values = _observableValues, // Fill = null } - }; + ]; // in the following series notice that the type int does not implement INotifyPropertyChanged // and our Series.Values collection is of type List diff --git a/samples/XamarinSample/XamarinSample/XamarinSample/AppShell.xaml.cs b/samples/XamarinSample/XamarinSample/XamarinSample/AppShell.xaml.cs index f8d15b40c..90dfaa014 100644 --- a/samples/XamarinSample/XamarinSample/XamarinSample/AppShell.xaml.cs +++ b/samples/XamarinSample/XamarinSample/XamarinSample/AppShell.xaml.cs @@ -8,7 +8,7 @@ namespace XamarinSample; public partial class AppShell : Shell { private bool _isLoaded = false; - private readonly Dictionary _routesSamples = new(); + private readonly Dictionary _routesSamples = []; public AppShell() { diff --git a/src/LiveChartsCore/CartesianChart.cs b/src/LiveChartsCore/CartesianChart.cs index 94abc5d20..29387eac8 100644 --- a/src/LiveChartsCore/CartesianChart.cs +++ b/src/LiveChartsCore/CartesianChart.cs @@ -48,7 +48,7 @@ public class CartesianChart : Chart private DrawMarginFrame? _previousDrawMarginFrame; private const double MaxAxisBound = 0.05; private const double MaxAxisActiveBound = 0.15; - private HashSet> _crosshair = new(); + private HashSet> _crosshair = []; /// /// Initializes a new instance of the class. @@ -851,7 +851,7 @@ protected internal override void Measure() public override void Unload() { base.Unload(); - _crosshair = new(); + _crosshair = []; _isFirstDraw = true; } diff --git a/src/LiveChartsCore/Chart.cs b/src/LiveChartsCore/Chart.cs index 8f1223bd0..f4149a2bf 100644 --- a/src/LiveChartsCore/Chart.cs +++ b/src/LiveChartsCore/Chart.cs @@ -44,15 +44,15 @@ public abstract class Chart : IChart { #region fields - internal readonly HashSet> _everMeasuredElements = new(); - internal HashSet> _toDeleteElements = new(); + internal readonly HashSet> _everMeasuredElements = []; + internal HashSet> _toDeleteElements = []; internal bool _isToolTipOpen = false; internal bool _isPointerIn; internal LvcPoint _pointerPosition = new(-10, -10); internal float _titleHeight = 0f; internal LvcSize _legendSize; internal bool _preserveFirstDraw = false; - internal readonly HashSet _drawnSeries = new(); + internal readonly HashSet _drawnSeries = []; internal bool _isFirstDraw = true; private readonly ActionThrottler _updateThrottler; private readonly ActionThrottler _tooltipThrottler; @@ -62,7 +62,7 @@ public abstract class Chart : IChart private LvcPoint _pointerPanningPosition = new(-10, -10); private LvcPoint _pointerPreviousPanningPosition = new(-10, -10); private bool _isPanning = false; - private readonly Dictionary _activePoints = new(); + private readonly Dictionary _activePoints = []; private LvcSize _previousSize = new(); private readonly bool _isMobile; @@ -578,7 +578,7 @@ protected void CollectVisuals() _ = _everMeasuredElements.Remove(visual); } - _toDeleteElements = new HashSet>(); + _toDeleteElements = []; } /// diff --git a/src/LiveChartsCore/CoreAxis.cs b/src/LiveChartsCore/CoreAxis.cs index 848d59fd8..10a14170e 100644 --- a/src/LiveChartsCore/CoreAxis.cs +++ b/src/LiveChartsCore/CoreAxis.cs @@ -52,7 +52,7 @@ public abstract class CoreAxis /// /// The active separators /// - protected internal readonly Dictionary>> activeSeparators = new(); + protected internal readonly Dictionary>> activeSeparators = []; internal float _xo = 0f, _yo = 0f; internal LvcSize _size; @@ -405,7 +405,7 @@ public override void Invalidate(Chart chart) if (!activeSeparators.TryGetValue(cartesianChart, out var separators)) { - separators = new Dictionary>(); + separators = []; activeSeparators[cartesianChart] = separators; } diff --git a/src/LiveChartsCore/CoreHeatLandSeries.cs b/src/LiveChartsCore/CoreHeatLandSeries.cs index 594536afc..4c084d996 100644 --- a/src/LiveChartsCore/CoreHeatLandSeries.cs +++ b/src/LiveChartsCore/CoreHeatLandSeries.cs @@ -45,9 +45,9 @@ public class CoreHeatLandSeries : IGeoSeries, private double[]? _colorStops; private IEnumerable? _lands; private bool _isVisible; - private readonly HashSet> _subscribedTo = new(); + private readonly HashSet> _subscribedTo = []; private readonly CollectionDeepObserver _observer; - private readonly HashSet _everUsed = new(); + private readonly HashSet _everUsed = []; /// /// Initializes a new instance of the class. diff --git a/src/LiveChartsCore/CoreHeatSeries.cs b/src/LiveChartsCore/CoreHeatSeries.cs index 751c2a12e..1cf2fb270 100644 --- a/src/LiveChartsCore/CoreHeatSeries.cs +++ b/src/LiveChartsCore/CoreHeatSeries.cs @@ -46,7 +46,7 @@ public abstract class CoreHeatSeries private IPaint? _paintTaks; private Bounds _weightBounds = new(); private int _heatKnownLength = 0; - private List> _heatStops = new(); + private List> _heatStops = []; private LvcColor[] _heatMap = { LvcColor.FromArgb(255, 87, 103, 222), // cold (min value) diff --git a/src/LiveChartsCore/CoreLineSeries.cs b/src/LiveChartsCore/CoreLineSeries.cs index 1a74fd5ca..0236a83f7 100644 --- a/src/LiveChartsCore/CoreLineSeries.cs +++ b/src/LiveChartsCore/CoreLineSeries.cs @@ -49,8 +49,8 @@ public class CoreLineSeries, new() where TDrawingContext : DrawingContext { - internal readonly Dictionary> _fillPathHelperDictionary = new(); - internal readonly Dictionary> _strokePathHelperDictionary = new(); + internal readonly Dictionary> _fillPathHelperDictionary = []; + internal readonly Dictionary> _strokePathHelperDictionary = []; private float _lineSmoothness = 0.65f; private float _geometrySize = 14f; private bool _enableNullSplitting = true; @@ -162,13 +162,13 @@ public override void Invalidate(Chart chart) if (!_strokePathHelperDictionary.TryGetValue(chart.Canvas.Sync, out var strokePathHelperContainer)) { - strokePathHelperContainer = new List(); + strokePathHelperContainer = []; _strokePathHelperDictionary[chart.Canvas.Sync] = strokePathHelperContainer; } if (!_fillPathHelperDictionary.TryGetValue(chart.Canvas.Sync, out var fillPathHelperContainer)) { - fillPathHelperContainer = new List(); + fillPathHelperContainer = []; _fillPathHelperDictionary[chart.Canvas.Sync] = fillPathHelperContainer; } diff --git a/src/LiveChartsCore/CorePolarAxis.cs b/src/LiveChartsCore/CorePolarAxis.cs index 832d5f306..735129594 100644 --- a/src/LiveChartsCore/CorePolarAxis.cs +++ b/src/LiveChartsCore/CorePolarAxis.cs @@ -52,7 +52,7 @@ public abstract class CorePolarAxis /// The active separators /// - protected readonly Dictionary>> activeSeparators = new(); + protected readonly Dictionary>> activeSeparators = []; internal PolarAxisOrientation _orientation; private double _minStep = 0; @@ -279,7 +279,7 @@ public override void Invalidate(Chart chart) if (!activeSeparators.TryGetValue(polarChart, out var separators)) { - separators = new Dictionary>(); + separators = []; activeSeparators[polarChart] = separators; } diff --git a/src/LiveChartsCore/CorePolarLineSeries.cs b/src/LiveChartsCore/CorePolarLineSeries.cs index 874799fe3..6913365c5 100644 --- a/src/LiveChartsCore/CorePolarLineSeries.cs +++ b/src/LiveChartsCore/CorePolarLineSeries.cs @@ -47,8 +47,8 @@ public class CorePolarLineSeries, new() where TDrawingContext : DrawingContext { - private readonly Dictionary> _fillPathHelperDictionary = new(); - private readonly Dictionary> _strokePathHelperDictionary = new(); + private readonly Dictionary> _fillPathHelperDictionary = []; + private readonly Dictionary> _strokePathHelperDictionary = []; private float _lineSmoothness = 0.65f; private float _geometrySize = 14f; private bool _enableNullSplitting = true; @@ -218,13 +218,13 @@ public override void Invalidate(Chart chart) if (!_strokePathHelperDictionary.TryGetValue(chart.Canvas.Sync, out var strokePathHelperContainer)) { - strokePathHelperContainer = new List(); + strokePathHelperContainer = []; _strokePathHelperDictionary[chart.Canvas.Sync] = strokePathHelperContainer; } if (!_fillPathHelperDictionary.TryGetValue(chart.Canvas.Sync, out var fillPathHelperContainer)) { - fillPathHelperContainer = new List(); + fillPathHelperContainer = []; _fillPathHelperDictionary[chart.Canvas.Sync] = fillPathHelperContainer; } diff --git a/src/LiveChartsCore/CoreStepLineSeries.cs b/src/LiveChartsCore/CoreStepLineSeries.cs index 96af5eaff..916efae43 100644 --- a/src/LiveChartsCore/CoreStepLineSeries.cs +++ b/src/LiveChartsCore/CoreStepLineSeries.cs @@ -48,8 +48,8 @@ public class CoreStepLineSeries, new() where TDrawingContext : DrawingContext { - private readonly Dictionary> _fillPathHelperDictionary = new(); - private readonly Dictionary> _strokePathHelperDictionary = new(); + private readonly Dictionary> _fillPathHelperDictionary = []; + private readonly Dictionary> _strokePathHelperDictionary = []; private float _geometrySize = 14f; private IPaint? _geometryFill; private IPaint? _geometryStroke; @@ -133,13 +133,13 @@ public override void Invalidate(Chart chart) if (!_strokePathHelperDictionary.TryGetValue(chart.Canvas.Sync, out var strokePathHelperContainer)) { - strokePathHelperContainer = new List(); + strokePathHelperContainer = []; _strokePathHelperDictionary[chart.Canvas.Sync] = strokePathHelperContainer; } if (!_fillPathHelperDictionary.TryGetValue(chart.Canvas.Sync, out var fillPathHelperContainer)) { - fillPathHelperContainer = new List(); + fillPathHelperContainer = []; _fillPathHelperDictionary[chart.Canvas.Sync] = fillPathHelperContainer; } diff --git a/src/LiveChartsCore/Drawing/Animatable.cs b/src/LiveChartsCore/Drawing/Animatable.cs index 62de9f6d0..5a4b6f23e 100644 --- a/src/LiveChartsCore/Drawing/Animatable.cs +++ b/src/LiveChartsCore/Drawing/Animatable.cs @@ -45,7 +45,7 @@ protected Animatable() { } public bool RemoveOnCompleted { get; set; } /// - public Dictionary MotionProperties { get; } = new(); + public Dictionary MotionProperties { get; } = []; /// public void SetTransition(Animation? animation, params string[]? propertyName) diff --git a/src/LiveChartsCore/Geo/CoreMap.cs b/src/LiveChartsCore/Geo/CoreMap.cs index 8e6a834bb..fdd83def2 100644 --- a/src/LiveChartsCore/Geo/CoreMap.cs +++ b/src/LiveChartsCore/Geo/CoreMap.cs @@ -62,7 +62,7 @@ public CoreMap(StreamReader streamReader, string layerName = "default") /// /// Gets the map layers dictionary. /// - public Dictionary> Layers { get; protected set; } = new(); + public Dictionary> Layers { get; protected set; } = []; /// /// Finds a land by short name. diff --git a/src/LiveChartsCore/Geo/MapLayer.cs b/src/LiveChartsCore/Geo/MapLayer.cs index 1423c9652..029d3404d 100644 --- a/src/LiveChartsCore/Geo/MapLayer.cs +++ b/src/LiveChartsCore/Geo/MapLayer.cs @@ -87,7 +87,7 @@ public MapLayer(string layerName, IPaint stroke, IPaint /// Gets the lands. /// - public Dictionary Lands { get; private set; } = new(); + public Dictionary Lands { get; private set; } = []; /// /// Gets or sets the land condition, it must return true if the land is required. diff --git a/src/LiveChartsCore/GeoMap.cs b/src/LiveChartsCore/GeoMap.cs index 7b141cc2c..5c7612990 100644 --- a/src/LiveChartsCore/GeoMap.cs +++ b/src/LiveChartsCore/GeoMap.cs @@ -38,7 +38,7 @@ namespace LiveChartsCore; public class GeoMap where TDrawingContext : DrawingContext { - private readonly HashSet> _everMeasuredSeries = new(); + private readonly HashSet> _everMeasuredSeries = []; private readonly ActionThrottler _updateThrottler; private readonly ActionThrottler _panningThrottler; private bool _isHeatInCanvas = false; diff --git a/src/LiveChartsCore/Kernel/ChartElement.cs b/src/LiveChartsCore/Kernel/ChartElement.cs index 29dd9ed00..5f8ab9cde 100644 --- a/src/LiveChartsCore/Kernel/ChartElement.cs +++ b/src/LiveChartsCore/Kernel/ChartElement.cs @@ -37,8 +37,8 @@ public abstract class ChartElement : IChartElement _userSets = new(); - private readonly List> _deletingTasks = new(); + internal readonly HashSet _userSets = []; + private readonly List> _deletingTasks = []; /// /// Occurs when a property value changes. diff --git a/src/LiveChartsCore/Kernel/ChartEntityMetaData.cs b/src/LiveChartsCore/Kernel/ChartEntityMetaData.cs index e397e19c9..6bc98a98b 100644 --- a/src/LiveChartsCore/Kernel/ChartEntityMetaData.cs +++ b/src/LiveChartsCore/Kernel/ChartEntityMetaData.cs @@ -60,5 +60,5 @@ public int EntityIndex /// /// Gets the chart points dictionary. /// - public Dictionary ChartPoints { get; set; } = new(); + public Dictionary ChartPoints { get; set; } = []; } diff --git a/src/LiveChartsCore/Kernel/CollectionDeepObserver.cs b/src/LiveChartsCore/Kernel/CollectionDeepObserver.cs index 70bccadef..94f711715 100644 --- a/src/LiveChartsCore/Kernel/CollectionDeepObserver.cs +++ b/src/LiveChartsCore/Kernel/CollectionDeepObserver.cs @@ -36,7 +36,7 @@ public class CollectionDeepObserver { private readonly NotifyCollectionChangedEventHandler _onCollectionChanged; private readonly PropertyChangedEventHandler _onItemPropertyChanged; - private readonly HashSet _itemsListening = new(); + private readonly HashSet _itemsListening = []; /// /// The check i notify property changed diff --git a/src/LiveChartsCore/Kernel/Drawing/Sketch.cs b/src/LiveChartsCore/Kernel/Drawing/Sketch.cs index ba3967562..7cf7b81e7 100644 --- a/src/LiveChartsCore/Kernel/Drawing/Sketch.cs +++ b/src/LiveChartsCore/Kernel/Drawing/Sketch.cs @@ -72,5 +72,5 @@ public Sketch(double width, double height, string? svg) /// /// The paint tasks schedule. /// - public List> PaintSchedules { get; set; } = new(); + public List> PaintSchedules { get; set; } = []; } diff --git a/src/LiveChartsCore/Kernel/LiveChartsSettings.cs b/src/LiveChartsCore/Kernel/LiveChartsSettings.cs index 91d8bcbd7..d70782269 100644 --- a/src/LiveChartsCore/Kernel/LiveChartsSettings.cs +++ b/src/LiveChartsCore/Kernel/LiveChartsSettings.cs @@ -38,7 +38,7 @@ namespace LiveChartsCore.Kernel; public class LiveChartsSettings { private object? _currentProvider; - private readonly Dictionary _mappers = new(); + private readonly Dictionary _mappers = []; private object _theme = new(); /// diff --git a/src/LiveChartsCore/Kernel/Providers/DataFactory.cs b/src/LiveChartsCore/Kernel/Providers/DataFactory.cs index 173a358f2..f7a0d45a0 100644 --- a/src/LiveChartsCore/Kernel/Providers/DataFactory.cs +++ b/src/LiveChartsCore/Kernel/Providers/DataFactory.cs @@ -40,7 +40,7 @@ public class DataFactory where TDrawingContext : DrawingContext { private readonly bool _isTModelChartEntity = false; - private readonly Dictionary> _chartIndexEntityMap = new(); + private readonly Dictionary> _chartIndexEntityMap = []; private ISeries? _series; /// @@ -380,7 +380,7 @@ private IEnumerable EnumerateChartEntities(ISeries series, _ = _chartIndexEntityMap.TryGetValue(canvas.Sync, out var d); if (d is null) { - d = new Dictionary(); + d = []; _chartIndexEntityMap[canvas.Sync] = d; } var IndexEntityMap = d; diff --git a/src/LiveChartsCore/Kernel/SeriesContext.cs b/src/LiveChartsCore/Kernel/SeriesContext.cs index 2123f6ee4..385361ee5 100644 --- a/src/LiveChartsCore/Kernel/SeriesContext.cs +++ b/src/LiveChartsCore/Kernel/SeriesContext.cs @@ -47,13 +47,13 @@ public class SeriesContext private bool _arePieLabeleMeasured = false; private float _pieLabelsSize = 0f; - private readonly Dictionary, int> _columnPositions = new(); - private readonly Dictionary, int> _rowPositions = new(); - private readonly Dictionary, int> _boxPositions = new(); - private readonly Dictionary _stackColumnPositions = new(); - private readonly Dictionary _stackRowsPositions = new(); + private readonly Dictionary, int> _columnPositions = []; + private readonly Dictionary, int> _rowPositions = []; + private readonly Dictionary, int> _boxPositions = []; + private readonly Dictionary _stackColumnPositions = []; + private readonly Dictionary _stackRowsPositions = []; - private readonly Dictionary> _stackers = new(); + private readonly Dictionary> _stackers = []; private readonly IChart _chart; diff --git a/src/LiveChartsCore/Kernel/Stacker.cs b/src/LiveChartsCore/Kernel/Stacker.cs index 56d5f2472..9389e5120 100644 --- a/src/LiveChartsCore/Kernel/Stacker.cs +++ b/src/LiveChartsCore/Kernel/Stacker.cs @@ -33,9 +33,9 @@ namespace LiveChartsCore.Kernel; public class Stacker where TDrawingContext : DrawingContext { - private readonly Dictionary, int> _stackPositions = new(); - private readonly List> _stack = new(); - private readonly Dictionary _totals = new(); + private readonly Dictionary, int> _stackPositions = []; + private readonly List> _stack = []; + private readonly Dictionary _totals = []; private int _stackCount = 0; private int _knownMaxLenght = 0; diff --git a/src/LiveChartsCore/Motion/MotionCanvas.cs b/src/LiveChartsCore/Motion/MotionCanvas.cs index 0a29dc940..0939df793 100644 --- a/src/LiveChartsCore/Motion/MotionCanvas.cs +++ b/src/LiveChartsCore/Motion/MotionCanvas.cs @@ -35,9 +35,9 @@ namespace LiveChartsCore.Motion; public class MotionCanvas : IDisposable where TDrawingContext : DrawingContext { - internal HashSet> _paintTasks = new(); + internal HashSet> _paintTasks = []; private readonly Stopwatch _stopwatch = new(); - private readonly List _fpsStack = new(); + private readonly List _fpsStack = []; private long _previousFrameTime; private long _previousLogTime; private object _sync = new(); @@ -81,7 +81,7 @@ public MotionCanvas() /// /// Gets the animatables collection. /// - public HashSet Trackers { get; } = new HashSet(); + public HashSet Trackers { get; } = []; /// /// Draws the frame. diff --git a/src/LiveChartsCore/Series.cs b/src/LiveChartsCore/Series.cs index 705b2184d..4c029fecc 100644 --- a/src/LiveChartsCore/Series.cs +++ b/src/LiveChartsCore/Series.cs @@ -56,7 +56,7 @@ public abstract class Series /// /// The subscribed to /// - protected readonly HashSet subscribedTo = new(); + protected readonly HashSet subscribedTo = []; /// /// The implements icp @@ -76,7 +76,7 @@ public abstract class Series /// /// The ever fetched points. /// - protected internal HashSet everFetched = new(); + protected internal HashSet everFetched = []; /// /// Indicates whether the custom measure handler was requested already. @@ -93,12 +93,6 @@ public abstract class Series /// protected bool _geometrySvgChanged = false; - /// - /// Will be deleted on future versions - /// - [Obsolete] - protected Func, string>? _obsolete_formatter = null; - private readonly CollectionDeepObserver _observer; private IEnumerable? _values; private string? _name; @@ -233,22 +227,6 @@ public string? GeometrySvg /// public int ZIndex { get => _zIndex; set => SetProperty(ref _zIndex, value); } - /// - /// Gets or sets the tool tip label formatter, this function will build the label when a point in this series - /// is shown inside a tool tip. - /// - /// - /// The tool tip label formatter. - /// - [Obsolete( - $"You must now use {nameof(CartesianSeries.XToolTipLabelFormatter)} or " + - $"{nameof(CartesianSeries.YToolTipLabelFormatter)} instead.")] - public Func, string>? TooltipLabelFormatter - { - get => _obsolete_formatter; - set => _obsolete_formatter = value; - } - /// /// Gets or sets the data label formatter, this function will build the label when a point in this series /// is shown as data label. @@ -428,7 +406,7 @@ public override void RemoveFromUI(Chart chart) base.RemoveFromUI(chart); DataFactory?.Dispose(chart); _dataFactory = null; - everFetched = new HashSet(); + everFetched = []; } /// diff --git a/src/LiveChartsCore/Themes/Theme.cs b/src/LiveChartsCore/Themes/Theme.cs index a2e3edbe6..e425a3ec1 100644 --- a/src/LiveChartsCore/Themes/Theme.cs +++ b/src/LiveChartsCore/Themes/Theme.cs @@ -48,7 +48,7 @@ public class Theme /// /// The axis builder. /// - public List>> AxisBuilder { get; set; } = new(); + public List>> AxisBuilder { get; set; } = []; /// /// Gets or sets the draw margin frame builder. @@ -56,7 +56,7 @@ public class Theme /// /// The draw margin frame builder. /// - public List>> DrawMarginFrameBuilder { get; set; } = new(); + public List>> DrawMarginFrameBuilder { get; set; } = []; /// /// Gets or sets the series builder. @@ -64,7 +64,7 @@ public class Theme /// /// The pie series builder. /// - public List>> SeriesBuilder { get; set; } = new(); + public List>> SeriesBuilder { get; set; } = []; /// /// Gets or sets the pie series builder. @@ -72,7 +72,7 @@ public class Theme /// /// The pie series builder. /// - public List>> PieSeriesBuilder { get; set; } = new(); + public List>> PieSeriesBuilder { get; set; } = []; /// /// Gets or sets the gauge series builder. @@ -80,7 +80,7 @@ public class Theme /// /// The pie series builder. /// - public List>> GaugeSeriesBuilder { get; set; } = new(); + public List>> GaugeSeriesBuilder { get; set; } = []; /// /// Gets or sets the gauge fill series builder. @@ -88,7 +88,7 @@ public class Theme /// /// The pie series builder. /// - public List>> GaugeFillSeriesBuilder { get; set; } = new(); + public List>> GaugeFillSeriesBuilder { get; set; } = []; /// /// Gets or sets the Cartesian series builder. @@ -96,7 +96,7 @@ public class Theme /// /// The pie series builder. /// - public List>> CartesianSeriesBuilder { get; set; } = new(); + public List>> CartesianSeriesBuilder { get; set; } = []; /// /// Gets or sets the stepline series builder. @@ -104,7 +104,7 @@ public class Theme /// /// The pie series builder. /// - public List>> StepLineSeriesBuilder { get; set; } = new(); + public List>> StepLineSeriesBuilder { get; set; } = []; /// /// Gets or sets the stacked stepline series builder. @@ -112,7 +112,7 @@ public class Theme /// /// The pie series builder. /// - public List>> StackedStepLineSeriesBuilder { get; set; } = new(); + public List>> StackedStepLineSeriesBuilder { get; set; } = []; /// /// Gets or sets the line series builder. @@ -120,7 +120,7 @@ public class Theme /// /// The pie series builder. /// - public List>> LineSeriesBuilder { get; set; } = new(); + public List>> LineSeriesBuilder { get; set; } = []; /// /// Gets or sets the line series builder. @@ -128,7 +128,7 @@ public class Theme /// /// The polar series builder. /// - public List>> PolarSeriesBuilder { get; set; } = new(); + public List>> PolarSeriesBuilder { get; set; } = []; /// /// Gets or sets the line series builder. @@ -136,7 +136,7 @@ public class Theme /// /// The polar series builder. /// - public List>> PolarLineSeriesBuilder { get; set; } = new(); + public List>> PolarLineSeriesBuilder { get; set; } = []; /// /// Gets or sets the line series builder. @@ -144,7 +144,7 @@ public class Theme /// /// The polar series builder. /// - public List>> StackedPolarSeriesBuilder { get; set; } = new(); + public List>> StackedPolarSeriesBuilder { get; set; } = []; /// /// Gets or sets the line series builder. @@ -152,7 +152,7 @@ public class Theme /// /// The pie series builder. /// - public List>> HeatSeriesBuilder { get; set; } = new(); + public List>> HeatSeriesBuilder { get; set; } = []; /// /// Gets or sets the financial series builder. @@ -160,7 +160,7 @@ public class Theme /// /// The pie series builder. /// - public List>> FinancialSeriesBuilder { get; set; } = new(); + public List>> FinancialSeriesBuilder { get; set; } = []; /// /// Gets or sets the stacked line series builder. @@ -168,7 +168,7 @@ public class Theme /// /// The pie series builder. /// - public List>> StackedLineSeriesBuilder { get; set; } = new(); + public List>> StackedLineSeriesBuilder { get; set; } = []; /// /// Gets or sets the bar series builder. @@ -176,7 +176,7 @@ public class Theme /// /// The pie series builder. /// - public List>> BarSeriesBuilder { get; set; } = new(); + public List>> BarSeriesBuilder { get; set; } = []; /// /// Gets or sets the column series builder. @@ -184,7 +184,7 @@ public class Theme /// /// The pie series builder. /// - public List>> ColumnSeriesBuilder { get; set; } = new(); + public List>> ColumnSeriesBuilder { get; set; } = []; /// /// Gets or sets the row series builder. @@ -192,7 +192,7 @@ public class Theme /// /// The pie series builder. /// - public List>> RowSeriesBuilder { get; set; } = new(); + public List>> RowSeriesBuilder { get; set; } = []; /// /// Gets or sets the stacked bar series builder. @@ -200,7 +200,7 @@ public class Theme /// /// The pie series builder. /// - public List>> StackedBarSeriesBuilder { get; set; } = new(); + public List>> StackedBarSeriesBuilder { get; set; } = []; /// /// Gets or sets the stacked column series builder. @@ -208,7 +208,7 @@ public class Theme /// /// The pie series builder. /// - public List>> StackedColumnSeriesBuilder { get; set; } = new(); + public List>> StackedColumnSeriesBuilder { get; set; } = []; /// /// Gets or sets the stacked row series builder. @@ -216,7 +216,7 @@ public class Theme /// /// The pie series builder. /// - public List>> StackedRowSeriesBuilder { get; set; } = new(); + public List>> StackedRowSeriesBuilder { get; set; } = []; /// /// Gets or sets the scatter series builder. @@ -224,7 +224,7 @@ public class Theme /// /// The pie series builder. /// - public List>> ScatterSeriesBuilder { get; set; } = new(); + public List>> ScatterSeriesBuilder { get; set; } = []; /// /// Gets or sets the error series builder. @@ -232,7 +232,7 @@ public class Theme /// /// The pie series builder. /// - public List>> BoxSeriesBuilder { get; set; } = new(); + public List>> BoxSeriesBuilder { get; set; } = []; /// /// Applies the theme to an axis. diff --git a/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs b/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs index 6f840fcfe..a9a3218e9 100644 --- a/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs +++ b/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs @@ -50,7 +50,7 @@ public class AngularTicksVisual _visuals = new(); + private readonly Dictionary _visuals = []; /// /// Gets or sets the labels paint. diff --git a/src/LiveChartsCore/VisualElements/RelativePanel.cs b/src/LiveChartsCore/VisualElements/RelativePanel.cs index cb9c4c301..58b2a80bd 100644 --- a/src/LiveChartsCore/VisualElements/RelativePanel.cs +++ b/src/LiveChartsCore/VisualElements/RelativePanel.cs @@ -52,7 +52,7 @@ public RelativePanel() /// /// Gets the children collection. /// - public HashSet> Children { get; } = new(); + public HashSet> Children { get; } = []; /// /// Gets or sets the background paint. diff --git a/src/LiveChartsCore/VisualElements/StackPanel.cs b/src/LiveChartsCore/VisualElements/StackPanel.cs index a32f7c3e5..7189be31f 100644 --- a/src/LiveChartsCore/VisualElements/StackPanel.cs +++ b/src/LiveChartsCore/VisualElements/StackPanel.cs @@ -55,7 +55,7 @@ public StackPanel() /// /// Gets the children collection. /// - public List> Children { get; } = new(); + public List> Children { get; } = []; /// /// Gets or sets the panel orientation. @@ -176,7 +176,7 @@ public override LvcSize Measure(Chart chart) var mx = 0f; var my = 0f; - List line = new(); + List line = []; LvcSize alignCurrentLine() { @@ -212,7 +212,7 @@ LvcSize alignCurrentLine() if (child.Size.Height > my) my = child.Size.Height; } - line = new(); + line = []; return new LvcSize(mx, my); } diff --git a/src/LiveChartsCore/VisualElements/TableLayout.cs b/src/LiveChartsCore/VisualElements/TableLayout.cs index 2c32bc074..436e5b4af 100644 --- a/src/LiveChartsCore/VisualElements/TableLayout.cs +++ b/src/LiveChartsCore/VisualElements/TableLayout.cs @@ -37,7 +37,7 @@ public class TableLayout : VisualElement, new() { private IPaint? _backgroundPaint; - private readonly Dictionary> _positions = new(); + private readonly Dictionary> _positions = []; private LvcSize[,] _measuredSizes = new LvcSize[0, 0]; private int _maxRow = 0; private int _maxColumn = 0; @@ -149,7 +149,7 @@ public void AddChild( Align? verticalAlign = null) { if (!_positions.TryGetValue(row, out var r)) - _positions.Add(row, r = new Dictionary()); + _positions.Add(row, r = []); r[column] = new(row, column, child, verticalAlign, horizontalAlign); if (row > _maxRow) _maxRow = row; diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/MotionCanvas.cs b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/MotionCanvas.cs index f2126d156..aa6afda3a 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/MotionCanvas.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/MotionCanvas.cs @@ -40,7 +40,7 @@ namespace LiveChartsCore.SkiaSharpView.WinForms; public partial class MotionCanvas : UserControl { private bool _isDrawingLoopRunning = false; - private List> _paintTasksSchedule = new(); + private List> _paintTasksSchedule = []; /// /// Initializes a new instance of the class. diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/SVGPathGeometry.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/SVGPathGeometry.cs index a4b38d051..7ea5ccc6e 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/SVGPathGeometry.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/SVGPathGeometry.cs @@ -69,7 +69,7 @@ public SVGPathGeometry(Func pathSource) /// memory, this has no secondary effects in most of the cases, but if you are parsing a lot of paths /// (maybe over 500) then you must consider cleaning the cache when you no longer need a path. /// - public static readonly Dictionary Cache = new(); + public static readonly Dictionary Cache = []; /// /// Gets or sets the path. diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Extensions/GaugeGenerator.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Extensions/GaugeGenerator.cs index 8a9e486ef..5407587ed 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Extensions/GaugeGenerator.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Extensions/GaugeGenerator.cs @@ -70,8 +70,8 @@ public static ObservableCollection> BuildAngularGauge private static ObservableCollection> Build( GaugeOptions options, params GaugeItem[] items) { - List seriesRules = new(); - List backgroundRules = new(); + List seriesRules = []; + List backgroundRules = []; foreach (var item in items) { diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Extensions/PieChartExtensions.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Extensions/PieChartExtensions.cs index bcec47d26..2860fd626 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Extensions/PieChartExtensions.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Extensions/PieChartExtensions.cs @@ -132,14 +132,14 @@ internal static TSeries AsSeries( ObservableCollection values; if (gaugeOptions == GaugeOptions.Solid) { - values = new ObservableCollection(); + values = []; while (values.Count < count - 1) values.Add(default!); values.Insert(i, instance); } else { - values = new ObservableCollection { instance }; + values = [instance]; if (gaugeOptions == GaugeOptions.Angular) { series.HoverPushout = 0; diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/GaugeBuilder.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/GaugeBuilder.cs index d428b05b7..2b3105bfd 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/GaugeBuilder.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/GaugeBuilder.cs @@ -39,8 +39,8 @@ namespace LiveChartsCore.SkiaSharpView; [Obsolete($"Use {nameof(GaugeGenerator)}.{nameof(GaugeGenerator.BuildSolidGauge)} instead.")] public class GaugeBuilder : IGaugeBuilder { - private readonly Dictionary?, IPaint?>> _keyValuePairs = new(); - private readonly List?, IPaint?>> _tuples = new(); + private readonly Dictionary?, IPaint?>> _keyValuePairs = []; + private readonly List?, IPaint?>> _tuples = []; private List>? _builtSeries; private RadialAlignment? _radialAlign = null; diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/MapFactory.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/MapFactory.cs index 1d959e706..e8400c70d 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/MapFactory.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/MapFactory.cs @@ -37,9 +37,9 @@ namespace LiveChartsCore.SkiaSharpView; /// public class MapFactory : IMapFactory { - private readonly HashSet _usedPathShapes = new(); - private readonly HashSet> _usedPaints = new(); - private readonly HashSet _usedLayers = new(); + private readonly HashSet _usedPathShapes = []; + private readonly HashSet> _usedPaints = []; + private readonly HashSet _usedLayers = []; private IGeoMapView? _mapView; /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/Paint.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/Paint.cs index 65f466798..35189b4e9 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/Paint.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/Paint.cs @@ -36,8 +36,8 @@ namespace LiveChartsCore.SkiaSharpView.Painting; public abstract class Paint : Animatable, IDisposable, IPaint { private readonly FloatMotionProperty _strokeMiterTransition; - private readonly Dictionary, HashSet>> _geometriesByCanvas = new(); - private readonly Dictionary, LvcRectangle> _clipRectangles = new(); + private readonly Dictionary, HashSet>> _geometriesByCanvas = []; + private readonly Dictionary, LvcRectangle> _clipRectangles = []; private char? _matchesChar = null; internal SKPaint? _skiaPaint; internal FloatMotionProperty _strokeWidthTransition; @@ -205,7 +205,7 @@ public void AddGeometryToPaintTask(MotionCanvas canvas, var g = GetGeometriesByCanvas(canvas); if (g is null) { - g = new HashSet>(); + g = []; _geometriesByCanvas[canvas] = g; } _ = g.Add(geometry); diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/SKCharts/Helpers/DoubleDict.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/SKCharts/Helpers/DoubleDict.cs index 2e3a740bb..cca9254c9 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/SKCharts/Helpers/DoubleDict.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/SKCharts/Helpers/DoubleDict.cs @@ -29,8 +29,8 @@ internal class DoubleDict where T1 : notnull where T2 : notnull { - private readonly Dictionary _keys = new(); - private readonly Dictionary _values = new(); + private readonly Dictionary _keys = []; + private readonly Dictionary _values = []; public void Add(T1 key, T2 value) { diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/JsInterop/DomJsInterop.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/JsInterop/DomJsInterop.cs index 1488fbc8c..4abb8e974 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/JsInterop/DomJsInterop.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/JsInterop/DomJsInterop.cs @@ -32,7 +32,7 @@ namespace LiveChartsCore.SkiaSharpView.Blazor; public class DomJsInterop : IAsyncDisposable { private readonly Lazy> _moduleTask; - private static readonly Dictionary>> s_resizeEvent = new(); + private static readonly Dictionary>> s_resizeEvent = []; /// /// Initialized a new instance of the class. @@ -86,7 +86,7 @@ public async ValueTask OnResize(ElementReference element, string elementId, Acti { if (!s_resizeEvent.TryGetValue(elementId, out var actions)) { - actions = new List>(); + actions = []; s_resizeEvent.Add(elementId, actions); var module = await _moduleTask.Value; await module.InvokeVoidAsync("DOMInterop.registerResizeListener", element, elementId); diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/MotionCanvas.razor.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/MotionCanvas.razor.cs index 316ca51d9..0d5d74989 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/MotionCanvas.razor.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/MotionCanvas.razor.cs @@ -37,7 +37,7 @@ public partial class MotionCanvas : IDisposable private SKCanvasView? _canvas; private bool _disposing = false; private bool _isDrawingLoopRunning = false; - private List> _paintTasksSchedule = new(); + private List> _paintTasksSchedule = []; /// /// Called when the control is initialized. diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/MotionCanvas.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/MotionCanvas.cs index 9e124831d..8e64618c8 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/MotionCanvas.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/MotionCanvas.cs @@ -38,7 +38,7 @@ namespace LiveChartsCore.SkiaSharpView.Eto; public class MotionCanvas : SkiaDrawable { private bool _isDrawingLoopRunning = false; - private List> _paintTasksSchedule = new(); + private List> _paintTasksSchedule = []; /// /// Initializes a new instance of the class. From 4b062047e2b39d24f7ec0ef48b2ecc58ef3d7086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 17:51:08 -0600 Subject: [PATCH 23/86] remove obsolete formatter --- src/LiveChartsCore/CartesianSeries.cs | 2 +- src/LiveChartsCore/CorePieSeries.cs | 2 +- src/LiveChartsCore/CorePolarLineSeries.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/LiveChartsCore/CartesianSeries.cs b/src/LiveChartsCore/CartesianSeries.cs index eb9797059..2f1f08d8b 100644 --- a/src/LiveChartsCore/CartesianSeries.cs +++ b/src/LiveChartsCore/CartesianSeries.cs @@ -94,7 +94,7 @@ public Func, string>? XToolTipLabelFormatter public Func, string>? YToolTipLabelFormatter { get => _yTooltipLabelFormatter; - set { SetProperty(ref _yTooltipLabelFormatter, value); _obsolete_formatter = value; } + set => SetProperty(ref _yTooltipLabelFormatter, value); } /// diff --git a/src/LiveChartsCore/CorePieSeries.cs b/src/LiveChartsCore/CorePieSeries.cs index 5f0c0c931..12cc3fe47 100644 --- a/src/LiveChartsCore/CorePieSeries.cs +++ b/src/LiveChartsCore/CorePieSeries.cs @@ -151,7 +151,7 @@ public IPaint? Fill public Func, string>? ToolTipLabelFormatter { get => _tooltipLabelFormatter; - set { SetProperty(ref _tooltipLabelFormatter, value); _obsolete_formatter = value; } + set => SetProperty(ref _tooltipLabelFormatter, value); } /// diff --git a/src/LiveChartsCore/CorePolarLineSeries.cs b/src/LiveChartsCore/CorePolarLineSeries.cs index 6913365c5..3c441c568 100644 --- a/src/LiveChartsCore/CorePolarLineSeries.cs +++ b/src/LiveChartsCore/CorePolarLineSeries.cs @@ -167,7 +167,7 @@ public Func, string>? AngleToolTipLabelForma public Func, string>? RadiusToolTipLabelFormatter { get => _radiusTooltipLabelFormatter; - set { SetProperty(ref _radiusTooltipLabelFormatter, value); _obsolete_formatter = value; } + set => SetProperty(ref _radiusTooltipLabelFormatter, value); } /// From 06b418f3efc874ceb6dc4c2f8f88c1e89c3e06f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 17:55:28 -0600 Subject: [PATCH 24/86] clean core assembly warnings --- src/LiveChartsCore/Chart.cs | 10 +++++++++- src/LiveChartsCore/CorePieSeries.cs | 5 +---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/LiveChartsCore/Chart.cs b/src/LiveChartsCore/Chart.cs index f4149a2bf..702b7f118 100644 --- a/src/LiveChartsCore/Chart.cs +++ b/src/LiveChartsCore/Chart.cs @@ -57,14 +57,16 @@ public abstract class Chart : IChart private readonly ActionThrottler _updateThrottler; private readonly ActionThrottler _tooltipThrottler; private readonly ActionThrottler _panningThrottler; - private bool _isTooltipCanceled; private LvcPoint _pointerPanningStartPosition = new(-10, -10); private LvcPoint _pointerPanningPosition = new(-10, -10); private LvcPoint _pointerPreviousPanningPosition = new(-10, -10); private bool _isPanning = false; private readonly Dictionary _activePoints = []; private LvcSize _previousSize = new(); +#if NET5_0_OR_GREATER private readonly bool _isMobile; + private bool _isTooltipCanceled; +#endif #endregion @@ -328,7 +330,9 @@ internal virtual void InvokePointerDown(LvcPoint point, bool isSecondaryAction) lock (Canvas.Sync) { +#if NET5_0_OR_GREATER if (_isMobile) _isTooltipCanceled = false; +#endif var strategy = VisibleSeries.GetTooltipFindingStrategy(); @@ -373,6 +377,7 @@ internal virtual void InvokePointerMove(LvcPoint point) internal virtual void InvokePointerUp(LvcPoint point, bool isSecondaryAction) { +#if NET5_0_OR_GREATER if (_isMobile) { lock (Canvas.Sync) @@ -382,6 +387,7 @@ internal virtual void InvokePointerUp(LvcPoint point, bool isSecondaryAction) View.InvokeOnUIThread(CloseTooltip); } +#endif if (!_isPanning) return; _isPanning = false; @@ -661,7 +667,9 @@ private Task TooltipThrottlerUnlocked() { lock (Canvas.Sync) { +#if NET5_0_OR_GREATER if (_isTooltipCanceled) return; +#endif DrawToolTip(); Canvas.Invalidate(); } diff --git a/src/LiveChartsCore/CorePieSeries.cs b/src/LiveChartsCore/CorePieSeries.cs index 12cc3fe47..9cf72db1f 100644 --- a/src/LiveChartsCore/CorePieSeries.cs +++ b/src/LiveChartsCore/CorePieSeries.cs @@ -169,9 +169,6 @@ public override void Invalidate(Chart chart) minDimension = minDimension - (Stroke?.StrokeThickness ?? 0) * 2 - maxPushout * 2; - var maxOuterRadius = (float)MaxOuterRadius; - minDimension *= maxOuterRadius; - var pieLabelsCorrection = chart.SeriesContext.GetPieOuterLabelsSpace(); minDimension -= pieLabelsCorrection; @@ -505,7 +502,7 @@ public override int GetStackGroup() /// internal override IPaint?[] GetPaintTasks() { - return new[] { _fill, _stroke, DataLabelsPaint }; + return [_fill, _stroke, DataLabelsPaint]; } /// From f2aa359e814aaefb82f51aba3054d62aad514521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 18:08:55 -0600 Subject: [PATCH 25/86] use Primary constructors --- .../Platforms/Android/MainApplication.cs | 7 +- .../Financial/BasicCandlesticks/ViewModel.cs | 21 ++-- .../General/ConditionalDraw/City.cs | 9 +- .../General/Legends/AvailablePosition.cs | 12 +-- .../General/Tooltips/AvailablePositions.cs | 12 +-- samples/WPFSample/Command.cs | 8 +- .../ChartBehaviour.Android.cs | 11 +-- .../Events/EventArgs.cs | 16 ++-- .../Events/PinchEventArgs.cs | 24 ++--- .../Events/PressedEventArgs.cs | 21 ++-- .../Events/ScreenEventArgs.cs | 19 ++-- .../Events/ScrollEventArgs.cs | 21 ++-- .../ConditionalDraw/ConditionalDrawBuilder.cs | 38 +++----- src/LiveChartsCore/CoreLineSeries.cs | 30 ++---- src/LiveChartsCore/Drawing/LvcSize.cs | 21 ++-- src/LiveChartsCore/Geo/LandDefinition.cs | 26 ++--- src/LiveChartsCore/Geo/MapContext.cs | 31 +++--- src/LiveChartsCore/Geo/MapLayer.cs | 26 ++--- src/LiveChartsCore/Geo/MapShapeContext.cs | 39 ++++---- src/LiveChartsCore/Geo/ZoomOnPointerView.cs | 21 ++-- src/LiveChartsCore/Kernel/ActionThrottler.cs | 25 ++--- .../Kernel/ChartEntityMetaData.cs | 18 ++-- src/LiveChartsCore/Kernel/Drawing/Sketch.cs | 26 ++--- .../Kernel/Events/ChartCommandArgs.cs | 16 ++-- .../Kernel/Events/PointerCommandArgs.cs | 30 +++--- src/LiveChartsCore/Kernel/Extensions.cs | 27 ++---- src/LiveChartsCore/Kernel/SeriesContext.cs | 28 ++---- .../Kernel/TooltipPlacementContext.cs | 16 ++-- src/LiveChartsCore/Measure/AxisLimit.cs | 36 +++---- src/LiveChartsCore/Measure/VectorManager.cs | 20 ++-- src/LiveChartsCore/PieChart.cs | 55 +++++------ src/LiveChartsCore/PolarChart.cs | 65 ++++++------- .../VisualElements/AngularTicksVisual.cs | 15 +-- .../VisualElements/StackPanel.cs | 12 +-- .../VisualElements/TableLayout.cs | 46 ++++----- .../VisualElements/VariableGeometryVisual.cs | 28 +++--- .../MotionCanvas.axaml.cs | 20 +--- .../ResolutionHelper.cs | 22 ++--- .../Drawing/SkiaSharpDrawingContext.cs | 54 ++++------- .../Painting/Effects/DashEffect.cs | 20 ++-- .../Painting/ImageFilters/Blur.cs | 32 ++----- .../Painting/ImageFilters/DropShadow.cs | 44 +++------ .../ImageFiltersMergeOperation.cs | 25 ++--- .../Painting/LinearGradientPaint.cs | 95 ++++++++----------- .../VisualElements/VariableGeometryVisual.cs | 5 +- .../JsInterop/DomJsInterop.cs | 19 ++-- .../OtherTests/DataProviderTest.cs | 9 +- 47 files changed, 441 insertions(+), 780 deletions(-) diff --git a/samples/MauiSample/Platforms/Android/MainApplication.cs b/samples/MauiSample/Platforms/Android/MainApplication.cs index 3869c13e3..314a4a2b0 100644 --- a/samples/MauiSample/Platforms/Android/MainApplication.cs +++ b/samples/MauiSample/Platforms/Android/MainApplication.cs @@ -4,13 +4,8 @@ namespace MauiSample { [Application] - public class MainApplication : MauiApplication + public class MainApplication(IntPtr handle, JniHandleOwnership ownership) : MauiApplication(handle, ownership) { - public MainApplication(IntPtr handle, JniHandleOwnership ownership) - : base(handle, ownership) - { - } - protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); } } \ No newline at end of file diff --git a/samples/ViewModelsSamples/Financial/BasicCandlesticks/ViewModel.cs b/samples/ViewModelsSamples/Financial/BasicCandlesticks/ViewModel.cs index c4b845567..6660ab7db 100644 --- a/samples/ViewModelsSamples/Financial/BasicCandlesticks/ViewModel.cs +++ b/samples/ViewModelsSamples/Financial/BasicCandlesticks/ViewModel.cs @@ -63,20 +63,11 @@ public ViewModel() public ISeries[] Series { get; set; } } -public class FinancialData +public class FinancialData(DateTime date, double high, double open, double close, double low) { - public FinancialData(DateTime date, double high, double open, double close, double low) - { - Date = date; - High = high; - Open = open; - Close = close; - Low = low; - } - - public DateTime Date { get; set; } - public double High { get; set; } - public double Open { get; set; } - public double Close { get; set; } - public double Low { get; set; } + public DateTime Date { get; set; } = date; + public double High { get; set; } = high; + public double Open { get; set; } = open; + public double Close { get; set; } = close; + public double Low { get; set; } = low; } diff --git a/samples/ViewModelsSamples/General/ConditionalDraw/City.cs b/samples/ViewModelsSamples/General/ConditionalDraw/City.cs index 9d9c39a4f..aa68c9700 100644 --- a/samples/ViewModelsSamples/General/ConditionalDraw/City.cs +++ b/samples/ViewModelsSamples/General/ConditionalDraw/City.cs @@ -2,13 +2,8 @@ namespace ViewModelsSamples.General.ConditionalDraw; -public partial class City : ObservableObject +public partial class City(double population) : ObservableObject { - public City(double population) - { - _population = population; - } - [ObservableProperty] - private double _population; + private double _population = population; } diff --git a/samples/ViewModelsSamples/General/Legends/AvailablePosition.cs b/samples/ViewModelsSamples/General/Legends/AvailablePosition.cs index 81eb6b253..6a55595e1 100644 --- a/samples/ViewModelsSamples/General/Legends/AvailablePosition.cs +++ b/samples/ViewModelsSamples/General/Legends/AvailablePosition.cs @@ -2,14 +2,8 @@ namespace ViewModelsSamples.General.Legends; -public class AvailablePosition +public class AvailablePosition(string name, LegendPosition position) { - public AvailablePosition(string name, LegendPosition position) - { - Name = name; - Position = position; - } - - public string Name { get; set; } - public LegendPosition Position { get; set; } + public string Name { get; set; } = name; + public LegendPosition Position { get; set; } = position; } diff --git a/samples/ViewModelsSamples/General/Tooltips/AvailablePositions.cs b/samples/ViewModelsSamples/General/Tooltips/AvailablePositions.cs index c46af296a..a0c6bf2e0 100644 --- a/samples/ViewModelsSamples/General/Tooltips/AvailablePositions.cs +++ b/samples/ViewModelsSamples/General/Tooltips/AvailablePositions.cs @@ -2,14 +2,8 @@ namespace ViewModelsSamples.General.Tooltips; -public class AvailablePositions +public class AvailablePositions(string name, TooltipPosition position) { - public AvailablePositions(string name, TooltipPosition position) - { - Name = name; - Position = position; - } - - public string Name { get; set; } - public TooltipPosition Position { get; set; } + public string Name { get; set; } = name; + public TooltipPosition Position { get; set; } = position; } diff --git a/samples/WPFSample/Command.cs b/samples/WPFSample/Command.cs index ea1f0e079..40b011afc 100644 --- a/samples/WPFSample/Command.cs +++ b/samples/WPFSample/Command.cs @@ -3,16 +3,10 @@ namespace WPFSample; -public class Command : ICommand +public class Command(Action command) : ICommand { - private readonly Action command; public event EventHandler CanExecuteChanged; - public Command(Action command) - { - this.command = command; - } - public bool CanExecute(object parameter) { return true; diff --git a/src/LiveChartsCore.Behaviours/ChartBehaviour.Android.cs b/src/LiveChartsCore.Behaviours/ChartBehaviour.Android.cs index f13a43fe0..a67c18b2d 100644 --- a/src/LiveChartsCore.Behaviours/ChartBehaviour.Android.cs +++ b/src/LiveChartsCore.Behaviours/ChartBehaviour.Android.cs @@ -125,21 +125,14 @@ protected void OnAndroidTouched(object? sender, View.TouchEventArgs e) viewGroup.RequestDisallowInterceptTouchEvent(isChartInteraction); } - private class CustomScaleListener : ScaleGestureDetector.SimpleOnScaleGestureListener + private class CustomScaleListener(Action onScaled) : ScaleGestureDetector.SimpleOnScaleGestureListener { - private readonly Action _onScaled; - - public CustomScaleListener(Action onScaled) - { - _onScaled = onScaled; - } - public bool Paused { get; set; } public override bool OnScale(ScaleGestureDetector? detector) { if (detector is null || detector.ScaleFactor == 1 || Paused) return false; - _onScaled(detector.ScaleFactor); + onScaled(detector.ScaleFactor); return true; } } diff --git a/src/LiveChartsCore.Behaviours/Events/EventArgs.cs b/src/LiveChartsCore.Behaviours/Events/EventArgs.cs index 079f81ddf..d8d1a4ec1 100644 --- a/src/LiveChartsCore.Behaviours/Events/EventArgs.cs +++ b/src/LiveChartsCore.Behaviours/Events/EventArgs.cs @@ -25,19 +25,15 @@ namespace LiveChartsCore.Behaviours.Events; /// /// Defines the screen event args. /// -public class EventArgs +/// +/// Initializes a new instance of the class. +/// +/// The original event. +public class EventArgs(object originalEvent) { - /// - /// Initializes a new instance of the class. - /// - /// The original event. - public EventArgs(object originalEvent) - { - OriginalEvent = originalEvent; - } /// /// Gets the original event. /// - public object OriginalEvent { get; } + public object OriginalEvent { get; } = originalEvent; } diff --git a/src/LiveChartsCore.Behaviours/Events/PinchEventArgs.cs b/src/LiveChartsCore.Behaviours/Events/PinchEventArgs.cs index d28efe6db..c5cd40264 100644 --- a/src/LiveChartsCore.Behaviours/Events/PinchEventArgs.cs +++ b/src/LiveChartsCore.Behaviours/Events/PinchEventArgs.cs @@ -27,28 +27,22 @@ namespace LiveChartsCore.Behaviours.Events; /// /// Defines the pinch event args. /// -public class PinchEventArgs : EventArgs +/// +/// Initializes a new instance of the class. +/// +/// The scale. +/// The start. +/// The original event. +public class PinchEventArgs(float scale, LvcPoint pinchStart, object originalEvent) : EventArgs(originalEvent) { - /// - /// Initializes a new instance of the class. - /// - /// The scale. - /// The start. - /// The original event. - public PinchEventArgs(float scale, LvcPoint pinchStart, object originalEvent) - : base(originalEvent) - { - Scale = scale; - PinchStart = pinchStart; - } /// /// Gets the scale. /// - public float Scale { get; } + public float Scale { get; } = scale; /// /// Gets the pinch star location. /// - public LvcPoint PinchStart { get; set; } + public LvcPoint PinchStart { get; set; } = pinchStart; } diff --git a/src/LiveChartsCore.Behaviours/Events/PressedEventArgs.cs b/src/LiveChartsCore.Behaviours/Events/PressedEventArgs.cs index 2aca80083..9a64ebeef 100644 --- a/src/LiveChartsCore.Behaviours/Events/PressedEventArgs.cs +++ b/src/LiveChartsCore.Behaviours/Events/PressedEventArgs.cs @@ -27,22 +27,17 @@ namespace LiveChartsCore.Behaviours.Events; /// /// Defines the pointer event args. /// -public class PressedEventArgs : ScreenEventArgs +/// +/// Initializes a new instance of the class. +/// +/// The pointer location. +/// Indicates whether the action is secondary. +/// The original event. +public class PressedEventArgs(LvcPoint location, bool isSecondaryPress, object originalEvent) : ScreenEventArgs(location, originalEvent) { - /// - /// Initializes a new instance of the class. - /// - /// The pointer location. - /// Indicates whether the action is secondary. - /// The original event. - public PressedEventArgs(LvcPoint location, bool isSecondaryPress, object originalEvent) - : base(location, originalEvent) - { - IsSecondaryPress = isSecondaryPress; - } /// /// Gets a value indicating whether the action is a secondary press. /// - public bool IsSecondaryPress { get; } + public bool IsSecondaryPress { get; } = isSecondaryPress; } diff --git a/src/LiveChartsCore.Behaviours/Events/ScreenEventArgs.cs b/src/LiveChartsCore.Behaviours/Events/ScreenEventArgs.cs index de073c169..704ef05f8 100644 --- a/src/LiveChartsCore.Behaviours/Events/ScreenEventArgs.cs +++ b/src/LiveChartsCore.Behaviours/Events/ScreenEventArgs.cs @@ -27,21 +27,16 @@ namespace LiveChartsCore.Behaviours.Events; /// /// Defines the screen event args. /// -public class ScreenEventArgs : EventArgs +/// +/// Initializes a new instance of the class. +/// +/// The pointer location. +/// The original event. +public class ScreenEventArgs(LvcPoint location, object originalEvent) : EventArgs(originalEvent) { - /// - /// Initializes a new instance of the class. - /// - /// The pointer location. - /// The original event. - public ScreenEventArgs(LvcPoint location, object originalEvent) - : base(originalEvent) - { - Location = location; - } /// /// Gets the pointer location. /// - public LvcPoint Location { get; } + public LvcPoint Location { get; } = location; } diff --git a/src/LiveChartsCore.Behaviours/Events/ScrollEventArgs.cs b/src/LiveChartsCore.Behaviours/Events/ScrollEventArgs.cs index 9c57b57a4..e95257cef 100644 --- a/src/LiveChartsCore.Behaviours/Events/ScrollEventArgs.cs +++ b/src/LiveChartsCore.Behaviours/Events/ScrollEventArgs.cs @@ -27,22 +27,17 @@ namespace LiveChartsCore.Behaviours.Events; /// /// Defines the scroll event args. /// -public class ScrollEventArgs : ScreenEventArgs +/// +/// Initializes a new instance of the class. +/// +/// The pointer location. +/// Indicates the scroll delta. +/// The original event. +public class ScrollEventArgs(LvcPoint location, double scrollDelta, object originalEvent) : ScreenEventArgs(location, originalEvent) { - /// - /// Initializes a new instance of the class. - /// - /// The pointer location. - /// Indicates the scroll delta. - /// The original event. - public ScrollEventArgs(LvcPoint location, double scrollDelta, object originalEvent) - : base(location, originalEvent) - { - ScrollDelta = scrollDelta; - } /// /// Gets the scroll delta. /// - public double ScrollDelta { get; } + public double ScrollDelta { get; } = scrollDelta; } diff --git a/src/LiveChartsCore/ConditionalDraw/ConditionalDrawBuilder.cs b/src/LiveChartsCore/ConditionalDraw/ConditionalDrawBuilder.cs index b9d262601..afa727ce9 100644 --- a/src/LiveChartsCore/ConditionalDraw/ConditionalDrawBuilder.cs +++ b/src/LiveChartsCore/ConditionalDraw/ConditionalDrawBuilder.cs @@ -29,29 +29,21 @@ namespace LiveChartsCore.ConditionalDraw; /// /// Defines a instance. /// +/// +/// Initializes a new builder for the given paint. +/// +/// The series. +/// The paint. [Obsolete("Replaced by MaPoints extensiion.")] -public class ConditionalPaintBuilder +public class ConditionalPaintBuilder(Series series, IPaint paint) where TDrawingContext : DrawingContext where TVisual : class, IGeometry, new() where TLabel : class, ILabelGeometry, new() { private bool _isPaintInCanvas = false; private object _clipFor = new(); - private readonly Series _series; - private readonly IPaint _paint; private Func, bool>? _whenPredicate; - /// - /// Initializes a new builder for the given paint. - /// - /// The series. - /// The paint. - public ConditionalPaintBuilder(Series series, IPaint paint) - { - _series = series; - _paint = paint; - } - /// /// Applies the paint when the given condition is true. /// @@ -60,8 +52,8 @@ public Series When( Func, bool> predicate) { _whenPredicate = predicate; - _series.PointMeasured += OnMeasured; - return _series; + series.PointMeasured += OnMeasured; + return series; } /// @@ -69,7 +61,7 @@ public Series When( /// public void UnSubscribe() { - _series.PointMeasured -= OnMeasured; + series.PointMeasured -= OnMeasured; } private void OnMeasured(ChartPoint point) @@ -83,8 +75,8 @@ private void OnMeasured(ChartPoint point) if (!_isPaintInCanvas) { - canvas.AddDrawableTask(_paint); - if (_paint.ZIndex == 0) _paint.ZIndex = int.MaxValue; + canvas.AddDrawableTask(paint); + if (paint.ZIndex == 0) paint.ZIndex = int.MaxValue; _isPaintInCanvas = true; } @@ -95,15 +87,15 @@ private void OnMeasured(ChartPoint point) { var drawLocation = cartesianChart.DrawMarginLocation; var drawMarginSize = cartesianChart.DrawMarginSize; - _paint.SetClipRectangle(cartesianChart.Canvas, new LvcRectangle(drawLocation, drawMarginSize)); + paint.SetClipRectangle(cartesianChart.Canvas, new LvcRectangle(drawLocation, drawMarginSize)); } } if (isTriggered) { - _paint.AddGeometryToPaintTask(canvas, drawable); + paint.AddGeometryToPaintTask(canvas, drawable); - foreach (var paint in _series.GetPaintTasks()) + foreach (var paint in series.GetPaintTasks()) { if (paint is null) continue; paint.RemoveGeometryFromPainTask(canvas, drawable); @@ -111,7 +103,7 @@ private void OnMeasured(ChartPoint point) } else { - _paint.RemoveGeometryFromPainTask(canvas, drawable); + paint.RemoveGeometryFromPainTask(canvas, drawable); } } } diff --git a/src/LiveChartsCore/CoreLineSeries.cs b/src/LiveChartsCore/CoreLineSeries.cs index 0236a83f7..110a929f6 100644 --- a/src/LiveChartsCore/CoreLineSeries.cs +++ b/src/LiveChartsCore/CoreLineSeries.cs @@ -761,23 +761,15 @@ private SegmentVisual GetSegmentVisual(int index, List container, return new SegmentVisual(isNew, path); } - private class SplineData + private class SplineData(ChartPoint start) { - public SplineData(ChartPoint start) - { - Previous = start; - Current = start; - Next = start; - AfterNext = start; - } - - public ChartPoint Previous { get; set; } + public ChartPoint Previous { get; set; } = start; - public ChartPoint Current { get; set; } + public ChartPoint Current { get; set; } = start; - public ChartPoint Next { get; set; } + public ChartPoint Next { get; set; } = start; - public ChartPoint AfterNext { get; set; } + public ChartPoint AfterNext { get; set; } = start; public bool IsFirst { get; set; } = true; @@ -790,16 +782,10 @@ public void GoNext(ChartPoint point) } } - private class SegmentVisual + private class SegmentVisual(bool isNew, TPathGeometry path) { - public SegmentVisual(bool isNew, TPathGeometry path) - { - IsNew = isNew; - Path = path; - } - - public bool IsNew { get; set; } + public bool IsNew { get; set; } = isNew; - public TPathGeometry Path { get; set; } + public TPathGeometry Path { get; set; } = path; } } diff --git a/src/LiveChartsCore/Drawing/LvcSize.cs b/src/LiveChartsCore/Drawing/LvcSize.cs index 3efc64844..080bf42c9 100644 --- a/src/LiveChartsCore/Drawing/LvcSize.cs +++ b/src/LiveChartsCore/Drawing/LvcSize.cs @@ -25,28 +25,23 @@ namespace LiveChartsCore.Drawing; /// /// Defines a size. /// -public struct LvcSize +/// +/// Initializes a new instance of the struct. +/// +/// The width. +/// The height. +public struct LvcSize(float width, float height) { - /// - /// Initializes a new instance of the struct. - /// - /// The width. - /// The height. - public LvcSize(float width, float height) - { - Width = width; - Height = height; - } /// /// Gets or sets the width. /// - public float Width { get; set; } + public float Width { get; set; } = width; /// /// Gets or sets the height. /// - public float Height { get; set; } + public float Height { get; set; } = height; /// /// Determines whether the instance is equals to the given instance. diff --git a/src/LiveChartsCore/Geo/LandDefinition.cs b/src/LiveChartsCore/Geo/LandDefinition.cs index e31a1d8a8..68774f89c 100644 --- a/src/LiveChartsCore/Geo/LandDefinition.cs +++ b/src/LiveChartsCore/Geo/LandDefinition.cs @@ -27,35 +27,29 @@ namespace LiveChartsCore.Geo; /// /// Defines the data of a lane in a map. /// -public class LandDefinition +/// +/// Initializes a new instance of the class. +/// +/// The short name. +/// The name. +/// The set of. +public class LandDefinition(string shortName, string name, string setOf) { - /// - /// Initializes a new instance of the class. - /// - /// The short name. - /// The name. - /// The set of. - public LandDefinition(string shortName, string name, string setOf) - { - Name = name; - ShortName = shortName; - SetOf = setOf; - } /// /// Gets the short name. /// - public string ShortName { get; } + public string ShortName { get; } = shortName; /// /// Gets the name. /// - public string Name { get; } + public string Name { get; } = name; /// /// Gets or sets the set of reference. /// - public string SetOf { get; set; } + public string SetOf { get; set; } = setOf; /// /// Gets the HSize. diff --git a/src/LiveChartsCore/Geo/MapContext.cs b/src/LiveChartsCore/Geo/MapContext.cs index c011cc43f..26d30aa54 100644 --- a/src/LiveChartsCore/Geo/MapContext.cs +++ b/src/LiveChartsCore/Geo/MapContext.cs @@ -28,41 +28,34 @@ namespace LiveChartsCore.Geo; /// Defines a map context. /// /// -public class MapContext +/// +/// Initializes a new instance of class. +/// +public class MapContext( + GeoMap core, + IGeoMapView view, + CoreMap map, + MapProjector projector) where TDrawingContext : DrawingContext { - /// - /// Initializes a new instance of class. - /// - public MapContext( - GeoMap core, - IGeoMapView view, - CoreMap map, - MapProjector projector) - { - CoreMap = core; - MapFile = map; - Projector = projector; - View = view; - } /// /// Gets the core map. /// - public GeoMap CoreMap { get; } + public GeoMap CoreMap { get; } = core; /// /// Gets the map file. /// - public CoreMap MapFile { get; } + public CoreMap MapFile { get; } = map; /// /// Gets the map projector. /// - public MapProjector Projector { get; } + public MapProjector Projector { get; } = projector; /// /// Gets the map view. /// - public IGeoMapView View { get; } + public IGeoMapView View { get; } = view; } diff --git a/src/LiveChartsCore/Geo/MapLayer.cs b/src/LiveChartsCore/Geo/MapLayer.cs index 029d3404d..3169aadd9 100644 --- a/src/LiveChartsCore/Geo/MapLayer.cs +++ b/src/LiveChartsCore/Geo/MapLayer.cs @@ -30,21 +30,15 @@ namespace LiveChartsCore.Geo; /// /// Defines a map layer. /// -public class MapLayer +/// +/// Initializes a new from the given . +/// +/// The layer name. +/// The stroke. +/// The fill. +public class MapLayer(string layerName, IPaint stroke, IPaint fill) where TDrawingContext : DrawingContext { - /// - /// Initializes a new from the given . - /// - /// The layer name. - /// The stroke. - /// The fill. - public MapLayer(string layerName, IPaint stroke, IPaint fill) - { - Name = layerName; - Stroke = stroke; - Fill = fill; - } /// /// Gets or sets the name. @@ -52,7 +46,7 @@ public MapLayer(string layerName, IPaint stroke, IPaint /// The name. /// - public string Name { get; set; } + public string Name { get; set; } = layerName; /// /// Gets or sets the layer process index. @@ -67,12 +61,12 @@ public MapLayer(string layerName, IPaint stroke, IPaint /// Gets or sets the stroke. /// - public IPaint? Stroke { get; set; } + public IPaint? Stroke { get; set; } = stroke; /// /// Gets or sets the fill. /// - public IPaint? Fill { get; set; } + public IPaint? Fill { get; set; } = fill; /// /// Gets or sets the X bounds. diff --git a/src/LiveChartsCore/Geo/MapShapeContext.cs b/src/LiveChartsCore/Geo/MapShapeContext.cs index e23b2cbab..e75207cdf 100644 --- a/src/LiveChartsCore/Geo/MapShapeContext.cs +++ b/src/LiveChartsCore/Geo/MapShapeContext.cs @@ -30,45 +30,38 @@ namespace LiveChartsCore.Geo; /// /// Defines the map shape context class. /// -public class MapShapeContext +/// +/// Initializes a new instance of the class. +/// +/// The chart. +/// The heat paint. +/// The heat stops. +/// The bounds. +public class MapShapeContext( + IGeoMapView chart, + IPaint heatPaint, + List> heatStops, + Bounds bounds) where TDrawingContext : DrawingContext { - /// - /// Initializes a new instance of the class. - /// - /// The chart. - /// The heat paint. - /// The heat stops. - /// The bounds. - public MapShapeContext( - IGeoMapView chart, - IPaint heatPaint, - List> heatStops, - Bounds bounds) - { - Chart = chart; - HeatPaint = heatPaint; - HeatStops = heatStops; - Bounds = bounds; - } /// /// Gets the chart. /// - public IGeoMapView Chart { get; } + public IGeoMapView Chart { get; } = chart; /// /// Gets the heat paint. /// - public IPaint HeatPaint { get; } + public IPaint HeatPaint { get; } = heatPaint; /// /// Gets the heat stops. /// - public List> HeatStops { get; } + public List> HeatStops { get; } = heatStops; /// /// Gets the bounds dictionary. /// - public Bounds Bounds { get; } + public Bounds Bounds { get; } = bounds; } diff --git a/src/LiveChartsCore/Geo/ZoomOnPointerView.cs b/src/LiveChartsCore/Geo/ZoomOnPointerView.cs index 241124653..8677fae0b 100644 --- a/src/LiveChartsCore/Geo/ZoomOnPointerView.cs +++ b/src/LiveChartsCore/Geo/ZoomOnPointerView.cs @@ -28,26 +28,21 @@ namespace LiveChartsCore.Geo; /// /// Defines the /// -public class ZoomOnPointerView +/// +/// Initializes a new instance of the command. +/// +/// The pivot. +/// The direction. +public class ZoomOnPointerView(LvcPoint pivot, ZoomDirection direction) { - /// - /// Initializes a new instance of the command. - /// - /// The pivot. - /// The direction. - public ZoomOnPointerView(LvcPoint pivot, ZoomDirection direction) - { - Pivot = pivot; - Direction = direction; - } /// /// Gets the pivot. /// - public LvcPoint Pivot { get; } + public LvcPoint Pivot { get; } = pivot; /// /// Gets the direction. /// - public ZoomDirection Direction { get; } + public ZoomDirection Direction { get; } = direction; } diff --git a/src/LiveChartsCore/Kernel/ActionThrottler.cs b/src/LiveChartsCore/Kernel/ActionThrottler.cs index 44040170f..5913c5e37 100644 --- a/src/LiveChartsCore/Kernel/ActionThrottler.cs +++ b/src/LiveChartsCore/Kernel/ActionThrottler.cs @@ -28,23 +28,16 @@ namespace LiveChartsCore.Kernel; /// /// An object that is able to throttle an action. /// -public class ActionThrottler +/// +/// Initializes a new instance of the class. +/// +/// The target action to throttle. +/// The throttling time. +public class ActionThrottler(Func targetAction, TimeSpan time) { private readonly object _sync = new(); - private readonly Func _action; private bool _isWaiting = false; - /// - /// Initializes a new instance of the class. - /// - /// The target action to throttle. - /// The throttling time. - public ActionThrottler(Func targetAction, TimeSpan time) - { - _action = targetAction; - ThrottlerTimeSpan = time; - } - #if DEBUG /// /// Gets the calls. @@ -61,7 +54,7 @@ public ActionThrottler(Func targetAction, TimeSpan time) /// /// The throttler time span. /// - public TimeSpan ThrottlerTimeSpan { get; set; } + public TimeSpan ThrottlerTimeSpan { get; set; } = time; /// /// Schedules a call to the target action. @@ -89,7 +82,7 @@ public async void Call() _isWaiting = false; } - await Task.WhenAny(_action()); + await Task.WhenAny(targetAction()); } /// @@ -98,6 +91,6 @@ public async void Call() /// public void ForceCall() { - _ = _action(); + _ = targetAction(); } } diff --git a/src/LiveChartsCore/Kernel/ChartEntityMetaData.cs b/src/LiveChartsCore/Kernel/ChartEntityMetaData.cs index 6bc98a98b..249fd6cc5 100644 --- a/src/LiveChartsCore/Kernel/ChartEntityMetaData.cs +++ b/src/LiveChartsCore/Kernel/ChartEntityMetaData.cs @@ -29,20 +29,14 @@ namespace LiveChartsCore.Kernel; /// /// Represents additional data required by LiveCharts to draw a point. /// -public class ChartEntityMetaData +/// +/// Initializes a new instance of the class. +/// +/// The callback to call when the entity index changes. +public class ChartEntityMetaData(Action? onEntityIndexChanged = null) { - private readonly Action? _entityIndexChangedCallback; private int _entityIndex; - /// - /// Initializes a new instance of the class. - /// - /// The callback to call when the entity index changes. - public ChartEntityMetaData(Action? onEntityIndexChanged = null) - { - _entityIndexChangedCallback = onEntityIndexChanged; - } - /// /// Gets the entity index, a consecutive integer based on the position of the entity in the data collection. /// @@ -53,7 +47,7 @@ public int EntityIndex { if (value == _entityIndex) return; _entityIndex = value; - _entityIndexChangedCallback?.Invoke(value); + onEntityIndexChanged?.Invoke(value); } } diff --git a/src/LiveChartsCore/Kernel/Drawing/Sketch.cs b/src/LiveChartsCore/Kernel/Drawing/Sketch.cs index 7cf7b81e7..a81be0d60 100644 --- a/src/LiveChartsCore/Kernel/Drawing/Sketch.cs +++ b/src/LiveChartsCore/Kernel/Drawing/Sketch.cs @@ -29,21 +29,15 @@ namespace LiveChartsCore.Kernel.Drawing; /// Defines the paint context. /// /// The type of the drawing context. -public class Sketch +/// +/// Initializes a new instance of the class. +/// +/// The widht. +/// The height. +/// The svg path. +public class Sketch(double width, double height, string? svg) where TDrawingContext : DrawingContext { - /// - /// Initializes a new instance of the class. - /// - /// The widht. - /// The height. - /// The svg path. - public Sketch(double width, double height, string? svg) - { - Svg = svg; - Width = width; - Height = height; - } /// /// Gets or sets the width. @@ -51,7 +45,7 @@ public Sketch(double width, double height, string? svg) /// /// The width. /// kjio9 - public double Width { get; set; } + public double Width { get; set; } = width; /// /// Gets or sets the height. @@ -59,12 +53,12 @@ public Sketch(double width, double height, string? svg) /// /// The height. /// - public double Height { get; set; } + public double Height { get; set; } = height; /// /// Gets or sets the Svg. /// / - public string? Svg { get; set; } + public string? Svg { get; set; } = svg; /// /// Gets or sets the paint schedules. diff --git a/src/LiveChartsCore/Kernel/Events/ChartCommandArgs.cs b/src/LiveChartsCore/Kernel/Events/ChartCommandArgs.cs index 10347e2ee..fba1982e7 100644 --- a/src/LiveChartsCore/Kernel/Events/ChartCommandArgs.cs +++ b/src/LiveChartsCore/Kernel/Events/ChartCommandArgs.cs @@ -28,19 +28,15 @@ namespace LiveChartsCore.Kernel.Events; /// /// Command arguments that describe when a chart event occurs. /// -public class ChartCommandArgs +/// +/// Initializes a new instance of the class. +/// +/// The chart that fired the event. +public class ChartCommandArgs(IChartView chart) { - /// - /// Initializes a new instance of the class. - /// - /// The chart that fired the event. - public ChartCommandArgs(IChartView chart) - { - Chart = chart; - } /// /// Gets the sender chart. /// - public IChartView Chart { get; } + public IChartView Chart { get; } = chart; } diff --git a/src/LiveChartsCore/Kernel/Events/PointerCommandArgs.cs b/src/LiveChartsCore/Kernel/Events/PointerCommandArgs.cs index d23516924..5fe90d32e 100644 --- a/src/LiveChartsCore/Kernel/Events/PointerCommandArgs.cs +++ b/src/LiveChartsCore/Kernel/Events/PointerCommandArgs.cs @@ -29,31 +29,25 @@ namespace LiveChartsCore.Kernel.Events; /// /// Command arguments that describe a pointer event in a LiveChart view. /// -public class PointerCommandArgs : ChartCommandArgs +/// +/// Initializes a new instance of the class. +/// +/// The chart that fired the event. +/// The pointer position. +/// The original event args. +public class PointerCommandArgs( + IChartView chart, + LvcPointD pointerPosition, + object originalEventArgs) : ChartCommandArgs(chart) { - /// - /// Initializes a new instance of the class. - /// - /// The chart that fired the event. - /// The pointer position. - /// The original event args. - public PointerCommandArgs( - IChartView chart, - LvcPointD pointerPosition, - object originalEventArgs) - : base(chart) - { - PointerPosition = pointerPosition; - OriginalEventArgs = originalEventArgs; - } /// /// Gets the pointer position relative to the chart. /// - public LvcPointD PointerPosition { get; set; } + public LvcPointD PointerPosition { get; set; } = pointerPosition; /// /// Gets the framework-specific event arguments. /// - public object OriginalEventArgs { get; set; } + public object OriginalEventArgs { get; set; } = originalEventArgs; } diff --git a/src/LiveChartsCore/Kernel/Extensions.cs b/src/LiveChartsCore/Kernel/Extensions.cs index 0e5285b65..df78ad8de 100644 --- a/src/LiveChartsCore/Kernel/Extensions.cs +++ b/src/LiveChartsCore/Kernel/Extensions.cs @@ -709,14 +709,9 @@ private static IEnumerable YieldReturnUntilNextNullChartPoint( builder.Finished = true; } - private class GapsBuilder : IDisposable + private class GapsBuilder(IEnumerator enumerator) : IDisposable { - public GapsBuilder(IEnumerator enumerator) - { - Enumerator = enumerator; - } - - public IEnumerator Enumerator { get; } + public IEnumerator Enumerator { get; } = enumerator; public bool IsEmpty { get; set; } = true; @@ -728,23 +723,15 @@ public void Dispose() } } - internal class SplineData + internal class SplineData(ChartPoint start) { - public SplineData(ChartPoint start) - { - Previous = start; - Current = start; - Next = start; - AfterNext = start; - } - - public ChartPoint Previous { get; set; } + public ChartPoint Previous { get; set; } = start; - public ChartPoint Current { get; set; } + public ChartPoint Current { get; set; } = start; - public ChartPoint Next { get; set; } + public ChartPoint Next { get; set; } = start; - public ChartPoint AfterNext { get; set; } + public ChartPoint AfterNext { get; set; } = start; public bool IsFirst { get; set; } = true; public bool IsNextEmpty { get; set; } diff --git a/src/LiveChartsCore/Kernel/SeriesContext.cs b/src/LiveChartsCore/Kernel/SeriesContext.cs index 385361ee5..be8c9e553 100644 --- a/src/LiveChartsCore/Kernel/SeriesContext.cs +++ b/src/LiveChartsCore/Kernel/SeriesContext.cs @@ -33,11 +33,14 @@ namespace LiveChartsCore.Kernel; /// Defines a series context. /// /// The type of the drawing context. -public class SeriesContext +/// +/// Initializes a new instance of the class. +/// +/// The series. +/// The chart +public class SeriesContext(IEnumerable> series, IChart chart) where TDrawingContext : DrawingContext { - private readonly IEnumerable> _series; - private int _columnsCount = 0; private int _rowsCount = 0; private int _boxCount = 0; @@ -55,19 +58,6 @@ public class SeriesContext private readonly Dictionary> _stackers = []; - private readonly IChart _chart; - - /// - /// Initializes a new instance of the class. - /// - /// The series. - /// The chart - public SeriesContext(IEnumerable> series, IChart chart) - { - _series = series; - _chart = chart; - } - #region columns and rows /// @@ -202,7 +192,7 @@ private void IndexBars() _stackedColumnsCount = 0; _stackedRowsCount = 0; - foreach (var item in _series) + foreach (var item in series) { if (!item.IsBarSeries() && !item.IsBoxSeries()) continue; @@ -288,7 +278,7 @@ private Stacker GetStacker(IChartSeries series private void CalculatePieLabelsOuterSpace() where TLabel : class, ILabelGeometry, new() { - foreach (var series in _series) + foreach (var series in series) { if (!series.IsPieSeries()) continue; var pieSeries = (IPieSeries)series; @@ -302,7 +292,7 @@ private void CalculatePieLabelsOuterSpace() var stacker = GetStackPosition(series, series.GetStackGroup()) ?? throw new NullReferenceException("Unexpected null stacker"); - foreach (var point in pieSeries.Fetch(_chart)) + foreach (var point in pieSeries.Fetch(chart)) { _ = stacker.GetStack(point); // builds the stacked value for the point. diff --git a/src/LiveChartsCore/Kernel/TooltipPlacementContext.cs b/src/LiveChartsCore/Kernel/TooltipPlacementContext.cs index b38fec0cb..eddba87ae 100644 --- a/src/LiveChartsCore/Kernel/TooltipPlacementContext.cs +++ b/src/LiveChartsCore/Kernel/TooltipPlacementContext.cs @@ -27,21 +27,17 @@ namespace LiveChartsCore.Kernel; /// /// Defines the tooltip placement context class. /// -public class TooltipPlacementContext +/// +/// Intializes a new instance of the class. +/// +/// +public class TooltipPlacementContext(TooltipPosition position) { - /// - /// Intializes a new instance of the class. - /// - /// - public TooltipPlacementContext(TooltipPosition position) - { - Position = position; - } /// /// Gets the tool tip position. /// - public TooltipPosition Position { get; set; } + public TooltipPosition Position { get; set; } = position; /// /// Gets or sets the value for the pop-up placement. diff --git a/src/LiveChartsCore/Measure/AxisLimit.cs b/src/LiveChartsCore/Measure/AxisLimit.cs index 31034e389..37df73eb0 100644 --- a/src/LiveChartsCore/Measure/AxisLimit.cs +++ b/src/LiveChartsCore/Measure/AxisLimit.cs @@ -25,49 +25,41 @@ namespace LiveChartsCore.Measure; /// /// Defines the axis limit structure. /// -public struct AxisLimit +/// +/// Initializes a new instance of the struct. +/// +/// The min value. +/// The masx value. +/// The min delta. +/// The data min value. +/// The data max value. +public struct AxisLimit(double min, double max, double minDelta, double dataMin, double dataMax) { - /// - /// Initializes a new instance of the struct. - /// - /// The min value. - /// The masx value. - /// The min delta. - /// The data min value. - /// The data max value. - public AxisLimit(double min, double max, double minDelta, double dataMin, double dataMax) - { - Min = min; - Max = max; - MinDelta = minDelta; - DataMin = dataMin; - DataMax = dataMax; - } /// /// Gets or sets the minimum value. /// - public double Min { get; set; } + public double Min { get; set; } = min; /// /// Gets or sets the maximum value. /// - public double Max { get; set; } + public double Max { get; set; } = max; /// /// Gets or sets the minimum value. /// - public double DataMin { get; set; } + public double DataMin { get; set; } = dataMin; /// /// Gets or sets the maximum value. /// - public double DataMax { get; set; } + public double DataMax { get; set; } = dataMax; /// /// Gets or sets the min delta. /// - public double MinDelta { get; set; } + public double MinDelta { get; set; } = minDelta; internal static void ValidateLimits(ref double min, ref double max) { diff --git a/src/LiveChartsCore/Measure/VectorManager.cs b/src/LiveChartsCore/Measure/VectorManager.cs index 925dc03b7..ce23f27da 100644 --- a/src/LiveChartsCore/Measure/VectorManager.cs +++ b/src/LiveChartsCore/Measure/VectorManager.cs @@ -32,27 +32,21 @@ namespace LiveChartsCore.Measure; /// /// The type of the segment. /// The type of the drawing context. -public class VectorManager +/// +/// Initializes a new instance of the class. +/// +/// The area geometry +public class VectorManager(IVectorGeometry areaGeometry) where TDrawingContext : DrawingContext where TSegment : IConsecutivePathSegment, IAnimatable { - private LinkedListNode? _nextNode; + private LinkedListNode? _nextNode = areaGeometry.Commands.First; private LinkedListNode? _currentNode; - /// - /// Initializes a new instance of the class. - /// - /// The area geometry - public VectorManager(IVectorGeometry areaGeometry) - { - AreaGeometry = areaGeometry; - _nextNode = areaGeometry.Commands.First; - } - /// /// Gets the area geometry. /// - public IVectorGeometry AreaGeometry { get; private set; } + public IVectorGeometry AreaGeometry { get; private set; } = areaGeometry; /// /// Adds a segment to the area geometry. diff --git a/src/LiveChartsCore/PieChart.cs b/src/LiveChartsCore/PieChart.cs index bfbb00723..76c6dc399 100644 --- a/src/LiveChartsCore/PieChart.cs +++ b/src/LiveChartsCore/PieChart.cs @@ -37,32 +37,25 @@ namespace LiveChartsCore; /// /// The type of the drawing context. /// -public class PieChart : Chart +/// +/// Initializes a new instance of the class. +/// +/// The view. +/// The default platform configuration. +/// The canvas. +/// Forces the legends to redraw with every measure request. +public class PieChart( + IPieChartView view, + Action defaultPlatformConfig, + MotionCanvas canvas, + bool requiresLegendMeasureAlways = false) : Chart(canvas, defaultPlatformConfig, view) where TDrawingContext : DrawingContext { - private readonly IPieChartView _chartView; private int _nextSeries = 0; - /// - /// Initializes a new instance of the class. - /// - /// The view. - /// The default platform configuration. - /// The canvas. - /// Forces the legends to redraw with every measure request. - public PieChart( - IPieChartView view, - Action defaultPlatformConfig, - MotionCanvas canvas, - bool requiresLegendMeasureAlways = false) - : base(canvas, defaultPlatformConfig, view) - { - _chartView = view; - } - /// public override IEnumerable> Series => - _chartView.Series.Cast>(); + view.Series.Cast>(); /// public override IEnumerable> VisibleSeries => @@ -74,7 +67,7 @@ public PieChart( /// /// The view. /// - public override IChartView View => _chartView; + public override IChartView View => view; /// /// Gets the value bounds. @@ -107,7 +100,7 @@ public PieChart( /// public override IEnumerable FindHoveredPointsBy(LvcPoint pointerPosition) { - return _chartView.Series + return view.Series .Where(series => (series is IPieSeries pieSeries) && !pieSeries.IsFillSeries) .Where(series => series.IsHoverable) .SelectMany(series => series.FindHitPoints(this, pointerPosition, TooltipFindingStrategy.CompareAll)); @@ -142,19 +135,19 @@ protected internal override void Measure() MeasureWork = new object(); - var viewDrawMargin = _chartView.DrawMargin; - ControlSize = _chartView.ControlSize; + var viewDrawMargin = view.DrawMargin; + ControlSize = view.ControlSize; - VisualElements = _chartView.VisualElements ?? Array.Empty>(); + VisualElements = view.VisualElements ?? Array.Empty>(); - LegendPosition = _chartView.LegendPosition; - Legend = _chartView.Legend; + LegendPosition = view.LegendPosition; + Legend = view.Legend; - TooltipPosition = _chartView.TooltipPosition; - Tooltip = _chartView.Tooltip; + TooltipPosition = view.TooltipPosition; + Tooltip = view.Tooltip; - AnimationsSpeed = _chartView.AnimationsSpeed; - EasingFunction = _chartView.EasingFunction; + AnimationsSpeed = view.AnimationsSpeed; + EasingFunction = view.EasingFunction; SeriesContext = new SeriesContext(VisibleSeries, this); var isNewTheme = LiveCharts.DefaultSettings.CurrentThemeId != ThemeId; diff --git a/src/LiveChartsCore/PolarChart.cs b/src/LiveChartsCore/PolarChart.cs index 98087cb57..54ec19aa1 100644 --- a/src/LiveChartsCore/PolarChart.cs +++ b/src/LiveChartsCore/PolarChart.cs @@ -37,29 +37,22 @@ namespace LiveChartsCore; /// /// The type of the drawing context. /// -public class PolarChart : Chart +/// +/// Initializes a new instance of the class. +/// +/// The view. +/// The default platform configuration. +/// The canvas. +/// Forces the legends to redraw with every measure request. +public class PolarChart( + IPolarChartView view, + Action defaultPlatformConfig, + MotionCanvas canvas, + bool requiresLegendMeasureAlways = false) : Chart(canvas, defaultPlatformConfig, view) where TDrawingContext : DrawingContext { - private readonly IPolarChartView _chartView; private int _nextSeries = 0; - /// - /// Initializes a new instance of the class. - /// - /// The view. - /// The default platform configuration. - /// The canvas. - /// Forces the legends to redraw with every measure request. - public PolarChart( - IPolarChartView view, - Action defaultPlatformConfig, - MotionCanvas canvas, - bool requiresLegendMeasureAlways = false) - : base(canvas, defaultPlatformConfig, view) - { - _chartView = view; - } - /// /// Gets the angle axes. /// @@ -78,7 +71,7 @@ public PolarChart( /// public override IEnumerable> Series => - _chartView.Series.Cast>(); + view.Series.Cast>(); /// public override IEnumerable> VisibleSeries => @@ -119,7 +112,7 @@ public PolarChart( /// /// The view. /// - public override IChartView View => _chartView; + public override IChartView View => view; /// /// Finds the points near to the specified point. @@ -163,29 +156,29 @@ protected internal override void Measure() #region copy the current data in the view - var viewDrawMargin = _chartView.DrawMargin; - ControlSize = _chartView.ControlSize; + var viewDrawMargin = view.DrawMargin; + ControlSize = view.ControlSize; - AngleAxes = _chartView.AngleAxes.Cast().ToArray(); - RadiusAxes = _chartView.RadiusAxes.Cast().ToArray(); + AngleAxes = view.AngleAxes.Cast().ToArray(); + RadiusAxes = view.RadiusAxes.Cast().ToArray(); var theme = LiveCharts.DefaultSettings.GetTheme(); - LegendPosition = _chartView.LegendPosition; - Legend = _chartView.Legend; + LegendPosition = view.LegendPosition; + Legend = view.Legend; - TooltipPosition = _chartView.TooltipPosition; - Tooltip = _chartView.Tooltip; + TooltipPosition = view.TooltipPosition; + Tooltip = view.Tooltip; - AnimationsSpeed = _chartView.AnimationsSpeed; - EasingFunction = _chartView.EasingFunction; + AnimationsSpeed = view.AnimationsSpeed; + EasingFunction = view.EasingFunction; - FitToBounds = _chartView.FitToBounds; - TotalAnge = (float)_chartView.TotalAngle; - InnerRadius = (float)_chartView.InnerRadius; - InitialRotation = (float)_chartView.InitialRotation; + FitToBounds = view.FitToBounds; + TotalAnge = (float)view.TotalAngle; + InnerRadius = (float)view.InnerRadius; + InitialRotation = (float)view.InitialRotation; - VisualElements = _chartView.VisualElements ?? Array.Empty>(); + VisualElements = view.VisualElements ?? Array.Empty>(); #endregion diff --git a/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs b/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs index a9a3218e9..0a7a10e01 100644 --- a/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs +++ b/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs @@ -305,18 +305,11 @@ protected internal override void SetParent(IGeometry parent) return new[] { _stroke, _labelsPaint }; } - private class TickVisual + private class TickVisual(TLabelGeometry label, TLineGeometry line, TLineGeometry[] subseparator) { - public TickVisual(TLabelGeometry label, TLineGeometry line, TLineGeometry[] subseparator) - { - Label = label; - Tick = line; - Subseparator = subseparator; - } - - public TLabelGeometry Label { get; set; } - public TLineGeometry Tick { get; set; } - public TLineGeometry[] Subseparator { get; set; } + public TLabelGeometry Label { get; set; } = label; + public TLineGeometry Tick { get; set; } = line; + public TLineGeometry[] Subseparator { get; set; } = subseparator; public object UpdateId { get; set; } = new(); } } diff --git a/src/LiveChartsCore/VisualElements/StackPanel.cs b/src/LiveChartsCore/VisualElements/StackPanel.cs index 7189be31f..b44439804 100644 --- a/src/LiveChartsCore/VisualElements/StackPanel.cs +++ b/src/LiveChartsCore/VisualElements/StackPanel.cs @@ -287,15 +287,9 @@ public override void RemoveFromUI(Chart chart) base.RemoveFromUI(chart); } - private class MeasureResult + private class MeasureResult(VisualElement visual, LvcSize size) { - public MeasureResult(VisualElement visual, LvcSize size) - { - Visual = visual; - Size = size; - } - - public VisualElement Visual { get; set; } - public LvcSize Size { get; set; } + public VisualElement Visual { get; set; } = visual; + public LvcSize Size { get; set; } = size; } } diff --git a/src/LiveChartsCore/VisualElements/TableLayout.cs b/src/LiveChartsCore/VisualElements/TableLayout.cs index 436e5b4af..831d7f28b 100644 --- a/src/LiveChartsCore/VisualElements/TableLayout.cs +++ b/src/LiveChartsCore/VisualElements/TableLayout.cs @@ -287,54 +287,46 @@ internal override IEnumerable> IsHitBy(Chart /// Defines a cell in the . /// - public class TableCell + /// + /// Initializes a new instance of the class. + /// + /// The row index. + /// The column index. + /// The visual to add. + /// The cell vertical alignment, if null the alignment will be defined by the layout. + /// The cell horizontal alignment, if null the alignment will be defined by the layout. + public class TableCell( + int row, + int column, + VisualElement visualElement, + Align? verticalAlign = null, + Align? horizontalAlign = null) { - /// - /// Initializes a new instance of the class. - /// - /// The row index. - /// The column index. - /// The visual to add. - /// The cell vertical alignment, if null the alignment will be defined by the layout. - /// The cell horizontal alignment, if null the alignment will be defined by the layout. - public TableCell( - int row, - int column, - VisualElement visualElement, - Align? verticalAlign = null, - Align? horizontalAlign = null) - { - Row = row; - Column = column; - VisualElement = visualElement; - VerticalAlign = verticalAlign; - HorizontalAlign = horizontalAlign; - } /// /// Gets the row. /// - public int Row { get; } + public int Row { get; } = row; /// /// Gets the column. /// - public int Column { get; } + public int Column { get; } = column; /// /// Gets or sets the vertical alignment. /// - public Align? VerticalAlign { get; } + public Align? VerticalAlign { get; } = verticalAlign; /// /// Gets or sets the horizontal alignment. /// - public Align? HorizontalAlign { get; } + public Align? HorizontalAlign { get; } = horizontalAlign; /// /// Gets the visual element. /// - public VisualElement VisualElement { get; } + public VisualElement VisualElement { get; } = visualElement; } } diff --git a/src/LiveChartsCore/VisualElements/VariableGeometryVisual.cs b/src/LiveChartsCore/VisualElements/VariableGeometryVisual.cs index 5324a7ab3..612db235e 100644 --- a/src/LiveChartsCore/VisualElements/VariableGeometryVisual.cs +++ b/src/LiveChartsCore/VisualElements/VariableGeometryVisual.cs @@ -31,31 +31,25 @@ namespace LiveChartsCore.VisualElements; /// Defines a visual element that is useful to create series miniatures in the tool tips and legends. /// /// The type of the drawing context. -public class VariableGeometryVisual : BaseGeometryVisual +/// +/// Initializes a new instance of the class. +/// +/// +public class VariableGeometryVisual(ISizedGeometry geometry) : BaseGeometryVisual where TDrawingContext : DrawingContext { - private ISizedGeometry _geometry; private bool _isInitialized; - /// - /// Initializes a new instance of the class. - /// - /// - public VariableGeometryVisual(ISizedGeometry geometry) - { - _geometry = geometry; - } - /// /// Gets or sets the geometry. /// public ISizedGeometry Geometry { - get => _geometry; + get => geometry; set { - if (_geometry == value) return; - _geometry = value; + if (geometry == value) return; + geometry = value; _isInitialized = false; OnPropertyChanged(); } @@ -68,7 +62,7 @@ public ISizedGeometry Geometry internal override IAnimatable?[] GetDrawnGeometries() { - return new IAnimatable?[] { _geometry }; + return new IAnimatable?[] { geometry }; } /// @@ -127,8 +121,8 @@ protected internal override void OnInvalidated(Chart chart) /// protected internal override void SetParent(IGeometry parent) { - if (_geometry is null) return; - _geometry.Parent = parent; + if (geometry is null) return; + geometry.Parent = parent; } /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/MotionCanvas.axaml.cs b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/MotionCanvas.axaml.cs index efee6ad2c..5f1a3f0af 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/MotionCanvas.axaml.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/MotionCanvas.axaml.cs @@ -140,22 +140,12 @@ private void MotionCanvas_DetachedFromVisualTree(object sender, VisualTreeAttach // based on: // https://github.com/AvaloniaUI/Avalonia/blob/release/11.0.0-preview1/samples/RenderDemo/Pages/CustomSkiaPage.cs - private class CustomDrawOp : ICustomDrawOperation + private class CustomDrawOp( + MotionCanvas avaloniaControl, MotionCanvas motionCanvas, Rect bounds) : ICustomDrawOperation { - private readonly MotionCanvas _avaloniaControl; - private readonly MotionCanvas _motionCanvas; - - public CustomDrawOp( - MotionCanvas avaloniaControl, MotionCanvas motionCanvas, Rect bounds) - { - _avaloniaControl = avaloniaControl; - _motionCanvas = motionCanvas; - Bounds = bounds; - } - public void Dispose() { } - public Rect Bounds { get; } + public Rect Bounds { get; } = bounds; public bool HitTest(Point p) { @@ -182,9 +172,9 @@ public void Render(a.ImmediateDrawingContext context) $"tread: {Environment.CurrentManagedThreadId}"); } #endif - _motionCanvas.DrawFrame( + motionCanvas.DrawFrame( new SkiaSharpDrawingContext( - _motionCanvas, + motionCanvas, new SKImageInfo((int)Bounds.Width, (int)Bounds.Height), lease.SkSurface, lease.SkCanvas, diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/ResolutionHelper.cs b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/ResolutionHelper.cs index e34121489..125f066c5 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/ResolutionHelper.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/ResolutionHelper.cs @@ -25,26 +25,20 @@ namespace LiveChartsCore.SkiaSharpView.WPF; /// /// A helper class to get the screen resolution. /// -public class ResolutionHelper +/// +/// Initializes a new instance of the class. +/// +/// The horizontal resolution. +/// The vertical resolution. +public class ResolutionHelper(float dpix, float dpiy) { /// /// Gets or sets the horizontal dpi. /// - public float dpix { get; set; } - - /// - /// Initializes a new instance of the class. - /// - /// The horizontal resolution. - /// The vertical resolution. - public ResolutionHelper(float dpix, float dpiy) - { - this.dpix = dpix; - this.dpiy = dpiy; - } + public float dpix { get; set; } = dpix; /// /// Gets or sets the vertical dpi. /// - public float dpiy { get; set; } + public float dpiy { get; set; } = dpiy; } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/SkiaSharpDrawingContext.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/SkiaSharpDrawingContext.cs index 449252191..c6f459640 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/SkiaSharpDrawingContext.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/SkiaSharpDrawingContext.cs @@ -31,33 +31,21 @@ namespace LiveChartsCore.SkiaSharpView.Drawing; /// Defines a skia sharp drawing context. /// /// -public class SkiaSharpDrawingContext : DrawingContext +/// +/// Initializes a new instance of the class. +/// +/// The motion canvas. +/// The information. +/// The surface. +/// The canvas. +/// Indicates whether the canvas is cleared on frame draw. +public class SkiaSharpDrawingContext( + MotionCanvas motionCanvas, + SKImageInfo info, + SKSurface surface, + SKCanvas canvas, + bool clearOnBeginDraw = true) : DrawingContext { - private readonly bool _clearOnBegingDraw; - - /// - /// Initializes a new instance of the class. - /// - /// The motion canvas. - /// The information. - /// The surface. - /// The canvas. - /// Indicates whether the canvas is cleared on frame draw. - public SkiaSharpDrawingContext( - MotionCanvas motionCanvas, - SKImageInfo info, - SKSurface surface, - SKCanvas canvas, - bool clearOnBeginDraw = true) - { - MotionCanvas = motionCanvas; - Info = info; - Surface = surface; - Canvas = canvas; - PaintTask = null!; - Paint = null!; - _clearOnBegingDraw = clearOnBeginDraw; - } /// /// Initializes a new instance of the class. @@ -86,7 +74,7 @@ public SkiaSharpDrawingContext( /// /// The motion canvas. /// - public MotionCanvas MotionCanvas { get; set; } + public MotionCanvas MotionCanvas { get; set; } = motionCanvas; /// /// Gets or sets the information. @@ -94,7 +82,7 @@ public SkiaSharpDrawingContext( /// /// The information. /// - public SKImageInfo Info { get; set; } + public SKImageInfo Info { get; set; } = info; /// /// Gets or sets the surface. @@ -102,7 +90,7 @@ public SkiaSharpDrawingContext( /// /// The surface. /// - public SKSurface Surface { get; set; } + public SKSurface Surface { get; set; } = surface; /// /// Gets or sets the canvas. @@ -110,7 +98,7 @@ public SkiaSharpDrawingContext( /// /// The canvas. /// - public SKCanvas Canvas { get; set; } + public SKCanvas Canvas { get; set; } = canvas; /// /// Gets or sets the paint task. @@ -118,7 +106,7 @@ public SkiaSharpDrawingContext( /// /// The paint task. /// - public Paint PaintTask { get; set; } + public Paint PaintTask { get; set; } = null!; /// /// Gets or sets the paint. @@ -126,7 +114,7 @@ public SkiaSharpDrawingContext( /// /// The paint. /// - public SKPaint Paint { get; set; } + public SKPaint Paint { get; set; } = null!; /// /// Gets or sets the background. @@ -136,7 +124,7 @@ public SkiaSharpDrawingContext( /// public override void OnBeginDraw() { - if (_clearOnBegingDraw) Canvas.Clear(); + if (clearOnBeginDraw) Canvas.Clear(); if (Background != SKColor.Empty) { Canvas.DrawRect(Info.Rect, new SKPaint { Color = Background }); diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/Effects/DashEffect.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/Effects/DashEffect.cs index c6ae2e4c8..973187f7d 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/Effects/DashEffect.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/Effects/DashEffect.cs @@ -29,19 +29,11 @@ namespace LiveChartsCore.SkiaSharpView.Painting.Effects; /// Creates a stroke dash effect. /// /// -public class DashEffect : PathEffect +/// +/// Initializes a new instance of the class. +/// +public class DashEffect(float[] dashArray, float phase = 0) : PathEffect { - private readonly float[] _dashArray; - private readonly float _phase = 0; - - /// - /// Initializes a new instance of the class. - /// - public DashEffect(float[] dashArray, float phase = 0) - { - _dashArray = dashArray; - _phase = phase; - } /// /// Creates a new object that is a copy of the current instance. @@ -52,7 +44,7 @@ public DashEffect(float[] dashArray, float phase = 0) /// public override PathEffect Clone() { - return new DashEffect(_dashArray, _phase); + return new DashEffect(dashArray, phase); } /// @@ -61,6 +53,6 @@ public override PathEffect Clone() /// The drawing context. public override void CreateEffect(SkiaSharpDrawingContext drawingContext) { - SKPathEffect = SKPathEffect.CreateDash(_dashArray, _phase); + SKPathEffect = SKPathEffect.CreateDash(dashArray, phase); } } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/ImageFilters/Blur.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/ImageFilters/Blur.cs index b53637fbc..e8c59c842 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/ImageFilters/Blur.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/ImageFilters/Blur.cs @@ -29,27 +29,15 @@ namespace LiveChartsCore.SkiaSharpView.Painting.ImageFilters; /// Creates a blur image filter. /// /// -public class Blur : ImageFilter +/// +/// Initializes a new instance of the class. +/// +/// The sigma x. +/// The sigma y. +/// The input. +/// The crop rect. +public class Blur(float sigmaX, float sigmaY, SKImageFilter? input = null, SKImageFilter.CropRect? cropRect = null) : ImageFilter { - private readonly float _sigmaX; - private readonly float _sigmaY; - private readonly SKImageFilter? _filter = null; - private readonly SKImageFilter.CropRect? _cropRect = null; - - /// - /// Initializes a new instance of the class. - /// - /// The sigma x. - /// The sigma y. - /// The input. - /// The crop rect. - public Blur(float sigmaX, float sigmaY, SKImageFilter? input = null, SKImageFilter.CropRect? cropRect = null) - { - _sigmaX = sigmaX; - _sigmaY = sigmaY; - _filter = input; - _cropRect = cropRect; - } /// /// Clones this instance. @@ -58,7 +46,7 @@ public Blur(float sigmaX, float sigmaY, SKImageFilter? input = null, SKImageFilt /// public override ImageFilter Clone() { - return new Blur(_sigmaX, _sigmaY, _filter, _cropRect); + return new Blur(sigmaX, sigmaY, input, cropRect); } /// @@ -68,6 +56,6 @@ public override ImageFilter Clone() /// public override void CreateFilter(SkiaSharpDrawingContext drawingContext) { - SKImageFilter = SKImageFilter.CreateBlur(_sigmaX, _sigmaY, _filter, _cropRect); + SKImageFilter = SKImageFilter.CreateBlur(sigmaX, sigmaY, input, cropRect); } } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/ImageFilters/DropShadow.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/ImageFilters/DropShadow.cs index 5ae555eff..5113677a0 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/ImageFilters/DropShadow.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/ImageFilters/DropShadow.cs @@ -29,36 +29,18 @@ namespace LiveChartsCore.SkiaSharpView.Painting.ImageFilters; /// Creates a drop shadow image filter. /// /// -public class DropShadow : ImageFilter +/// +/// Initializes a new instance of the class. +/// +/// The dx. +/// The dy. +/// The sigma x. +/// The sigma y. +/// The color. +/// The input. +/// The crop rect. +public class DropShadow(float dx, float dy, float sigmaX, float sigmaY, SKColor color, SKImageFilter? input = null, SKImageFilter.CropRect? cropRect = null) : ImageFilter { - private readonly float _dx; - private readonly float _dy; - private readonly float _sigmaX; - private readonly float _sigmaY; - private readonly SKColor _color; - private readonly SKImageFilter? _filter = null; - private readonly SKImageFilter.CropRect? _cropRect = null; - - /// - /// Initializes a new instance of the class. - /// - /// The dx. - /// The dy. - /// The sigma x. - /// The sigma y. - /// The color. - /// The input. - /// The crop rect. - public DropShadow(float dx, float dy, float sigmaX, float sigmaY, SKColor color, SKImageFilter? input = null, SKImageFilter.CropRect? cropRect = null) - { - _dx = dx; - _dy = dy; - _sigmaX = sigmaX; - _sigmaY = sigmaY; - _color = color; - _filter = input; - _cropRect = cropRect; - } /// /// Clones this instance. @@ -67,7 +49,7 @@ public DropShadow(float dx, float dy, float sigmaX, float sigmaY, SKColor color, /// public override ImageFilter Clone() { - return new DropShadow(_dx, _dy, _sigmaX, _sigmaY, _color, _filter, _cropRect); + return new DropShadow(dx, dy, sigmaX, sigmaY, color, input, cropRect); } /// @@ -76,6 +58,6 @@ public override ImageFilter Clone() /// The drawing context. public override void CreateFilter(SkiaSharpDrawingContext drawingContext) { - SKImageFilter = SKImageFilter.CreateDropShadow(_dx, _dy, _sigmaX, _sigmaY, _color, _filter, _cropRect); + SKImageFilter = SKImageFilter.CreateDropShadow(dx, dy, sigmaX, sigmaY, color, input, cropRect); } } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/ImageFilters/ImageFiltersMergeOperation.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/ImageFilters/ImageFiltersMergeOperation.cs index a6e326021..08d674150 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/ImageFilters/ImageFiltersMergeOperation.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/ImageFilters/ImageFiltersMergeOperation.cs @@ -29,21 +29,14 @@ namespace LiveChartsCore.SkiaSharpView.Painting.ImageFilters; /// Merges multiple image filters. /// /// -public class ImageFiltersMergeOperation : ImageFilter +/// +/// Initializes a new instance of the class. +/// +/// The image filters. +/// The crop rect. +public class ImageFiltersMergeOperation(ImageFilter[] imageFilters, SKImageFilter.CropRect? cropRect = null) : ImageFilter { - private readonly ImageFilter[] _filters; - private readonly SKImageFilter.CropRect? _cropRect = null; - - /// - /// Initializes a new instance of the class. - /// - /// The image filters. - /// The crop rect. - public ImageFiltersMergeOperation(ImageFilter[] imageFilters, SKImageFilter.CropRect? cropRect = null) - { - _filters = imageFilters; - _cropRect = cropRect; - } + private readonly ImageFilter[] _filters = imageFilters; /// /// Clones this instance. @@ -52,7 +45,7 @@ public ImageFiltersMergeOperation(ImageFilter[] imageFilters, SKImageFilter.Crop /// public override ImageFilter Clone() { - return new ImageFiltersMergeOperation(_filters, _cropRect); + return new ImageFiltersMergeOperation(_filters, cropRect); } /// @@ -72,7 +65,7 @@ public override void CreateFilter(SkiaSharpDrawingContext drawingContext) imageFilters[i++] = item.SKImageFilter; } - SKImageFilter = SKImageFilter.CreateMerge(imageFilters, _cropRect); + SKImageFilter = SKImageFilter.CreateMerge(imageFilters, cropRect); } /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/LinearGradientPaint.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/LinearGradientPaint.cs index 13b4b5928..342efc8a8 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/LinearGradientPaint.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/LinearGradientPaint.cs @@ -31,7 +31,30 @@ namespace LiveChartsCore.SkiaSharpView.Painting; /// Defines a set of geometries that will be painted using a linear gradient shader. /// /// -public class LinearGradientPaint : Paint +/// +/// Initializes a new instance of the class. +/// +/// The gradient stops. +/// +/// The start point, both X and Y in the range of 0 to 1, where 0 is the start of the axis and 1 the end. +/// +/// +/// The end point, both X and Y in the range of 0 to 1, where 0 is the start of the axis and 1 the end. +/// +/// +/// An array of integers in the range of 0 to 1. +/// These integers indicate the relative positions of the colors, You can set that argument to null to equally +/// space the colors, default is null. +/// +/// +/// The shader tile mode, default is . +/// +public class LinearGradientPaint( + SKColor[] gradientStops, + SKPoint startPoint, + SKPoint endPoint, + float[]? colorPos = null, + SKShaderTileMode tileMode = SKShaderTileMode.Repeat) : Paint { /// /// Default start point. @@ -42,46 +65,8 @@ public class LinearGradientPaint : Paint /// Default end point. /// protected static readonly SKPoint s_defaultEndPoint = new(1, 0.5f); - - private readonly SKColor[] _gradientStops; - private readonly SKPoint _startPoint; - private readonly SKPoint _endPoint; - private readonly float[]? _colorPos; - private readonly SKShaderTileMode _tileMode; private SkiaSharpDrawingContext? _drawingContext; - /// - /// Initializes a new instance of the class. - /// - /// The gradient stops. - /// - /// The start point, both X and Y in the range of 0 to 1, where 0 is the start of the axis and 1 the end. - /// - /// - /// The end point, both X and Y in the range of 0 to 1, where 0 is the start of the axis and 1 the end. - /// - /// - /// An array of integers in the range of 0 to 1. - /// These integers indicate the relative positions of the colors, You can set that argument to null to equally - /// space the colors, default is null. - /// - /// - /// The shader tile mode, default is . - /// - public LinearGradientPaint( - SKColor[] gradientStops, - SKPoint startPoint, - SKPoint endPoint, - float[]? colorPos = null, - SKShaderTileMode tileMode = SKShaderTileMode.Repeat) - { - _gradientStops = gradientStops; - _startPoint = startPoint; - _endPoint = endPoint; - _colorPos = colorPos; - _tileMode = tileMode; - } - /// /// Initializes a new instance of the class. /// @@ -114,7 +99,7 @@ public LinearGradientPaint(SKColor start, SKColor end) /// public override IPaint CloneTask() { - return new LinearGradientPaint(_gradientStops, _startPoint, _endPoint, _colorPos, _tileMode) + return new LinearGradientPaint(gradientStops, startPoint, endPoint, colorPos, tileMode) { Style = Style, IsStroke = IsStroke, @@ -146,15 +131,15 @@ public override void ApplyOpacityMask(SkiaSharpDrawingContext context, IPaintabl var yf = size.Location.Y; var yt = yf + size.Height; - var start = new SKPoint(xf + (xt - xf) * _startPoint.X, yf + (yt - yf) * _startPoint.Y); - var end = new SKPoint(xf + (xt - xf) * _endPoint.X, yf + (yt - yf) * _endPoint.Y); + var start = new SKPoint(xf + (xt - xf) * startPoint.X, yf + (yt - yf) * startPoint.Y); + var end = new SKPoint(xf + (xt - xf) * endPoint.X, yf + (yt - yf) * endPoint.Y); _skiaPaint.Shader = SKShader.CreateLinearGradient( start, end, - _gradientStops.Select(x => new SKColor(x.Red, x.Green, x.Blue, (byte)(255 * geometry.Opacity))).ToArray(), - _colorPos, - _tileMode); + gradientStops.Select(x => new SKColor(x.Red, x.Green, x.Blue, (byte)(255 * geometry.Opacity))).ToArray(), + colorPos, + tileMode); } /// @@ -170,15 +155,15 @@ public override void RestoreOpacityMask(SkiaSharpDrawingContext context, IPainta var yf = size.Location.Y; var yt = yf + size.Height; - var start = new SKPoint(xf + (xt - xf) * _startPoint.X, yf + (yt - yf) * _startPoint.Y); - var end = new SKPoint(xf + (xt - xf) * _endPoint.X, yf + (yt - yf) * _endPoint.Y); + var start = new SKPoint(xf + (xt - xf) * startPoint.X, yf + (yt - yf) * startPoint.Y); + var end = new SKPoint(xf + (xt - xf) * endPoint.X, yf + (yt - yf) * endPoint.Y); _skiaPaint.Shader = SKShader.CreateLinearGradient( start, end, - _gradientStops, - _colorPos, - _tileMode); + gradientStops, + colorPos, + tileMode); } /// @@ -194,15 +179,15 @@ public override void InitializeTask(SkiaSharpDrawingContext drawingContext) var yf = size.Location.Y; var yt = yf + size.Height; - var start = new SKPoint(xf + (xt - xf) * _startPoint.X, yf + (yt - yf) * _startPoint.Y); - var end = new SKPoint(xf + (xt - xf) * _endPoint.X, yf + (yt - yf) * _endPoint.Y); + var start = new SKPoint(xf + (xt - xf) * startPoint.X, yf + (yt - yf) * startPoint.Y); + var end = new SKPoint(xf + (xt - xf) * endPoint.X, yf + (yt - yf) * endPoint.Y); _skiaPaint.Shader = SKShader.CreateLinearGradient( start, end, - _gradientStops, - _colorPos, - _tileMode); + gradientStops, + colorPos, + tileMode); _skiaPaint.IsAntialias = IsAntialias; _skiaPaint.IsStroke = true; diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/VisualElements/VariableGeometryVisual.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/VisualElements/VariableGeometryVisual.cs index 4b8ba46e6..85b8ad7e5 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/VisualElements/VariableGeometryVisual.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/VisualElements/VariableGeometryVisual.cs @@ -27,9 +27,6 @@ namespace LiveChartsCore.SkiaSharpView.VisualElements; /// -public class VariableGeometryVisual : VariableGeometryVisual +public class VariableGeometryVisual(ISizedGeometry geometry) : VariableGeometryVisual(geometry) { - public VariableGeometryVisual(ISizedGeometry geometry) - : base(geometry) - { } } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/JsInterop/DomJsInterop.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/JsInterop/DomJsInterop.cs index 4abb8e974..154a8f358 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/JsInterop/DomJsInterop.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/JsInterop/DomJsInterop.cs @@ -29,23 +29,18 @@ namespace LiveChartsCore.SkiaSharpView.Blazor; /// /// An object that handles the comminication with the DOM. /// -public class DomJsInterop : IAsyncDisposable +/// +/// Initialized a new instance of the class. +/// +/// +public class DomJsInterop(IJSRuntime jsRuntime) : IAsyncDisposable { - private readonly Lazy> _moduleTask; - private static readonly Dictionary>> s_resizeEvent = []; - - /// - /// Initialized a new instance of the class. - /// - /// - public DomJsInterop(IJSRuntime jsRuntime) - { - _moduleTask = new Lazy>(() => + private readonly Lazy> _moduleTask = new Lazy>(() => jsRuntime.InvokeAsync( "import", "./_content/LiveChartsCore.SkiaSharpView.Blazor/domInterop.js") .AsTask()); - } + private static readonly Dictionary>> s_resizeEvent = []; /// /// Gets the bounding client rectangle of the given element. diff --git a/tests/LiveChartsCore.UnitTesting/OtherTests/DataProviderTest.cs b/tests/LiveChartsCore.UnitTesting/OtherTests/DataProviderTest.cs index 03651e4a2..bd31d06ba 100644 --- a/tests/LiveChartsCore.UnitTesting/OtherTests/DataProviderTest.cs +++ b/tests/LiveChartsCore.UnitTesting/OtherTests/DataProviderTest.cs @@ -307,13 +307,8 @@ public void FetchNull() Assert.IsTrue(emptyCount == 2); } - public class City + public class City(double? population) { - public City(double? population) - { - Population = population; - } - - public double? Population { get; set; } + public double? Population { get; set; } = population; } } From b74ce6709c6c01c8380e6c60a898233fd4ca4a70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 18:14:16 -0600 Subject: [PATCH 26/86] remove obsolete parameters --- src/LiveChartsCore/PieChart.cs | 4 +--- src/LiveChartsCore/PolarChart.cs | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/LiveChartsCore/PieChart.cs b/src/LiveChartsCore/PieChart.cs index 76c6dc399..f482a6707 100644 --- a/src/LiveChartsCore/PieChart.cs +++ b/src/LiveChartsCore/PieChart.cs @@ -43,12 +43,10 @@ namespace LiveChartsCore; /// The view. /// The default platform configuration. /// The canvas. -/// Forces the legends to redraw with every measure request. public class PieChart( IPieChartView view, Action defaultPlatformConfig, - MotionCanvas canvas, - bool requiresLegendMeasureAlways = false) : Chart(canvas, defaultPlatformConfig, view) + MotionCanvas canvas) : Chart(canvas, defaultPlatformConfig, view) where TDrawingContext : DrawingContext { private int _nextSeries = 0; diff --git a/src/LiveChartsCore/PolarChart.cs b/src/LiveChartsCore/PolarChart.cs index 54ec19aa1..cdf72b386 100644 --- a/src/LiveChartsCore/PolarChart.cs +++ b/src/LiveChartsCore/PolarChart.cs @@ -43,12 +43,10 @@ namespace LiveChartsCore; /// The view. /// The default platform configuration. /// The canvas. -/// Forces the legends to redraw with every measure request. public class PolarChart( IPolarChartView view, Action defaultPlatformConfig, - MotionCanvas canvas, - bool requiresLegendMeasureAlways = false) : Chart(canvas, defaultPlatformConfig, view) + MotionCanvas canvas) : Chart(canvas, defaultPlatformConfig, view) where TDrawingContext : DrawingContext { private int _nextSeries = 0; From c8b24dc799fddc324695ed4c485316412bf1e11d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 18:15:28 -0600 Subject: [PATCH 27/86] use collection expression to replace array.empty --- src/LiveChartsCore/CartesianChart.cs | 4 ++-- src/LiveChartsCore/CoreHeatLandSeries.cs | 2 +- src/LiveChartsCore/Geo/LandDefinition.cs | 2 +- src/LiveChartsCore/Geo/MapLayer.cs | 4 ++-- src/LiveChartsCore/PolarChart.cs | 4 ++-- src/LiveChartsCore/Themes/Theme.cs | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/LiveChartsCore/CartesianChart.cs b/src/LiveChartsCore/CartesianChart.cs index 29387eac8..173a8dd0b 100644 --- a/src/LiveChartsCore/CartesianChart.cs +++ b/src/LiveChartsCore/CartesianChart.cs @@ -79,7 +79,7 @@ public CartesianChart( /// The x axes. /// public ICartesianAxis[] XAxes { get; private set; } = - Array.Empty>(); + []; /// /// Gets the y axes. @@ -88,7 +88,7 @@ public CartesianChart( /// The y axes. /// public ICartesianAxis[] YAxes { get; private set; } = - Array.Empty>(); + []; /// /// Gets the sections. diff --git a/src/LiveChartsCore/CoreHeatLandSeries.cs b/src/LiveChartsCore/CoreHeatLandSeries.cs index 4c084d996..2d3b79a41 100644 --- a/src/LiveChartsCore/CoreHeatLandSeries.cs +++ b/src/LiveChartsCore/CoreHeatLandSeries.cs @@ -41,7 +41,7 @@ public class CoreHeatLandSeries : IGeoSeries, { private IPaint? _heatPaint; private bool _isHeatInCanvas = false; - private LvcColor[] _heatMap = Array.Empty(); + private LvcColor[] _heatMap = []; private double[]? _colorStops; private IEnumerable? _lands; private bool _isVisible; diff --git a/src/LiveChartsCore/Geo/LandDefinition.cs b/src/LiveChartsCore/Geo/LandDefinition.cs index 68774f89c..907e3ed95 100644 --- a/src/LiveChartsCore/Geo/LandDefinition.cs +++ b/src/LiveChartsCore/Geo/LandDefinition.cs @@ -80,5 +80,5 @@ public class LandDefinition(string shortName, string name, string setOf) /// /// Gets or sets the data. /// - public LandData[] Data { get; set; } = Array.Empty(); + public LandData[] Data { get; set; } = []; } diff --git a/src/LiveChartsCore/Geo/MapLayer.cs b/src/LiveChartsCore/Geo/MapLayer.cs index 3169aadd9..4f98989aa 100644 --- a/src/LiveChartsCore/Geo/MapLayer.cs +++ b/src/LiveChartsCore/Geo/MapLayer.cs @@ -71,12 +71,12 @@ public class MapLayer(string layerName, IPaint /// /// Gets or sets the X bounds. /// - public double[] Max { get; set; } = Array.Empty(); + public double[] Max { get; set; } = []; /// /// Gets or sets the Y bounds. /// - public double[] Min { get; set; } = Array.Empty(); + public double[] Min { get; set; } = []; /// /// Gets the lands. diff --git a/src/LiveChartsCore/PolarChart.cs b/src/LiveChartsCore/PolarChart.cs index cdf72b386..38f229667 100644 --- a/src/LiveChartsCore/PolarChart.cs +++ b/src/LiveChartsCore/PolarChart.cs @@ -57,7 +57,7 @@ public class PolarChart( /// /// The x axes. /// - public IPolarAxis[] AngleAxes { get; private set; } = Array.Empty(); + public IPolarAxis[] AngleAxes { get; private set; } = []; /// /// Gets the radius axes. @@ -65,7 +65,7 @@ public class PolarChart( /// /// The y axes. /// - public IPolarAxis[] RadiusAxes { get; private set; } = Array.Empty(); + public IPolarAxis[] RadiusAxes { get; private set; } = []; /// public override IEnumerable> Series => diff --git a/src/LiveChartsCore/Themes/Theme.cs b/src/LiveChartsCore/Themes/Theme.cs index e425a3ec1..20076fadf 100644 --- a/src/LiveChartsCore/Themes/Theme.cs +++ b/src/LiveChartsCore/Themes/Theme.cs @@ -40,7 +40,7 @@ public class Theme /// /// Gets or sets the theme colors. /// - public LvcColor[] Colors { get; set; } = Array.Empty(); + public LvcColor[] Colors { get; set; } = []; /// /// Gets or sets the axis builder. From 7f7496956d9b97fdbecee45472261414c9064c89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 18:41:56 -0600 Subject: [PATCH 28/86] clean behaviours assembly warnings --- .../ChartBehaviour.Android.cs | 16 +++++++++++ .../ChartBehaviour.MacCatalyst.cs | 27 +++++++++++++++++++ .../ChartBehaviour.Windows.cs | 25 +++++++++++++++++ .../LiveChartsCore.Behaviours.csproj | 5 ++++ 4 files changed, 73 insertions(+) diff --git a/src/LiveChartsCore.Behaviours/ChartBehaviour.Android.cs b/src/LiveChartsCore.Behaviours/ChartBehaviour.Android.cs index a67c18b2d..cb0e5144c 100644 --- a/src/LiveChartsCore.Behaviours/ChartBehaviour.Android.cs +++ b/src/LiveChartsCore.Behaviours/ChartBehaviour.Android.cs @@ -41,6 +41,11 @@ public abstract partial class ChartBehaviour private CustomScaleListener _customScaleListener = null!; private DateTime _previousPress = DateTime.MinValue; + /// + /// Called on android hover events. + /// + /// the sender. + /// the event args. protected void OnAndroidHover(object? sender, View.HoverEventArgs e) { if (e.Event is null) return; @@ -49,6 +54,11 @@ protected void OnAndroidHover(object? sender, View.HoverEventArgs e) Moved?.Invoke(sender, new(p, e.Event)); } + /// + /// Called on android touch events. + /// + /// the sender. + /// the event args. protected void OnAndroidTouched(object? sender, View.TouchEventArgs e) { var viewGroup = (ViewGroup?)sender; @@ -66,6 +76,11 @@ protected void OnAndroidTouched(object? sender, View.TouchEventArgs e) _ = _scaleDetector.OnTouchEvent(e.Event); + // MotionEventActions.ButtonPress + // is supported from API 23, the min target it 21 + // we are intentionally ignoring the warning here. + +#pragma warning disable CA1416 switch (e.Event.ActionMasked) { case MotionEventActions.ButtonPress: @@ -110,6 +125,7 @@ protected void OnAndroidTouched(object? sender, View.TouchEventArgs e) default: break; } +#pragma warning restore CA1416 _lastTouch = p; diff --git a/src/LiveChartsCore.Behaviours/ChartBehaviour.MacCatalyst.cs b/src/LiveChartsCore.Behaviours/ChartBehaviour.MacCatalyst.cs index f25772112..0c350ce29 100644 --- a/src/LiveChartsCore.Behaviours/ChartBehaviour.MacCatalyst.cs +++ b/src/LiveChartsCore.Behaviours/ChartBehaviour.MacCatalyst.cs @@ -36,6 +36,13 @@ public partial class ChartBehaviour { private DateTime _previousPress = DateTime.MinValue; +#if MACCATALYST + + /// + /// Builds a mac catalyst gesture recognizer. + /// + /// the view. + /// the recognizer. protected UIHoverGestureRecognizer GetMacCatalystHover(UIView view) { return new UIHoverGestureRecognizer((UIHoverGestureRecognizer e) => @@ -58,7 +65,13 @@ protected UIHoverGestureRecognizer GetMacCatalystHover(UIView view) } }); } +#endif + /// + /// Builds a mac catalyst gesture recognizer. + /// + /// the view. + /// the recognizer. protected UILongPressGestureRecognizer GetMacCatalystLongPress(UIView view) { return new UILongPressGestureRecognizer((UILongPressGestureRecognizer e) => @@ -94,6 +107,12 @@ protected UILongPressGestureRecognizer GetMacCatalystLongPress(UIView view) } private float _previousScale = 1; + + /// + /// Builds a mac catalyst gesture recognizer. + /// + /// the view. + /// the recognizer. protected UIPinchGestureRecognizer GetMacCatalystPinch(UIView view) { return new UIPinchGestureRecognizer((UIPinchGestureRecognizer e) => @@ -126,6 +145,12 @@ protected UIPinchGestureRecognizer GetMacCatalystPinch(UIView view) } private CGPoint? _last; + + /// + /// Builds a mac catalyst gesture recognizer. + /// + /// The view. + /// The recognizer. protected UIPanGestureRecognizer GetMacCatalystOnPan(UIView view) { return new UIPanGestureRecognizer((UIPanGestureRecognizer e) => @@ -141,7 +166,9 @@ protected UIPanGestureRecognizer GetMacCatalystOnPan(UIView view) _last = l; }) { +#if MACCATALYST AllowedScrollTypesMask = UIScrollTypeMask.Discrete | UIScrollTypeMask.Continuous, +#endif MinimumNumberOfTouches = 0, ShouldRecognizeSimultaneously = (g1, g2) => true }; diff --git a/src/LiveChartsCore.Behaviours/ChartBehaviour.Windows.cs b/src/LiveChartsCore.Behaviours/ChartBehaviour.Windows.cs index 18c51f016..a41443e1d 100644 --- a/src/LiveChartsCore.Behaviours/ChartBehaviour.Windows.cs +++ b/src/LiveChartsCore.Behaviours/ChartBehaviour.Windows.cs @@ -32,6 +32,11 @@ namespace LiveChartsCore.Behaviours; /// public partial class ChartBehaviour { + /// + /// Called on windows pointer pressed events. + /// + /// The sender. + /// The event args. protected void OnWindowsPointerPressed(object sender, PointerRoutedEventArgs e) { var p = e.GetCurrentPoint(sender as UIElement); @@ -42,6 +47,11 @@ protected void OnWindowsPointerPressed(object sender, PointerRoutedEventArgs e) new(new(p.Position.X, p.Position.Y), p.Properties.IsRightButtonPressed, e)); } + /// + /// Called on windows pointer moved events. + /// + /// The sender. + /// The events. protected void OnWindowsPointerMoved(object sender, PointerRoutedEventArgs e) { var p = e.GetCurrentPoint(sender as UIElement); @@ -52,6 +62,11 @@ protected void OnWindowsPointerMoved(object sender, PointerRoutedEventArgs e) new(new(p.Position.X, p.Position.Y), e)); } + /// + /// Called on windows pointer released events. + /// + /// The sender. + /// The event args. protected void OnWindowsPointerReleased(object sender, PointerRoutedEventArgs e) { var p = e.GetCurrentPoint(sender as UIElement); @@ -62,12 +77,22 @@ protected void OnWindowsPointerReleased(object sender, PointerRoutedEventArgs e) new(new(p.Position.X, p.Position.Y), p.Properties.IsRightButtonPressed, e)); } + /// + /// Called on windows pointer wheel changed events. + /// + /// The sender. + /// The event args. protected void OnWindowsPointerWheelChanged(object sender, PointerRoutedEventArgs e) { var p = e.GetCurrentPoint(sender as UIElement); Scrolled?.Invoke(sender, new(new(p.Position.X, p.Position.Y), p.Properties.MouseWheelDelta, e)); } + /// + /// Called on windows pointer entered events. + /// + /// The sender. + /// The event args. protected void OnWindowsPointerExited(object sender, PointerRoutedEventArgs e) { Exited?.Invoke(sender, new(e)); diff --git a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj index ea7bdb3ba..32ec40329 100644 --- a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj +++ b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj @@ -44,6 +44,11 @@ bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml + + bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml + true + + From 51645c8bb32d6c1b47ef321f118db07c683aaf35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 18:48:40 -0600 Subject: [PATCH 29/86] explain more about disable --- src/LiveChartsCore.Behaviours/ChartBehaviour.Android.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/LiveChartsCore.Behaviours/ChartBehaviour.Android.cs b/src/LiveChartsCore.Behaviours/ChartBehaviour.Android.cs index cb0e5144c..4584a0736 100644 --- a/src/LiveChartsCore.Behaviours/ChartBehaviour.Android.cs +++ b/src/LiveChartsCore.Behaviours/ChartBehaviour.Android.cs @@ -78,7 +78,8 @@ protected void OnAndroidTouched(object? sender, View.TouchEventArgs e) // MotionEventActions.ButtonPress // is supported from API 23, the min target it 21 - // we are intentionally ignoring the warning here. + // we are intentionally ignoring the warning here + // because the switch should never reach the case from api 21 or 22 #pragma warning disable CA1416 switch (e.Event.ActionMasked) From 9ade2364e24bd8e0722eace0c1f714576fa80630 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 17 Nov 2023 19:35:57 -0600 Subject: [PATCH 30/86] remove skaisharp assembly warnings --- .../LiveChartsCore.SkiaSharp/BoxSeries.cs | 6 +++--- .../CandlesticksSeries.cs | 6 +++--- .../LiveChartsCore.SkiaSharp/ColumnSeries.cs | 6 +++--- .../Drawing/Geometries/ArcGeometry.cs | 1 - .../Drawing/Geometries/HeatPathShape.cs | 2 ++ .../Drawing/Geometries/PopUpGeometry.cs | 1 + .../Drawing/Segments/MoveToPathCommand.cs | 1 - .../Extensions/BaseGaugeItem.cs | 4 ++++ .../LiveChartsCore.SkiaSharp/HeatSeries.cs | 6 +++--- .../LiveChartsCore.SkiaSharp/LineSeries.cs | 6 +++--- .../LiveChartsSkiaSharp.cs | 17 ----------------- .../LiveChartsCore.SkiaSharp/Painting/Paint.cs | 18 ++---------------- .../LiveChartsCore.SkiaSharp/PieSeries.cs | 6 +++--- .../PolarLineSeries.cs | 6 +++--- .../LiveChartsCore.SkiaSharp/RowSeries.cs | 6 +++--- .../LiveChartsCore.SkiaSharp/ScatterSeries.cs | 6 +++--- .../StackedAreaSeries.cs | 6 +++--- .../StackedColumnSeries.cs | 6 +++--- .../StackedRowSeries.cs | 6 +++--- .../StackedStepAreaSeries.cs | 6 +++--- .../LiveChartsCore.SkiaSharp/StepLineSeries.cs | 6 +++--- 21 files changed, 51 insertions(+), 77 deletions(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/BoxSeries.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/BoxSeries.cs index 7674c327d..25b487bcd 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/BoxSeries.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/BoxSeries.cs @@ -33,7 +33,7 @@ namespace LiveChartsCore.SkiaSharpView; /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -46,7 +46,7 @@ public class BoxSeries : CoreBoxSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -63,7 +63,7 @@ public class BoxSeries : CoreBoxSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/CandlesticksSeries.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/CandlesticksSeries.cs index c1774069e..06d5a33ad 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/CandlesticksSeries.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/CandlesticksSeries.cs @@ -33,7 +33,7 @@ namespace LiveChartsCore.SkiaSharpView; /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -46,7 +46,7 @@ public class CandlesticksSeries : CandlesticksSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -63,7 +63,7 @@ public class CandlesticksSeries : CandlesticksSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/ColumnSeries.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/ColumnSeries.cs index 7d43f8edc..b8932857f 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/ColumnSeries.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/ColumnSeries.cs @@ -33,7 +33,7 @@ namespace LiveChartsCore.SkiaSharpView; /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -46,7 +46,7 @@ public class ColumnSeries : ColumnSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -63,7 +63,7 @@ public class ColumnSeries : ColumnSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/ArcGeometry.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/ArcGeometry.cs index c2e4ce5ee..cf14697ab 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/ArcGeometry.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/ArcGeometry.cs @@ -53,7 +53,6 @@ public override void OnDraw(SkiaSharpDrawingContext context, SKPaint paint) using var path = new SKPath(); var cx = CenterX; var cy = CenterY; - var wedge = 20; var r = Width * 0.5f; var startAngle = StartAngle; var sweepAngle = SweepAngle; diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/HeatPathShape.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/HeatPathShape.cs index 489f72f71..426ca77b8 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/HeatPathShape.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/HeatPathShape.cs @@ -33,7 +33,9 @@ namespace LiveChartsCore.SkiaSharpView.Drawing.Geometries; /// Defines a path geometry with a specified color. /// /// +#pragma warning disable CS0612 // Type or member is obsolete public class HeatPathShape : PathGeometry, IHeatPathShape +#pragma warning restore CS0612 // Type or member is obsolete { private readonly ColorMotionProperty _fillProperty; diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/PopUpGeometry.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/PopUpGeometry.cs index 1e8895024..62b3bfbfb 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/PopUpGeometry.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Geometries/PopUpGeometry.cs @@ -51,6 +51,7 @@ public class PopUpGeometry : SizedGeometry /// public PopUpPlacement Placement { get; set; } = PopUpPlacement.Bottom; + /// public override void OnDraw(SkiaSharpDrawingContext context, SKPaint paint) { using var path = new SKPath(); diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Segments/MoveToPathCommand.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Segments/MoveToPathCommand.cs index d9c6979be..8438674ff 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Segments/MoveToPathCommand.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/Segments/MoveToPathCommand.cs @@ -50,7 +50,6 @@ public MoveToPathCommand() /// public override void Execute(SKPath path, long currentTime, Animatable pathGeometry) { - currentTime = currentTime; path.MoveTo(X, Y); } } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Extensions/BaseGaugeItem.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Extensions/BaseGaugeItem.cs index 1e480aea7..f58a8bdab 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Extensions/BaseGaugeItem.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Extensions/BaseGaugeItem.cs @@ -27,6 +27,10 @@ namespace LiveChartsCore.SkiaSharpView.Extensions; +/// +/// Defines an item for a gauge series. +/// +/// The type of the series. public class BaseGaugeItem where TSeries : IPieSeries, new() { diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/HeatSeries.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/HeatSeries.cs index dbdcf8452..9ff68a689 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/HeatSeries.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/HeatSeries.cs @@ -33,7 +33,7 @@ namespace LiveChartsCore.SkiaSharpView; /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -46,7 +46,7 @@ public class HeatSeries : HeatSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -63,7 +63,7 @@ public class HeatSeries : HeatSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/LineSeries.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/LineSeries.cs index c1e4a6885..e74bba48e 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/LineSeries.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/LineSeries.cs @@ -33,7 +33,7 @@ namespace LiveChartsCore.SkiaSharpView; /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -46,7 +46,7 @@ public class LineSeries : LineSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -63,7 +63,7 @@ public class LineSeries : LineSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsSkiaSharp.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsSkiaSharp.cs index 89192b92f..120cccec7 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsSkiaSharp.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsSkiaSharp.cs @@ -116,23 +116,6 @@ public static LvcColor AsLvcColor(this SKColor color) return new LvcColor(color.Red, color.Green, color.Blue, color.Alpha); } - /// - /// Gets the key. - /// - [Obsolete($"Use {nameof(Paint)}.{nameof(Paint.SKTypeface)} instead.")] - public const string SkiaFontMatchChar = "matchChar"; - - /// - /// Matches - /// - /// - /// - [Obsolete($"Use {nameof(Paint)}.{nameof(Paint.SKTypeface)} instead.")] - public static string MatchChar(char @char) - { - return $"{SkiaFontMatchChar}|{@char}"; - } - /// /// Converts an IEnumerable to an ObservableCollection of pie series. /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/Paint.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/Paint.cs index 35189b4e9..76e21fe7e 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/Paint.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Painting/Paint.cs @@ -38,10 +38,8 @@ public abstract class Paint : Animatable, IDisposable, IPaint, HashSet>> _geometriesByCanvas = []; private readonly Dictionary, LvcRectangle> _clipRectangles = []; - private char? _matchesChar = null; internal SKPaint? _skiaPaint; internal FloatMotionProperty _strokeWidthTransition; - private string? _fontFamily; /// /// Initializes a new instance of the class. @@ -82,16 +80,7 @@ protected Paint(SKColor color) : this() public bool IsFill { get; set; } /// - public string? FontFamily - { - get => _fontFamily; - set - { - _fontFamily = value; - if (!(_fontFamily?.Contains(LiveChartsSkiaSharp.SkiaFontMatchChar) ?? false)) return; - _matchesChar = Convert.ToChar(_fontFamily.Split('|')[1]); - } - } + public string? FontFamily { get; set; } /// /// Gets or sets the font style. @@ -271,11 +260,8 @@ protected internal SKTypeface GetSKTypeface() // return the defined typeface. if (SKTypeface is not null) return SKTypeface; - // Obsolete method used in older versions of LiveCharts... - if (_matchesChar is not null) return SKFontManager.Default.MatchCharacter(_matchesChar.Value); - // create one from the font family. - if (FontFamily is not null) return SKTypeface.FromFamilyName(_fontFamily, SKFontStyle ?? new SKFontStyle()); + if (FontFamily is not null) return SKTypeface.FromFamilyName(FontFamily, SKFontStyle ?? new SKFontStyle()); // other wise ose the globally defined typeface. return LiveChartsSkiaSharp.DefaultSKTypeface ?? SKTypeface.Default; diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/PieSeries.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/PieSeries.cs index 6ed8eb6df..7f0344628 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/PieSeries.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/PieSeries.cs @@ -33,7 +33,7 @@ namespace LiveChartsCore.SkiaSharpView; /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -60,7 +60,7 @@ public PieSeries(bool isGauge = false, bool isGaugeFill = false) : base(isGauge, /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -91,7 +91,7 @@ public PieSeries(bool isGauge = false, bool isGaugeFill = false) : base(isGauge, /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/PolarLineSeries.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/PolarLineSeries.cs index 5839681db..72db1c6bc 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/PolarLineSeries.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/PolarLineSeries.cs @@ -33,7 +33,7 @@ namespace LiveChartsCore.SkiaSharpView; /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -46,7 +46,7 @@ public class PolarLineSeries : PolarLineSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -63,7 +63,7 @@ public class PolarLineSeries : PolarLineSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/RowSeries.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/RowSeries.cs index ecff7d52c..3c7fe24fe 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/RowSeries.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/RowSeries.cs @@ -33,7 +33,7 @@ namespace LiveChartsCore.SkiaSharpView; /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// data label of every point. @@ -46,7 +46,7 @@ public class RowSeries : RowSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -63,7 +63,7 @@ public class RowSeries : RowSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/ScatterSeries.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/ScatterSeries.cs index 5225e9b10..4ebcf32e8 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/ScatterSeries.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/ScatterSeries.cs @@ -33,7 +33,7 @@ namespace LiveChartsCore.SkiaSharpView; /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -46,7 +46,7 @@ public class ScatterSeries : ScatterSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -63,7 +63,7 @@ public class ScatterSeries : ScatterSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/StackedAreaSeries.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/StackedAreaSeries.cs index 26539eeb2..b09cacfba 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/StackedAreaSeries.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/StackedAreaSeries.cs @@ -33,7 +33,7 @@ namespace LiveChartsCore.SkiaSharpView; /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -46,7 +46,7 @@ public class StackedAreaSeries : StackedAreaSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -63,7 +63,7 @@ public class StackedAreaSeries : StackedAreaSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/StackedColumnSeries.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/StackedColumnSeries.cs index d5c32337d..da6cd82e7 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/StackedColumnSeries.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/StackedColumnSeries.cs @@ -33,7 +33,7 @@ namespace LiveChartsCore.SkiaSharpView; /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -46,7 +46,7 @@ public class StackedColumnSeries : StackedColumnSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -63,7 +63,7 @@ public class StackedColumnSeries : StackedColumnSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/StackedRowSeries.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/StackedRowSeries.cs index 0d6af70bf..5d2e5f417 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/StackedRowSeries.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/StackedRowSeries.cs @@ -33,7 +33,7 @@ namespace LiveChartsCore.SkiaSharpView; /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -46,7 +46,7 @@ public class StackedRowSeries : StackedRowSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -63,7 +63,7 @@ public class StackedRowSeries : StackedRowSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/StackedStepAreaSeries.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/StackedStepAreaSeries.cs index c232b98e5..8dac0ef75 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/StackedStepAreaSeries.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/StackedStepAreaSeries.cs @@ -33,7 +33,7 @@ namespace LiveChartsCore.SkiaSharpView; /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -47,7 +47,7 @@ public class StackedStepAreaSeries /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -65,7 +65,7 @@ public class StackedStepAreaSeries /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/StepLineSeries.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/StepLineSeries.cs index c4b50c87c..09409ccac 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/StepLineSeries.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/StepLineSeries.cs @@ -33,7 +33,7 @@ namespace LiveChartsCore.SkiaSharpView; /// /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -46,7 +46,7 @@ public class StepLineSeries : StepLineSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// @@ -63,7 +63,7 @@ public class StepLineSeries : StepLineSeries /// The type of the points, you can use any type, the library already knows how to handle the most common numeric types, /// to use a custom type, you must register the type globally -/// () +/// () /// or at the series level /// (). /// From 0ee98ec80d2d116503c44f367f6bc9123c83f7b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sat, 18 Nov 2023 12:59:17 -0600 Subject: [PATCH 31/86] remove warning from avalonia assembly --- .../CartesianChart.axaml.cs | 4 +- .../GeoMap.axaml.cs | 2 +- .../MotionCanvas.axaml.cs | 51 ++++++++----------- .../PieChart.axaml.cs | 8 +-- .../PolarChart.axaml.cs | 4 +- .../Drawing/SkiaSharpDrawingContext.cs | 6 +-- 6 files changed, 33 insertions(+), 42 deletions(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/CartesianChart.axaml.cs b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/CartesianChart.axaml.cs index bc161f226..b8c4b49fe 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/CartesianChart.axaml.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/CartesianChart.axaml.cs @@ -850,12 +850,12 @@ private void OnCoreMeasuring(IChartView chart) Measuring?.Invoke(this); } - private void CartesianChart_AttachedToVisualTree(object sender, VisualTreeAttachmentEventArgs e) + private void CartesianChart_AttachedToVisualTree(object? sender, VisualTreeAttachmentEventArgs e) { _core?.Load(); } - private void CartesianChart_DetachedFromVisualTree(object sender, VisualTreeAttachmentEventArgs e) + private void CartesianChart_DetachedFromVisualTree(object? sender, VisualTreeAttachmentEventArgs e) { _core?.Unload(); } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/GeoMap.axaml.cs b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/GeoMap.axaml.cs index 5f42f7255..287b4794f 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/GeoMap.axaml.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/GeoMap.axaml.cs @@ -274,7 +274,7 @@ private void OnPointerLeave(object? sender, PointerEventArgs e) _core?.InvokePointerLeft(); } - private void GeoMap_DetachedFromVisualTree(object sender, VisualTreeAttachmentEventArgs e) + private void GeoMap_DetachedFromVisualTree(object? sender, VisualTreeAttachmentEventArgs e) { if (_core is null) return; _core.Unload(); diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/MotionCanvas.axaml.cs b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/MotionCanvas.axaml.cs index 5f1a3f0af..2a892d280 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/MotionCanvas.axaml.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/MotionCanvas.axaml.cs @@ -22,7 +22,6 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; @@ -35,7 +34,7 @@ using LiveChartsCore.Motion; using LiveChartsCore.SkiaSharpView.Drawing; using SkiaSharp; -using a = Avalonia.Media; +using AvaloniaMedia = Avalonia.Media; namespace LiveChartsCore.SkiaSharpView.Avalonia; @@ -91,10 +90,10 @@ public List> PaintTasks /// Renders the control. /// p /// - public override void Render(a.DrawingContext context) + public override void Render(AvaloniaMedia.DrawingContext context) { if (_isDeatached) return; - var drawOperation = new CustomDrawOp(this, CanvasCore, new Rect(0, 0, Bounds.Width, Bounds.Height)); + var drawOperation = new CustomDrawOp(CanvasCore, new Rect(0, 0, Bounds.Width, Bounds.Height)); context.Custom(drawOperation); if (CanvasCore.IsValid) return; @@ -125,13 +124,13 @@ private void OnCanvasCoreInvalidated(MotionCanvas sende InvalidateVisual(); } - private void MotionCanvas_AttachedToVisualTree(object sender, VisualTreeAttachmentEventArgs e) + private void MotionCanvas_AttachedToVisualTree(object? sender, VisualTreeAttachmentEventArgs e) { _isDeatached = false; CanvasCore.Invalidated += OnCanvasCoreInvalidated; } - private void MotionCanvas_DetachedFromVisualTree(object sender, VisualTreeAttachmentEventArgs e) + private void MotionCanvas_DetachedFromVisualTree(object? sender, VisualTreeAttachmentEventArgs e) { _isDeatached = true; CanvasCore.Invalidated -= OnCanvasCoreInvalidated; @@ -139,39 +138,19 @@ private void MotionCanvas_DetachedFromVisualTree(object sender, VisualTreeAttach } // based on: - // https://github.com/AvaloniaUI/Avalonia/blob/release/11.0.0-preview1/samples/RenderDemo/Pages/CustomSkiaPage.cs - private class CustomDrawOp( - MotionCanvas avaloniaControl, MotionCanvas motionCanvas, Rect bounds) : ICustomDrawOperation + // https://github.com/AvaloniaUI/Avalonia/blob/release/11.0.0/samples/RenderDemo/Pages/CustomSkiaPage.cs + private class CustomDrawOp(MotionCanvas motionCanvas, Rect bounds) + : ICustomDrawOperation { - public void Dispose() { } - public Rect Bounds { get; } = bounds; - public bool HitTest(Point p) - { - return false; - } - - public bool Equals(ICustomDrawOperation? other) - { - return false; - } - - public void Render(a.ImmediateDrawingContext context) + public void Render(AvaloniaMedia.ImmediateDrawingContext context) { if (!context.TryGetFeature(out var leaseFeature)) throw new Exception("SkiaSharp is not supported."); using var lease = leaseFeature.Lease(); -#if DEBUG - if (LiveCharts.EnableLogging) - { - Trace.WriteLine( - $"[rendering] ".PadRight(60) + - $"tread: {Environment.CurrentManagedThreadId}"); - } -#endif motionCanvas.DrawFrame( new SkiaSharpDrawingContext( motionCanvas, @@ -180,5 +159,17 @@ public void Render(a.ImmediateDrawingContext context) lease.SkCanvas, false)); } + + public void Dispose() { } + + public bool HitTest(Point p) + { + return false; + } + + public bool Equals(ICustomDrawOperation? other) + { + return false; + } } } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/PieChart.axaml.cs b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/PieChart.axaml.cs index 7b0042005..54d8d9672 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/PieChart.axaml.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/PieChart.axaml.cs @@ -646,7 +646,7 @@ private void Chart_PointerMoved(object? sender, PointerEventArgs e) _core?.InvokePointerMove(new LvcPoint((float)p.X, (float)p.Y)); } - private void Chart_PointerPressed(object sender, PointerPressedEventArgs e) + private void Chart_PointerPressed(object? sender, PointerPressedEventArgs e) { var p = e.GetPosition(this); @@ -659,7 +659,7 @@ private void Chart_PointerPressed(object sender, PointerPressedEventArgs e) _core?.InvokePointerDown(new LvcPoint((float)p.X, (float)p.Y), false); } - private void PieChart_PointerReleased(object sender, PointerReleasedEventArgs e) + private void PieChart_PointerReleased(object? sender, PointerReleasedEventArgs e) { var p = e.GetPosition(this); @@ -696,12 +696,12 @@ private void Chart_PointerLeave(object? sender, PointerEventArgs e) _core?.InvokePointerLeft(); } - private void OnAttachedToVisualTree(object sender, VisualTreeAttachmentEventArgs e) + private void OnAttachedToVisualTree(object? sender, VisualTreeAttachmentEventArgs e) { _core?.Load(); } - private void PieChart_DetachedFromVisualTree(object sender, VisualTreeAttachmentEventArgs e) + private void PieChart_DetachedFromVisualTree(object? sender, VisualTreeAttachmentEventArgs e) { _core?.Unload(); } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/PolarChart.axaml.cs b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/PolarChart.axaml.cs index 41293b4d6..3bca3486b 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/PolarChart.axaml.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/PolarChart.axaml.cs @@ -773,12 +773,12 @@ private void PolarChart_PointerLeave(object? sender, PointerEventArgs e) _core?.InvokePointerLeft(); } - private void OnAttachedToVisualTree(object sender, VisualTreeAttachmentEventArgs e) + private void OnAttachedToVisualTree(object? sender, VisualTreeAttachmentEventArgs e) { _core?.Load(); } - private void PolarChart_DetachedFromVisualTree(object sender, VisualTreeAttachmentEventArgs e) + private void PolarChart_DetachedFromVisualTree(object? sender, VisualTreeAttachmentEventArgs e) { _core?.Unload(); } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/SkiaSharpDrawingContext.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/SkiaSharpDrawingContext.cs index c6f459640..3c103401b 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/SkiaSharpDrawingContext.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/Drawing/SkiaSharpDrawingContext.cs @@ -42,7 +42,7 @@ namespace LiveChartsCore.SkiaSharpView.Drawing; public class SkiaSharpDrawingContext( MotionCanvas motionCanvas, SKImageInfo info, - SKSurface surface, + SKSurface? surface, SKCanvas canvas, bool clearOnBeginDraw = true) : DrawingContext { @@ -59,7 +59,7 @@ public class SkiaSharpDrawingContext( public SkiaSharpDrawingContext( MotionCanvas motionCanvas, SKImageInfo info, - SKSurface surface, + SKSurface? surface, SKCanvas canvas, SKColor background, bool clearOnBeginDraw = true) @@ -90,7 +90,7 @@ public SkiaSharpDrawingContext( /// /// The surface. /// - public SKSurface Surface { get; set; } = surface; + public SKSurface? Surface { get; set; } = surface; /// /// Gets or sets the canvas. From 4266bc905c1c9b6553072fd5e19377cb7b73316d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sat, 18 Nov 2023 13:07:24 -0600 Subject: [PATCH 32/86] ignore blazor warnings --- .../LiveChartsCore.SkiaSharpView.Blazor.csproj | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj index 7cb2b775e..37c1f40e3 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj @@ -20,6 +20,15 @@ True + + + BL0007 + + True From 16ee99a647ff82486892b014008ef5cccbfa0e77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sat, 18 Nov 2023 13:20:14 -0600 Subject: [PATCH 33/86] fix eto --- src/LiveChartsCore/Kernel/LiveChartsSettings.cs | 5 +---- src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/PieChart.cs | 2 +- src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/PolarChart.cs | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/LiveChartsCore/Kernel/LiveChartsSettings.cs b/src/LiveChartsCore/Kernel/LiveChartsSettings.cs index d70782269..a440515f3 100644 --- a/src/LiveChartsCore/Kernel/LiveChartsSettings.cs +++ b/src/LiveChartsCore/Kernel/LiveChartsSettings.cs @@ -24,7 +24,6 @@ using System; using System.Collections.Generic; -using LiveChartsCore.Defaults; using LiveChartsCore.Drawing; using LiveChartsCore.Kernel.Providers; using LiveChartsCore.Measure; @@ -382,9 +381,7 @@ public Theme GetTheme() } /// - /// Enables LiveCharts to be able to plot short, int, long, float, double, decimal, short?, int?, long?, float?, double?, decimal?, - /// , , , and - /// . + /// Enables LiveCharts to be able to plot short, int, long, float, double, decimal, short?, int?, long?, float?, double?, decimal?. /// /// public LiveChartsSettings AddDefaultMappers() diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/PieChart.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/PieChart.cs index 0a1325f85..16c476e8f 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/PieChart.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/PieChart.cs @@ -127,7 +127,7 @@ public override IEnumerable> GetVisualsAt protected override void InitializeCore() { core = new PieChart( - this, config => config.UseDefaults(), motionCanvas.CanvasCore, true); + this, config => config.UseDefaults(), motionCanvas.CanvasCore); core.Update(); } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/PolarChart.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/PolarChart.cs index 54cdf910a..8c13d9882 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/PolarChart.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/PolarChart.cs @@ -176,7 +176,7 @@ public IEnumerable RadiusAxes protected override void InitializeCore() { core = new PolarChart( - this, config => config.UseDefaults(), motionCanvas.CanvasCore, true); + this, config => config.UseDefaults(), motionCanvas.CanvasCore); core.Update(); } From 14e22daaef2f7318e919189b9dd4a509009c396b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sat, 18 Nov 2023 13:31:27 -0600 Subject: [PATCH 34/86] add no warn --- .../LiveChartsCore.SkiaSharpView.Blazor.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj index 37c1f40e3..16142dd9b 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj @@ -26,7 +26,7 @@ but LiveCharts updates automatically, and we need to let the core of the library know about the change. --> - BL0007 + $(NoWarn);BL0007 From 15ce19f5e21dc7c85b300574e98ed99c62e57c2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sat, 18 Nov 2023 13:31:36 -0600 Subject: [PATCH 35/86] fix maui warnings --- .../ChartBehaviour.cs | 5 ++++- .../LiveChartsCore.SkiaSharpView.Maui.csproj | 10 ++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/ChartBehaviour.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/ChartBehaviour.cs index 67b775bb6..ab34ab782 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/ChartBehaviour.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/ChartBehaviour.cs @@ -1,4 +1,5 @@ -// The MIT License(MIT) + +// The MIT License(MIT) // // Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors // @@ -59,7 +60,9 @@ public void On(Microsoft.Maui.Controls.VisualElement element) contentView.UserInteractionEnabled = true; +#if MACCATALYST contentView.AddGestureRecognizer(GetMacCatalystHover(contentView)); +#endif contentView.AddGestureRecognizer(GetMacCatalystLongPress(contentView)); contentView.AddGestureRecognizer(GetMacCatalystPinch(contentView)); contentView.AddGestureRecognizer(GetMacCatalystOnPan(contentView)); diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj index 076d8db22..58d7994d1 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj @@ -25,6 +25,12 @@ 10.0.17763.0 6.5 + + win-x86;win-x64;win-arm64 + 2.0.0-rc2 icon.png Simple, flexible, interactive and powerful data visualization for Maui. @@ -36,8 +42,8 @@ True bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml - - + + Date: Sat, 18 Nov 2023 13:35:44 -0600 Subject: [PATCH 36/86] remove uno warnings --- .../LiveChartsCore.SkiaSharpView.Uno.WinUI/ChartBehaviour.cs | 2 ++ .../ChartBehaviour.uno.cs | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/ChartBehaviour.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/ChartBehaviour.cs index ae0a983d6..49b273d94 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/ChartBehaviour.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/ChartBehaviour.cs @@ -54,7 +54,9 @@ public void On(FrameworkElement element) #elif MACCATALYST || IOS element.UserInteractionEnabled = true; +#if MACCATALYST element.AddGestureRecognizer(GetMacCatalystHover(element)); +#endif element.AddGestureRecognizer(GetMacCatalystLongPress(element)); element.AddGestureRecognizer(GetMacCatalystPinch(element)); element.AddGestureRecognizer(GetMacCatalystOnPan(element)); diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/ChartBehaviour.uno.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/ChartBehaviour.uno.cs index 9eadfca40..f22d9aa97 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/ChartBehaviour.uno.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/ChartBehaviour.uno.cs @@ -22,7 +22,7 @@ #if (HAS_UNO || HAS_UNO_WINUI) && !ANDROID && !IOS && !MACCATALYST && !WINDOWS -// Work around for Uno (WASM and SKIA), we use the same code as WinUI, but we +// Workaround for Uno (WASM and SKIA), we use the same code as WinUI, but we // can not call this from the behaviours assembly because it does not have // a reference to the Uno assembly. So we have to copy the code here. From 3bb90c58af5a0fb39194f9332251f1d028ac609b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sat, 18 Nov 2023 13:40:22 -0600 Subject: [PATCH 37/86] fix winforms warnings --- .../LiveChartsCore.SkiaSharpView.WinForms.csproj | 5 +++++ src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/PieChart.cs | 2 +- .../LiveChartsCore.SkiaSharp.WinForms/PolarChart.cs | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj index a5eafa041..837e5129d 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj @@ -20,6 +20,11 @@ https://github.com/beto-rodriguez/LiveCharts2 + + + $(NoWarn);NU1701 + + bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml true diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/PieChart.cs b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/PieChart.cs index 9bdb28601..4e35130ae 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/PieChart.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/PieChart.cs @@ -133,7 +133,7 @@ public override IEnumerable> GetVisualsAt protected override void InitializeCore() { core = new PieChart( - this, config => config.UseDefaults(), motionCanvas.CanvasCore, true); + this, config => config.UseDefaults(), motionCanvas.CanvasCore); if (((IChartView)this).DesignerMode) return; core.Update(); } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/PolarChart.cs b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/PolarChart.cs index 204cdda25..d0632c564 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/PolarChart.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/PolarChart.cs @@ -184,7 +184,7 @@ public IEnumerable RadiusAxes protected override void InitializeCore() { core = new PolarChart( - this, config => config.UseDefaults(), motionCanvas.CanvasCore, true); + this, config => config.UseDefaults(), motionCanvas.CanvasCore); if (((IChartView)this).DesignerMode) return; core.Update(); } From a2cf4a1faa1d812c10b47d03abd3b25c7573b8cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sat, 18 Nov 2023 13:58:12 -0600 Subject: [PATCH 38/86] fix winui warnings --- .../LiveChartsCore.SkiaSharpView.WinUI.csproj | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj index 6d8da1b2e..2e0ba4e0f 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj @@ -8,7 +8,7 @@ net7.0-windows10.0.19041.0; net8.0-windows10.0.19041.0 - + 10.0.17763.0 + $(NoWarn);NETSDK1206 + + bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml True From 6a9922bc7da71538263b4daf5752791ab6ca51b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sat, 18 Nov 2023 14:00:34 -0600 Subject: [PATCH 39/86] fix wpf warnings --- src/skiasharp/LiveChartsCore.SkiaSharp.WPF/CartesianChart.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/CartesianChart.cs b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/CartesianChart.cs index 68cc522c1..17d2de249 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/CartesianChart.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/CartesianChart.cs @@ -406,7 +406,7 @@ private void OnMouseWheel(object? sender, MouseWheelEventArgs e) c.Zoom(new LvcPoint((float)p.X, (float)p.Y), e.Delta > 0 ? ZoomDirection.ZoomIn : ZoomDirection.ZoomOut); } - private void OnManipulationDelta(object sender, ManipulationDeltaEventArgs e) + private void OnManipulationDelta(object? sender, ManipulationDeltaEventArgs e) { if (core is null) throw new Exception("core not found"); var c = (CartesianChart)core; @@ -425,7 +425,7 @@ private void OnManipulationDelta(object sender, ManipulationDeltaEventArgs e) return; } } - private void OnManipulationStarting(object sender, ManipulationStartingEventArgs e) + private void OnManipulationStarting(object? sender, ManipulationStartingEventArgs e) { e.ManipulationContainer = this; e.Handled = true; From b952924573ea9ec1f7fbfc33c347a48f962c415d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sat, 18 Nov 2023 14:02:21 -0600 Subject: [PATCH 40/86] remove manual workload installation --- build/build-windows.ps1 | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/build/build-windows.ps1 b/build/build-windows.ps1 index a681c9c93..cc05fbb57 100644 --- a/build/build-windows.ps1 +++ b/build/build-windows.ps1 @@ -15,12 +15,7 @@ $msbuild = &"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere. /p:configuration=$configuration ` /restore -dotnet workload install macos -dotnet workload install ios -dotnet workload install maccatalyst -dotnet workload install android - & $msbuild ` ./src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj ` /p:configuration=$configuration ` - /restore \ No newline at end of file + /restore From 868b2689b8008740078603bcf752406dfc1cd508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sat, 18 Nov 2023 14:18:10 -0600 Subject: [PATCH 41/86] try vs 17.8 --- .github/workflows/compile-all-views.yml | 5 +++++ .github/workflows/run-unit-tests.yml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/.github/workflows/compile-all-views.yml b/.github/workflows/compile-all-views.yml index e3b238bfa..721a2fcc3 100644 --- a/.github/workflows/compile-all-views.yml +++ b/.github/workflows/compile-all-views.yml @@ -23,6 +23,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.1 + with: + vs-version: '17.8' + - uses: actions/setup-dotnet@v3 with: dotnet-version: '8.0.x' diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index 1e823bcb4..cc051e96c 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -23,6 +23,11 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.1 + with: + vs-version: '17.8' + - uses: actions/setup-dotnet@v3 with: dotnet-version: '8.0.x' From 67049133f88be34b70a9951b92efa02b5d91e06c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sat, 18 Nov 2023 14:33:39 -0600 Subject: [PATCH 42/86] try this... --- .github/workflows/compile-all-views.yml | 5 ----- .github/workflows/run-unit-tests.yml | 5 ----- build/build-windows.ps1 | 25 ++++++++++++++++--------- 3 files changed, 16 insertions(+), 19 deletions(-) diff --git a/.github/workflows/compile-all-views.yml b/.github/workflows/compile-all-views.yml index 721a2fcc3..e3b238bfa 100644 --- a/.github/workflows/compile-all-views.yml +++ b/.github/workflows/compile-all-views.yml @@ -23,11 +23,6 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.1 - with: - vs-version: '17.8' - - uses: actions/setup-dotnet@v3 with: dotnet-version: '8.0.x' diff --git a/.github/workflows/run-unit-tests.yml b/.github/workflows/run-unit-tests.yml index cc051e96c..1e823bcb4 100644 --- a/.github/workflows/run-unit-tests.yml +++ b/.github/workflows/run-unit-tests.yml @@ -23,11 +23,6 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.1 - with: - vs-version: '17.8' - - uses: actions/setup-dotnet@v3 with: dotnet-version: '8.0.x' diff --git a/build/build-windows.ps1 b/build/build-windows.ps1 index cc05fbb57..19f949896 100644 --- a/build/build-windows.ps1 +++ b/build/build-windows.ps1 @@ -8,14 +8,21 @@ dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore. dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/LiveChartsCore.SkiaSharpView.Eto.csproj -c $configuration dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj -c $configuration -$msbuild = &"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe +# LiveCharts requires VisualStudio 17.8 +# but it seems that the current image installed is 17.6 +# for now we are skiping msbuilds +# on the Github action we are running on Debug -& $msbuild ` - ./src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj ` - /p:configuration=$configuration ` - /restore +if ($configuration = "Release") { + $msbuild = &"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe -& $msbuild ` - ./src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj ` - /p:configuration=$configuration ` - /restore + & $msbuild ` + ./src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj ` + /p:configuration=$configuration ` + /restore + + & $msbuild ` + ./src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj ` + /p:configuration=$configuration ` + /restore +} From dd81d037c781ac68879c9f60dd23ccfa924b609b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sat, 18 Nov 2023 14:36:03 -0600 Subject: [PATCH 43/86] better like this --- build/build-windows.ps1 | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/build/build-windows.ps1 b/build/build-windows.ps1 index 19f949896..3849bb73a 100644 --- a/build/build-windows.ps1 +++ b/build/build-windows.ps1 @@ -11,18 +11,15 @@ dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.Sk # LiveCharts requires VisualStudio 17.8 # but it seems that the current image installed is 17.6 # for now we are skiping msbuilds -# on the Github action we are running on Debug -if ($configuration = "Release") { - $msbuild = &"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe +# $msbuild = &"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe - & $msbuild ` - ./src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj ` - /p:configuration=$configuration ` - /restore - - & $msbuild ` - ./src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj ` - /p:configuration=$configuration ` - /restore -} +# & $msbuild ` +# ./src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj ` +# /p:configuration=$configuration ` +# /restore + +# & $msbuild ` +# ./src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj ` +# /p:configuration=$configuration ` +# /restore From ce430c6ed475127f470d6e05cb413741a7134998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Sat, 18 Nov 2023 14:51:36 -0600 Subject: [PATCH 44/86] also remove maui --- build/build-windows.ps1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/build-windows.ps1 b/build/build-windows.ps1 index 3849bb73a..d2cdda589 100644 --- a/build/build-windows.ps1 +++ b/build/build-windows.ps1 @@ -6,12 +6,13 @@ dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharp.Wpf/LiveChartsCore.SkiaSha dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj -c $configuration dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj -c $configuration dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/LiveChartsCore.SkiaSharpView.Eto.csproj -c $configuration -dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj -c $configuration # LiveCharts requires VisualStudio 17.8 # but it seems that the current image installed is 17.6 # for now we are skiping msbuilds +# dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj -c $configuration + # $msbuild = &"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe # & $msbuild ` From 43a269f256962883fd40bcb650f949171984dac7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Rodr=C3=ADguez?= Date: Fri, 1 Dec 2023 10:03:08 -0600 Subject: [PATCH 45/86] use icollection instead --- src/LiveChartsCore/ISeries.cs | 10 +--------- src/LiveChartsCore/Kernel/CollectionDeepObserver.cs | 4 ++-- src/LiveChartsCore/Kernel/Providers/DataFactory.cs | 2 +- src/LiveChartsCore/Series.cs | 6 ++---- 4 files changed, 6 insertions(+), 16 deletions(-) diff --git a/src/LiveChartsCore/ISeries.cs b/src/LiveChartsCore/ISeries.cs index ac562b040..fad5677b6 100644 --- a/src/LiveChartsCore/ISeries.cs +++ b/src/LiveChartsCore/ISeries.cs @@ -62,7 +62,7 @@ public interface ISeries /// /// The values. /// - IEnumerable? Values { get; set; } + ICollection? Values { get; set; } /// /// Gets or sets a value indicating whether this instance is visible. @@ -224,12 +224,4 @@ public interface ISeries : ISeries /// The mapping. /// Func? Mapping { get; set; } - - /// - /// Gets or sets the values. - /// - /// - /// The values. - /// - new IEnumerable? Values { get; set; } } diff --git a/src/LiveChartsCore/Kernel/CollectionDeepObserver.cs b/src/LiveChartsCore/Kernel/CollectionDeepObserver.cs index 94f711715..a022df239 100644 --- a/src/LiveChartsCore/Kernel/CollectionDeepObserver.cs +++ b/src/LiveChartsCore/Kernel/CollectionDeepObserver.cs @@ -71,7 +71,7 @@ public CollectionDeepObserver( /// /// The instance. /// - public void Initialize(IEnumerable? instance) + public void Initialize(IEnumerable? instance) { if (instance is null) return; @@ -90,7 +90,7 @@ public void Initialize(IEnumerable? instance) /// /// The instance. /// - public void Dispose(IEnumerable? instance) + public void Dispose(IEnumerable? instance) { if (instance is null) return; diff --git a/src/LiveChartsCore/Kernel/Providers/DataFactory.cs b/src/LiveChartsCore/Kernel/Providers/DataFactory.cs index f7a0d45a0..c7cb1027c 100644 --- a/src/LiveChartsCore/Kernel/Providers/DataFactory.cs +++ b/src/LiveChartsCore/Kernel/Providers/DataFactory.cs @@ -385,7 +385,7 @@ private IEnumerable EnumerateChartEntities(ISeries series, } var IndexEntityMap = d; - foreach (var item in series.Values) + foreach (var item in series.Values.Cast()) { if (item is null) { diff --git a/src/LiveChartsCore/Series.cs b/src/LiveChartsCore/Series.cs index 4c029fecc..14d5c6bd5 100644 --- a/src/LiveChartsCore/Series.cs +++ b/src/LiveChartsCore/Series.cs @@ -94,7 +94,7 @@ public abstract class Series protected bool _geometrySvgChanged = false; private readonly CollectionDeepObserver _observer; - private IEnumerable? _values; + private ICollection? _values; private string? _name; private Func? _mapping; private int _zIndex; @@ -140,7 +140,7 @@ SeriesProperties IInternalSeries.SeriesProperties /// /// Gets or sets the data set to draw in the chart. /// - public IEnumerable? Values + public ICollection? Values { get => _values; set @@ -152,8 +152,6 @@ public IEnumerable? Values } } - IEnumerable? ISeries.Values { get => Values; set => Values = (IEnumerable?)value; } - /// public double Pivot { get => pivot; set => SetProperty(ref pivot, (float)value); } From 84f695e629e6a14be4a5900f7d241a604b3b30a1 Mon Sep 17 00:00:00 2001 From: BHandle Date: Thu, 7 Dec 2023 23:34:34 -0500 Subject: [PATCH 46/86] Fixed issue with Cartesian charts blocking user changes --- src/LiveChartsCore/CartesianChart.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/LiveChartsCore/CartesianChart.cs b/src/LiveChartsCore/CartesianChart.cs index 94abc5d20..d52708f06 100644 --- a/src/LiveChartsCore/CartesianChart.cs +++ b/src/LiveChartsCore/CartesianChart.cs @@ -476,7 +476,11 @@ protected internal override void Measure() var yAxis = YAxes[series.ScalesYAt]; var seriesBounds = series.GetBounds(this, xAxis, yAxis).Bounds; - if (seriesBounds.IsEmpty) continue; + if (seriesBounds.IsEmpty) + { + ce._isInternalSet = false; + continue; + } AppendLimits(xAxis, yAxis, seriesBounds); From 5d71e90bf7ca3818fdd569e7b55fefe2585a5068 Mon Sep 17 00:00:00 2001 From: BHandle Date: Thu, 7 Dec 2023 23:38:33 -0500 Subject: [PATCH 47/86] Fixed a pair of similar cases in PolarChart --- src/LiveChartsCore/PolarChart.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/LiveChartsCore/PolarChart.cs b/src/LiveChartsCore/PolarChart.cs index 98087cb57..af1a20fd8 100644 --- a/src/LiveChartsCore/PolarChart.cs +++ b/src/LiveChartsCore/PolarChart.cs @@ -237,12 +237,17 @@ protected internal override void Measure() var seriesBounds = series.GetBounds(this, secondaryAxis, primaryAxis).Bounds; - if (seriesBounds.IsEmpty) continue; + if (seriesBounds.IsEmpty) + { + ce._isThemeSet = false; + continue; + } secondaryAxis.DataBounds.AppendValue(seriesBounds.SecondaryBounds); primaryAxis.DataBounds.AppendValue(seriesBounds.PrimaryBounds); secondaryAxis.VisibleDataBounds.AppendValue(seriesBounds.SecondaryBounds); primaryAxis.VisibleDataBounds.AppendValue(seriesBounds.PrimaryBounds); + ce._isThemeSet = false; } #region empty bounds From bf538991057afb1676ed4420dd27b9d59ca79d44 Mon Sep 17 00:00:00 2001 From: Denys Lukianchuk Date: Wed, 13 Dec 2023 10:56:22 +0200 Subject: [PATCH 48/86] Avalonia dependency property naming fix --- .../LiveChartsCore.SkiaSharp.Avalonia/CartesianChart.axaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/CartesianChart.axaml.cs b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/CartesianChart.axaml.cs index bc161f226..a58854583 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/CartesianChart.axaml.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/CartesianChart.axaml.cs @@ -206,7 +206,7 @@ public CartesianChart() /// public static readonly AvaloniaProperty> EasingFunctionProperty = AvaloniaProperty.Register>( - nameof(AnimationsSpeed), LiveCharts.DefaultSettings.EasingFunction, inherits: true); + nameof(EasingFunction), LiveCharts.DefaultSettings.EasingFunction, inherits: true); /// /// The tool tip position property From 088ebde82b813570413bde2a9cc4e0096a3ac7a4 Mon Sep 17 00:00:00 2001 From: Michael Phelps Date: Fri, 17 May 2024 12:19:04 -0500 Subject: [PATCH 49/86] Fix repaints causing ThrowInfiniteSeparators. Include axis name in exception if available. --- src/LiveChartsCore/CoreAxis.cs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/LiveChartsCore/CoreAxis.cs b/src/LiveChartsCore/CoreAxis.cs index 848d59fd8..7921707d7 100644 --- a/src/LiveChartsCore/CoreAxis.cs +++ b/src/LiveChartsCore/CoreAxis.cs @@ -102,7 +102,6 @@ public abstract class CoreAxis private Align? _labelsAlignment; private bool _inLineNamePlacement; private IEnumerable? _customSeparators; - private int _stepCount; internal double? _logBase; #endregion @@ -307,8 +306,6 @@ public LvcColor? CrosshairLabelsBackground /// public override void Invalidate(Chart chart) { - _stepCount = 0; - var cartesianChart = (CartesianChart)chart; var controlSize = cartesianChart.ControlSize; @@ -607,8 +604,6 @@ NamePadding is not null || SeparatorsPaint is not null || LabelsPaint is not nul UpdateLabel(visualSeparator.Label, x, y + tyco, labelContent, hasRotation, r, UpdateMode.Update); if (hasActivePaint) _ = measured.Add(visualSeparator); - - if (_stepCount++ > 10000) ThrowInfiniteSeparators(); } foreach (var separatorValueKey in separators.ToArray()) @@ -810,6 +805,10 @@ private IEnumerable EnumerateSeparators(double start, double end, double } var relativeEnd = end - start; + if (relativeEnd / step > 10000) + { + ThrowInfiniteSeparators(); + } for (var i = 0d; i <= relativeEnd; i += step) yield return start + i; } @@ -891,8 +890,6 @@ public virtual LvcSize GetPossibleSize(Chart chart) var m = textGeometry.Measure(LabelsPaint); if (m.Width > w) w = m.Width; if (m.Height > h) h = m.Height; - - if (_stepCount++ > 10000) ThrowInfiniteSeparators(); } return new LvcSize(w, h); @@ -1046,8 +1043,6 @@ private LvcSize GetPossibleMaxLabelSize() maxLabelSize = new LvcSize( maxLabelSize.Width > m.Width ? maxLabelSize.Width : m.Width, maxLabelSize.Height > m.Height ? maxLabelSize.Height : m.Height); - - if (_stepCount++ > 10000) ThrowInfiniteSeparators(); } return maxLabelSize; @@ -1456,8 +1451,9 @@ private string TryGetLabelOrLogError(Func labeler, double value) private void ThrowInfiniteSeparators() { + var axisName = string.IsNullOrEmpty(Name) ? "" : $"named \"{Name}\" "; throw new Exception( - $"The {_orientation} axis has an excessive number of separators. " + + $"The {_orientation} axis {axisName}has an excessive number of separators. " + $"If you set the step manually, ensure the number of separators is less than 10,000. " + $"This could also be caused because you are zooming too deep, " + $"try to set a limit to the current chart zoom using the Axis.{nameof(MinZoomDelta)} property. " + From 6d7776b995aa09db1336370c6cf553ea4322d0b0 Mon Sep 17 00:00:00 2001 From: Michael Phelps Date: Wed, 22 May 2024 08:03:29 -0500 Subject: [PATCH 50/86] Reorder workload install since LiveChartsCore is targeting them. --- build/build-windows.ps1 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build/build-windows.ps1 b/build/build-windows.ps1 index a681c9c93..ccda63f9b 100644 --- a/build/build-windows.ps1 +++ b/build/build-windows.ps1 @@ -1,5 +1,10 @@ param([string]$configuration = "Release") +dotnet workload install macos +dotnet workload install ios +dotnet workload install maccatalyst +dotnet workload install android + dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj -c $configuration dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj -c $configuration dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharp.Wpf/LiveChartsCore.SkiaSharpView.Wpf.csproj -c $configuration @@ -15,12 +20,7 @@ $msbuild = &"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere. /p:configuration=$configuration ` /restore -dotnet workload install macos -dotnet workload install ios -dotnet workload install maccatalyst -dotnet workload install android - & $msbuild ` ./src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj ` /p:configuration=$configuration ` - /restore \ No newline at end of file + /restore From 443aa0f20586e82f3f8c5930fcb5a8f2ee980bb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Laban?= Date: Thu, 11 Jul 2024 21:50:22 -0400 Subject: [PATCH 51/86] fix: Make Uno.WinUI conditional to Uno targets This avoids a duplicate resources issue that has been fixed in https://github.com/microsoft/microsoft-ui-xaml/issues/8857. While upgrading WinAppSDK would also fix the issue, it's best to remove the dependency altogether. --- .../LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj index a4bf59762..5788256d7 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj @@ -25,7 +25,10 @@ bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml - + + @@ -63,4 +66,4 @@ - \ No newline at end of file + From 1f9be34d8a83703eb94a3287c839127d2b1ccb9b Mon Sep 17 00:00:00 2001 From: bsilvia <5374098+bsilvia@users.noreply.github.com> Date: Wed, 21 Aug 2024 17:48:09 -0700 Subject: [PATCH 52/86] Allow for custom legends in the PieChart and PolarChart controls by not overriding the legend in the InitializeCore method (Fixes #1489) --- src/skiasharp/LiveChartsCore.SkiaSharp.WPF/PieChart.cs | 2 +- src/skiasharp/LiveChartsCore.SkiaSharp.WPF/PolarChart.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/PieChart.cs b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/PieChart.cs index c4c98645c..727c62c39 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/PieChart.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/PieChart.cs @@ -64,6 +64,7 @@ public PieChart() MouseDown += OnMouseDown; tooltip = new SKDefaultTooltip(); + legend = new SKDefaultLegend(); } /// @@ -200,7 +201,6 @@ protected override void InitializeCore() { if (canvas is null) throw new Exception("canvas not found"); core = new PieChart(this, config => config.UseDefaults(), canvas.CanvasCore); - legend = new SKDefaultLegend(); // Template.FindName("legend", this) as IChartLegend; core.Update(); } diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/PolarChart.cs b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/PolarChart.cs index 8a5f48fb5..79f0696a7 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/PolarChart.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/PolarChart.cs @@ -80,6 +80,7 @@ public PolarChart() MouseUp += OnMouseUp; tooltip = new SKDefaultTooltip(); + legend = new SKDefaultLegend(); } #region dependency properties @@ -294,7 +295,6 @@ protected override void InitializeCore() if (canvas is null) throw new Exception("canvas not found"); core = new PolarChart(this, config => config.UseDefaults(), canvas.CanvasCore); - legend = new SKDefaultLegend(); // Template.FindName("legend", this) as IChartLegend; core.Update(); } From 930afba0401df390e702ddd27b6a25fa8ef977aa Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Mon, 9 Sep 2024 20:40:08 -0600 Subject: [PATCH 53/86] remove net 7 from core --- src/LiveChartsCore/LiveChartsCore.csproj | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/LiveChartsCore/LiveChartsCore.csproj b/src/LiveChartsCore/LiveChartsCore.csproj index 9c4b9dc28..b261fde81 100644 --- a/src/LiveChartsCore/LiveChartsCore.csproj +++ b/src/LiveChartsCore/LiveChartsCore.csproj @@ -5,16 +5,14 @@ 12.0 - netstandard2.0;netcoreapp2.0.3; - net6.0; - net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst; - net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst; + netstandard2.0; + net6.0; + net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst $(TargetFrameworks); net462; net6.0-windows10.0.19041.0; - net7.0-windows10.0.19041.0; net8.0-windows10.0.19041.0; @@ -63,7 +61,7 @@ From 0c2d58e96719e59a5d7e3f37ed88821e43a1f0b0 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Mon, 9 Sep 2024 22:00:40 -0600 Subject: [PATCH 54/86] update views sdk --- .../LiveChartsCore.Behaviours.csproj | 15 ++++++---- .../LiveChartsCore.SkiaSharpView.WPF.csproj | 4 +-- ...veChartsCore.SkiaSharpView.WinForms.csproj | 2 +- ...rtsCore.SkiaSharpView.Xamarin.Forms.csproj | 26 +--------------- .../LiveChartsCore.SkiaSharpView.csproj | 4 +-- ...LiveChartsCore.SkiaSharpView.Blazor.csproj | 5 +--- .../LiveChartsCore.SkiaSharpView.Maui.csproj | 30 +------------------ ...eChartsCore.SkiaSharpView.Uno.WinUI.csproj | 3 -- .../LiveChartsCore.SkiaSharpView.WinUI.csproj | 6 +--- 9 files changed, 17 insertions(+), 78 deletions(-) diff --git a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj index 32ec40329..1d770b84f 100644 --- a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj +++ b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj @@ -5,16 +5,14 @@ 12.0 - netstandard2.0;netcoreapp2.0.3; - net6.0; - net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst; + netstandard2.0; + net6.0; net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst; $(TargetFrameworks); net462; net6.0-windows10.0.19041.0; - net7.0-windows10.0.19041.0; net8.0-windows10.0.19041.0 @@ -29,8 +27,8 @@ net 8 breaking changes: https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/8.0/rid-graph --> - win-x86;win-x64;win-arm64 - + win-x86;win-x64;win-arm64; + LiveChartsCore.Behaviours LiveChartsCore.Behaviours 2.0.0-rc2 @@ -44,6 +42,11 @@ bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml + + + $(NoWarn);NETSDK1206 + + bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml true diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj index 78606ad1b..ec1706b73 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj @@ -1,10 +1,10 @@ - + enable 12.0 true - net462;netcoreapp3.1 + net462; LiveChartsCore.SkiaSharpView.WPF LiveChartsCore.SkiaSharpView.WPF 2.0.0-rc2 diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj index 837e5129d..0c69b610f 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj @@ -7,7 +7,7 @@ WinExe true Library - net462;netcoreapp3.1 + net462;netcoreapp3.1 LiveChartsCore.SkiaSharpView.WinForms LiveChartsCore.SkiaSharpView.WinForms 2.0.0-rc2 diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj index 5d79db756..8b0dc8e4d 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj @@ -1,4 +1,4 @@ - + 12.0 @@ -31,30 +31,6 @@ - - - PolarChart.xaml - - - MotionCanvas.xaml - - - - - - MSBuild:UpdateDesignTimeXaml - - - MSBuild:UpdateDesignTimeXaml - - - MSBuild:UpdateDesignTimeXaml - - - MSBuild:UpdateDesignTimeXaml - - - diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj index bc6677a4a..18da27672 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj @@ -6,15 +6,13 @@ netstandard2.0;netcoreapp2.0.3; - net6.0; - net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst; + net6.0; net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst; $(TargetFrameworks); net462; net6.0-windows10.0.19041.0; - net7.0-windows10.0.19041.0; net8.0-windows10.0.19041.0; diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj index 16142dd9b..ef4acd986 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj @@ -4,7 +4,7 @@ 12.0 enable - net6.0;net7.0;net8.0 + net6.0;net8.0 enable 2.0.0-rc2 @@ -56,9 +56,6 @@ - diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj index 58d7994d1..04707a9e3 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj @@ -8,13 +8,10 @@ true - - net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst; net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst; $(TargetFrameworks); - net7.0-windows10.0.19041.0; net8.0-windows10.0.19041.0 @@ -44,15 +41,8 @@ + - - @@ -61,24 +51,6 @@ - - - MSBuild:Compile - - - MSBuild:Compile - - - MSBuild:Compile - - - MSBuild:Compile - - - MSBuild:Compile - - - diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj index be89bb8e9..41f1006b0 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj @@ -4,13 +4,10 @@ 12.0 - - net7.0;net7.0-android;net7.0-ios;net7.0-maccatalyst; net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst; $(TargetFrameworks); - net7.0-windows10.0.19041.0; net8.0-windows10.0.19041.0 diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj index 2e0ba4e0f..c99d1342b 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj @@ -5,7 +5,6 @@ net6.0-windows10.0.19041.0; - net7.0-windows10.0.19041.0; net8.0-windows10.0.19041.0 @@ -38,10 +37,7 @@ - + $(NoWarn);NETSDK1206 From d878dbe86cf8f6c27caa1675f5ae598a5d531ef8 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Mon, 9 Sep 2024 22:16:35 -0600 Subject: [PATCH 55/86] try msbuild again on github workspaces. --- build/build-windows.ps1 | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/build/build-windows.ps1 b/build/build-windows.ps1 index b9d7280f5..46fb3a57a 100644 --- a/build/build-windows.ps1 +++ b/build/build-windows.ps1 @@ -11,14 +11,19 @@ dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharp.Wpf/LiveChartsCore.SkiaSha dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj -c $configuration dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj -c $configuration dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/LiveChartsCore.SkiaSharpView.Eto.csproj -c $configuration -dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj -c $configuration +msbuild ./src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj -c $configuration # DISABLE DOTNET BUILD FOR NOW # LiveCharts requires VisualStudio 17.8 # but it seems that the current image installed is 17.6 (UPDATE NOT SURE WHICH VERSION IS INSTALLED AS TODAY) # FOR NOW... DISABLE MSBUILD -# $msbuild = &"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe +$msbuild = &"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe + +& $msbuild ` + ./src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj ` + /p:configuration=$configuration ` + /restore # & $msbuild ` # ./src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj ` From d6a6354cd8962e1dd58b0d6141f651740ff55e5b Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Mon, 9 Sep 2024 22:20:19 -0600 Subject: [PATCH 56/86] add winui and uno to build script. --- build/build-windows.ps1 | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/build/build-windows.ps1 b/build/build-windows.ps1 index 46fb3a57a..cec31f8b8 100644 --- a/build/build-windows.ps1 +++ b/build/build-windows.ps1 @@ -11,7 +11,6 @@ dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharp.Wpf/LiveChartsCore.SkiaSha dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj -c $configuration dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj -c $configuration dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/LiveChartsCore.SkiaSharpView.Eto.csproj -c $configuration -msbuild ./src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj -c $configuration # DISABLE DOTNET BUILD FOR NOW # LiveCharts requires VisualStudio 17.8 @@ -25,12 +24,12 @@ $msbuild = &"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere. /p:configuration=$configuration ` /restore -# & $msbuild ` -# ./src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj ` -# /p:configuration=$configuration ` -# /restore +& $msbuild ` + ./src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj ` + /p:configuration=$configuration ` + /restore -# & $msbuild ` -# ./src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj ` -# /p:configuration=$configuration ` -# /restore \ No newline at end of file +& $msbuild ` + ./src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj ` + /p:configuration=$configuration ` + /restore \ No newline at end of file From 06235ce6318a13f51accb270c23479a0ff147412 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Mon, 9 Sep 2024 22:26:17 -0600 Subject: [PATCH 57/86] remove note from build script. --- build/build-windows.ps1 | 5 ----- 1 file changed, 5 deletions(-) diff --git a/build/build-windows.ps1 b/build/build-windows.ps1 index cec31f8b8..3829a83f4 100644 --- a/build/build-windows.ps1 +++ b/build/build-windows.ps1 @@ -12,11 +12,6 @@ dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCo dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj -c $configuration dotnet build ./src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/LiveChartsCore.SkiaSharpView.Eto.csproj -c $configuration -# DISABLE DOTNET BUILD FOR NOW -# LiveCharts requires VisualStudio 17.8 -# but it seems that the current image installed is 17.6 (UPDATE NOT SURE WHICH VERSION IS INSTALLED AS TODAY) -# FOR NOW... DISABLE MSBUILD - $msbuild = &"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe & $msbuild ` From fc1882bc6b8585c86e315d63ea233e80eb59e148 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Mon, 9 Sep 2024 22:33:58 -0600 Subject: [PATCH 58/86] restore netcoreapp3.1 target on WPF. --- .../LiveChartsCore.SkiaSharpView.WPF.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj index ec1706b73..0430476b8 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj @@ -4,7 +4,7 @@ enable 12.0 true - net462; + net462;netcoreapp3.1 LiveChartsCore.SkiaSharpView.WPF LiveChartsCore.SkiaSharpView.WPF 2.0.0-rc2 From 1fbdbd518835ea046f8d1d4cd7834862c95bd903 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Tue, 10 Sep 2024 09:26:56 -0600 Subject: [PATCH 59/86] fixes #1583 --- src/LiveChartsCore/CoreAxis.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/LiveChartsCore/CoreAxis.cs b/src/LiveChartsCore/CoreAxis.cs index 5d37b7ed5..4106547e1 100644 --- a/src/LiveChartsCore/CoreAxis.cs +++ b/src/LiveChartsCore/CoreAxis.cs @@ -1406,6 +1406,7 @@ private void UpdateLabel( } label.Text = text; + label.TextSize = (float)_textSize; label.Padding = _padding; label.X = x; label.Y = y; From 38dd0fc9661b0f086d5ed1f97d6dc2cb364e679e Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Tue, 10 Sep 2024 20:01:44 -0600 Subject: [PATCH 60/86] fixes #1578 --- src/LiveChartsCore/CoreAxis.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/LiveChartsCore/CoreAxis.cs b/src/LiveChartsCore/CoreAxis.cs index 4106547e1..6ef47f6ac 100644 --- a/src/LiveChartsCore/CoreAxis.cs +++ b/src/LiveChartsCore/CoreAxis.cs @@ -241,7 +241,14 @@ public IPaint? SubticksPaint public IPaint? ZeroPaint { get => _zeroPaint; - set => SetPaintProperty(ref _zeroPaint, value, true); + set + { + SetPaintProperty(ref _zeroPaint, value, true); + + // clear the reference to thre previous line. + // so a new instance will be created for the new paint task. + _zeroLine = null; + } } /// From 79638649daa2ba4911bc3af5c9abb70e9d1abb97 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Wed, 11 Sep 2024 08:57:33 -0600 Subject: [PATCH 61/86] consistency for #1557 --- src/LiveChartsCore/CartesianChart.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/LiveChartsCore/CartesianChart.cs b/src/LiveChartsCore/CartesianChart.cs index 173a8dd0b..885cbd1cc 100644 --- a/src/LiveChartsCore/CartesianChart.cs +++ b/src/LiveChartsCore/CartesianChart.cs @@ -406,6 +406,11 @@ protected internal override void Measure() YAxes = _chartView.YAxes.Cast>().ToArray(); XAxes = _chartView.XAxes.Cast>().ToArray(); + if (XAxes.Length == 0 || YAxes.Length == 0) + { + throw new Exception($"{nameof(XAxes)} and {nameof(YAxes)} must contain at least one element."); + } + _zoomingSpeed = _chartView.ZoomingSpeed; _zoomMode = _chartView.ZoomMode; From 8914caaae8d0bcde1dd4ab4327df191cdffe7866 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Fri, 13 Sep 2024 14:27:08 -0600 Subject: [PATCH 62/86] fixes #1503 --- src/LiveChartsCore/CoreHeatLandSeries.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LiveChartsCore/CoreHeatLandSeries.cs b/src/LiveChartsCore/CoreHeatLandSeries.cs index 2d3b79a41..9545fec6c 100644 --- a/src/LiveChartsCore/CoreHeatLandSeries.cs +++ b/src/LiveChartsCore/CoreHeatLandSeries.cs @@ -131,7 +131,7 @@ public void Measure(MapContext context) var heat = HeatFunctions.InterpolateColor((float)land.Value, bounds, HeatMap, heatStops); var mapLand = context.View.ActiveMap.FindLand(land.Name); - if (mapLand is null) return; + if (mapLand is null) continue; var shapesQuery = mapLand.Data .Select(x => x.Shape) From 5a2dc762375d80b544f0068ff27fd3089da7b124 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Fri, 13 Sep 2024 16:54:44 -0600 Subject: [PATCH 63/86] fixes #1499 --- src/skiasharp/LiveChartsCore.SkiaSharp/SKCharts/SKGeoMap.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/SKCharts/SKGeoMap.cs b/src/skiasharp/LiveChartsCore.SkiaSharp/SKCharts/SKGeoMap.cs index 38ea8da62..5edf991b1 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/SKCharts/SKGeoMap.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/SKCharts/SKGeoMap.cs @@ -44,7 +44,10 @@ public class SKGeoMap : InMemorySkiaSharpChart, IGeoMapView public SKGeoMap() { + LiveCharts.Configure(config => config.UseDefaults()); + _core = new GeoMap(this); + ActiveMap = Maps.GetWorldMap(); } /// @@ -69,7 +72,7 @@ public SKGeoMap(IGeoMapView mapView) : this() public bool DesignerMode { get; set; } = false; /// - public CoreMap ActiveMap { get; set; } = Maps.GetWorldMap(); + public CoreMap ActiveMap { get; set; } float IGeoMapView.Width => Width; From 32bfbe4da94a4858e4e782d8a103ab25cb7580ba Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Fri, 13 Sep 2024 17:38:06 -0600 Subject: [PATCH 64/86] fixes #1482 --- samples/ViewModelsSamples/Pies/AngularGauge/ViewModel.cs | 1 + src/LiveChartsCore/VisualElements/AngularTicksVisual.cs | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/samples/ViewModelsSamples/Pies/AngularGauge/ViewModel.cs b/samples/ViewModelsSamples/Pies/AngularGauge/ViewModel.cs index 641b63d5d..85be2fdb4 100644 --- a/samples/ViewModelsSamples/Pies/AngularGauge/ViewModel.cs +++ b/samples/ViewModelsSamples/Pies/AngularGauge/ViewModel.cs @@ -35,6 +35,7 @@ public ViewModel() { new AngularTicksVisual { + Labeler = value => value.ToString("N1"), LabelsSize = 16, LabelsOuterOffset = 15, OuterOffset = 65, diff --git a/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs b/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs index 0a7a10e01..82b540a41 100644 --- a/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs +++ b/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs @@ -51,6 +51,7 @@ public class AngularTicksVisual _visuals = []; + private Func _labeler = Labelers.Default; /// /// Gets or sets the labels paint. @@ -90,6 +91,11 @@ public IPaint? Stroke /// public double LabelsSize { get => _labelsSize; set => SetProperty(ref _labelsSize, value); } + /// + /// Gets or sets the labeler, a function that receives a number and return the label content as string. + /// + public Func Labeler { get => _labeler; set => SetProperty(ref _labeler, value); } + /// protected internal override void OnInvalidated(Chart chart) { @@ -204,7 +210,7 @@ protected internal override void OnInvalidated(Chart chart) visual.Tick.X1 = cx + (float)Math.Cos(beta) * ticksRadius; visual.Tick.Y1 = cy + (float)Math.Sin(beta) * ticksRadius; - visual.Label.Text = i.ToString(); + visual.Label.Text = Labeler(i); visual.Label.X = cx + (float)Math.Cos(beta) * labelsRadius; visual.Label.Y = cy + (float)Math.Sin(beta) * labelsRadius; visual.Label.TextSize = labelsSize; From 375d0e96d871e8acf2920057dda11fbacbc99537 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sat, 14 Sep 2024 12:20:19 -0600 Subject: [PATCH 65/86] intialize maui zooming section as all frameworks (possibly fixes #1438) --- src/LiveChartsCore/CartesianChart.cs | 2 +- .../CartesianChart.xaml.cs | 24 +++++++------------ 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/LiveChartsCore/CartesianChart.cs b/src/LiveChartsCore/CartesianChart.cs index 885cbd1cc..ab8460cc2 100644 --- a/src/LiveChartsCore/CartesianChart.cs +++ b/src/LiveChartsCore/CartesianChart.cs @@ -40,7 +40,7 @@ namespace LiveChartsCore; public class CartesianChart : Chart where TDrawingContext : DrawingContext { - internal readonly ISizedGeometry _zoomingSection; + private readonly ISizedGeometry _zoomingSection; private readonly ICartesianChartView _chartView; private int _nextSeries = 0; private double _zoomingSpeed = 0; diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/CartesianChart.xaml.cs b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/CartesianChart.xaml.cs index 2d3b5e278..ff9af2d4a 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/CartesianChart.xaml.cs +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/CartesianChart.xaml.cs @@ -60,7 +60,6 @@ public partial class CartesianChart : ContentView, ICartesianChartView> _visualsObserver; private IChartLegend? _legend = new SKDefaultLegend(); private IChartTooltip? _tooltip = new SKDefaultTooltip(); - private bool _isZoomingSectionAttached; #endregion @@ -747,6 +746,15 @@ void IChartView.InvokeOnUIThread(Action action) protected void InitializeCore() { var zoomingSection = new RectangleGeometry(); + var zoomingSectionPaint = new SolidColorPaint + { + IsFill = true, + Color = new SkiaSharp.SKColor(33, 150, 243, 50), + ZIndex = int.MaxValue + }; + zoomingSectionPaint.AddGeometryToPaintTask(canvas!.CanvasCore, zoomingSection); + canvas.CanvasCore.AddDrawableTask(zoomingSectionPaint); + _core = new CartesianChart( this, config => config.UseDefaults(), canvas.CanvasCore, zoomingSection); _core.Update(); @@ -786,20 +794,6 @@ private void OnPressed(object? sender, Behaviours.Events.PressedEventArgs args) // https://github.com/dotnet/maui/issues/16202 //if (Keyboard.Modifiers > 0) return; - if (!_isZoomingSectionAttached) - { - var zoomingSectionPaint = new SolidColorPaint - { - IsFill = true, - Color = new SkiaSharp.SKColor(33, 150, 243, 50), - ZIndex = int.MaxValue - }; - var zoomingSection = ((CartesianChart)CoreChart)._zoomingSection; - zoomingSectionPaint.AddGeometryToPaintTask(canvas.CanvasCore, zoomingSection); - canvas.CanvasCore.AddDrawableTask(zoomingSectionPaint); - _isZoomingSectionAttached = true; - } - var cArgs = new PointerCommandArgs(this, new(args.Location.X, args.Location.Y), args); if (PressedCommand?.CanExecute(cArgs) == true) PressedCommand.Execute(cArgs); From 851b8e798237e085c97bcbc8973edfd04bafe1d6 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sat, 14 Sep 2024 16:49:50 -0600 Subject: [PATCH 66/86] cartesianchart test --- .../CharsTests/ChartTests.cs | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 tests/LiveChartsCore.UnitTesting/CharsTests/ChartTests.cs diff --git a/tests/LiveChartsCore.UnitTesting/CharsTests/ChartTests.cs b/tests/LiveChartsCore.UnitTesting/CharsTests/ChartTests.cs new file mode 100644 index 000000000..0bb7569a1 --- /dev/null +++ b/tests/LiveChartsCore.UnitTesting/CharsTests/ChartTests.cs @@ -0,0 +1,54 @@ +// The MIT License(MIT) +// +// Copyright(c) 2021 Alberto Rodriguez Orozco & LiveCharts Contributors +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +using LiveChartsCore.SkiaSharpView.SKCharts; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace LiveChartsCore.UnitTesting.CharsTests; + +[TestClass] +public class ChartTests +{ + [TestMethod] + public void CartesianShouldHandleNullParams() + { + // based on https://github.com/beto-rodriguez/LiveCharts2/issues/1422 + + // in theory LiveCharts properties should never be null, but we can't control the user input + // specially on this case where DataContext could be null + // we are testing the properties defined on LoveChartsCore/Kernel/Sketches/ICartesianChartView.cs + + var chart = new SKCartesianChart + { + Width = 1000, + Height = 1000, + XAxes = null, + YAxes = null, + Sections = null, + Series = null, + DrawMarginFrame = null, + VisualElements = null + }; + + _ = chart.GetImage(); + } +} From 5677c8d6cbdb24e5cdf0b0de7f3c84cb34fec3f6 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sat, 14 Sep 2024 17:05:13 -0600 Subject: [PATCH 67/86] rename test --- .../{CharsTests => ChartTests}/ChartTests.cs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) rename tests/LiveChartsCore.UnitTesting/{CharsTests => ChartTests}/ChartTests.cs (78%) diff --git a/tests/LiveChartsCore.UnitTesting/CharsTests/ChartTests.cs b/tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs similarity index 78% rename from tests/LiveChartsCore.UnitTesting/CharsTests/ChartTests.cs rename to tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs index 0bb7569a1..5fa157c05 100644 --- a/tests/LiveChartsCore.UnitTesting/CharsTests/ChartTests.cs +++ b/tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs @@ -20,22 +20,24 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. +using System.Net.NetworkInformation; using LiveChartsCore.SkiaSharpView.SKCharts; using Microsoft.VisualStudio.TestTools.UnitTesting; -namespace LiveChartsCore.UnitTesting.CharsTests; +namespace LiveChartsCore.UnitTesting.ChartTests; [TestClass] public class ChartTests { + // based on https://github.com/beto-rodriguez/LiveCharts2/issues/1422 + + // in theory LiveCharts properties should never be null, but we can't control the user input + // specially on this case where DataContext could be null + [TestMethod] public void CartesianShouldHandleNullParams() { - // based on https://github.com/beto-rodriguez/LiveCharts2/issues/1422 - - // in theory LiveCharts properties should never be null, but we can't control the user input - // specially on this case where DataContext could be null - // we are testing the properties defined on LoveChartsCore/Kernel/Sketches/ICartesianChartView.cs + // we are testing the properties defined on LiveChartsCore/Kernel/Sketches/ICartesianChartView.cs var chart = new SKCartesianChart { @@ -49,6 +51,8 @@ public void CartesianShouldHandleNullParams() VisualElements = null }; - _ = chart.GetImage(); + var image = chart.GetImage(); + + Assert.IsTrue(image is not null); } } From f45bbe69de5584e7fe7241358cce6514ad1f02b1 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sat, 14 Sep 2024 17:05:32 -0600 Subject: [PATCH 68/86] handle X and Y nulls --- src/LiveChartsCore/CartesianChart.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/LiveChartsCore/CartesianChart.cs b/src/LiveChartsCore/CartesianChart.cs index ab8460cc2..55c3925d7 100644 --- a/src/LiveChartsCore/CartesianChart.cs +++ b/src/LiveChartsCore/CartesianChart.cs @@ -403,8 +403,20 @@ protected internal override void Measure() var viewDrawMargin = _chartView.DrawMargin; ControlSize = _chartView.ControlSize; - YAxes = _chartView.YAxes.Cast>().ToArray(); - XAxes = _chartView.XAxes.Cast>().ToArray(); + var x = _chartView.XAxes; + var y = _chartView.YAxes; + + if (x is null || y is null) + { + // in theory nulls are not valid, see ChartTest.cs for more context. + var provider = LiveCharts.DefaultSettings.GetProvider(); + + x = [provider.GetDefaultCartesianAxis()]; + y = [provider.GetDefaultCartesianAxis()]; + } + + XAxes = x.Cast>().ToArray(); + YAxes = y.Cast>().ToArray(); if (XAxes.Length == 0 || YAxes.Length == 0) { From 7368cd3c59a0df44e97a64cdef38a8ddc9882fa6 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sat, 14 Sep 2024 17:07:04 -0600 Subject: [PATCH 69/86] handle null series --- src/LiveChartsCore/CartesianChart.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LiveChartsCore/CartesianChart.cs b/src/LiveChartsCore/CartesianChart.cs index 55c3925d7..db10b0ef4 100644 --- a/src/LiveChartsCore/CartesianChart.cs +++ b/src/LiveChartsCore/CartesianChart.cs @@ -101,7 +101,7 @@ public CartesianChart( /// public override IEnumerable> Series => - _chartView.Series.Cast>(); + _chartView.Series?.Cast>() ?? []; /// public override IEnumerable> VisibleSeries => From 2fd9644c75b3a5896eda99608d6c001e94083424 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sat, 14 Sep 2024 17:08:53 -0600 Subject: [PATCH 70/86] add piechart test --- .../ChartTests/ChartTests.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs b/tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs index 5fa157c05..a8857299d 100644 --- a/tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs +++ b/tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs @@ -55,4 +55,22 @@ public void CartesianShouldHandleNullParams() Assert.IsTrue(image is not null); } + + [TestMethod] + public void PieShouldHandleNullParams() + { + // we are testing the properties defined on LiveChartsCore/Kernel/Sketches/IPieChartView.cs + + var chart = new SKPieChart + { + Width = 1000, + Height = 1000, + Series = null, + VisualElements = null + }; + + var image = chart.GetImage(); + + Assert.IsTrue(image is not null); + } } From 7ed52c6a47ea75f8fce416c1324ac74fc660de20 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sat, 14 Sep 2024 17:09:38 -0600 Subject: [PATCH 71/86] handle null serie son puiechart --- src/LiveChartsCore/PieChart.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LiveChartsCore/PieChart.cs b/src/LiveChartsCore/PieChart.cs index f482a6707..f1b592653 100644 --- a/src/LiveChartsCore/PieChart.cs +++ b/src/LiveChartsCore/PieChart.cs @@ -53,7 +53,7 @@ public class PieChart( /// public override IEnumerable> Series => - view.Series.Cast>(); + view.Series?.Cast>() ?? []; /// public override IEnumerable> VisibleSeries => From b1f4c1af0f9d0d14a3980ec0a9341373d2b5973a Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sat, 14 Sep 2024 17:27:00 -0600 Subject: [PATCH 72/86] add polar test --- .../ChartTests/ChartTests.cs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs b/tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs index a8857299d..d670efd9f 100644 --- a/tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs +++ b/tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs @@ -73,4 +73,24 @@ public void PieShouldHandleNullParams() Assert.IsTrue(image is not null); } + + [TestMethod] + public void PolarShouldHandleNullParams() + { + // we are testing the properties defined on LiveChartsCore/Kernel/Sketches/IPolarChartView.cs + + var chart = new SKPolarChart + { + Width = 1000, + Height = 1000, + Series = null, + AngleAxes = null, + RadiusAxes = null, + VisualElements = null + }; + + var image = chart.GetImage(); + + Assert.IsTrue(image is not null); + } } From 21877f845c3371631cc379706ed0483abc2a4a19 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sat, 14 Sep 2024 17:33:35 -0600 Subject: [PATCH 73/86] handle nulls on polarchart --- src/LiveChartsCore/PolarChart.cs | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/LiveChartsCore/PolarChart.cs b/src/LiveChartsCore/PolarChart.cs index 38f229667..77714e837 100644 --- a/src/LiveChartsCore/PolarChart.cs +++ b/src/LiveChartsCore/PolarChart.cs @@ -69,7 +69,7 @@ public class PolarChart( /// public override IEnumerable> Series => - view.Series.Cast>(); + view.Series?.Cast>() ?? []; /// public override IEnumerable> VisibleSeries => @@ -157,8 +157,25 @@ protected internal override void Measure() var viewDrawMargin = view.DrawMargin; ControlSize = view.ControlSize; - AngleAxes = view.AngleAxes.Cast().ToArray(); - RadiusAxes = view.RadiusAxes.Cast().ToArray(); + var a = view.AngleAxes; + var r = view.RadiusAxes; + + if (a is null || r is null) + { + // in theory nulls are not valid, see ChartTest.cs for more context. + var provider = LiveCharts.DefaultSettings.GetProvider(); + + a = [provider.GetDefaultPolarAxis()]; + r = [provider.GetDefaultPolarAxis()]; + } + + AngleAxes = a.Cast().ToArray(); + RadiusAxes = r.Cast().ToArray(); + + if (AngleAxes.Length == 0 || RadiusAxes.Length == 0) + { + throw new Exception($"{nameof(AngleAxes)} and {nameof(RadiusAxes)} must contain at least one element."); + } var theme = LiveCharts.DefaultSettings.GetTheme(); From 856066851b0045784d40ae20579d06b7fd7b5106 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sat, 14 Sep 2024 19:39:56 -0600 Subject: [PATCH 74/86] Replace newtonsoft PackageReference with system.text --- src/LiveChartsCore/LiveChartsCore.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LiveChartsCore/LiveChartsCore.csproj b/src/LiveChartsCore/LiveChartsCore.csproj index b261fde81..57eb80a23 100644 --- a/src/LiveChartsCore/LiveChartsCore.csproj +++ b/src/LiveChartsCore/LiveChartsCore.csproj @@ -62,7 +62,7 @@ + Include="System.Text.Json" Version="8.0.4" /> From 1bd4a0715918ad4a8d7386ca8c8734795f845717 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sat, 14 Sep 2024 19:40:32 -0600 Subject: [PATCH 75/86] remove newtonsoft references --- src/LiveChartsCore/Defaults/BoxValue.cs | 8 -------- src/LiveChartsCore/Defaults/DateTimePoint.cs | 8 -------- src/LiveChartsCore/Defaults/ErrorDateTimePoint.cs | 8 -------- src/LiveChartsCore/Defaults/ErrorPoint.cs | 8 -------- src/LiveChartsCore/Defaults/ErrorValue.cs | 8 -------- src/LiveChartsCore/Defaults/FinancialPoint.cs | 8 -------- src/LiveChartsCore/Defaults/FinancialPointI.cs | 8 -------- src/LiveChartsCore/Defaults/MappedChartEntity.cs | 8 -------- src/LiveChartsCore/Defaults/ObservablePoint.cs | 8 -------- src/LiveChartsCore/Defaults/ObservablePolarPoint.cs | 8 -------- src/LiveChartsCore/Defaults/ObservableValue.cs | 8 -------- src/LiveChartsCore/Defaults/TimeSpanPoint.cs | 8 -------- src/LiveChartsCore/Defaults/WeightedPoint.cs | 8 -------- src/LiveChartsCore/Geo/CoreMap.cs | 11 ++--------- 14 files changed, 2 insertions(+), 113 deletions(-) diff --git a/src/LiveChartsCore/Defaults/BoxValue.cs b/src/LiveChartsCore/Defaults/BoxValue.cs index 0a7457bef..d332d9c5b 100644 --- a/src/LiveChartsCore/Defaults/BoxValue.cs +++ b/src/LiveChartsCore/Defaults/BoxValue.cs @@ -105,19 +105,11 @@ public BoxValue( public double Median { get => _median; set { _median = value; OnPropertyChanged(); } } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public ChartEntityMetaData? MetaData { get; set; } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public Coordinate Coordinate { get; set; } = Coordinate.Empty; /// diff --git a/src/LiveChartsCore/Defaults/DateTimePoint.cs b/src/LiveChartsCore/Defaults/DateTimePoint.cs index 6519da4cc..2eb209e06 100644 --- a/src/LiveChartsCore/Defaults/DateTimePoint.cs +++ b/src/LiveChartsCore/Defaults/DateTimePoint.cs @@ -70,19 +70,11 @@ public DateTimePoint(DateTime dateTime, double? value) public double? Value { get => _value; set { _value = value; OnPropertyChanged(); } } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public ChartEntityMetaData? MetaData { get; set; } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public Coordinate Coordinate { get; set; } = Coordinate.Empty; /// diff --git a/src/LiveChartsCore/Defaults/ErrorDateTimePoint.cs b/src/LiveChartsCore/Defaults/ErrorDateTimePoint.cs index b1c83158a..7f9419428 100644 --- a/src/LiveChartsCore/Defaults/ErrorDateTimePoint.cs +++ b/src/LiveChartsCore/Defaults/ErrorDateTimePoint.cs @@ -119,19 +119,11 @@ public ErrorDateTimePoint(DateTime dateTime, double y, double xError, double yEr public double YErrorJ { get => _eyj; set { _eyj = value; OnPropertyChanged(); } } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public ChartEntityMetaData? MetaData { get; set; } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public Coordinate Coordinate { get; set; } = Coordinate.Empty; /// diff --git a/src/LiveChartsCore/Defaults/ErrorPoint.cs b/src/LiveChartsCore/Defaults/ErrorPoint.cs index cd5e5c8f0..0a1ac3317 100644 --- a/src/LiveChartsCore/Defaults/ErrorPoint.cs +++ b/src/LiveChartsCore/Defaults/ErrorPoint.cs @@ -117,19 +117,11 @@ public ErrorPoint(double x, double y, double xError, double yError) public double YErrorJ { get => _eyj; set { _eyj = value; OnPropertyChanged(); } } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public ChartEntityMetaData? MetaData { get; set; } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public Coordinate Coordinate { get; set; } = Coordinate.Empty; /// diff --git a/src/LiveChartsCore/Defaults/ErrorValue.cs b/src/LiveChartsCore/Defaults/ErrorValue.cs index a5f0f4a45..0965e2294 100644 --- a/src/LiveChartsCore/Defaults/ErrorValue.cs +++ b/src/LiveChartsCore/Defaults/ErrorValue.cs @@ -91,19 +91,11 @@ public ErrorValue(double y, double yError) public double YErrorJ { get => _eyj; set { _eyj = value; OnPropertyChanged(); } } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public ChartEntityMetaData? MetaData { get; set; } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public Coordinate Coordinate { get; set; } = Coordinate.Empty; /// diff --git a/src/LiveChartsCore/Defaults/FinancialPoint.cs b/src/LiveChartsCore/Defaults/FinancialPoint.cs index f1df0e050..9e85c8bfd 100644 --- a/src/LiveChartsCore/Defaults/FinancialPoint.cs +++ b/src/LiveChartsCore/Defaults/FinancialPoint.cs @@ -102,19 +102,11 @@ public FinancialPoint(DateTime date, double? high, double? open, double? close, public double? Low { get => _low; set { _low = value; OnPropertyChanged(); } } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public ChartEntityMetaData? MetaData { get; set; } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public Coordinate Coordinate { get; set; } = Coordinate.Empty; /// diff --git a/src/LiveChartsCore/Defaults/FinancialPointI.cs b/src/LiveChartsCore/Defaults/FinancialPointI.cs index a3d5047cf..08b0c16ab 100644 --- a/src/LiveChartsCore/Defaults/FinancialPointI.cs +++ b/src/LiveChartsCore/Defaults/FinancialPointI.cs @@ -96,19 +96,11 @@ public FinancialPointI(double high, double open, double close, double low) public double Low { get => _low; set { _low = value; OnPropertyChanged(); } } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public ChartEntityMetaData? MetaData { get; set; } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public Coordinate Coordinate { get; set; } = Coordinate.Empty; /// diff --git a/src/LiveChartsCore/Defaults/MappedChartEntity.cs b/src/LiveChartsCore/Defaults/MappedChartEntity.cs index 9b4f93746..e6d227f2b 100644 --- a/src/LiveChartsCore/Defaults/MappedChartEntity.cs +++ b/src/LiveChartsCore/Defaults/MappedChartEntity.cs @@ -32,18 +32,10 @@ namespace LiveChartsCore.Defaults; public sealed class MappedChartEntity : IChartEntity { /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public ChartEntityMetaData? MetaData { get; set; } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public Coordinate Coordinate { get; set; } = Coordinate.Empty; } diff --git a/src/LiveChartsCore/Defaults/ObservablePoint.cs b/src/LiveChartsCore/Defaults/ObservablePoint.cs index b503e0678..907fcd1c8 100644 --- a/src/LiveChartsCore/Defaults/ObservablePoint.cs +++ b/src/LiveChartsCore/Defaults/ObservablePoint.cs @@ -69,19 +69,11 @@ public ObservablePoint(double? x, double? y) public double? Y { get => _y; set { _y = value; OnPropertyChanged(); } } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public ChartEntityMetaData? MetaData { get; set; } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public Coordinate Coordinate { get; set; } = Coordinate.Empty; /// diff --git a/src/LiveChartsCore/Defaults/ObservablePolarPoint.cs b/src/LiveChartsCore/Defaults/ObservablePolarPoint.cs index af4e6a3b8..67835ab83 100644 --- a/src/LiveChartsCore/Defaults/ObservablePolarPoint.cs +++ b/src/LiveChartsCore/Defaults/ObservablePolarPoint.cs @@ -62,19 +62,11 @@ public ObservablePolarPoint(double? angle, double? radius) public double? Radius { get => _radius; set { _radius = value; OnPropertyChanged(); } } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public ChartEntityMetaData? MetaData { get; set; } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public Coordinate Coordinate { get; set; } = Coordinate.Empty; /// diff --git a/src/LiveChartsCore/Defaults/ObservableValue.cs b/src/LiveChartsCore/Defaults/ObservableValue.cs index 2785a041b..fc41cb14c 100644 --- a/src/LiveChartsCore/Defaults/ObservableValue.cs +++ b/src/LiveChartsCore/Defaults/ObservableValue.cs @@ -61,19 +61,11 @@ public ObservableValue(double? value) public double? Value { get => _value; set { _value = value; OnPropertyChanged(); } } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public ChartEntityMetaData? MetaData { get; set; } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public Coordinate Coordinate { get; set; } = Coordinate.Empty; /// diff --git a/src/LiveChartsCore/Defaults/TimeSpanPoint.cs b/src/LiveChartsCore/Defaults/TimeSpanPoint.cs index debdd1268..bfb5c2bb8 100644 --- a/src/LiveChartsCore/Defaults/TimeSpanPoint.cs +++ b/src/LiveChartsCore/Defaults/TimeSpanPoint.cs @@ -69,19 +69,11 @@ public TimeSpanPoint(TimeSpan timeSpan, double? value) public double? Value { get => _value; set { _value = value; OnPropertyChanged(); } } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public ChartEntityMetaData? MetaData { get; set; } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public Coordinate Coordinate { get; set; } = Coordinate.Empty; /// diff --git a/src/LiveChartsCore/Defaults/WeightedPoint.cs b/src/LiveChartsCore/Defaults/WeightedPoint.cs index 58a24e5ba..141341f77 100644 --- a/src/LiveChartsCore/Defaults/WeightedPoint.cs +++ b/src/LiveChartsCore/Defaults/WeightedPoint.cs @@ -86,19 +86,11 @@ public WeightedPoint(double? x, double? y, double? weight) public event PropertyChangedEventHandler? PropertyChanged; /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public ChartEntityMetaData? MetaData { get; set; } /// -#if NET5_0_OR_GREATER [System.Text.Json.Serialization.JsonIgnore] -#else - [Newtonsoft.Json.JsonIgnore] -#endif public Coordinate Coordinate { get; set; } = Coordinate.Empty; /// diff --git a/src/LiveChartsCore/Geo/CoreMap.cs b/src/LiveChartsCore/Geo/CoreMap.cs index fdd83def2..ca7047507 100644 --- a/src/LiveChartsCore/Geo/CoreMap.cs +++ b/src/LiveChartsCore/Geo/CoreMap.cs @@ -122,20 +122,13 @@ public MapLayer AddLayerFromStreamReader( Layers.Add(layerName, layer); } - GeoJsonFile? geoJson; - -#if NET5_0_OR_GREATER - geoJson = System.Text.Json.JsonSerializer.Deserialize( + var geoJson = System.Text.Json.JsonSerializer.Deserialize( streamReader.ReadToEnd(), new System.Text.Json.JsonSerializerOptions { PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase - }); -#else - geoJson = Newtonsoft.Json.JsonConvert.DeserializeObject(streamReader.ReadToEnd()); -#endif + }) ?? throw new Exception("Map not found"); - if (geoJson is null) throw new Exception("Map not found"); layer.AddFile(geoJson); return layer; } From ab2e1e8a592c0bf33059c8ef9acc5db474493798 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sat, 14 Sep 2024 19:46:12 -0600 Subject: [PATCH 76/86] remove obsolete targets --- .../LiveChartsCore.SkiaSharpView.Avalonia.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj index 73291c94c..1edeef77c 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj @@ -4,7 +4,7 @@ 12.0 enable - netstandard2.0;netcoreapp2.0.3;net462;net6.0;net7.0;net8.0; + netstandard2.0;net6.0;net8.0; LiveChartsCore.SkiaSharpView.Avalonia LiveChartsCore.SkiaSharpView.Avalonia diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj index 18da27672..3da6c605f 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj @@ -5,7 +5,7 @@ 12.0 - netstandard2.0;netcoreapp2.0.3; + netstandard2.0; net6.0; net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst; From 8c6cb9af5f21d9e011a11b99110b14f6d2f8f558 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sat, 14 Sep 2024 20:03:13 -0600 Subject: [PATCH 77/86] also test nulls on maps --- src/LiveChartsCore/GeoMap.cs | 2 +- .../ChartTests/ChartTests.cs | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/LiveChartsCore/GeoMap.cs b/src/LiveChartsCore/GeoMap.cs index 5c7612990..8e76c0d44 100644 --- a/src/LiveChartsCore/GeoMap.cs +++ b/src/LiveChartsCore/GeoMap.cs @@ -239,7 +239,7 @@ internal void Measure() _mapFactory.GenerateLands(context); var toDeleteSeries = new HashSet>(_everMeasuredSeries); - foreach (var series in View.Series.Cast>()) + foreach (var series in View.Series?.Cast>() ?? []) { series.Measure(context); _ = _everMeasuredSeries.Add(series); diff --git a/tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs b/tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs index d670efd9f..d7e7795a6 100644 --- a/tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs +++ b/tests/LiveChartsCore.UnitTesting/ChartTests/ChartTests.cs @@ -20,7 +20,6 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -using System.Net.NetworkInformation; using LiveChartsCore.SkiaSharpView.SKCharts; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -93,4 +92,21 @@ public void PolarShouldHandleNullParams() Assert.IsTrue(image is not null); } + + [TestMethod] + public void MapShouldHandleNullParams() + { + // we are testing the properties defined on LiveChartsCore/Kernel/Sketches/IGeoMapView.cs + + var chart = new SKGeoMap + { + Width = 1000, + Height = 1000, + Series = null, + }; + + var image = chart.GetImage(); + + Assert.IsTrue(image is not null); + } } From e37149c6cc52f4d58368a94365d7b96aff91016e Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sun, 15 Sep 2024 12:15:53 -0600 Subject: [PATCH 78/86] improve docs to prevent #1418 --- samples/ViewModelsSamples/Bars/Spacing/ViewModel.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/samples/ViewModelsSamples/Bars/Spacing/ViewModel.cs b/samples/ViewModelsSamples/Bars/Spacing/ViewModel.cs index 141ce1619..aceae5dd5 100644 --- a/samples/ViewModelsSamples/Bars/Spacing/ViewModel.cs +++ b/samples/ViewModelsSamples/Bars/Spacing/ViewModel.cs @@ -2,8 +2,6 @@ using CommunityToolkit.Mvvm.ComponentModel; using LiveChartsCore; using LiveChartsCore.SkiaSharpView; -using LiveChartsCore.SkiaSharpView.Painting; -using SkiaSharp; namespace ViewModelsSamples.Bars.Spacing; @@ -19,7 +17,7 @@ public partial class ViewModel : ObservableObject Padding = 0, // Defines the max width a bar can have - MaxBarWidth = double.PositiveInfinity + MaxBarWidth = double.MaxValue } }; } From 75181ae80f1d7a0b16cf38f3eb6ea968abd53c90 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sun, 15 Sep 2024 12:41:37 -0600 Subject: [PATCH 79/86] fixes #1415 --- src/LiveChartsCore/CoreAxis.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/LiveChartsCore/CoreAxis.cs b/src/LiveChartsCore/CoreAxis.cs index 6ef47f6ac..14f3c8ad3 100644 --- a/src/LiveChartsCore/CoreAxis.cs +++ b/src/LiveChartsCore/CoreAxis.cs @@ -807,16 +807,22 @@ private IEnumerable EnumerateSeparators(double start, double end, double { if (CustomSeparators is not null) { - foreach (var s in CustomSeparators) yield return s; + foreach (var s in CustomSeparators) + yield return s; + yield break; } var relativeEnd = end - start; + if (relativeEnd / step > 10000) - { ThrowInfiniteSeparators(); - } - for (var i = 0d; i <= relativeEnd; i += step) yield return start + i; + + // start from -step to include the first separator/sub-separator + // and end at relativeEnd + step to include the last separator/sub-separator + + for (var i = -step; i <= relativeEnd + step; i += step) + yield return start + i; } private static ChartPoint? FindClosestPoint( From 73a7203fbab8b9f9c01ae362df326f30ec68be86 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sun, 15 Sep 2024 12:50:31 -0600 Subject: [PATCH 80/86] fixes #1370 --- src/LiveChartsCore/VisualElements/AngularTicksVisual.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs b/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs index 82b540a41..01641b0f4 100644 --- a/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs +++ b/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs @@ -268,8 +268,6 @@ protected internal override void OnInvalidated(Chart chart) Stroke?.RemoveGeometryFromPainTask(chart.Canvas, subtick); _ = _visuals.Remove(key); } - - Trace.WriteLine(_visuals.Count); } /// From 5b6d5cab7c5cb543b5fe5fb973cd1c6adfddf72e Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Sun, 15 Sep 2024 12:51:59 -0600 Subject: [PATCH 81/86] remove diagnosis ns --- src/LiveChartsCore/VisualElements/AngularTicksVisual.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs b/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs index 01641b0f4..5d5a468f3 100644 --- a/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs +++ b/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs @@ -22,7 +22,6 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.Linq; using LiveChartsCore.Drawing; using LiveChartsCore.Kernel.Sketches; From 37a184b649920d0ead7a83b4851f6fd3f5bb3762 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Mon, 16 Sep 2024 08:56:18 -0600 Subject: [PATCH 82/86] refactor accesibility --- src/LiveChartsCore/BarSeries.cs | 3 ++- src/LiveChartsCore/CoreAxis.cs | 7 ++----- src/LiveChartsCore/CoreFinancialSeries.cs | 8 ++------ src/LiveChartsCore/CoreHeatSeries.cs | 2 +- src/LiveChartsCore/CoreLineSeries.cs | 7 ++----- src/LiveChartsCore/CorePieSeries.cs | 2 +- src/LiveChartsCore/CorePolarAxis.cs | 7 ++----- src/LiveChartsCore/CorePolarLineSeries.cs | 7 ++----- src/LiveChartsCore/CoreStepLineSeries.cs | 2 +- src/LiveChartsCore/DrawMarginFrame.cs | 7 ++----- src/LiveChartsCore/Kernel/ChartElement.cs | 4 ++-- src/LiveChartsCore/Section.cs | 7 ++----- src/LiveChartsCore/StrokeAndFillCartesianSeries.cs | 8 ++------ src/LiveChartsCore/VisualElements/AngularTicksVisual.cs | 7 +++++-- src/LiveChartsCore/VisualElements/BaseGeometryVisual.cs | 2 +- src/LiveChartsCore/VisualElements/GeometryVisual.cs | 6 ++++-- src/LiveChartsCore/VisualElements/LabelVisual.cs | 7 +++++-- src/LiveChartsCore/VisualElements/NeedleVisual.cs | 6 ++++-- src/LiveChartsCore/VisualElements/RelativePanel.cs | 6 ++++-- src/LiveChartsCore/VisualElements/StackPanel.cs | 6 ++++-- src/LiveChartsCore/VisualElements/TableLayout.cs | 6 ++++-- .../VisualElements/VariableGeometryVisual.cs | 3 ++- src/LiveChartsCore/VisualElements/VisualElement.cs | 6 +++++- 23 files changed, 61 insertions(+), 65 deletions(-) diff --git a/src/LiveChartsCore/BarSeries.cs b/src/LiveChartsCore/BarSeries.cs index 3dc1c2f57..c5fc6b4b9 100644 --- a/src/LiveChartsCore/BarSeries.cs +++ b/src/LiveChartsCore/BarSeries.cs @@ -213,7 +213,8 @@ protected override void OnPointerLeft(ChartPoint point) base.OnPointerLeft(point); } - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { Stroke, Fill, DataLabelsPaint, _errorPaint }; } diff --git a/src/LiveChartsCore/CoreAxis.cs b/src/LiveChartsCore/CoreAxis.cs index 14f3c8ad3..05432a0f6 100644 --- a/src/LiveChartsCore/CoreAxis.cs +++ b/src/LiveChartsCore/CoreAxis.cs @@ -998,11 +998,8 @@ protected override void OnPaintChanged(string? propertyName) OnPropertyChanged(propertyName); } - /// - /// Gets the paint tasks. - /// - /// - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { _separatorsPaint, _labelsPaint, _namePaint, _zeroPaint, _ticksPaint, _subticksPaint, _subseparatorsPaint }; } diff --git a/src/LiveChartsCore/CoreFinancialSeries.cs b/src/LiveChartsCore/CoreFinancialSeries.cs index 8f4556c17..a4456d788 100644 --- a/src/LiveChartsCore/CoreFinancialSeries.cs +++ b/src/LiveChartsCore/CoreFinancialSeries.cs @@ -439,12 +439,8 @@ protected internal override void SoftDeleteOrDisposePoint(ChartPoint point, Scal label.RemoveOnCompleted = true; } - /// - /// Gets the paint tasks. - /// - /// - /// - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { _upFill, _upStroke, _downFill, _downStroke, DataLabelsPaint }; } diff --git a/src/LiveChartsCore/CoreHeatSeries.cs b/src/LiveChartsCore/CoreHeatSeries.cs index 1cf2fb270..70acf8b4c 100644 --- a/src/LiveChartsCore/CoreHeatSeries.cs +++ b/src/LiveChartsCore/CoreHeatSeries.cs @@ -353,7 +353,7 @@ public override Sketch GetMiniaturesSketch() } /// - internal override IPaint?[] GetPaintTasks() + protected internal override IPaint?[] GetPaintTasks() { return new[] { _paintTaks }; } diff --git a/src/LiveChartsCore/CoreLineSeries.cs b/src/LiveChartsCore/CoreLineSeries.cs index 110a929f6..02dab12b0 100644 --- a/src/LiveChartsCore/CoreLineSeries.cs +++ b/src/LiveChartsCore/CoreLineSeries.cs @@ -549,11 +549,8 @@ public override void RemoveFromUI(Chart chart) _ = _strokePathHelperDictionary.Remove(chart.Canvas.Sync); } - /// - /// Gets the paint tasks. - /// - /// - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { Stroke, Fill, _geometryFill, _geometryStroke, DataLabelsPaint, _errorPaint }; } diff --git a/src/LiveChartsCore/CorePieSeries.cs b/src/LiveChartsCore/CorePieSeries.cs index 9cf72db1f..9da0f2181 100644 --- a/src/LiveChartsCore/CorePieSeries.cs +++ b/src/LiveChartsCore/CorePieSeries.cs @@ -500,7 +500,7 @@ public override int GetStackGroup() } /// - internal override IPaint?[] GetPaintTasks() + protected internal override IPaint?[] GetPaintTasks() { return [_fill, _stroke, DataLabelsPaint]; } diff --git a/src/LiveChartsCore/CorePolarAxis.cs b/src/LiveChartsCore/CorePolarAxis.cs index 735129594..aa9a8e8dc 100644 --- a/src/LiveChartsCore/CorePolarAxis.cs +++ b/src/LiveChartsCore/CorePolarAxis.cs @@ -601,11 +601,8 @@ protected override void OnPaintChanged(string? propertyName) OnPropertyChanged(propertyName); } - /// - /// Gets the paint tasks. - /// - /// - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { _separatorsPaint, _labelsPaint, _namePaint }; } diff --git a/src/LiveChartsCore/CorePolarLineSeries.cs b/src/LiveChartsCore/CorePolarLineSeries.cs index 3c441c568..8be1d4406 100644 --- a/src/LiveChartsCore/CorePolarLineSeries.cs +++ b/src/LiveChartsCore/CorePolarLineSeries.cs @@ -775,11 +775,8 @@ public override void SoftDeleteOrDispose(IChartView chart) OnVisibilityChanged(); } - /// - /// Gets the paint tasks. - /// - /// - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { Stroke, Fill, _geometryFill, _geometryStroke, DataLabelsPaint }; } diff --git a/src/LiveChartsCore/CoreStepLineSeries.cs b/src/LiveChartsCore/CoreStepLineSeries.cs index 916efae43..01d55e70e 100644 --- a/src/LiveChartsCore/CoreStepLineSeries.cs +++ b/src/LiveChartsCore/CoreStepLineSeries.cs @@ -492,7 +492,7 @@ public override void RemoveFromUI(Chart chart) /// Gets the paint tasks. /// /// - internal override IPaint?[] GetPaintTasks() + protected internal override IPaint?[] GetPaintTasks() { return new[] { Stroke, Fill, _geometryFill, _geometryStroke, DataLabelsPaint }; } diff --git a/src/LiveChartsCore/DrawMarginFrame.cs b/src/LiveChartsCore/DrawMarginFrame.cs index 80f60c0f1..e5f43fb77 100644 --- a/src/LiveChartsCore/DrawMarginFrame.cs +++ b/src/LiveChartsCore/DrawMarginFrame.cs @@ -60,11 +60,8 @@ public IPaint? Fill set => SetPaintProperty(ref _fill, value); } - /// - /// Gets the paint tasks. - /// - /// - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { _stroke, _fill }; } diff --git a/src/LiveChartsCore/Kernel/ChartElement.cs b/src/LiveChartsCore/Kernel/ChartElement.cs index 5f8ab9cde..abc394db5 100644 --- a/src/LiveChartsCore/Kernel/ChartElement.cs +++ b/src/LiveChartsCore/Kernel/ChartElement.cs @@ -80,8 +80,8 @@ public virtual void RemoveFromUI(Chart chart) /// /// Gets the paint tasks registered by the . /// - /// - internal abstract IPaint?[] GetPaintTasks(); + /// The paint tasks. + protected internal abstract IPaint?[] GetPaintTasks(); /// /// Sets a property value and handles the paints in the canvas. diff --git a/src/LiveChartsCore/Section.cs b/src/LiveChartsCore/Section.cs index 9bc699756..317c42a4b 100644 --- a/src/LiveChartsCore/Section.cs +++ b/src/LiveChartsCore/Section.cs @@ -151,11 +151,8 @@ public IPaint? LabelPaint /// public int? ZIndex { get => _zIndex; set => SetProperty(ref _zIndex, value); } - /// - /// Gets the paint tasks. - /// - /// - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { _stroke, _fill, _labelPaint }; } diff --git a/src/LiveChartsCore/StrokeAndFillCartesianSeries.cs b/src/LiveChartsCore/StrokeAndFillCartesianSeries.cs index c5efe1037..6a8c4dc8a 100644 --- a/src/LiveChartsCore/StrokeAndFillCartesianSeries.cs +++ b/src/LiveChartsCore/StrokeAndFillCartesianSeries.cs @@ -74,12 +74,8 @@ public IPaint? Fill set => SetPaintProperty(ref _fill, value); } - /// - /// Gets the paint tasks. - /// - /// - /// - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { _stroke, _fill, DataLabelsPaint }; } diff --git a/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs b/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs index 5d5a468f3..475b216c5 100644 --- a/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs +++ b/src/LiveChartsCore/VisualElements/AngularTicksVisual.cs @@ -24,6 +24,7 @@ using System.Collections.Generic; using System.Linq; using LiveChartsCore.Drawing; +using LiveChartsCore.Kernel; using LiveChartsCore.Kernel.Sketches; namespace LiveChartsCore.VisualElements; @@ -279,7 +280,8 @@ public override LvcSize Measure(Chart chart) protected internal override void SetParent(IGeometry parent) { } - internal override IAnimatable?[] GetDrawnGeometries() + /// + protected internal override IAnimatable?[] GetDrawnGeometries() { var count = _visuals.Count + // the ticks @@ -303,7 +305,8 @@ protected internal override void SetParent(IGeometry parent) return l; } - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { _stroke, _labelsPaint }; } diff --git a/src/LiveChartsCore/VisualElements/BaseGeometryVisual.cs b/src/LiveChartsCore/VisualElements/BaseGeometryVisual.cs index 574cf45a4..bc316c015 100644 --- a/src/LiveChartsCore/VisualElements/BaseGeometryVisual.cs +++ b/src/LiveChartsCore/VisualElements/BaseGeometryVisual.cs @@ -74,7 +74,7 @@ public IPaint? Stroke } /// - internal override IPaint?[] GetPaintTasks() + protected internal override IPaint?[] GetPaintTasks() { return new[] { _fill, _stroke }; } diff --git a/src/LiveChartsCore/VisualElements/GeometryVisual.cs b/src/LiveChartsCore/VisualElements/GeometryVisual.cs index e76908249..75974b307 100644 --- a/src/LiveChartsCore/VisualElements/GeometryVisual.cs +++ b/src/LiveChartsCore/VisualElements/GeometryVisual.cs @@ -66,7 +66,8 @@ public IPaint? LabelPaint set => SetPaintProperty(ref _labelPaint, value); } - internal override IAnimatable?[] GetDrawnGeometries() + /// + protected internal override IAnimatable?[] GetDrawnGeometries() { return new IAnimatable?[] { _geometry, _labelGeometry }; } @@ -169,7 +170,8 @@ public override LvcSize Measure(Chart chart) return new LvcSize(w, h); } - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { Fill, Stroke, _labelPaint }; } diff --git a/src/LiveChartsCore/VisualElements/LabelVisual.cs b/src/LiveChartsCore/VisualElements/LabelVisual.cs index 37d917245..6fc397ea5 100644 --- a/src/LiveChartsCore/VisualElements/LabelVisual.cs +++ b/src/LiveChartsCore/VisualElements/LabelVisual.cs @@ -22,6 +22,7 @@ using System; using LiveChartsCore.Drawing; +using LiveChartsCore.Kernel; using LiveChartsCore.Measure; namespace LiveChartsCore.VisualElements; @@ -96,12 +97,14 @@ public IPaint? Paint /// public float MaxWidth { get => _maxWidth; set => SetProperty(ref _maxWidth, value); } - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { _paint }; } - internal override IAnimatable?[] GetDrawnGeometries() + /// + protected internal override IAnimatable?[] GetDrawnGeometries() { return new IAnimatable?[] { _labelGeometry }; } diff --git a/src/LiveChartsCore/VisualElements/NeedleVisual.cs b/src/LiveChartsCore/VisualElements/NeedleVisual.cs index b02d12330..1bb8c1cb8 100644 --- a/src/LiveChartsCore/VisualElements/NeedleVisual.cs +++ b/src/LiveChartsCore/VisualElements/NeedleVisual.cs @@ -134,12 +134,14 @@ protected internal override void SetParent(IGeometry parent) _geometry.Parent = parent; } - internal override IAnimatable?[] GetDrawnGeometries() + /// + protected internal override IAnimatable?[] GetDrawnGeometries() { return new IAnimatable?[] { _geometry }; } - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { _fill }; } diff --git a/src/LiveChartsCore/VisualElements/RelativePanel.cs b/src/LiveChartsCore/VisualElements/RelativePanel.cs index 58b2a80bd..c672cc51d 100644 --- a/src/LiveChartsCore/VisualElements/RelativePanel.cs +++ b/src/LiveChartsCore/VisualElements/RelativePanel.cs @@ -68,12 +68,14 @@ public IPaint? BackgroundPaint /// public TBackgroundGeometry BackgroundGeometry { get; } = new(); - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { _backgroundPaint }; } - internal override IAnimatable?[] GetDrawnGeometries() + /// + protected internal override IAnimatable?[] GetDrawnGeometries() { return new IAnimatable?[] { BackgroundGeometry }; } diff --git a/src/LiveChartsCore/VisualElements/StackPanel.cs b/src/LiveChartsCore/VisualElements/StackPanel.cs index b44439804..1a0f5b8f4 100644 --- a/src/LiveChartsCore/VisualElements/StackPanel.cs +++ b/src/LiveChartsCore/VisualElements/StackPanel.cs @@ -101,12 +101,14 @@ public IPaint? BackgroundPaint /// public double MaxHeight { get => _maxHeight; set => SetProperty(ref _maxHeight, value); } - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { _backgroundPaint }; } - internal override IAnimatable?[] GetDrawnGeometries() + /// + protected internal override IAnimatable?[] GetDrawnGeometries() { return new IAnimatable?[] { BackgroundGeometry }; } diff --git a/src/LiveChartsCore/VisualElements/TableLayout.cs b/src/LiveChartsCore/VisualElements/TableLayout.cs index 831d7f28b..d505f84a6 100644 --- a/src/LiveChartsCore/VisualElements/TableLayout.cs +++ b/src/LiveChartsCore/VisualElements/TableLayout.cs @@ -252,12 +252,14 @@ protected internal override void SetParent(IGeometry parent) BackgroundGeometry.Parent = parent; } - internal override IAnimatable?[] GetDrawnGeometries() + /// + protected internal override IAnimatable?[] GetDrawnGeometries() { return new IAnimatable?[] { BackgroundGeometry }; } - internal override IPaint?[] GetPaintTasks() + /// + protected internal override IPaint?[] GetPaintTasks() { return new[] { _backgroundPaint }; } diff --git a/src/LiveChartsCore/VisualElements/VariableGeometryVisual.cs b/src/LiveChartsCore/VisualElements/VariableGeometryVisual.cs index 612db235e..2dc6a3249 100644 --- a/src/LiveChartsCore/VisualElements/VariableGeometryVisual.cs +++ b/src/LiveChartsCore/VisualElements/VariableGeometryVisual.cs @@ -60,7 +60,8 @@ public ISizedGeometry Geometry /// public event Action>? GeometryInitialized; - internal override IAnimatable?[] GetDrawnGeometries() + /// + protected internal override IAnimatable?[] GetDrawnGeometries() { return new IAnimatable?[] { geometry }; } diff --git a/src/LiveChartsCore/VisualElements/VisualElement.cs b/src/LiveChartsCore/VisualElements/VisualElement.cs index 61b37b661..9cd9e689e 100644 --- a/src/LiveChartsCore/VisualElements/VisualElement.cs +++ b/src/LiveChartsCore/VisualElements/VisualElement.cs @@ -198,7 +198,11 @@ internal void InvokePointerDown(VisualElementEventArgs args) PointerDown?.Invoke(this, args); } - internal abstract IAnimatable?[] GetDrawnGeometries(); + /// + /// Gets the geometries to draw. + /// + /// The geometries. + protected internal abstract IAnimatable?[] GetDrawnGeometries(); internal virtual void AlignToTopLeftCorner() { From 372397f440b6bd17cea003634a4436541b1de6a2 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Mon, 16 Sep 2024 10:42:08 -0600 Subject: [PATCH 83/86] fixes #1387 --- src/LiveChartsCore/CoreAxis.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LiveChartsCore/CoreAxis.cs b/src/LiveChartsCore/CoreAxis.cs index 14f3c8ad3..59d36423f 100644 --- a/src/LiveChartsCore/CoreAxis.cs +++ b/src/LiveChartsCore/CoreAxis.cs @@ -1267,7 +1267,7 @@ private void UpdateSubseparators( float xs = 0f, ys = 0f; if (_orientation == AxisOrientation.X) { - xs = scale.MeasureInPixels(s * kl); + xs = scale.MeasureInPixels(s + s * kl); } else { From 744ef8fda95a1af6dc79e9356537eaf7ad726c07 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Mon, 16 Sep 2024 11:01:56 -0600 Subject: [PATCH 84/86] fixes #1382 --- src/LiveChartsCore/CorePolarLineSeries.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LiveChartsCore/CorePolarLineSeries.cs b/src/LiveChartsCore/CorePolarLineSeries.cs index 8be1d4406..5d6940fee 100644 --- a/src/LiveChartsCore/CorePolarLineSeries.cs +++ b/src/LiveChartsCore/CorePolarLineSeries.cs @@ -593,7 +593,7 @@ protected internal IEnumerable GetSpline( for (var i = 0; i < points.Length; i++) { - var isClosed = IsClosed && points.Length > 3; + var isClosed = IsClosed && points.Length > 2; var a1 = i + 1 - points.Length; var a2 = i + 2 - points.Length; From 971cc6bc043a6f993e599a8ef4531cc58c5dbea3 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Mon, 16 Sep 2024 16:25:48 -0600 Subject: [PATCH 85/86] update skiasharp --- .../LiveChartsCore.SkiaSharpView.WPF.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.WinForms.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.csproj | 4 ++-- .../LiveChartsCore.SkiaSharpView.Blazor.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.Maui.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.Maui.nuspec | 10 +++++----- .../LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj | 4 ++-- .../LiveChartsCore.SkiaSharpView.WinUI.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.WinUI.nuspec | 4 ++-- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj index 0430476b8..72afdb098 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj @@ -23,7 +23,7 @@ - + diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj index 0c69b610f..805635cfd 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj @@ -31,7 +31,7 @@ - + diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj index 8b0dc8e4d..2f927151d 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj @@ -22,7 +22,7 @@ - + diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj index 3da6c605f..99c928242 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj @@ -45,8 +45,8 @@ - - + + diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj index ef4acd986..683742690 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj @@ -50,7 +50,7 @@ - + - + diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.nuspec b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.nuspec index 0617384bb..8bbac98ee 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.nuspec +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.nuspec @@ -16,23 +16,23 @@ - + - + - + - + - + diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj index 41f1006b0..551648d9c 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj @@ -52,12 +52,12 @@ + Include="SkiaSharp.Views.Uno.WinUI" Version="2.88.8" /> + Include="SkiaSharp.Views.WinUI" Version="2.88.8" /> diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj index c99d1342b..f532461ed 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj @@ -49,7 +49,7 @@ - + diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.nuspec b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.nuspec index ffd47002f..b4cf0d4d2 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.nuspec +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.nuspec @@ -17,13 +17,13 @@ - + - + From 457608b337b7d2f4044aaa0aa5bdaed243094c45 Mon Sep 17 00:00:00 2001 From: beto rodriguez Date: Mon, 16 Sep 2024 16:26:58 -0600 Subject: [PATCH 86/86] rc-3 --- .../LiveChartsCore.Behaviours.csproj | 2 +- .../LiveChartsCore.Behaviours.nuspec | 22 +++++++++---------- src/LiveChartsCore/LiveChartsCore.csproj | 2 +- ...veChartsCore.SkiaSharpView.Avalonia.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.WPF.csproj | 2 +- ...veChartsCore.SkiaSharpView.WinForms.csproj | 2 +- ...rtsCore.SkiaSharpView.Xamarin.Forms.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.csproj | 2 +- ...LiveChartsCore.SkiaSharpView.Blazor.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.Eto.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.Maui.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.Maui.nuspec | 12 +++++----- ...eChartsCore.SkiaSharpView.Uno.WinUI.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.WinUI.csproj | 2 +- .../LiveChartsCore.SkiaSharpView.WinUI.nuspec | 14 ++++++------ 15 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj index 1d770b84f..75ea7a7ca 100644 --- a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj +++ b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.csproj @@ -31,7 +31,7 @@ LiveChartsCore.Behaviours LiveChartsCore.Behaviours - 2.0.0-rc2 + 2.0.0-rc3 icon.png Adds user interaction for touch screens, touch pads and mouse. MIT diff --git a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.nuspec b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.nuspec index 1dfe911a2..2fe6b206c 100644 --- a/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.nuspec +++ b/src/LiveChartsCore.Behaviours/LiveChartsCore.Behaviours.nuspec @@ -2,7 +2,7 @@ LiveChartsCore.Behaviours - 2.0.0-rc2 + 2.0.0-rc3 LiveChartsCore.Behaviours BetoRodriguez true @@ -19,38 +19,38 @@ - + - + - + - + - + - + - + - + - + - + diff --git a/src/LiveChartsCore/LiveChartsCore.csproj b/src/LiveChartsCore/LiveChartsCore.csproj index 57eb80a23..49b10d6a0 100644 --- a/src/LiveChartsCore/LiveChartsCore.csproj +++ b/src/LiveChartsCore/LiveChartsCore.csproj @@ -25,7 +25,7 @@ LiveChartsCore LiveChartsCore - 2.0.0-rc2 + 2.0.0-rc3 icon.png Simple, flexible, interactive and powerful data visualization for .Net, this is the core package probably you need another package also unless you are building your own backed. MIT diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj index 1edeef77c..ed9b12ace 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Avalonia/LiveChartsCore.SkiaSharpView.Avalonia.csproj @@ -8,7 +8,7 @@ LiveChartsCore.SkiaSharpView.Avalonia LiveChartsCore.SkiaSharpView.Avalonia - 2.0.0-rc2 + 2.0.0-rc3 icon.png Simple, flexible, interactive and powerful data visualization for AvaloniaUI. MIT diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj index 72afdb098..72a42b175 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WPF/LiveChartsCore.SkiaSharpView.WPF.csproj @@ -7,7 +7,7 @@ net462;netcoreapp3.1 LiveChartsCore.SkiaSharpView.WPF LiveChartsCore.SkiaSharpView.WPF - 2.0.0-rc2 + 2.0.0-rc3 icon.png Simple, flexible, interactive and powerful data visualization for WPF. MIT diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj index 805635cfd..a286877dc 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.WinForms/LiveChartsCore.SkiaSharpView.WinForms.csproj @@ -10,7 +10,7 @@ net462;netcoreapp3.1 LiveChartsCore.SkiaSharpView.WinForms LiveChartsCore.SkiaSharpView.WinForms - 2.0.0-rc2 + 2.0.0-rc3 icon.png Simple, flexible, interactive and powerful data visualization for WindowsForms. MIT diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj index 2f927151d..97e6ee8ab 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp.Xamarin.Forms/LiveChartsCore.SkiaSharpView.Xamarin.Forms.csproj @@ -6,7 +6,7 @@ netstandard2.0; LiveChartsCore.SkiaSharpView.XamarinForms LiveChartsCore.SkiaSharpView.XamarinForms - 2.0.0-rc2 + 2.0.0-rc3 icon.png Simple, flexible, interactive and powerful data visualization for XamarinForms. MIT diff --git a/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj b/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj index 99c928242..7b6a43876 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharp/LiveChartsCore.SkiaSharpView.csproj @@ -25,7 +25,7 @@ LiveChartsCore.SkiaSharpView LiveChartsCore.SkiaSharpView - 2.0.0-rc2 + 2.0.0-rc3 icon.png Simple, flexible, interactive and powerful data visualization for .Net, this package contains the SkiaSharp backend. MIT diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj index 683742690..b1115edd8 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Blazor/LiveChartsCore.SkiaSharpView.Blazor.csproj @@ -7,7 +7,7 @@ net6.0;net8.0 enable - 2.0.0-rc2 + 2.0.0-rc3 icon.png Simple, flexible, interactive and powerful data visualization for Blazor. MIT diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/LiveChartsCore.SkiaSharpView.Eto.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/LiveChartsCore.SkiaSharpView.Eto.csproj index 5bb70b92f..4f04d6215 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/LiveChartsCore.SkiaSharpView.Eto.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Eto/LiveChartsCore.SkiaSharpView.Eto.csproj @@ -7,7 +7,7 @@ netstandard2.0 LiveChartsCore.SkiaSharpView.Eto LiveChartsCore.SkiaSharpView.Eto - 2.0.0-rc2 + 2.0.0-rc3 icon.png Simple, flexible, interactive and powerful data visualization for Eto.Forms. MIT diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj index 64dc5a469..ba42e36ca 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.csproj @@ -28,7 +28,7 @@ --> win-x86;win-x64;win-arm64 - 2.0.0-rc2 + 2.0.0-rc3 icon.png Simple, flexible, interactive and powerful data visualization for Maui. MIT diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.nuspec b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.nuspec index 8bbac98ee..e00aae61f 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.nuspec +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Maui/LiveChartsCore.SkiaSharpView.Maui.nuspec @@ -2,7 +2,7 @@ LiveChartsCore.SkiaSharpView.Maui - 2.0.0-rc2 + 2.0.0-rc3 LiveChartsCore.SkiaSharpView.Maui BetoRodriguez true @@ -17,23 +17,23 @@ - + - + - + - + - + diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj index 551648d9c..83dd62699 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.Uno.WinUI/LiveChartsCore.SkiaSharpView.Uno.WinUI.csproj @@ -27,7 +27,7 @@ true - 2.0.0-rc2 + 2.0.0-rc3 icon.png Simple, flexible, interactive and powerful data visualization for Uno.WinUI. MIT diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj index f532461ed..06d221f65 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.csproj @@ -20,7 +20,7 @@ true LiveChartsCore.SkiaSharpView.WinUI - 2.0.0-rc2 + 2.0.0-rc3 icon.png Simple, flexible, interactive and powerful data visualization for WindowsAppSDK. MIT diff --git a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.nuspec b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.nuspec index b4cf0d4d2..b91dddaf2 100644 --- a/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.nuspec +++ b/src/skiasharp/LiveChartsCore.SkiaSharpView.WinUI/LiveChartsCore.SkiaSharpView.WinUI.nuspec @@ -2,7 +2,7 @@ LiveChartsCore.SkiaSharpView.WinUI - 2.0.0-rc2.1 + 2.0.0-rc3.1 LiveChartsCore.SkiaSharpView.WinUI BetoRodriguez true @@ -18,15 +18,15 @@ - - - + + + - - - + + +