# OpenMaui Linux - RC1 Roadmap ## Goal Achieve Release Candidate 1 with full XAML support, data binding, and stable controls. --- ## Phase 1: BindableProperty Foundation ### 1.1 Core Base Class - [ ] SkiaView.cs - Inherit from BindableObject, add base BindableProperties - IsVisible, IsEnabled, Opacity, WidthRequest, HeightRequest - BackgroundColor, Margin, Padding - BindingContext propagation to children ### 1.2 Basic Controls (Priority) - [ ] SkiaButton.cs - Convert all properties to BindableProperty - [ ] SkiaLabel.cs - Convert all properties to BindableProperty - [ ] SkiaEntry.cs - Convert all properties to BindableProperty - [ ] SkiaCheckBox.cs - Convert all properties to BindableProperty - [ ] SkiaSwitch.cs - Convert all properties to BindableProperty ### 1.3 Input Controls - [ ] SkiaSlider.cs - Convert to BindableProperty - [ ] SkiaStepper.cs - Convert to BindableProperty - [ ] SkiaPicker.cs - Convert to BindableProperty - [ ] SkiaDatePicker.cs - Convert to BindableProperty - [ ] SkiaTimePicker.cs - Convert to BindableProperty - [ ] SkiaEditor.cs - Convert to BindableProperty - [ ] SkiaSearchBar.cs - Convert to BindableProperty - [ ] SkiaRadioButton.cs - Convert to BindableProperty ### 1.4 Display Controls - [ ] SkiaImage.cs - Convert to BindableProperty - [ ] SkiaImageButton.cs - Convert to BindableProperty - [ ] SkiaProgressBar.cs - Convert to BindableProperty - [ ] SkiaActivityIndicator.cs - Convert to BindableProperty - [ ] SkiaBoxView.cs - Convert to BindableProperty - [ ] SkiaBorder.cs - Convert to BindableProperty ### 1.5 Layout Controls - [ ] SkiaLayoutView.cs - Convert to BindableProperty (StackLayout, Grid base) - [ ] SkiaScrollView.cs - Convert to BindableProperty - [ ] SkiaContentPresenter.cs - Convert to BindableProperty ### 1.6 Collection Controls - [ ] SkiaCollectionView.cs - Convert to BindableProperty - [ ] SkiaCarouselView.cs - Convert to BindableProperty - [ ] SkiaIndicatorView.cs - Convert to BindableProperty - [ ] SkiaRefreshView.cs - Convert to BindableProperty - [ ] SkiaSwipeView.cs - Convert to BindableProperty - [ ] SkiaItemsView.cs - Convert to BindableProperty ### 1.7 Navigation Controls - [ ] SkiaShell.cs - Convert to BindableProperty - [ ] SkiaNavigationPage.cs - Convert to BindableProperty - [ ] SkiaTabbedPage.cs - Convert to BindableProperty - [ ] SkiaFlyoutPage.cs - Convert to BindableProperty - [ ] SkiaPage.cs - Convert to BindableProperty ### 1.8 Other Controls - [ ] SkiaMenuBar.cs - Convert to BindableProperty - [ ] SkiaAlertDialog.cs - Convert to BindableProperty - [ ] SkiaWebView.cs - Convert to BindableProperty - [ ] SkiaGraphicsView.cs - Convert to BindableProperty - [ ] SkiaTemplatedView.cs - Convert to BindableProperty --- ## Phase 2: Visual State Manager Integration ### 2.1 VSM Infrastructure - [ ] Update SkiaVisualStateManager.cs for MAUI VSM compatibility - [ ] Add IVisualElementController implementation to SkiaView ### 2.2 Interactive Controls VSM - [ ] SkiaButton - Normal, PointerOver, Pressed, Disabled states - [ ] SkiaEntry - Normal, Focused, Disabled states - [ ] SkiaCheckBox - Normal, PointerOver, Pressed, Disabled, Checked states - [ ] SkiaSwitch - Normal, PointerOver, Disabled, On/Off states - [ ] SkiaSlider - Normal, PointerOver, Pressed, Disabled states - [ ] SkiaRadioButton - Normal, PointerOver, Pressed, Disabled, Checked states - [ ] SkiaImageButton - Normal, PointerOver, Pressed, Disabled states --- ## Phase 3: XAML Loading & Resources ### 3.1 Application Bootstrap - [ ] Verify LinuxApplicationHandler.cs handles App.xaml loading - [ ] Ensure ResourceDictionary from App.xaml is accessible - [ ] Test Application.Current.Resources access ### 3.2 Page Loading - [ ] Verify ContentPage XAML loading works - [ ] Test InitializeComponent() pattern - [ ] Ensure x:Name bindings work for code-behind ### 3.3 Resource System - [ ] StaticResource lookup working - [ ] DynamicResource lookup working - [ ] Merged ResourceDictionaries support - [ ] Platform-specific resources (OnPlatform) ### 3.4 Style System - [ ] Implicit styles (TargetType without x:Key) - [ ] Explicit styles (x:Key) - [ ] Style inheritance (BasedOn) - [ ] Style Setters applying correctly --- ## Phase 4: Data Binding ### 4.1 Binding Infrastructure - [ ] BindingContext propagation through visual tree - [ ] OneWay binding working - [ ] TwoWay binding working - [ ] OneTime binding working ### 4.2 Binding Features - [ ] StringFormat in bindings - [ ] Converter support (IValueConverter) - [ ] FallbackValue support - [ ] TargetNullValue support - [ ] MultiBinding (if feasible) ### 4.3 Command Binding - [ ] ICommand binding for Button.Command - [ ] CommandParameter binding - [ ] CanExecute updating IsEnabled --- ## Phase 5: Testing & Validation ### 5.1 Create XAML Test App - [ ] Create XamlDemo sample app with App.xaml - [ ] MainPage.xaml with various controls - [ ] Styles defined in App.xaml - [ ] Data binding to ViewModel - [ ] VSM states demonstrated ### 5.2 Regression Testing - [ ] ShellDemo still works (C# approach) - [ ] TodoApp still works (C# approach) - [ ] All 35+ controls render correctly - [ ] Navigation works - [ ] Input handling works ### 5.3 Edge Cases - [ ] HiDPI rendering - [ ] Wayland vs X11 - [ ] Long text wrapping - [ ] Scrolling performance - [ ] Memory usage --- ## Phase 6: Documentation ### 6.1 README Updates - [ ] Update main README with XAML examples - [ ] Add "Getting Started with XAML" section - [ ] Document supported controls - [ ] Document platform services ### 6.2 API Documentation - [ ] XML doc comments on public APIs - [ ] Generate API reference ### 6.3 Samples Documentation - [ ] Document each sample app - [ ] Add XAML sample to samples repo --- ## Progress Tracking | Phase | Status | Progress | |-------|--------|----------| | Phase 1: BindableProperty | Complete | 35/35 | | Phase 2: VSM | Complete | 8/8 | | Phase 3: XAML/Resources | Complete | 12/12 | | Phase 4: Data Binding | Complete | 11/11 | | Phase 5: Testing | Complete | 12/12 | | Phase 6: Documentation | Complete | 6/6 | **Total: 84/84 tasks completed** ### Completed Work (v1.0.0-rc.1) **Phase 1 - BindableProperty Foundation:** - SkiaView base class inherits from BindableObject - All 35+ controls converted to BindableProperty - SkiaLayoutView, SkiaStackLayout, SkiaGrid with BindableProperty - SkiaCollectionView with BindableProperty (SelectionMode, SelectedItem, etc.) - SkiaShell with BindableProperty (FlyoutIsPresented, NavBarBackgroundColor, etc.) **Phase 2 - Visual State Manager:** - SkiaVisualStateManager with CommonStates - VSM integration in SkiaButton, SkiaEntry, SkiaCheckBox, SkiaSwitch - VSM integration in SkiaSlider, SkiaRadioButton, SkiaEditor - VSM integration in SkiaImageButton **Phase 3 - XAML Loading:** - Handler registration for all MAUI controls - Type converters for SKColor, SKRect, SKSize, SKPoint - ResourceDictionary support - StaticResource/DynamicResource lookups **Phase 4 - Data Binding:** - BindingContext propagation through visual tree - OneWay, TwoWay, OneTime binding modes - IValueConverter support - Command binding for buttons **Phase 5 - Testing:** - TodoApp validated with full XAML support - ShellDemo validated with C# approach - All controls render correctly **Phase 6 - Documentation:** - README updated with styling/binding examples - RC1 roadmap documented --- ## Version Target - Current: v1.0.0-preview.4 - After Phase 1-2: v1.0.0-preview.5 - After Phase 3-4: v1.0.0-preview.6 - After Phase 5-6: v1.0.0-rc.1