Merged
Conversation
Delete unused DisplayServerType.cs enum, MERGE_TRACKING.md merge notes from migration work, and out.xml MSBuild diagnostic output. These files were development artifacts not needed in the repository.
… support Create new OpenMaui.Hosting package with UseLinux() extension that works on all platforms via reflection-based activation. On Linux, it resolves OpenMaui.Controls.Linux and calls LinuxPlatformRegistrar.Register(). On other platforms, it's a safe no-op. This eliminates need for conditional compilation (#if LINUX) in cross-platform projects. Refactor LinuxMauiAppBuilderExtensions to expose LinuxPlatformRegistrar as well-known entry point. Update CI/release workflows to pack both packages.
Update OpenMaui.Hosting, OpenMaui.Controls.Linux, and templates to version 10.0.41.3. Refactor templates to use new MauiProgram pattern with UseLinux() extension method. Replace deprecated UseOpenMauiLinux() with UseLinux(). Add MauiProgram.cs to openmaui-linux-app template for consistency with XAML template. Update namespace imports to use Microsoft.Maui.Platform.Linux.Hosting.
Add using Microsoft.Maui.Platform.Linux.Services to resolve namespace for types referenced in LinuxApplicationOptions.
Update OpenMaui.Hosting, OpenMaui.Controls.Linux, and templates to version 10.0.41.4. Move Program.cs to Platforms/Linux folder in both templates for MAUI platform-specific file organization. Add OpenMaui.Hosting package reference to templates. Add compile exclusion for Platforms/Linux folder on non-Linux builds. Use wildcard version ranges (10.0.*) for MAUI package references. Remove duplicate MauiXaml Update entries in XAML template.
Create OpenMaui.Controls.Linux.props to automatically configure consuming projects for Linux builds. Sets SingleProject=false on Linux to prevent MAUI's SingleProject.targets from removing Platforms/Linux folder (MAUI only recognizes android/ios/windows as known platforms). Sets RuntimeIdentifiers to linux-x64;linux-arm64 if not already defined. Add platform folder exclusion logic to .targets to automatically remove non-applicable platform folders (Windows/Android/iOS on Linux builds, Linux on non-Linux builds). This eliminates need for manual Compile Remove boilerplate in consuming projects.
Move SingleProject=false override from .props to .targets to run after MAUI's SingleProject.targets. Add Compile Update to re-include Platforms/Linux/**/*.cs files that were marked ExcludeFromCurrentConfiguration=true by MAUI's SingleProject logic. This fixes the issue where Platforms/Linux/Program.cs was excluded even when the package was referenced. Bump version to 10.0.41.5.
Add ContentViewHandler to support ContentView control with single Content child, background color, and padding properties. Add EssentialsPatches service to register Microsoft.Maui.Essentials.Platform.Init() as no-op on Linux (prevents crashes when Essentials APIs are called). Wrap child view creation in try-catch blocks in LayoutHandler and GridHandler to gracefully skip unsupported third-party controls instead of crashing. Add diagnostic logging for skipped children. Register ContentViewHandler in LinuxMauiAppBuilderExtensions.
Add SkiaContentView class that inherits from SkiaLayoutView to serve as platform view for ContentView controls. Update MauiHandlerExtensions to map ContentView to ContentViewHandler instead of incorrectly using BorderHandler. SkiaContentView reuses all layout, measure, arrange, and draw logic from SkiaLayoutView.
Add ShapePathHandler and SkiaShapePath to support Microsoft.Maui.Controls.Shapes.Path with PathGeometry rendering. Supports LineSegment, BezierSegment, QuadraticBezierSegment, ArcSegment, PolyLineSegment, PolyBezierSegment, and PolyQuadraticBezierSegment. Implements Fill, Stroke, StrokeThickness, StrokeLineCap, StrokeLineJoin, and Aspect properties. Add automatic layout alignment sync in ToViewHandler to ensure all views respect HorizontalLayoutAlignment/VerticalLayoutAlignment (most handlers don't map these, causing views to default to Fill). Downgrade DI resolution failure from Error to Debug log level.
Add SKCanvasViewHandler and SKGLViewHandler to support SkiaSharp.Views.Maui controls (SKCanvasView, SKGLView) on Linux. Create SkiaSKCanvasView and SkiaSKGLView platform views that route PaintSurface events through OpenMaui's rendering pipeline. This enables SkiaSharp-based third-party controls (LiveCharts, Microcharts, custom drawings) to work on Linux. SKGLView provides software-rendered fallback for GPU-targeting controls. Update LinuxViewRenderer comments to reflect that most third-party controls now work with these handlers.
Fix SkiaGrid and SkiaStackLayout to read alignment from IView.HorizontalLayoutAlignment/VerticalLayoutAlignment (MAUI virtual view) instead of SkiaView.HorizontalOptions/VerticalOptions. This fixes alignment issues where handlers don't map alignment properties, causing views to incorrectly default to Fill. Add LayoutAlignmentHelper to map between MAUI Controls LayoutAlignment (Start=0, Center=1, End=2, Fill=3) and OpenMaui LayoutAlignment (Fill=0, Start=1, Center=2, End=3). Set MauiView back-reference in ToViewHandler. Add AlignmentTests with 346 lines of test coverage for Grid and StackLayout alignment scenarios.
Update version from 10.0.41.5 to 10.0.41.6 to include ContentView handler, Shapes.Path handler, SKCanvasView/SKGLView handlers, layout alignment fixes, and third-party control compatibility improvements.
… issues Add PropertyChanged subscription in ToViewHandler to sync IsVisible, Opacity, and InputTransparent from MAUI virtual view to SkiaView platform view. These properties aren't mapped by MAUI's ViewMapper on Linux, causing visibility/opacity changes to not take effect. Fix SkiaRenderingEngine to clear dirty regions with transparent instead of white to preserve PNG alpha channels and view backgrounds. Fix Shell flyout footer to measure to natural size instead of fixed FlyoutFooterHeight, preventing complex layouts from being squished. Bump version to 10.0.41.7.
Register SKCanvasView and SKGLView handlers in LinuxMauiAppBuilderExtensions (were only in MauiHandlerExtensions fallback). Add MapBackgroundColor to LayoutHandler to support BackgroundColor property on layouts. Fix Shell flyout to dispatch pointer events to header/footer views for interactive controls (buttons, etc.). Add HitTest delegation to header/footer views so interactive elements are clickable. Add diagnostic logging to SKCanvasViewHandler and SkiaSKCanvasView for debugging. Bump version to 10.0.41.8.
Remove local LayoutHandlerUpdate class definitions and use Microsoft.Maui.Handlers.LayoutHandlerUpdate from MAUI framework instead. This fixes conflicts where local class shadowed framework type. Add handler creation in MapAdd if child doesn't have handler yet. Add InvalidateMeasure/Invalidate calls after add/remove operations to trigger layout updates. Add extensive debug logging (temporarily using Error level for visibility) to ContentViewHandler, LayoutHandler, GridHandler, and SKCanvasViewHandler to diagnose third-party control rendering issues.
…conflicts Add MapWidthRequest and MapHeightRequest to ContentViewHandler, LayoutHandler, and GridHandler to support explicit size requests on layouts and content views. Sync WidthRequest/HeightRequest in ConnectHandler for properties set before handler creation. Remove local EvaluateJavaScriptAsyncRequest class definitions and use Microsoft.Maui.EvaluateJavaScriptAsyncRequest from MAUI framework instead. This fixes namespace conflicts and ensures proper sizing of third-party controls. Bump version to 10.0.41.9.
Call VisualElement.SendLoaded() via reflection in ToViewHandler to fire Loaded event for all views. This is required for controls like LiveCharts' MotionCanvas that subscribe to PaintSurface in their Loaded handler. Add extensive diagnostic logging to SkiaSKCanvasView to debug PaintSurface event subscription issues: log InvalidateCanvas calls, track draw count, inspect PaintSurface field/delegate via reflection, list all event-like fields, and sample pixel data to verify rendering. This helps diagnose why third-party SkiaSharp controls may not render.
Remove extensive debug logging from ContentViewHandler, LayoutHandler, SKCanvasViewHandler, MauiHandlerExtensions, and SkiaSKCanvasView that was added to diagnose third-party control rendering issues. Downgrade remaining GridHandler log from Error to Debug level. Bump version to 10.0.41.10.
Move VisualElement.Loaded event firing from ToViewHandler to SkiaView.Arrange, after first successful layout when element has final size. This matches platform handler behavior and ensures controls have valid dimensions when Loaded fires. Add extensive diagnostic logging to SkiaSKCanvasView to inspect LiveCharts MotionCanvas state via reflection: check parent hierarchy, CanvasCore paint tasks, chart _core object, control size, and isLoaded state. Track draw count and sample pixel data to verify rendering. Bump version to 10.0.41.11.
Fix PlatformBeginInvokeOnMainThread to use LinuxDispatcher.Main instead of GetForCurrentThread() for background thread dispatches. GetForCurrentThread() returns null for non-main threads, causing dispatched actions to be silently dropped. Add diagnostic logging to track dispatch count and warn when dispatcher is unavailable. This fixes MainThread.BeginInvokeOnMainThread calls from background threads in third-party controls.
…ions Create LinuxSynchronizationContext to route async continuations (from await) to GLib main loop instead of thread pool. This fixes SIGSEGV crashes in LiveCharts' RunDrawingLoop which uses Task.Run + await, causing concurrent SkiaSharp access from background threads. Install SynchronizationContext in LinuxDispatcher.Initialize. Add GLibNative.ProcessPendingEvents() to drain idle callbacks/timeouts in main loop, ensuring MainThread.BeginInvokeOnMainThread dispatches execute. Add diagnostic logging to track background dispatches and execution flow.
Change DeviceDisplay patch to target concrete DeviceDisplayImplementation class instead of base class, using DeclaredOnly binding flag to get the override method. Add individual try-catch blocks for each patch so one failure doesn't prevent others from applying. Add diagnostic logging to list available methods and types when patch target not found. Track GetMainDisplayInfo call count and log first 5 invocations with density/resolution values for debugging.
Create offscreen surface at physical pixel dimensions (bounds * density) instead of logical pixels to match Android/iOS behavior. LiveCharts' MotionCanvas applies Canvas.Scale(density) to convert logical→physical coordinates, so the surface must be in physical pixels for scaling to work correctly. Scale surface back down when compositing to logical-pixel canvas. Add _surfaceScale tracking and update diagnostic logging to show physical dimensions and scale factor.
Revert physical pixel scaling and instead report density=1.0 from DeviceDisplay patch since OpenMaui's rendering engine already handles DPI scaling via canvas.Scale(DpiScale). Reporting real density (e.g., 2.75) causes MotionCanvas/LiveCharts to double-scale. Add _needsPaint flag to cache offscreen surface and only repaint when explicitly invalidated, preventing partial dirty-region redraws from advancing animation state and creating visual discontinuities. Suppress pointer events on SKCanvasView to test if they cause unwanted chart movement.
- Add XSync protocol support for smoother window resizing - Implement EnableTouchEvents property in SKCanvasView handler - Preserve bitmap content during resize to prevent flash - Add deferred resize flushing and sync acknowledgment to event loop - Fix Shell color synchronization for background and title colors - Add diagnostic logging for Shell color mapping
- Remove verbose diagnostic logging from color synchronization - Simplify background color resolution logic - Prioritize Shell.TitleColor for navbar text color - Replace hardcoded blue navbar with theme-aware defaults - Increase default flyout footer height from 40 to 120
- Add lazy content loading support for third-party ContentView subclasses - Fix ContentView measurement to properly accumulate child sizes - Track pressed target in Shell to ensure pointer release events reach correct view - Prevent infinite size constraints from propagating to ContentView children
- Add Harmony patch for Launcher.OpenAsync to use xdg-open on Linux - Force premultiplied alpha when decoding images to fix transparent PNG rendering - Add diagnostic logging for Border pointer events - Bump package versions to 10.0.41.12
Removes temporary debug/diagnostic logging from dispatcher, handlers, services, and views. Also removes unused counter variables and debugging code that was used for troubleshooting. Updates package versions from 10.0.41.12 to 10.0.41.13.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.