maui-linux/docs/RC1-ROADMAP.md

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