From b18e019d9442c6c88bf07de562c5df08eb0d07f3 Mon Sep 17 00:00:00 2001 From: panayot-cankov Date: Sat, 2 Nov 2024 02:53:40 +0200 Subject: [PATCH 01/10] feat: Add stub for virtualizing recycling scrollview --- Maui/VirtualizingRecyclingScrollView/App.xaml | 14 + .../App.xaml.cs | 14 + .../AppShell.xaml | 12 + .../AppShell.xaml.cs | 9 + .../CellModel.cs | 35 ++ Maui/VirtualizingRecyclingScrollView/Key.cs | 13 + .../MainPage.xaml | 50 ++ .../MainPage.xaml.cs | 10 + .../MauiProgram.cs | 33 ++ .../Platforms/Android/AndroidManifest.xml | 6 + .../Platforms/Android/MainActivity.cs | 10 + .../Platforms/Android/MainApplication.cs | 15 + .../Android/Resources/values/colors.xml | 6 + .../Platforms/MacCatalyst/AppDelegate.cs | 9 + .../Platforms/MacCatalyst/Entitlements.plist | 14 + .../Platforms/MacCatalyst/Info.plist | 38 ++ .../Platforms/MacCatalyst/Program.cs | 15 + .../Platforms/Tizen/Main.cs | 16 + .../Platforms/Tizen/tizen-manifest.xml | 15 + .../Platforms/Windows/App.xaml | 8 + .../Platforms/Windows/App.xaml.cs | 24 + .../Platforms/Windows/Package.appxmanifest | 46 ++ .../Platforms/Windows/app.manifest | 15 + .../Platforms/iOS/AppDelegate.cs | 11 + .../Platforms/iOS/Info.plist | 32 ++ .../Platforms/iOS/Program.cs | 15 + .../iOS/Resources/PrivacyInfo.xcprivacy | 51 ++ .../Properties/launchSettings.json | 8 + .../VirtualizingRecyclingScrollView/README.md | 12 + .../Resources/AppIcon/appicon.svg | 4 + .../Resources/AppIcon/appiconfg.svg | 8 + .../Resources/Fonts/OpenSans-Regular.ttf | Bin 0 -> 107276 bytes .../Resources/Fonts/OpenSans-Semibold.ttf | Bin 0 -> 111164 bytes .../Resources/Images/dotnet_bot.png | Bin 0 -> 69811 bytes .../Resources/Raw/AboutAssets.txt | 15 + .../Resources/Splash/splash.svg | 8 + .../Resources/Styles/Colors.xaml | 45 ++ .../Resources/Styles/Styles.xaml | 451 ++++++++++++++++++ .../TheScrollView.cs | 211 ++++++++ .../TrackingBorder.cs | 35 ++ .../TrackingLabel.cs | 34 ++ .../TrackingModel.cs | 38 ++ .../VirtualizingRecyclingScrollView.csproj | 68 +++ .../VirtualizingRecyclingScrollView.sln | 22 + 44 files changed, 1495 insertions(+) create mode 100644 Maui/VirtualizingRecyclingScrollView/App.xaml create mode 100644 Maui/VirtualizingRecyclingScrollView/App.xaml.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/AppShell.xaml create mode 100644 Maui/VirtualizingRecyclingScrollView/AppShell.xaml.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/CellModel.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/Key.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/MainPage.xaml create mode 100644 Maui/VirtualizingRecyclingScrollView/MainPage.xaml.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/MauiProgram.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/Android/AndroidManifest.xml create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/Android/MainActivity.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/Android/MainApplication.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/Android/Resources/values/colors.xml create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/AppDelegate.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/Entitlements.plist create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/Info.plist create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/Program.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/Tizen/Main.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/Tizen/tizen-manifest.xml create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/Windows/App.xaml create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/Windows/App.xaml.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/Windows/Package.appxmanifest create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/Windows/app.manifest create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/iOS/AppDelegate.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/iOS/Info.plist create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/iOS/Program.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/Platforms/iOS/Resources/PrivacyInfo.xcprivacy create mode 100644 Maui/VirtualizingRecyclingScrollView/Properties/launchSettings.json create mode 100644 Maui/VirtualizingRecyclingScrollView/README.md create mode 100644 Maui/VirtualizingRecyclingScrollView/Resources/AppIcon/appicon.svg create mode 100644 Maui/VirtualizingRecyclingScrollView/Resources/AppIcon/appiconfg.svg create mode 100644 Maui/VirtualizingRecyclingScrollView/Resources/Fonts/OpenSans-Regular.ttf create mode 100644 Maui/VirtualizingRecyclingScrollView/Resources/Fonts/OpenSans-Semibold.ttf create mode 100644 Maui/VirtualizingRecyclingScrollView/Resources/Images/dotnet_bot.png create mode 100644 Maui/VirtualizingRecyclingScrollView/Resources/Raw/AboutAssets.txt create mode 100644 Maui/VirtualizingRecyclingScrollView/Resources/Splash/splash.svg create mode 100644 Maui/VirtualizingRecyclingScrollView/Resources/Styles/Colors.xaml create mode 100644 Maui/VirtualizingRecyclingScrollView/Resources/Styles/Styles.xaml create mode 100644 Maui/VirtualizingRecyclingScrollView/TheScrollView.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/TrackingBorder.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/TrackingLabel.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/TrackingModel.cs create mode 100644 Maui/VirtualizingRecyclingScrollView/VirtualizingRecyclingScrollView.csproj create mode 100644 Maui/VirtualizingRecyclingScrollView/VirtualizingRecyclingScrollView.sln diff --git a/Maui/VirtualizingRecyclingScrollView/App.xaml b/Maui/VirtualizingRecyclingScrollView/App.xaml new file mode 100644 index 0000000..0cedc1b --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/App.xaml @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/Maui/VirtualizingRecyclingScrollView/App.xaml.cs b/Maui/VirtualizingRecyclingScrollView/App.xaml.cs new file mode 100644 index 0000000..144b50a --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/App.xaml.cs @@ -0,0 +1,14 @@ +namespace VirtualizingRecyclingScrollView; + +public partial class App : Application +{ + public App() + { + InitializeComponent(); + } + + protected override Window CreateWindow(IActivationState? activationState) + { + return new Window(new AppShell()); + } +} diff --git a/Maui/VirtualizingRecyclingScrollView/AppShell.xaml b/Maui/VirtualizingRecyclingScrollView/AppShell.xaml new file mode 100644 index 0000000..9170de7 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/AppShell.xaml @@ -0,0 +1,12 @@ + + + + + + diff --git a/Maui/VirtualizingRecyclingScrollView/AppShell.xaml.cs b/Maui/VirtualizingRecyclingScrollView/AppShell.xaml.cs new file mode 100644 index 0000000..45d12bd --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/AppShell.xaml.cs @@ -0,0 +1,9 @@ +namespace VirtualizingRecyclingScrollView; + +public partial class AppShell : Shell +{ + public AppShell() + { + InitializeComponent(); + } +} diff --git a/Maui/VirtualizingRecyclingScrollView/CellModel.cs b/Maui/VirtualizingRecyclingScrollView/CellModel.cs new file mode 100644 index 0000000..97d64fb --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/CellModel.cs @@ -0,0 +1,35 @@ + +using System.ComponentModel; + +namespace VirtualizingRecyclingScrollView; + +public class CellModel : INotifyPropertyChanged +{ + public Key key; + + private string text; + + private Color color; + + public event PropertyChangedEventHandler? PropertyChanged; + + public string Text + { + get => this.text; + set + { + this.text = value; + this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Text))); + } + } + + public Color Color + { + get => this.color; + set + { + this.color = value; + this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Color))); + } + } +} \ No newline at end of file diff --git a/Maui/VirtualizingRecyclingScrollView/Key.cs b/Maui/VirtualizingRecyclingScrollView/Key.cs new file mode 100644 index 0000000..d0434bf --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Key.cs @@ -0,0 +1,13 @@ +namespace VirtualizingRecyclingScrollView; + +public struct Key +{ + public int x; + public int y; + + public Key(int x, int y) + { + this.x = x; + this.y = y; + } +} \ No newline at end of file diff --git a/Maui/VirtualizingRecyclingScrollView/MainPage.xaml b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml new file mode 100644 index 0000000..b644003 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Maui/VirtualizingRecyclingScrollView/MainPage.xaml.cs b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml.cs new file mode 100644 index 0000000..47fc9b2 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml.cs @@ -0,0 +1,10 @@ +namespace VirtualizingRecyclingScrollView; + +public partial class MainPage : ContentPage +{ + public MainPage() + { + this.BindingContext = TrackingModel.Instance; + InitializeComponent(); + } +} diff --git a/Maui/VirtualizingRecyclingScrollView/MauiProgram.cs b/Maui/VirtualizingRecyclingScrollView/MauiProgram.cs new file mode 100644 index 0000000..794f49d --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/MauiProgram.cs @@ -0,0 +1,33 @@ +using Microsoft.Extensions.Logging; +using Microsoft.Maui.Handlers; + +namespace VirtualizingRecyclingScrollView; + +public static class MauiProgram +{ + public static MauiApp CreateMauiApp() + { + var builder = MauiApp.CreateBuilder(); + builder + .UseMauiApp() + .ConfigureMauiHandlers(handlers => + { + ViewHandler.ViewCommandMapper.ModifyMapping(nameof(IView.InvalidateMeasure), (layout, handler, args, current) => + { + // Comment this out to stop layout invalidation... + current?.Invoke(layout, handler, args); + }); + }) + .ConfigureFonts(fonts => + { + fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); + fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); + }); + +#if DEBUG + builder.Logging.AddDebug(); +#endif + + return builder.Build(); + } +} diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/Android/AndroidManifest.xml b/Maui/VirtualizingRecyclingScrollView/Platforms/Android/AndroidManifest.xml new file mode 100644 index 0000000..bdec9b5 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/Android/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/Android/MainActivity.cs b/Maui/VirtualizingRecyclingScrollView/Platforms/Android/MainActivity.cs new file mode 100644 index 0000000..7500d07 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/Android/MainActivity.cs @@ -0,0 +1,10 @@ +using Android.App; +using Android.Content.PM; +using Android.OS; + +namespace VirtualizingRecyclingScrollView; + +[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)] +public class MainActivity : MauiAppCompatActivity +{ +} diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/Android/MainApplication.cs b/Maui/VirtualizingRecyclingScrollView/Platforms/Android/MainApplication.cs new file mode 100644 index 0000000..f89a9e1 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/Android/MainApplication.cs @@ -0,0 +1,15 @@ +using Android.App; +using Android.Runtime; + +namespace VirtualizingRecyclingScrollView; + +[Application] +public class MainApplication : MauiApplication +{ + public MainApplication(IntPtr handle, JniHandleOwnership ownership) + : base(handle, ownership) + { + } + + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/Android/Resources/values/colors.xml b/Maui/VirtualizingRecyclingScrollView/Platforms/Android/Resources/values/colors.xml new file mode 100644 index 0000000..5cd1604 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/Android/Resources/values/colors.xml @@ -0,0 +1,6 @@ + + + #512BD4 + #2B0B98 + #2B0B98 + \ No newline at end of file diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/AppDelegate.cs b/Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/AppDelegate.cs new file mode 100644 index 0000000..70d4e99 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/AppDelegate.cs @@ -0,0 +1,9 @@ +using Foundation; + +namespace VirtualizingRecyclingScrollView; + +[Register("AppDelegate")] +public class AppDelegate : MauiUIApplicationDelegate +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/Entitlements.plist b/Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/Entitlements.plist new file mode 100644 index 0000000..8e87c0c --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/Entitlements.plist @@ -0,0 +1,14 @@ + + + + + + + com.apple.security.app-sandbox + + + com.apple.security.network.client + + + + diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/Info.plist b/Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/Info.plist new file mode 100644 index 0000000..f24aacc --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/Info.plist @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + UIDeviceFamily + + 2 + + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + XSAppIconAssets + Assets.xcassets/appicon.appiconset + + diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/Program.cs b/Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/Program.cs new file mode 100644 index 0000000..061bbad --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/MacCatalyst/Program.cs @@ -0,0 +1,15 @@ +using ObjCRuntime; +using UIKit; + +namespace VirtualizingRecyclingScrollView; + +public class Program +{ + // This is the main entry point of the application. + static void Main(string[] args) + { + // if you want to use a different Application Delegate class from "AppDelegate" + // you can specify it here. + UIApplication.Main(args, null, typeof(AppDelegate)); + } +} diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/Tizen/Main.cs b/Maui/VirtualizingRecyclingScrollView/Platforms/Tizen/Main.cs new file mode 100644 index 0000000..663d772 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/Tizen/Main.cs @@ -0,0 +1,16 @@ +using System; +using Microsoft.Maui; +using Microsoft.Maui.Hosting; + +namespace VirtualizingRecyclingScrollView; + +class Program : MauiApplication +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); + + static void Main(string[] args) + { + var app = new Program(); + app.Run(args); + } +} diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/Tizen/tizen-manifest.xml b/Maui/VirtualizingRecyclingScrollView/Platforms/Tizen/tizen-manifest.xml new file mode 100644 index 0000000..9d8013a --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/Tizen/tizen-manifest.xml @@ -0,0 +1,15 @@ + + + + + + maui-appicon-placeholder + + + + + http://tizen.org/privilege/internet + + + + \ No newline at end of file diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/Windows/App.xaml b/Maui/VirtualizingRecyclingScrollView/Platforms/Windows/App.xaml new file mode 100644 index 0000000..5868c22 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/Windows/App.xaml @@ -0,0 +1,8 @@ + + + diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/Windows/App.xaml.cs b/Maui/VirtualizingRecyclingScrollView/Platforms/Windows/App.xaml.cs new file mode 100644 index 0000000..3f908e9 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/Windows/App.xaml.cs @@ -0,0 +1,24 @@ +using Microsoft.UI.Xaml; + +// To learn more about WinUI, the WinUI project structure, +// and more about our project templates, see: http://aka.ms/winui-project-info. + +namespace VirtualizingRecyclingScrollView.WinUI; + +/// +/// Provides application-specific behavior to supplement the default Application class. +/// +public partial class App : MauiWinUIApplication +{ + /// + /// 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() + { + this.InitializeComponent(); + } + + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} + diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/Windows/Package.appxmanifest b/Maui/VirtualizingRecyclingScrollView/Platforms/Windows/Package.appxmanifest new file mode 100644 index 0000000..a00d837 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/Windows/Package.appxmanifest @@ -0,0 +1,46 @@ + + + + + + + + + $placeholder$ + User Name + $placeholder$.png + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/Windows/app.manifest b/Maui/VirtualizingRecyclingScrollView/Platforms/Windows/app.manifest new file mode 100644 index 0000000..429d105 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/Windows/app.manifest @@ -0,0 +1,15 @@ + + + + + + + + true/PM + PerMonitorV2, PerMonitor + + + diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/iOS/AppDelegate.cs b/Maui/VirtualizingRecyclingScrollView/Platforms/iOS/AppDelegate.cs new file mode 100644 index 0000000..75b6e02 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/iOS/AppDelegate.cs @@ -0,0 +1,11 @@ +using Foundation; +using ObjCRuntime; +using UIKit; + +namespace VirtualizingRecyclingScrollView; + +[Register("AppDelegate")] +public class AppDelegate : MauiUIApplicationDelegate +{ + protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp(); +} diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/iOS/Info.plist b/Maui/VirtualizingRecyclingScrollView/Platforms/iOS/Info.plist new file mode 100644 index 0000000..358337b --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/iOS/Info.plist @@ -0,0 +1,32 @@ + + + + + LSRequiresIPhoneOS + + UIDeviceFamily + + 1 + 2 + + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + XSAppIconAssets + Assets.xcassets/appicon.appiconset + + diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/iOS/Program.cs b/Maui/VirtualizingRecyclingScrollView/Platforms/iOS/Program.cs new file mode 100644 index 0000000..061bbad --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/iOS/Program.cs @@ -0,0 +1,15 @@ +using ObjCRuntime; +using UIKit; + +namespace VirtualizingRecyclingScrollView; + +public class Program +{ + // This is the main entry point of the application. + static void Main(string[] args) + { + // if you want to use a different Application Delegate class from "AppDelegate" + // you can specify it here. + UIApplication.Main(args, null, typeof(AppDelegate)); + } +} diff --git a/Maui/VirtualizingRecyclingScrollView/Platforms/iOS/Resources/PrivacyInfo.xcprivacy b/Maui/VirtualizingRecyclingScrollView/Platforms/iOS/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..1ea3a5d --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Platforms/iOS/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,51 @@ + + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPITypeReasons + + E174.1 + + + + + + diff --git a/Maui/VirtualizingRecyclingScrollView/Properties/launchSettings.json b/Maui/VirtualizingRecyclingScrollView/Properties/launchSettings.json new file mode 100644 index 0000000..f4c6c8d --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "Windows Machine": { + "commandName": "Project", + "nativeDebugging": false + } + } +} \ No newline at end of file diff --git a/Maui/VirtualizingRecyclingScrollView/README.md b/Maui/VirtualizingRecyclingScrollView/README.md new file mode 100644 index 0000000..54643ad --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/README.md @@ -0,0 +1,12 @@ +# Virtualized Recycling ScrollView +The bread and butter of a virtualized recycling scrollview in about 300 lines of code: +https://github.com/telerik/ms-samples/pull/80 + +It steps on the ideas of this: +https://wwdcnotes.com/documentation/wwdcnotes/wwdc11-104-advanced-scrollview-techniques/ + +The scrollview will update the children within its content using a custom layout, it involves arranging items that disappear from the top to move them to the bottom also updating their content. + +There are two number fields at the titlebar: + - the left one shows measure and arrange counts for views outside the scrollview + - the right one shows measure and arrange counts for views in the scrollview diff --git a/Maui/VirtualizingRecyclingScrollView/Resources/AppIcon/appicon.svg b/Maui/VirtualizingRecyclingScrollView/Resources/AppIcon/appicon.svg new file mode 100644 index 0000000..5f04fcf --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Resources/AppIcon/appicon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Maui/VirtualizingRecyclingScrollView/Resources/AppIcon/appiconfg.svg b/Maui/VirtualizingRecyclingScrollView/Resources/AppIcon/appiconfg.svg new file mode 100644 index 0000000..62d66d7 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Resources/AppIcon/appiconfg.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Maui/VirtualizingRecyclingScrollView/Resources/Fonts/OpenSans-Regular.ttf b/Maui/VirtualizingRecyclingScrollView/Resources/Fonts/OpenSans-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1289e1b08c9fdf5365c4875c49e2527fa8a87d2f GIT binary patch literal 107276 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 z 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 ()N$;wZ-pGz- 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%0A7N@|Cy{eV1d|BD;UZbFy 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 literal 0 HcmV?d00001 diff --git a/Maui/VirtualizingRecyclingScrollView/Resources/Raw/AboutAssets.txt b/Maui/VirtualizingRecyclingScrollView/Resources/Raw/AboutAssets.txt new file mode 100644 index 0000000..f22d3bf --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Resources/Raw/AboutAssets.txt @@ -0,0 +1,15 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories). Deployment of the asset to your application +is automatically handled by the following `MauiAsset` Build Action within your `.csproj`. + + + +These files will be deployed with your package and will be accessible using Essentials: + + async Task LoadMauiAsset() + { + using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt"); + using var reader = new StreamReader(stream); + + var contents = reader.ReadToEnd(); + } diff --git a/Maui/VirtualizingRecyclingScrollView/Resources/Splash/splash.svg b/Maui/VirtualizingRecyclingScrollView/Resources/Splash/splash.svg new file mode 100644 index 0000000..62d66d7 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Resources/Splash/splash.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Maui/VirtualizingRecyclingScrollView/Resources/Styles/Colors.xaml b/Maui/VirtualizingRecyclingScrollView/Resources/Styles/Colors.xaml new file mode 100644 index 0000000..22f0a67 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Resources/Styles/Colors.xaml @@ -0,0 +1,45 @@ + + + + + + + #512BD4 + #ac99ea + #242424 + #DFD8F7 + #9880e5 + #2B0B98 + + White + Black + #D600AA + #190649 + #1f1f1f + + #E1E1E1 + #C8C8C8 + #ACACAC + #919191 + #6E6E6E + #404040 + #212121 + #141414 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Maui/VirtualizingRecyclingScrollView/Resources/Styles/Styles.xaml b/Maui/VirtualizingRecyclingScrollView/Resources/Styles/Styles.xaml new file mode 100644 index 0000000..628f887 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/Resources/Styles/Styles.xaml @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs new file mode 100644 index 0000000..5ce1049 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs @@ -0,0 +1,211 @@ +using System.Diagnostics.CodeAnalysis; +using Microsoft.Maui.Layouts; + +namespace VirtualizingRecyclingScrollView; + +public class TheScrollView : ScrollView +{ + public DataTemplate Template { get; set; } + + const double RowHeight = 50; + const double ColumnWidth = 140; + + private Point scroll; + private Size size; + private Rect rect; + + private Container container; + + public TheScrollView() + { + this.container = new Container(this); + this.Content = container; + this.Scrolled += OnScrolled; + this.Orientation = ScrollOrientation.Both; + } + + private void OnScrolled(object? sender, ScrolledEventArgs args) + { + DateTime start = DateTime.Now; + this.scroll = new Point(this.ScrollX, this.ScrollY); + this.rect = new Rect(this.scroll.X, this.scroll.Y, this.size.Width, this.size.Height); + var change = this.container.layoutManager.RealizeViewport(); + if (change != 0) + { + Console.WriteLine($" = OnScrolled {DateTime.Now - start}"); + } + } + + protected override void OnHandlerChanged() + { + base.OnHandlerChanged(); +#if IOS + var scrollview = (UIKit.UIScrollView)this.Handler.PlatformView; + scrollview.ContentInset = new UIKit.UIEdgeInsets(60, 0, 50, 0); + scrollview.VerticalScrollIndicatorInsets = new UIKit.UIEdgeInsets(50, 0, 20, 0); + scrollview.HorizontalScrollIndicatorInsets = new UIKit.UIEdgeInsets(0, 0, 20, 0); +#endif + } + + protected override Size ArrangeOverride(Rect bounds) + { + Console.WriteLine(" - ScrollView Arrange"); + DateTime start = DateTime.Now; + this.size = base.ArrangeOverride(bounds); + this.rect = new Rect(this.scroll.X, this.scroll.Y, this.size.Width, this.size.Height); + Console.WriteLine($" ScrollView Arranged {DateTime.Now - start}"); + return this.size; + } + + protected override Size MeasureOverride(double widthConstraint, double heightConstraint) + { + Console.WriteLine(" - ScrollView Measure"); + DateTime start = DateTime.Now; + TrackingModel.Instance.LayoutNodes++; + this.size = base.MeasureOverride(widthConstraint, heightConstraint); + this.rect = new Rect(this.scroll.X, this.scroll.Y, this.size.Width, this.size.Height); + Console.WriteLine($" ScrollView Measured {DateTime.Now - start}"); + return size; + } + + private class Container : Layout + { + public TheScrollView scrollview; + public LayoutManager layoutManager; + + public Container(TheScrollView scrollview) + { + this.scrollview = scrollview; + this.layoutManager = new LayoutManager(this); + } + + protected override ILayoutManager CreateLayoutManager() + { + return this.layoutManager; + } + } + + private class LayoutManager : ILayoutManager, IEqualityComparer + { + private Container container; + + private Dictionary elements = new Dictionary(); + + private Stack trashbin = new Stack(); + + private Stack disappearingViews = new Stack(); + + private int currentLeft = -1; + private int currentRight = -1; + private int currentTop = -1; + private int currentBottom = -1; + + public LayoutManager(Container container) + { + this.container = container; + } + + public bool Equals(Key lhs, Key rhs) => lhs.x == rhs.x && lhs.y == rhs.y; + + public int GetHashCode([DisallowNull] Key obj) => obj.x * 67033 + obj.y * 67043; + + public Size ArrangeChildren(Rect bounds) + { + return new Size(10000, 10000); + } + + public Size Measure(double widthConstraint, double heightConstraint) + { + return new Size(10000, 10000); + } + + public int RealizeViewport() + { + int left = Math.Max(0, (int)Math.Floor(this.container.scrollview.rect.X / ColumnWidth)); + int right = (int)Math.Ceiling((this.container.scrollview.rect.X + this.container.scrollview.rect.Width) / ColumnWidth); + int top = Math.Max(0, (int)Math.Floor(this.container.scrollview.rect.Y / RowHeight)); + int bottom = (int)Math.Ceiling((this.container.scrollview.rect.Y + this.container.scrollview.Height) / RowHeight); + + if (left == currentLeft && top != currentTop && right != currentRight && bottom != currentBottom) + { + return 0; + } + + this.currentLeft = left; + this.currentRight = right; + this.currentTop = top; + this.currentBottom = bottom; + + int removed = 0; + int added = 0; + + foreach(var kvp in this.elements) + { + if (kvp.Key.x < left || kvp.Key.x > right || kvp.Key.y < top || kvp.Key.y > bottom) + { + this.disappearingViews.Push(kvp.Value); + this.elements.Remove(kvp.Key); + removed++; + } + } + + for (int x = left; x <= right; x++) + { + for (int y = top; y <= bottom; y++) + { + var key = new Key(x, y); + if (!elements.ContainsKey(key)) + { + View? content = null; + if (this.disappearingViews.Count > 0) + { + content = this.disappearingViews.Pop(); + } + else if (this.trashbin.Count > 0) + { + content = this.trashbin.Pop(); + } + else + { + content = this.container.scrollview.Template.CreateContent() as View; + content.BindingContext = new CellModel(); + this.container.Add(content); + } + + content.IsVisible = true; + var cellmodel = (CellModel)content.BindingContext; + cellmodel.key = key; + var code = this.container.layoutManager.GetHashCode(key); + cellmodel.Color = new Color(200 + code % 56, 200 + (code >> 4) % 56, 200 + (byte)(code >> 8) % 56); + cellmodel.Text = $"Cell {x} x {y}"; + elements[key] = content; + + // We measure and arrange ad-hoc +#if IOS + content.Arrange(new Rect(cellmodel.key.x * ColumnWidth, cellmodel.key.y * RowHeight, ColumnWidth, RowHeight)); +#else + content.Measure(double.PositiveInfinity, double.PositiveInfinity); + content.Arrange(new Rect(cellmodel.key.x * ColumnWidth, cellmodel.key.y * RowHeight, ColumnWidth, RowHeight)); +#endif + + added++; + } + } + } + + while(this.disappearingViews.Count > 0) + { + var popped = this.disappearingViews.Pop(); + popped.IsVisible = false; + this.trashbin.Push(popped); + } + + if (removed != 0 || added != 0) + { + Console.WriteLine($" +{added}/-{removed}"); + } + + return added + removed; + } + } +} \ No newline at end of file diff --git a/Maui/VirtualizingRecyclingScrollView/TrackingBorder.cs b/Maui/VirtualizingRecyclingScrollView/TrackingBorder.cs new file mode 100644 index 0000000..9e3feb1 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/TrackingBorder.cs @@ -0,0 +1,35 @@ + +namespace VirtualizingRecyclingScrollView; + +public class TrackingBorder : Border +{ + public bool Virtualized { get; set; } = false; + + protected override Size ArrangeOverride(Rect bounds) + { + if (this.Virtualized) + { + TrackingModel.Instance.LayoutVirtualNodes++; + } + else + { + TrackingModel.Instance.LayoutNodes++; + } + + return base.ArrangeOverride(bounds); + } + + protected override Size MeasureOverride(double widthConstraint, double heightConstraint) + { + if (this.Virtualized) + { + TrackingModel.Instance.LayoutVirtualNodes++; + } + else + { + TrackingModel.Instance.LayoutNodes++; + } + + return base.MeasureOverride(widthConstraint, heightConstraint); + } +} \ No newline at end of file diff --git a/Maui/VirtualizingRecyclingScrollView/TrackingLabel.cs b/Maui/VirtualizingRecyclingScrollView/TrackingLabel.cs new file mode 100644 index 0000000..95026bc --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/TrackingLabel.cs @@ -0,0 +1,34 @@ +namespace VirtualizingRecyclingScrollView; + +public class TrackingLabel : Label +{ + public bool Virtualized { get; set; } = false; + + protected override Size ArrangeOverride(Rect bounds) + { + if (this.Virtualized) + { + TrackingModel.Instance.LayoutVirtualNodes++; + } + else + { + TrackingModel.Instance.LayoutNodes++; + } + + return base.ArrangeOverride(bounds); + } + + protected override Size MeasureOverride(double widthConstraint, double heightConstraint) + { + if (this.Virtualized) + { + TrackingModel.Instance.LayoutVirtualNodes++; + } + else + { + TrackingModel.Instance.LayoutNodes++; + } + + return base.MeasureOverride(widthConstraint, heightConstraint); + } +} \ No newline at end of file diff --git a/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs b/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs new file mode 100644 index 0000000..c5b486d --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs @@ -0,0 +1,38 @@ +using System.ComponentModel; + +namespace VirtualizingRecyclingScrollView; + +public sealed class TrackingModel : INotifyPropertyChanged +{ + public static TrackingModel Instance = new TrackingModel(); + + private TrackingModel() + { + } + + private uint layoutNodes = 0; + + private uint layoutVirtualNodes = 0; + + public event PropertyChangedEventHandler? PropertyChanged; + + public uint LayoutNodes + { + get => this.layoutNodes; + set + { + this.layoutNodes = value; + this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(LayoutNodes))); + } + } + + public uint LayoutVirtualNodes + { + get => this.layoutVirtualNodes; + set + { + this.layoutVirtualNodes = value; + this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(LayoutVirtualNodes))); + } + } +} diff --git a/Maui/VirtualizingRecyclingScrollView/VirtualizingRecyclingScrollView.csproj b/Maui/VirtualizingRecyclingScrollView/VirtualizingRecyclingScrollView.csproj new file mode 100644 index 0000000..b50d36a --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/VirtualizingRecyclingScrollView.csproj @@ -0,0 +1,68 @@ + + + + net9.0-android;net9.0-ios;net9.0-maccatalyst + $(TargetFrameworks);net9.0-windows10.0.19041.0 + + + + + + + Exe + VirtualizingRecyclingScrollView + true + true + enable + enable + + + VirtualizingRecyclingScrollView + + + com.companyname.virtualizingrecyclingscrollview + + + 1.0 + 1 + + + None + + 15.0 + 15.0 + 21.0 + 10.0.17763.0 + 10.0.17763.0 + 6.5 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Maui/VirtualizingRecyclingScrollView/VirtualizingRecyclingScrollView.sln b/Maui/VirtualizingRecyclingScrollView/VirtualizingRecyclingScrollView.sln new file mode 100644 index 0000000..bce68f4 --- /dev/null +++ b/Maui/VirtualizingRecyclingScrollView/VirtualizingRecyclingScrollView.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VirtualizingRecyclingScrollView", "VirtualizingRecyclingScrollView.csproj", "{FBCA23F3-6748-49A3-B8DC-05B619B2B1A5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FBCA23F3-6748-49A3-B8DC-05B619B2B1A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FBCA23F3-6748-49A3-B8DC-05B619B2B1A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FBCA23F3-6748-49A3-B8DC-05B619B2B1A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FBCA23F3-6748-49A3-B8DC-05B619B2B1A5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal From 1373c7f60a6aeaa224964b00e21e4e0643769f58 Mon Sep 17 00:00:00 2001 From: panayot-cankov Date: Sat, 2 Nov 2024 22:31:20 +0200 Subject: [PATCH 02/10] chore: VirtualizingRecyclingScrollView net8, may break net9 --- .../MainPage.xaml | 45 ++++++++++++++++--- .../TheScrollView.cs | 33 +++++++++++--- .../TrackingModel.cs | 25 +++++++++-- .../VirtualizingRecyclingScrollView.csproj | 20 +++++++-- 4 files changed, 104 insertions(+), 19 deletions(-) diff --git a/Maui/VirtualizingRecyclingScrollView/MainPage.xaml b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml index b644003..f35f2a7 100644 --- a/Maui/VirtualizingRecyclingScrollView/MainPage.xaml +++ b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml @@ -19,13 +19,46 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -34,12 +67,12 @@ - + - + diff --git a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs index 5ce1049..36e0469 100644 --- a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs +++ b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs @@ -7,8 +7,13 @@ public class TheScrollView : ScrollView { public DataTemplate Template { get; set; } +#if NET8_0 + const double RowHeight = 100; + const double ColumnWidth = 200; +#elif NET9_0 const double RowHeight = 50; const double ColumnWidth = 140; +#endif private Point scroll; private Size size; @@ -61,7 +66,6 @@ protected override Size MeasureOverride(double widthConstraint, double heightCon { Console.WriteLine(" - ScrollView Measure"); DateTime start = DateTime.Now; - TrackingModel.Instance.LayoutNodes++; this.size = base.MeasureOverride(widthConstraint, heightConstraint); this.rect = new Rect(this.scroll.X, this.scroll.Y, this.size.Width, this.size.Height); Console.WriteLine($" ScrollView Measured {DateTime.Now - start}"); @@ -111,11 +115,31 @@ public LayoutManager(Container container) public Size ArrangeChildren(Rect bounds) { +#if NET8_0 + // net8 8.0.82 and 8.0.92 doesn't seem to work without arranging all children... + // in net9, we Arrange once during Recycling + foreach(var content in this.container.Children) + { + var cellmodel = (content as View).BindingContext as CellModel; + content.Arrange(new Rect(cellmodel.key.x * ColumnWidth, cellmodel.key.y * RowHeight, ColumnWidth, RowHeight)); + } +#endif + return new Size(10000, 10000); } public Size Measure(double widthConstraint, double heightConstraint) { + +#if NET8_0 + // net8 8.0.82 and 8.0.92 doesn't seem to work without measuring all children... + // in net9, we dont measure + foreach(var content in this.container.Children) + { + content.Measure(double.PositiveInfinity, double.PositiveInfinity); + } +#endif + return new Size(10000, 10000); } @@ -180,10 +204,9 @@ public int RealizeViewport() cellmodel.Text = $"Cell {x} x {y}"; elements[key] = content; - // We measure and arrange ad-hoc -#if IOS - content.Arrange(new Rect(cellmodel.key.x * ColumnWidth, cellmodel.key.y * RowHeight, ColumnWidth, RowHeight)); -#else + +#if NET9 + // Measure Ad-Hoc... seems to only work with 9, in net8 seems the children are layed out by native and this is overridden. content.Measure(double.PositiveInfinity, double.PositiveInfinity); content.Arrange(new Rect(cellmodel.key.x * ColumnWidth, cellmodel.key.y * RowHeight, ColumnWidth, RowHeight)); #endif diff --git a/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs b/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs index c5b486d..183543c 100644 --- a/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs +++ b/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs @@ -6,14 +6,31 @@ public sealed class TrackingModel : INotifyPropertyChanged { public static TrackingModel Instance = new TrackingModel(); - private TrackingModel() - { - } - private uint layoutNodes = 0; private uint layoutVirtualNodes = 0; + private uint printedLayoutNodes = 0; + private uint printedLayoutVirtualNodes = 0; + + private IDispatcherTimer timer; + + public TrackingModel() + { + var timer = Application.Current.Dispatcher.CreateTimer(); + timer.Interval = TimeSpan.FromMicroseconds(100); + timer.Tick += (s,e) => + { + if (layoutNodes != printedLayoutNodes || layoutVirtualNodes != printedLayoutVirtualNodes) + { + printedLayoutNodes = layoutNodes; + printedLayoutVirtualNodes = layoutVirtualNodes; + Console.WriteLine($" Shell: {layoutNodes}, ScrollView: {layoutVirtualNodes}"); + } + }; + timer.Start(); + } + public event PropertyChangedEventHandler? PropertyChanged; public uint LayoutNodes diff --git a/Maui/VirtualizingRecyclingScrollView/VirtualizingRecyclingScrollView.csproj b/Maui/VirtualizingRecyclingScrollView/VirtualizingRecyclingScrollView.csproj index b50d36a..05c9b65 100644 --- a/Maui/VirtualizingRecyclingScrollView/VirtualizingRecyclingScrollView.csproj +++ b/Maui/VirtualizingRecyclingScrollView/VirtualizingRecyclingScrollView.csproj @@ -1,8 +1,14 @@  - net9.0-android;net9.0-ios;net9.0-maccatalyst - $(TargetFrameworks);net9.0-windows10.0.19041.0 + + net8.0-android;net8.0-ios;net8.0-maccatalyst + $(TargetFrameworks);net8.0-windows10.0.19041.0 + + + + @@ -61,8 +67,14 @@ - - + + + + + + + + From 4eca377d16e987cdad94c098235e1010a71df9c5 Mon Sep 17 00:00:00 2001 From: panayot-cankov Date: Sun, 3 Nov 2024 20:45:14 +0200 Subject: [PATCH 03/10] feat: Add poor man's frame drop detection --- .../MainPage.xaml | 104 +++++++++++------- .../MauiProgram.cs | 9 +- .../TheScrollView.cs | 15 +++ .../TrackingModel.cs | 48 +++++++- 4 files changed, 133 insertions(+), 43 deletions(-) diff --git a/Maui/VirtualizingRecyclingScrollView/MainPage.xaml b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml index f35f2a7..34989d2 100644 --- a/Maui/VirtualizingRecyclingScrollView/MainPage.xaml +++ b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml @@ -17,49 +17,73 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/Maui/VirtualizingRecyclingScrollView/MauiProgram.cs b/Maui/VirtualizingRecyclingScrollView/MauiProgram.cs index 794f49d..7188252 100644 --- a/Maui/VirtualizingRecyclingScrollView/MauiProgram.cs +++ b/Maui/VirtualizingRecyclingScrollView/MauiProgram.cs @@ -5,6 +5,8 @@ namespace VirtualizingRecyclingScrollView; public static class MauiProgram { + public static int IsInVirtualizationScope = 0; + public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); @@ -14,8 +16,11 @@ public static MauiApp CreateMauiApp() { ViewHandler.ViewCommandMapper.ModifyMapping(nameof(IView.InvalidateMeasure), (layout, handler, args, current) => { - // Comment this out to stop layout invalidation... - current?.Invoke(layout, handler, args); + if (MauiProgram.IsInVirtualizationScope == 0) + { + // Comment this out to stop layout invalidation... + current?.Invoke(layout, handler, args); + } }); }) .ConfigureFonts(fonts => diff --git a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs index 36e0469..b3594c3 100644 --- a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs +++ b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs @@ -155,6 +155,14 @@ public int RealizeViewport() return 0; } +#if NET9_0_OR_GREATER + MauiProgram.IsInVirtualizationScope++; +#endif +#if IOS + bool animations = UIKit.UIView.AnimationsEnabled; + UIKit.UIView.AnimationsEnabled = false; +#endif + this.currentLeft = left; this.currentRight = right; this.currentTop = top; @@ -228,6 +236,13 @@ public int RealizeViewport() Console.WriteLine($" +{added}/-{removed}"); } +#if NET9_0_OR_GREATER + MauiProgram.IsInVirtualizationScope--; +#endif +#if IOS + UIKit.UIView.AnimationsEnabled = animations; +#endif + return added + removed; } } diff --git a/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs b/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs index 183543c..37c1472 100644 --- a/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs +++ b/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs @@ -13,7 +13,11 @@ public sealed class TrackingModel : INotifyPropertyChanged private uint printedLayoutNodes = 0; private uint printedLayoutVirtualNodes = 0; - private IDispatcherTimer timer; + private uint droppedFrames = 0; + +#if IOS + private CoreAnimation.CADisplayLink displayLink; +#endif public TrackingModel() { @@ -29,10 +33,52 @@ public TrackingModel() } }; timer.Start(); + +#if IOS + this.displayLink = CoreAnimation.CADisplayLink.Create(Frame); + this.displayLink.AddToRunLoop(Foundation.NSRunLoop.Main, Foundation.NSRunLoopMode.Common); +#endif + } + + double last = 0; + + // On real device that may be 120. We assume 60-ish on sim. + double estimatedFrameLength = 1.05 / 60; + + private void Frame() + { +#if IOS + var elapsed = CoreAnimation.CAAnimation.CurrentMediaTime(); + if (last == 0) + { + last = elapsed; + return; + } + var duration = elapsed - last; + + // For macOS the simulator runs in 60 fps + if (duration > estimatedFrameLength) + { + var droppedFrames = (uint)Math.Floor(duration / estimatedFrameLength); + this.DroppedFrames += droppedFrames; + Console.WriteLine($"Dropped {this.DroppedFrames} frames! Next frame duration: {duration}"); + } + this.last = elapsed; +#endif } public event PropertyChangedEventHandler? PropertyChanged; + public uint DroppedFrames + { + get => this.droppedFrames; + set + { + this.droppedFrames = value; + this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(DroppedFrames))); + } + } + public uint LayoutNodes { get => this.layoutNodes; From abf7b74b7c350603859a00a05dc20b53264ad4ce Mon Sep 17 00:00:00 2001 From: panayot-cankov Date: Sun, 3 Nov 2024 22:45:56 +0200 Subject: [PATCH 04/10] chore: Make it work polished for net9 --- Maui/VirtualizingRecyclingScrollView/TheScrollView.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs index b3594c3..86ce12f 100644 --- a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs +++ b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs @@ -213,9 +213,9 @@ public int RealizeViewport() elements[key] = content; -#if NET9 +#if NET9_0_OR_GREATER // Measure Ad-Hoc... seems to only work with 9, in net8 seems the children are layed out by native and this is overridden. - content.Measure(double.PositiveInfinity, double.PositiveInfinity); + // content.Measure(double.PositiveInfinity, double.PositiveInfinity); content.Arrange(new Rect(cellmodel.key.x * ColumnWidth, cellmodel.key.y * RowHeight, ColumnWidth, RowHeight)); #endif From 4466ad4dd8161c6dd503f655a7ff0fae6474ec9c Mon Sep 17 00:00:00 2001 From: panayot-cankov Date: Mon, 4 Nov 2024 07:31:47 +0200 Subject: [PATCH 05/10] fix: Recycle the view model update arg in VirtualizingRecyclcingScrollview example --- Maui/VirtualizingRecyclingScrollView/CellModel.cs | 9 +++++++++ Maui/VirtualizingRecyclingScrollView/TheScrollView.cs | 8 ++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Maui/VirtualizingRecyclingScrollView/CellModel.cs b/Maui/VirtualizingRecyclingScrollView/CellModel.cs index 97d64fb..84ec97c 100644 --- a/Maui/VirtualizingRecyclingScrollView/CellModel.cs +++ b/Maui/VirtualizingRecyclingScrollView/CellModel.cs @@ -5,6 +5,8 @@ namespace VirtualizingRecyclingScrollView; public class CellModel : INotifyPropertyChanged { + private static PropertyChangedEventArgs changedAll = new PropertyChangedEventArgs(null); + public Key key; private string text; @@ -32,4 +34,11 @@ public Color Color this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Color))); } } + + internal void Update(string text, Color color) + { + this.text = text; + this.color = color; + this.PropertyChanged?.Invoke(this, changedAll); + } } \ No newline at end of file diff --git a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs index 86ce12f..1848322 100644 --- a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs +++ b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using Microsoft.Maui.Layouts; +using Microsoft.Maui.Platform; namespace VirtualizingRecyclingScrollView; @@ -208,8 +209,11 @@ public int RealizeViewport() var cellmodel = (CellModel)content.BindingContext; cellmodel.key = key; var code = this.container.layoutManager.GetHashCode(key); - cellmodel.Color = new Color(200 + code % 56, 200 + (code >> 4) % 56, 200 + (byte)(code >> 8) % 56); - cellmodel.Text = $"Cell {x} x {y}"; + cellmodel.Update( + text: $"Cell {x} x {y}", + color: new Color(200 + code % 56, 200 + (code >> 4) % 56, 200 + (byte)(code >> 8) % 56) + ); + elements[key] = content; From a40d33e56179e08db68eedcab76bc8f077e3ed5c Mon Sep 17 00:00:00 2001 From: panayot-cankov Date: Mon, 4 Nov 2024 10:58:08 +0200 Subject: [PATCH 06/10] feat: Add SelectionDrawable overlay --- .../MainPage.xaml | 4 +- .../TheScrollView.cs | 118 ++++++++++++++---- 2 files changed, 98 insertions(+), 24 deletions(-) diff --git a/Maui/VirtualizingRecyclingScrollView/MainPage.xaml b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml index 34989d2..e0a2534 100644 --- a/Maui/VirtualizingRecyclingScrollView/MainPage.xaml +++ b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml @@ -15,7 +15,7 @@ - + @@ -85,7 +85,7 @@ - + diff --git a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs index 1848322..12b06c4 100644 --- a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs +++ b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs @@ -1,6 +1,7 @@ using System.Diagnostics.CodeAnalysis; +using System.Security.AccessControl; +using AuthenticationServices; using Microsoft.Maui.Layouts; -using Microsoft.Maui.Platform; namespace VirtualizingRecyclingScrollView; @@ -20,12 +21,23 @@ public class TheScrollView : ScrollView private Size size; private Rect rect; - private Container container; + private GraphicsView selectionOutline; + private SelectionDrawable selectionDrawable; + + private VirtualizingLayout virtualizingLayout; public TheScrollView() { - this.container = new Container(this); - this.Content = container; + this.virtualizingLayout = new VirtualizingLayout(this); + + this.selectionDrawable = new SelectionDrawable(this); + this.selectionOutline = new GraphicsView(); + this.selectionOutline.Drawable = this.selectionDrawable; + this.selectionOutline.ZIndex = 1; + this.virtualizingLayout.Add(this.selectionOutline); + + this.Content = virtualizingLayout; + this.Scrolled += OnScrolled; this.Orientation = ScrollOrientation.Both; } @@ -35,7 +47,7 @@ private void OnScrolled(object? sender, ScrolledEventArgs args) DateTime start = DateTime.Now; this.scroll = new Point(this.ScrollX, this.ScrollY); this.rect = new Rect(this.scroll.X, this.scroll.Y, this.size.Width, this.size.Height); - var change = this.container.layoutManager.RealizeViewport(); + var change = this.virtualizingLayout.layoutManager.RealizeViewport(); if (change != 0) { Console.WriteLine($" = OnScrolled {DateTime.Now - start}"); @@ -73,15 +85,15 @@ protected override Size MeasureOverride(double widthConstraint, double heightCon return size; } - private class Container : Layout + private class VirtualizingLayout : Layout { public TheScrollView scrollview; - public LayoutManager layoutManager; + public VirtualizingLayoutManager layoutManager; - public Container(TheScrollView scrollview) + public VirtualizingLayout(TheScrollView scrollview) { this.scrollview = scrollview; - this.layoutManager = new LayoutManager(this); + this.layoutManager = new VirtualizingLayoutManager(this); } protected override ILayoutManager CreateLayoutManager() @@ -90,9 +102,9 @@ protected override ILayoutManager CreateLayoutManager() } } - private class LayoutManager : ILayoutManager, IEqualityComparer + private class VirtualizingLayoutManager : ILayoutManager, IEqualityComparer { - private Container container; + private VirtualizingLayout container; private Dictionary elements = new Dictionary(); @@ -105,7 +117,7 @@ private class LayoutManager : ILayoutManager, IEqualityComparer private int currentTop = -1; private int currentBottom = -1; - public LayoutManager(Container container) + public VirtualizingLayoutManager(VirtualizingLayout container) { this.container = container; } @@ -147,22 +159,21 @@ public Size Measure(double widthConstraint, double heightConstraint) public int RealizeViewport() { int left = Math.Max(0, (int)Math.Floor(this.container.scrollview.rect.X / ColumnWidth)); - int right = (int)Math.Ceiling((this.container.scrollview.rect.X + this.container.scrollview.rect.Width) / ColumnWidth); + int right = (int)Math.Ceiling((this.container.scrollview.rect.X + this.container.scrollview.rect.Width) / ColumnWidth) - 1; int top = Math.Max(0, (int)Math.Floor(this.container.scrollview.rect.Y / RowHeight)); - int bottom = (int)Math.Ceiling((this.container.scrollview.rect.Y + this.container.scrollview.Height) / RowHeight); + int bottom = (int)Math.Ceiling((this.container.scrollview.rect.Y + this.container.scrollview.Height) / RowHeight) - 1; if (left == currentLeft && top != currentTop && right != currentRight && bottom != currentBottom) { return 0; } + var outline = this.container.scrollview.selectionOutline; + + // We need proper API to prevent propagation UP #if NET9_0_OR_GREATER MauiProgram.IsInVirtualizationScope++; #endif -#if IOS - bool animations = UIKit.UIView.AnimationsEnabled; - UIKit.UIView.AnimationsEnabled = false; -#endif this.currentLeft = left; this.currentRight = right; @@ -209,9 +220,14 @@ public int RealizeViewport() var cellmodel = (CellModel)content.BindingContext; cellmodel.key = key; var code = this.container.layoutManager.GetHashCode(key); + + var color = this.container.scrollview.IsSelected(x, y) ? + new Color(150 + code % 56, 150 + (code >> 4) % 56, 150 + (byte)(code >> 8) % 56) : + new Color(200 + code % 56, 200 + (code >> 4) % 56, 200 + (byte)(code >> 8) % 56); + cellmodel.Update( text: $"Cell {x} x {y}", - color: new Color(200 + code % 56, 200 + (code >> 4) % 56, 200 + (byte)(code >> 8) % 56) + color: color ); elements[key] = content; @@ -235,6 +251,16 @@ public int RealizeViewport() this.trashbin.Push(popped); } + // Range for selection is expanded a little, so edge decorations would work well by the screen edge + + // Don't shrink the selection view. Sometimes there will be a frame where a line disappears on top and shortly after another appears at bottom... this avoids resizing. + var selectionRight = Math.Max(right + 1, left + this.container.scrollview.selectionDrawable.Width - 2); + var selectionBottom = Math.Max(bottom + 1, top + this.container.scrollview.selectionDrawable.Height - 2); + + this.container.scrollview.selectionDrawable.SetVisibleRange(left - 1, top - 1, selectionRight, selectionBottom); + this.container.scrollview.selectionOutline.Arrange(new Rect((left - 1) * ColumnWidth, (top - 1) * RowHeight, (selectionRight - left + 2) * ColumnWidth, (selectionBottom - top + 2) * RowHeight)); + this.container.scrollview.selectionOutline.Invalidate(); + if (removed != 0 || added != 0) { Console.WriteLine($" +{added}/-{removed}"); @@ -243,11 +269,59 @@ public int RealizeViewport() #if NET9_0_OR_GREATER MauiProgram.IsInVirtualizationScope--; #endif -#if IOS - UIKit.UIView.AnimationsEnabled = animations; -#endif return added + removed; } } + + private class SelectionDrawable : IDrawable + { + private TheScrollView scrollview; + + private int left = -1000; + private int top = -1000; + private int right = -1000; + private int bottom = -1000; + + public SelectionDrawable(TheScrollView scrollview) + { + this.scrollview = scrollview; + } + + public void Draw(ICanvas canvas, RectF dirtyRect) + { + canvas.StrokeColor = new Color(0x00, 0x22, 0x99, 0xFF); + canvas.StrokeSize = 3; + + for (var x = left; x <= right; x++) + { + for (var y = top; y <= bottom; y++) + { + if (this.scrollview.IsSelected(x, y)) + { + Rect rect = new Rect( + x: (float)((x - left) * ColumnWidth) -1, + y: (float)((y - top) * RowHeight) - 1, + width: (float)ColumnWidth + 1, + height: (float)RowHeight + 1 + ); + canvas.DrawRectangle(rect); + } + } + } + } + + public int Width => this.right - this.left + 1; + public int Height => this.bottom - this.top + 1; + + public void SetVisibleRange(int left, int top, int right, int bottom) + { + this.left = left; + this.top = top; + this.right = right; + this.bottom = bottom; + } + } + + public bool IsSelected(int x, int y) => (x * 7883 + y * 7901) % 21 <= 3; } \ No newline at end of file From 5c6eb3c501a3d5c98b0724cc52bba6323c632937 Mon Sep 17 00:00:00 2001 From: panayot-cankov Date: Mon, 4 Nov 2024 11:43:00 +0200 Subject: [PATCH 07/10] feat: Set background and colors for the Virtualized scrollview so it looks OKish on dark mode, add recycled items count --- .../MainPage.xaml | 37 +++++++++++-------- .../TheScrollView.cs | 10 +++-- .../TrackingModel.cs | 24 +++++++++++- 3 files changed, 49 insertions(+), 22 deletions(-) diff --git a/Maui/VirtualizingRecyclingScrollView/MainPage.xaml b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml index e0a2534..c0e7435 100644 --- a/Maui/VirtualizingRecyclingScrollView/MainPage.xaml +++ b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml @@ -5,7 +5,8 @@ xmlns:local="clr-namespace:VirtualizingRecyclingScrollView" xmlns:ios="clr-namespace:Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;assembly=Microsoft.Maui.Controls" ios:Page.UseSafeArea="False" - Shell.NavBarIsVisible="False"> + Shell.NavBarIsVisible="False" + Background="White"> @@ -15,10 +16,10 @@ - + - + @@ -64,38 +65,42 @@ - - - + + - + + + - - + - + diff --git a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs index 12b06c4..936cbe9 100644 --- a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs +++ b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs @@ -270,6 +270,8 @@ public int RealizeViewport() MauiProgram.IsInVirtualizationScope--; #endif + TrackingModel.Instance.RecycledItems += (uint)removed; + return added + removed; } } @@ -300,10 +302,10 @@ public void Draw(ICanvas canvas, RectF dirtyRect) if (this.scrollview.IsSelected(x, y)) { Rect rect = new Rect( - x: (float)((x - left) * ColumnWidth) -1, - y: (float)((y - top) * RowHeight) - 1, - width: (float)ColumnWidth + 1, - height: (float)RowHeight + 1 + x: (float)((x - left) * ColumnWidth), + y: (float)((y - top) * RowHeight), + width: (float)ColumnWidth, + height: (float)RowHeight ); canvas.DrawRectangle(rect); } diff --git a/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs b/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs index 37c1472..e7686bc 100644 --- a/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs +++ b/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs @@ -11,10 +11,15 @@ public sealed class TrackingModel : INotifyPropertyChanged private uint layoutVirtualNodes = 0; private uint printedLayoutNodes = 0; + private uint printedLayoutVirtualNodes = 0; + private uint recycledItems = 0; + private uint droppedFrames = 0; + private const float MeasurementFPS = 60; + #if IOS private CoreAnimation.CADisplayLink displayLink; #endif @@ -36,14 +41,19 @@ public TrackingModel() #if IOS this.displayLink = CoreAnimation.CADisplayLink.Create(Frame); + this.displayLink.PreferredFrameRateRange = new CoreAnimation.CAFrameRateRange() + { + Minimum = MeasurementFPS, + Maximum = MeasurementFPS, + Preferred = MeasurementFPS + }; this.displayLink.AddToRunLoop(Foundation.NSRunLoop.Main, Foundation.NSRunLoopMode.Common); #endif } double last = 0; - // On real device that may be 120. We assume 60-ish on sim. - double estimatedFrameLength = 1.05 / 60; + double estimatedFrameLength = 1.05 / MeasurementFPS; private void Frame() { @@ -98,4 +108,14 @@ public uint LayoutVirtualNodes this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(LayoutVirtualNodes))); } } + + public uint RecycledItems + { + get => this.recycledItems; + set + { + this.recycledItems = value; + this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(RecycledItems))); + } + } } From 05aef6f6e50a8a56fbf291f9488d520a4b134dfb Mon Sep 17 00:00:00 2001 From: panayot-cankov Date: Mon, 4 Nov 2024 13:39:47 +0200 Subject: [PATCH 08/10] fix: Make the Virtualizing scrollview work back with iOS8 --- .../TheScrollView.cs | 45 ++++++++++++++++--- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs index 936cbe9..3057180 100644 --- a/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs +++ b/Maui/VirtualizingRecyclingScrollView/TheScrollView.cs @@ -133,8 +133,23 @@ public Size ArrangeChildren(Rect bounds) // in net9, we Arrange once during Recycling foreach(var content in this.container.Children) { - var cellmodel = (content as View).BindingContext as CellModel; - content.Arrange(new Rect(cellmodel.key.x * ColumnWidth, cellmodel.key.y * RowHeight, ColumnWidth, RowHeight)); + if (content == this.container.scrollview.selectionOutline) + { + // BUG: The selectionOutline won't show up + this.container.scrollview.selectionOutline.Arrange( + new Rect( + this.container.scrollview.selectionDrawable.Left * ColumnWidth, + this.container.scrollview.selectionDrawable.Top * RowHeight, + this.container.scrollview.selectionDrawable.Width * ColumnWidth, + this.container.scrollview.selectionDrawable.Height * RowHeight + ) + ); + } + else + { + var cellmodel = (content as View).BindingContext as CellModel; + content.Arrange(new Rect(cellmodel.key.x * ColumnWidth, cellmodel.key.y * RowHeight, ColumnWidth, RowHeight)); + } } #endif @@ -146,10 +161,19 @@ public Size Measure(double widthConstraint, double heightConstraint) #if NET8_0 // net8 8.0.82 and 8.0.92 doesn't seem to work without measuring all children... - // in net9, we dont measure + // in net9, we don't measure foreach(var content in this.container.Children) { - content.Measure(double.PositiveInfinity, double.PositiveInfinity); + if (content == this.container.scrollview.selectionOutline) + { + this.container.scrollview.selectionOutline.Measure( + this.container.scrollview.selectionDrawable.Width * ColumnWidth, + this.container.scrollview.selectionDrawable.Height * RowHeight); + } + else + { + content.Measure(double.PositiveInfinity, double.PositiveInfinity); + } } #endif @@ -258,7 +282,13 @@ public int RealizeViewport() var selectionBottom = Math.Max(bottom + 1, top + this.container.scrollview.selectionDrawable.Height - 2); this.container.scrollview.selectionDrawable.SetVisibleRange(left - 1, top - 1, selectionRight, selectionBottom); - this.container.scrollview.selectionOutline.Arrange(new Rect((left - 1) * ColumnWidth, (top - 1) * RowHeight, (selectionRight - left + 2) * ColumnWidth, (selectionBottom - top + 2) * RowHeight)); + + var outlineRect = new Rect((left - 1) * ColumnWidth, (top - 1) * RowHeight, (selectionRight - left + 2) * ColumnWidth, (selectionBottom - top + 2) * RowHeight); +#if IOS && NET8_0 + //BUG: Arrange in net8 doesn't work here, but also the arrange in the layout manager won't show up the selection outline. +#else + this.container.scrollview.selectionOutline.Arrange(outlineRect); +#endif this.container.scrollview.selectionOutline.Invalidate(); if (removed != 0 || added != 0) @@ -314,6 +344,11 @@ public void Draw(ICanvas canvas, RectF dirtyRect) } public int Width => this.right - this.left + 1; + + public int Left => this.left; + + public int Top => this.top; + public int Height => this.bottom - this.top + 1; public void SetVisibleRange(int left, int top, int right, int bottom) From 01d35f4a00b40772241ba6bde623783a4302c138 Mon Sep 17 00:00:00 2001 From: panayot-cankov Date: Mon, 4 Nov 2024 15:57:37 +0200 Subject: [PATCH 09/10] chore: Include catalyst --- .../MainPage.xaml | 1 - .../TheScrollView.cs | 5 +- .../TrackingModel.cs | 47 +++++++++++++++---- 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/Maui/VirtualizingRecyclingScrollView/MainPage.xaml b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml index c0e7435..48fa5c8 100644 --- a/Maui/VirtualizingRecyclingScrollView/MainPage.xaml +++ b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml @@ -74,7 +74,6 @@ - - + diff --git a/Maui/VirtualizingRecyclingScrollView/MainPage.xaml.cs b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml.cs index 47fc9b2..b720c8b 100644 --- a/Maui/VirtualizingRecyclingScrollView/MainPage.xaml.cs +++ b/Maui/VirtualizingRecyclingScrollView/MainPage.xaml.cs @@ -6,5 +6,17 @@ public MainPage() { this.BindingContext = TrackingModel.Instance; InitializeComponent(); + + this.Dispatcher.DispatchDelayed(TimeSpan.FromSeconds(1), () => { + this.SV.ScrollToAsync(40, 0, false); + this.Dispatcher.DispatchDelayed(TimeSpan.FromSeconds(1), () => { + TrackingModel.Instance.Clear(); + this.Dispatcher.DispatchDelayed(TimeSpan.FromSeconds(3), async () => { + MauiProgram.SuppressWorkarounds = true; + await this.SV.ScrollToAsync(40, 800, true); + MauiProgram.SuppressWorkarounds = false; + }); + }); + }); } } diff --git a/Maui/VirtualizingRecyclingScrollView/MauiProgram.cs b/Maui/VirtualizingRecyclingScrollView/MauiProgram.cs index 7188252..f4712ea 100644 --- a/Maui/VirtualizingRecyclingScrollView/MauiProgram.cs +++ b/Maui/VirtualizingRecyclingScrollView/MauiProgram.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.Logging; +using System.Runtime.CompilerServices; +using Microsoft.Extensions.Logging; using Microsoft.Maui.Handlers; namespace VirtualizingRecyclingScrollView; @@ -6,6 +7,7 @@ namespace VirtualizingRecyclingScrollView; public static class MauiProgram { public static int IsInVirtualizationScope = 0; + public static bool SuppressWorkarounds = false; public static MauiApp CreateMauiApp() { @@ -16,7 +18,7 @@ public static MauiApp CreateMauiApp() { ViewHandler.ViewCommandMapper.ModifyMapping(nameof(IView.InvalidateMeasure), (layout, handler, args, current) => { - if (MauiProgram.IsInVirtualizationScope == 0) + if (MauiProgram.SuppressWorkarounds || MauiProgram.IsInVirtualizationScope == 0) { // Comment this out to stop layout invalidation... current?.Invoke(layout, handler, args); diff --git a/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs b/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs index 38e5a47..5711a3b 100644 --- a/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs +++ b/Maui/VirtualizingRecyclingScrollView/TrackingModel.cs @@ -41,12 +41,6 @@ public TrackingModel() #if IOS || MACCATALYST this.displayLink = CoreAnimation.CADisplayLink.Create(OnIosFrame); - this.displayLink.PreferredFrameRateRange = new CoreAnimation.CAFrameRateRange() - { - Minimum = MeasurementFPS, - Maximum = MeasurementFPS, - Preferred = MeasurementFPS - }; this.displayLink.AddToRunLoop(Foundation.NSRunLoop.Main, Foundation.NSRunLoopMode.Common); #elif ANDROID this.androidFrameCallback = new FrameCallback(this); @@ -106,6 +100,15 @@ private void Frame(double elapsedSeconds) this.last = elapsedSeconds; } + internal void Clear() + { + this.droppedFrames = 0; + this.layoutNodes = 0; + this.layoutVirtualNodes = 0; + this.recycledItems = 0; + this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(null)); + } + public event PropertyChangedEventHandler? PropertyChanged; public uint DroppedFrames