Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds a new sample project called "Projection Showcase" to the Uno.Samples repository. The sample demonstrates 3D projection and animation capabilities in Uno Platform using PlaneProjection and Matrix3DProjection classes. It includes five animated scenes (Orbiting Cards, Floating Tiles, Flip Card, Perspective Tunnel, and Matrix3D Wave) that showcase rotation, depth, and perspective effects driven by a DispatcherTimer at 60 FPS.
Changes:
- Added new ProjectionShowcase sample project with complete Uno Platform multi-target configuration
- Added documentation entry in doc/samples.md describing the new sample
- Included README.md and sample screenshot demonstrating the projection effects
Reviewed changes
Copilot reviewed 52 out of 56 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| doc/samples.md | Added entry for Projection Showcase sample with description and source link |
| UI/ProjectionShowcase/README.md | Sample documentation with overview, codebase description, and Uno Platform information |
| UI/ProjectionShowcase/src/ProjectionShowcase/MainPage.xaml | XAML layout defining five animation sections using PlaneProjection and Matrix3DProjection |
| UI/ProjectionShowcase/src/ProjectionShowcase/MainPage.xaml.cs | C# code-behind implementing animation logic with DispatcherTimer |
| UI/ProjectionShowcase/src/ProjectionShowcase/App.xaml.cs | Standard Uno Platform application initialization and logging setup |
| UI/ProjectionShowcase/src/ProjectionShowcase/ProjectionShowcase.csproj | Uno.Sdk project file targeting multiple platforms (Android, iOS, Windows, WebAssembly, Desktop) |
| UI/ProjectionShowcase/src/global.json | Uno.Sdk version configuration (6.4.42) |
| UI/ProjectionShowcase/docs/assets/sample.png | Screenshot demonstrating the sample's visual output |
| [Various platform-specific files] | Standard Uno Platform configuration files for Android, iOS, WebAssembly, Desktop, and Windows platforms |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
|
||
| ### Projection Showcase | ||
|
|
||
| Demonstrates 3D projection and animation capabilities in Uno Platform using `PlaneProjection` and `Matrix3DProjection`. Five animated scenes illustrate rotation, depth, and perspective effects driven by a `DispatcherTime`r` at 60 FPS. |
There was a problem hiding this comment.
There is a typo in the description. "DispatcherTimer" should be "DispatcherTimer" (remove the backtick before the 'r').
| <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion> | ||
| <ApplicationVersion>1</ApplicationVersion> | ||
| <!-- Package Publisher --> | ||
| <ApplicationPublisher>Martin</ApplicationPublisher> |
There was a problem hiding this comment.
The ApplicationPublisher is set to "Martin", which appears to be a personal name. For consistency with other Uno Platform samples, consider using either "Uno Platform" (as seen in many samples like AutoSuggestSample, Benchmark, etc.) or the application name "ProjectionShowcase" (as seen in samples like EFCoreSQLiteSample, SkiaSharpTest, etc.).
| ### Projection Showcase | ||
|
|
||
| Demonstrates 3D projection and animation capabilities in Uno Platform using `PlaneProjection` and `Matrix3DProjection`. Five animated scenes illustrate rotation, depth, and perspective effects driven by a `DispatcherTime`r` at 60 FPS. |
There was a problem hiding this comment.
The PR description is incomplete. It's missing the following required information:
- "What is the current behavior?" section is empty
- "What is the new behavior?" section is empty
- PR checklist items are not checked
Please fill in these sections to describe what the PR adds (a new sample demonstrating 3D projection capabilities) and check the relevant boxes in the checklist.
| private Border[] _cards; | ||
| private PlaneProjection[] _cardProjs; | ||
| private PlaneProjection[] _tileProjs; | ||
| private PlaneProjection[] _ringProjs; | ||
| private Matrix3DProjection[] _waveProjs; |
There was a problem hiding this comment.
The array fields (_cards, _cardProjs, _tileProjs, _ringProjs, _waveProjs) are declared without initialization and are assigned in OnLoaded. Consider initializing them to avoid potential null reference warnings from the compiler, or add null-forgiving operators (!) when accessing them, or mark them with nullable reference types appropriately. For example:
private Border[] _cards = null!;
private PlaneProjection[] _cardProjs = null!;This makes it explicit that these fields will be assigned before use.
| private Border[] _cards; | |
| private PlaneProjection[] _cardProjs; | |
| private PlaneProjection[] _tileProjs; | |
| private PlaneProjection[] _ringProjs; | |
| private Matrix3DProjection[] _waveProjs; | |
| private Border[] _cards = null!; | |
| private PlaneProjection[] _cardProjs = null!; | |
| private PlaneProjection[] _tileProjs = null!; | |
| private PlaneProjection[] _ringProjs = null!; | |
| private Matrix3DProjection[] _waveProjs = null!; |
|
|
||
| [Browse source](https://github.com/unoplatform/Uno.Samples/tree/master/UI/PongWars) | ||
|
|
||
| ### Projection Showcase |
There was a problem hiding this comment.
The PR description is missing a proper GitHub issue reference. According to the Uno Platform contributing guidelines, every PR must reference a proper GitHub issue using one of these formats:
Fixes https://github.com/unoplatform/<REPO>/issues/#<ISSUE_NUMBER>Closes https://github.com/unoplatform/<REPO>/issues/#<ISSUE_NUMBER>Related to https://github.com/unoplatform/<REPO>/issues/#<ISSUE_NUMBER>
The description currently shows "closes #" without an issue number. Please provide the associated issue number, or if no issue exists, add a note explaining why (e.g., "Note: No related issue (Internal maintenance / Approved by Team member: @username)").
| <?xml version="1.0" encoding="utf-8"?> | ||
| <configuration> | ||
| <system.web> | ||
| <customErrors mode="Off"/> |
There was a problem hiding this comment.
The web.config sets <customErrors mode="Off"/>, which causes ASP.NET to return full error details and stack traces to any client. An attacker can trigger server-side errors (for example, by requesting invalid or unexpected resources) and gain insights into file paths, configuration, and framework internals that facilitate further attacks. In production, configure customErrors to a safer value (such as RemoteOnly) and use a generic error page so detailed diagnostics are never exposed to external users.
GitHub Issue: closes #
PR Type: ✨ Feature
What is the current behavior? 🤔
What is the new behavior? 🚀
PR Checklist ✅
Please check if your PR fulfills the following requirements:
Screenshots Compare Test Runresults.Other information ℹ️