oxyplot-avalonia icon indicating copy to clipboard operation
oxyplot-avalonia copied to clipboard

Update to Avalonia 11

Open hendrikmennen opened this issue 3 years ago • 57 comments
trafficstars

Seems like this module is not as easy to port...

hendrikmennen avatar Oct 14 '22 17:10 hendrikmennen

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.

VisualMelon avatar Oct 14 '22 17:10 VisualMelon

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

hendrikmennen avatar Oct 14 '22 17:10 hendrikmennen

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).

VisualMelon avatar Oct 14 '22 17:10 VisualMelon

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).

VisualMelon avatar Oct 14 '22 18:10 VisualMelon

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).

Interesting. For me even panning works with a dynamic plot using this hack

hendrikmennen avatar Oct 14 '22 18:10 hendrikmennen

Are you able to share your repo? Might be that you've fixed something else that I've missed.

VisualMelon avatar Oct 14 '22 18:10 VisualMelon

I discarded my repo and used yours. Directly with my project, let me try the demos https://github.com/HendrikMennen/oxyplot-avalonia/tree/avalonia11

hendrikmennen avatar Oct 14 '22 18:10 hendrikmennen

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

hendrikmennen avatar Oct 17 '22 16:10 hendrikmennen

Cool, will try it out now. I fixed the ExampleBrowser so it works in 11 in my repo.

VisualMelon avatar Oct 17 '22 16:10 VisualMelon

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.

VisualMelon avatar Oct 17 '22 16:10 VisualMelon

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!

jp2masa avatar Oct 27 '22 20:10 jp2masa

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)

VisualMelon avatar Oct 27 '22 20:10 VisualMelon

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 avatar Dec 07 '22 14:12 K-Luth

@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.

VisualMelon avatar Jan 14 '23 23:01 VisualMelon

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 avatar Feb 04 '23 18:02 jp2masa

@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.

VisualMelon avatar Feb 04 '23 18:02 VisualMelon

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.

jp2masa avatar Feb 05 '23 09:02 jp2masa

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.

VisualMelon avatar Feb 05 '23 09:02 VisualMelon

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 uses PlotView/PlotModel instead)
  • 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.

jp2masa avatar Feb 05 '23 09:02 jp2masa

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).

VisualMelon avatar Feb 05 '23 10:02 VisualMelon

@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.

VisualMelon avatar Feb 05 '23 10:02 VisualMelon

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.

jp2masa avatar Feb 05 '23 10:02 jp2masa

pushed a fix in https://github.com/VisualMelon/oxyplot-avalonia/commit/1970da2e69cfa1a8c3c131622717861a9864ff75

Thanks! I will try it and give feedback.

jp2masa avatar Feb 05 '23 10:02 jp2masa

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.

VisualMelon avatar Feb 05 '23 10:02 VisualMelon

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.

jp2masa avatar Feb 05 '23 11:02 jp2masa

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.

VisualMelon avatar Feb 05 '23 12:02 VisualMelon

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.

jp2masa avatar Feb 05 '23 12:02 jp2masa

Linking https://github.com/AvaloniaUI/Avalonia/issues/10226 (thanks for reporting that)

VisualMelon avatar Feb 06 '23 13:02 VisualMelon

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 avatar Feb 09 '23 04:02 jp2masa

@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.

VisualMelon avatar Feb 09 '23 08:02 VisualMelon