oxyplot / oxyplot-avalonia

A cross-platform plotting library for .NET. This package targets Avalonia apps.
https://oxyplot.github.io/
MIT License
274 stars 47 forks source link

Update to Avalonia 11 #49

Open HendrikMennen opened 2 years ago

HendrikMennen commented 2 years ago

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

VisualMelon commented 2 years ago

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.

HendrikMennen commented 2 years ago

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

VisualMelon commented 2 years ago

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 commented 2 years ago

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

HendrikMennen commented 2 years ago

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

VisualMelon commented 2 years ago

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

HendrikMennen commented 2 years ago

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 commented 2 years ago

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

VisualMelon commented 2 years ago

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

VisualMelon commented 2 years ago

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.

jp2masa commented 2 years ago

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!

VisualMelon commented 2 years ago

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)

K-Luth commented 1 year ago

Is there an update on avalonia 11 support? I'm looking into upgrading my projects to avalonia and I'd like to use oxyplot.

VisualMelon commented 1 year ago

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

jp2masa commented 1 year ago

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.

VisualMelon commented 1 year ago

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

jp2masa commented 1 year ago

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.

VisualMelon commented 1 year ago

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.

jp2masa commented 1 year ago

Here is the repro: https://github.com/jp2masa/oxyplot-avalonia/tree/repro

Repro Steps

I believe tabs are important here because of attached to/detached from visual tree events.

VisualMelon commented 1 year ago

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 commented 1 year ago

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

jp2masa commented 1 year ago

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 commented 1 year ago

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

Thanks! I will try it and give feedback.

VisualMelon commented 1 year ago

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.

jp2masa commented 1 year ago

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.

VisualMelon commented 1 year ago

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.

jp2masa commented 1 year ago

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.

VisualMelon commented 1 year ago

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

jp2masa commented 1 year ago

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.

VisualMelon commented 1 year ago

@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 commented 1 year ago

Added a simple flyout/tooltip/changing parent example to the Av11 branch to check that the plots respond to layout changes etc.: everything seems to work OK. Interested to know if there are other scenarios in the category of "I'm not sitting pretty in a rigid UI" that we need to consider.

jp2masa commented 1 year ago

I tried it and there's a small bug with the tooltip for me: when the cursor enters the "ToolTip" text from above, the tooltip appears correctly the first time but then it always shows at top left of the screen.

Video:

https://user-images.githubusercontent.com/10765201/218331201-e8826a4b-e19c-4075-ab25-92e9fa133bb1.mp4

I tried to create a simple repro in Avalonia Sandbox, but the tooltip was only showing on the first hover, it seems to be broken...

VisualMelon commented 1 year ago

Seems only to occur if you enter it from outside the window: if you move the TextBlock down a bit it's possible to repro with some violent mouse movement, but doesn't occur if you enter from above slowly.

VisualMelon commented 1 year ago

Might be related to this ;)

image

Avalonia.Controls\Primitives\PopupPositioning\IPopupPositioner.cs line 461

Better default would be the bottom-right corner of the control if we can't get the current pointer location.

jp2masa commented 1 year ago

That must be the problem, yes. Still a bit weird since it is a pointer over that triggers the popup, so LastPointerPosition should be valid, but it seems to be updated only after pointer over is triggered:

https://github.com/AvaloniaUI/Avalonia/blob/ca26912ddeaa8fdbe0820cb66a64f536e7562e12/src/Avalonia.Base/Input/PointerOverPreProcessor.cs#L150-L168

VisualMelon commented 1 year ago

Pushed nuget targetting avalonia 11-preview6 to my testing feed: https://www.myget.org/feed/melonoxyplottesting/package/nuget/OxyPlot.Avalonia/2.1.0-av11-preview6

Again, shouldn't be considered a reliable source

VisualMelon commented 1 year ago

@jp2masa not seeing the tooltip bug with preview6

jp2masa commented 1 year ago

Yes, I reported the issue on a PR related to popup and flyout (referenced above), and maxkatz6 fixed it!

VisualMelon commented 1 year ago

Done a hurried port to preview7 in my av11 branch; will look it over properly and push to myget when I have more time and stable internet.

XueDee123 commented 1 year ago

Hi,avalonia version 11.0.0 has been released. Will oxyplot be updated

VisualMelon commented 1 year ago

There is an open PR: https://github.com/oxyplot/oxyplot-avalonia/pull/55

Blockers from merging/shipping a nuget package are:

XueDee123 commented 1 year ago

There is an open PR: #55

Blockers from merging/shipping a nuget package are:

  • I need to retest it
  • We need to decide whether we are going to support Avalonia 0.10 at all going forward and if so how

Ok

VisualMelon commented 1 year ago

Avalonia 11 port merged into master

XueDee123 commented 1 year ago

Avalonia 11 port merged into master

There is no update on the new version of nuget

VisualMelon commented 1 year ago

@XueDee123 I've not had any feedback about 0.10 support, so I'm intending to release a version 2.1.2, targeting Avalonia 11 and OxyPlot 2.1.2 soon (hopefully in the next week or so)

XueDee123 commented 1 year ago

Thank you very much and look forward to the new release

giacarrea commented 1 year ago

Hello, any news on this front?

VisualMelon commented 1 year ago

There is an OxyPlot Avalonia 2.1.0-Avalonia11 on NuGet; I've still not made a decision about naming.

It should be compatible with OxyPlot.Core 2.1.2.

giacarrea commented 1 year ago

Cool, will check it out, thanks.

giacarrea commented 11 months ago

Hello, I'm noticing that the clickable tickers don't work anymore with the avalonia 11 pre-release version. Is there a specific thing to do to re-enable them?