oxyplot-avalonia
oxyplot-avalonia copied to clipboard
Update to Avalonia 11
Seems like this module is not as easy to port...
hurried notes:
I took a jab at it in https://github.com/VisualMelon/oxyplot-avalonia/tree/av11
But the plots didn't render. I hard-coded something to do with invalidation to true and then they started flickering.
Something is wrong with the render invalidation, I believe, but the boring bits are done.
Thats where I got stuck too. Managed to make it "run" but never render. Don't really know the code so hard to know where to look
Changing PlotBase.IsUserVisible to return element.IsEffectivelyVisible seems to make the simple demo work, but it disappears when you pan the plot (so a good back if you just need static plots).
It's almost as if the old plot is being removed (by Canvas.Clear()) before the redraw, but the new plot isn't being added before the redraw (if you remove the clear, then not only do you get fun patterns, but there is no flickering).
Changing
PlotBase.IsUserVisibletoreturn element.IsEffectivelyVisibleseems to make the simple demo work, but it disappears when you pan the plot (so a good back if you just need static plots).
Interesting. For me even panning works with a dynamic plot using this hack
Are you able to share your repo? Might be that you've fixed something else that I've missed.
I discarded my repo and used yours. Directly with my project, let me try the demos https://github.com/HendrikMennen/oxyplot-avalonia/tree/avalonia11
Are you able to share your repo? Might be that you've fixed something else that I've missed.
I think the flickering is solved by using Avalonia preview2
Cool, will try it out now. I fixed the ExampleBrowser so it works in 11 in my repo.
Yep, everything seems to be OK now. Still had to remove the bounds check in PlotBase.IsUserVisible, so may be other issues with that down the line.
This check is also broken:
https://github.com/VisualMelon/oxyplot-avalonia/blob/d4b0b66411f41b11384bb50aaf035b1e86ecefe3/Source/OxyPlot.Avalonia/PlotBase.cs#L104
I think TransformedBounds now returns null when there's no transform, so a possible solution is to do this (while still keeping the one for transformed bounds I think):
this.GetObservable(BoundsProperty).Subscribe(bounds => OnSizeChanged(this, bounds.Size));
Even after that fix it doesn't always update: isUpdateRequired is stuck with value 2, not sure what's supposed to happen in order to reset it. This loop never runs again:
https://github.com/VisualMelon/oxyplot-avalonia/blob/d4b0b66411f41b11384bb50aaf035b1e86ecefe3/Source/OxyPlot.Avalonia/PlotBase.cs#L238
Also, may I ask what are the plans for the update, i.e. will there be a version for Avalonia 11 preview or only for the stable release? I have some time available to contribute if needed!
Also, may I ask what are the plans for the update, i.e. will there be a version for Avalonia 11 preview or only for the stable release? I have some time available to contribute if needed!
There are no plans at the moment; I can't remember if I have rights to public releases, but if I do then I probably should sooner rather than later. Regarding 11, I'm not sure. Would need to look into it more to find out if we should be switching to 11, or if we need to keep it in parallel. (May be that we do 2.1 release with 10, then switch to 11 for the pre-release, in expectation that the next version is 11 only)
Is there an update on avalonia 11 support? I'm looking into upgrading my projects to avalonia and I'd like to use oxyplot.
@K-Luth sorry for the slow reply; still no specific plan (will depend on when 11 is release), but I think we have a working branch targeting 11-preview4 (though still not sure what's up with IsUserVisible): https://github.com/VisualMelon/oxyplot-avalonia/tree/av11 - pre-release package at https://www.myget.org/feed/melonoxyplottesting/package/nuget/OxyPlot.Avalonia/2.1.0-av11 (but you shouldn't consider that feed reliable)
(2.1.0 was released a while back targeting Avalonia 10)
Update Looks like there is an issue with updating when resized.
Sorry for not replying earlier.
Preview 5 was released yesterday and will likely be the last preview (https://github.com/AvaloniaUI/Avalonia/discussions/10193#discussioncomment-4868225).
Looks like there is an issue with updating when resized.
This is the issue I was trying to describe in my previous comment. TransformedBounds will probably be replaced soon because it's broken (https://github.com/AvaloniaUI/Avalonia/issues/9308#issuecomment-1296509447). Anyway, I believe PlotBase doesn't need it, and Bounds can be used for now, although using ArrangeOverride would probably work too, not sure because I honestly couldn't understand the isUpdateRequired logic.
@jp2masa howdy, I've already updated my branch to preview 5: https://github.com/VisualMelon/oxyplot-avalonia/tree/av11
Indeed, one of the changes was to listen to Bounds rather than TransformedBounds. I made that change without putting any real thought into it, but the resize issue did go away. https://github.com/VisualMelon/oxyplot-avalonia/commit/567f076b928b6379a6806ae525517e94b989a8c0#diff-0da552064490156cd714c002a2c4790ca84a2b140ba733b71001fc58600db80fL104
I can push that to myget if useful.
I tested it and I still have the 2nd issue I tried to describe in the other comment:
Even after that fix it doesn't always update: isUpdateRequired is stuck with value 2, not sure what's supposed to happen in order to reset it. This loop never runs again:
VisualMelon/oxyplot-avalonia@d4b0b66/Source/OxyPlot.Avalonia/PlotBase.cs#L238
I'm pretty sure it's related to InvalidatePlot(true), I'll try to create a repro.
I'll try to create a repro.
Cool, if you can do that I'll be happy to have a look. It's perfectly possible I broke everything when I re-fitted the update logic so that it could be called off-thread.
Here is the repro: https://github.com/jp2masa/oxyplot-avalonia/tree/repro
Repro Steps
- Run
AvaloniaExamples - Open
TabDemo(it was adapted from the user control demo, but usesPlotView/PlotModelinstead) - On Plot1, click the Update button: the plot updates correctly, and the tracker works normally
- Switch to the Plot2 tab, and click the Update button: the plot updates correctly, and the tracker works normally
- Switch back to the Plot1 tab, and click the Update button: the points list updates but the plot stays the same, and the tracker doesn't work anymore
- Plot2 is broken as well
I believe tabs are important here because of attached to/detached from visual tree events.
Thanks, I'll take a look now.
I've also noticed an issue with the ExampleBrowser: when you open, close, and re-open a category, it doesn't measure properly. Not been able to repro this outside of the ExampleBrowser yet, but feels like a bug in Avalonia. Oddy the bug doesn't occur if you set a non-small value for MinHeight (e.g. 10).
@jp2masa pushed a fix in https://github.com/VisualMelon/oxyplot-avalonia/commit/1970da2e69cfa1a8c3c131622717861a9864ff75
The issue seems to be - as you said - that the invalidation state wasn't being reset when UpdateModel detected there was nothing to draw.
I've also noticed an issue with the ExampleBrowser: when you open, close, and re-open a category, it doesn't measure properly. Not been able to repro this outside of the ExampleBrowser yet, but feels like a bug in Avalonia.
Yes, it seems to be a bug in Avalonia, I just tried switching to fluent theme and it works correctly, so maybe it's a bug in simple theme, I will investigate it.
pushed a fix in https://github.com/VisualMelon/oxyplot-avalonia/commit/1970da2e69cfa1a8c3c131622717861a9864ff75
Thanks! I will try it and give feedback.
We should probably bump the .NET versions of the examples to .NET 6; shout if you'd rather I didn't do that just yet in my Av11 branch.
The fix worked like a charm, thanks again!
We should probably bump the .NET versions of the examples to .NET 6; shout if you'd rather I didn't do that just yet in my Av11 branch.
I totally agree with it, I'm currently using .NET 6/7 on my projects.
Pushed https://www.myget.org/feed/melonoxyplottesting/package/nuget/OxyPlot.Avalonia/2.1.0-av11-preview4 and https://www.myget.org/feed/melonoxyplottesting/package/nuget/OxyPlot.Avalonia/2.1.0-av11-preview5 with this fix.
Noticed that the expander bug doesn't occur in preview 4 either.
Noticed that the expander bug doesn't occur in preview 4 either.
It is probably related to either AvaloniaUI/Avalonia#9677 or AvaloniaUI/Avalonia#9979.
Linking https://github.com/AvaloniaUI/Avalonia/issues/10226 (thanks for reporting that)
I was completely wrong, it was broken by control themes.
PR https://github.com/AvaloniaUI/Avalonia/pull/10273 should fix it, I tried the ExampleBrowser with the CI nuget and it seems to work fine.
@jp2masa thank you indeed
I'm not aware at this minute of any other bugs, then. There are some things I changed in the plot view that I didn't really understand, but not noticed any issues with them.
I should probably do some tests with a flyout/tooltip/dock (indeed, should add one of those to the AvaloniaExample) because they always seem to cause issues with the WPF and Avalonia provisions.