Added proper positions
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1,86 @@
|
||||
---
|
||||
sessionId: session-260928-184444-1lki
|
||||
---
|
||||
|
||||
# Requirements
|
||||
|
||||
### Overview & Goals
|
||||
Fix the build error in `ZeroSpace.MapEditor/Services/MapBackground.cs` where invoking `new PlatformImage(buffer)` fails with compilation error `CS7036: There is no argument given that corresponds to the required parameter 'bitmap' of 'PlatformImage.PlatformImage(ICanvasResourceCreator, CanvasBitmap)'`.
|
||||
|
||||
### Scope
|
||||
- **In Scope:**
|
||||
- Fix the image instantiation logic in `ZeroSpace.MapEditor/Services/MapBackground.cs` to use `Microsoft.Maui.Graphics.Platform.PlatformImage.FromStream(buffer)`.
|
||||
- Ensure compatibility with .NET MAUI Windows (`net10.0-windows10.0.19041.0`) and MacCatalyst (`net10.0-maccatalyst`).
|
||||
- Verify project build and clean diagnostic status.
|
||||
- **Out of Scope:**
|
||||
- Modifying the galaxy map raw asset or canvas drawing logic in `MapEditorPage.xaml.cs` and `MapEditorDrawable.cs`.
|
||||
- Introducing external third-party image decoding dependencies.
|
||||
|
||||
### Functional Requirements
|
||||
- `MapBackground.LoadAsync()` must asynchronously open `galaxymap.png` from app package assets, copy the stream into memory, and return a valid `Microsoft.Maui.Graphics.IImage` instance on supported platforms.
|
||||
- If the asset cannot be found or is loaded on an unsupported platform, `MapBackground.LoadAsync()` must catch the exception and return `null` without crashing the application.
|
||||
- `MapEditorPage` must continue to display the galaxy map background when enabled.
|
||||
|
||||
### Non-Functional Requirements
|
||||
- Maintain zero build errors and zero warnings across all supported target frameworks.
|
||||
- Preserve memory stream behavior ensuring stream data remains accessible for lazy platform decoders.
|
||||
|
||||
# Technical Design
|
||||
|
||||
### Current Implementation
|
||||
In `ZeroSpace.MapEditor/Services/MapBackground.cs`:
|
||||
```csharp
|
||||
#if WINDOWS
|
||||
return new Microsoft.Maui.Graphics.Platform.PlatformImage(buffer);
|
||||
#elif MACCATALYST
|
||||
return new Microsoft.Maui.Graphics.Platform.PlatformImage(buffer);
|
||||
#else
|
||||
return null;
|
||||
#endif
|
||||
```
|
||||
On Windows (`Microsoft.Maui.Graphics.Win2D`), `PlatformImage` has no single-parameter constructor accepting a `Stream`. Its constructor expects `(ICanvasResourceCreator, CanvasBitmap)` or `(byte[], ImageFormat)`.
|
||||
|
||||
### Root Cause
|
||||
Directly calling the `PlatformImage` constructor with a `MemoryStream` is invalid in Microsoft.Maui.Graphics for Win2D. The supported API to construct an `IImage` from a `Stream` across all MAUI platforms is the static factory method `PlatformImage.FromStream(Stream, ImageFormat)`.
|
||||
|
||||
### Key Decisions
|
||||
- **Decision:** Use `PlatformImage.FromStream(buffer)` instead of constructor invocation.
|
||||
- **Rationale:** `PlatformImage.FromStream(Stream, ImageFormat)` is the standard Microsoft.Maui.Graphics API designed for stream-based image creation on both Windows and MacCatalyst platforms.
|
||||
|
||||
### Proposed Changes
|
||||
- In `ZeroSpace.MapEditor/Services/MapBackground.cs`:
|
||||
- Update lines 25–31 to invoke `Microsoft.Maui.Graphics.Platform.PlatformImage.FromStream(buffer)` under `#if WINDOWS || MACCATALYST`.
|
||||
- Maintain the existing try-catch safety wrapper that returns `null` if loading fails.
|
||||
|
||||
### File Structure
|
||||
- `ZeroSpace.MapEditor/Services/MapBackground.cs` (Modified: update image factory call)
|
||||
- `ZeroSpace.MapEditor/Views/MapEditorPage.xaml.cs` (Referenced: consumes `MapBackground.LoadAsync()`)
|
||||
|
||||
# Testing
|
||||
|
||||
### Validation Approach
|
||||
Verify that the compilation error `CS7036` is resolved and `ZeroSpace.MapEditor` builds successfully.
|
||||
|
||||
### Key Scenarios
|
||||
- **Compilation Check:**
|
||||
- Verify `ZeroSpace.MapEditor/Services/MapBackground.cs` with Rider code analysis to confirm zero compiler errors.
|
||||
- Build `ZeroSpace.MapEditor.csproj` target framework `net10.0-windows10.0.19041.0`.
|
||||
- **Image Loading & Fallback Check:**
|
||||
- Ensure `MapBackground.LoadAsync()` returns an `IImage` instance when `galaxymap.png` is available.
|
||||
- Ensure exceptions during loading (e.g. missing asset) are handled cleanly and return `null`.
|
||||
|
||||
# Delivery Steps
|
||||
|
||||
### ✓ Step 1: Refactor image stream loading to use PlatformImage.FromStream in MapBackground
|
||||
`MapBackground.cs` compiles without CS7036 errors across target platforms by using the static factory method `PlatformImage.FromStream`.
|
||||
|
||||
- Replace `new Microsoft.Maui.Graphics.Platform.PlatformImage(buffer)` with `Microsoft.Maui.Graphics.Platform.PlatformImage.FromStream(buffer)` in `ZeroSpace.MapEditor/Services/MapBackground.cs`.
|
||||
- Consolidate platform conditional directives `#if WINDOWS || MACCATALYST` (or use platform-agnostic graphics loading) while preserving graceful `null` fallback in the `catch` block and unsupported target platforms.
|
||||
- Ensure using directives for `Microsoft.Maui.Graphics.Platform` are properly configured.
|
||||
|
||||
### ✓ Step 2: Verify compilation and image rendering integration
|
||||
`ZeroSpace.MapEditor` builds cleanly without diagnostics or runtime issues when loading raw background assets.
|
||||
|
||||
- Run code analysis/diagnostics on `ZeroSpace.MapEditor/Services/MapBackground.cs` to confirm zero compilation errors and warnings.
|
||||
- Build the `ZeroSpace.MapEditor` project to ensure proper integration with `Microsoft.Maui.Controls` and `Microsoft.Maui.Graphics`.
|
||||
- Validate that `MapEditorPage.xaml.cs` successfully receives the `IImage` instance from `MapBackground.LoadAsync()` and invalidates the map canvas for rendering.
|
||||
Reference in New Issue
Block a user