Update package references from RC/preview versions to stable 1.0.* across all templates and project files. Mark RC1 roadmap as completed and update documentation to reflect v1.0.0 release. Add GestureManager cleanup in SkiaView.Dispose() to prevent memory leaks. Update copyright years to 2025-2026 and add development artifacts to .gitignore.
238 lines
7.5 KiB
Markdown
238 lines
7.5 KiB
Markdown
# OpenMaui Linux - RC1 Roadmap (Completed)
|
|
|
|
## Goal
|
|
Achieve Release Candidate 1 with full XAML support, data binding, and stable controls.
|
|
|
|
> **Status: All phases completed. Released as v1.0.0.**
|
|
|
|
---
|
|
|
|
## 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~~
|
|
- **Released: v1.0.0**
|