7.4 KiB
7.4 KiB
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