Skip to content

feat: Add projection showcase sample#909

Open
MartinZikmund wants to merge 4 commits intomasterfrom
dev/mazi/projectionshowcase
Open

feat: Add projection showcase sample#909
MartinZikmund wants to merge 4 commits intomasterfrom
dev/mazi/projectionshowcase

Conversation

@MartinZikmund
Copy link
Copy Markdown
Member

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:

Other information ℹ️

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a typo in the description. "DispatcherTimer" should be "DispatcherTimer" (remove the backtick before the 'r').

Copilot uses AI. Check for mistakes.
<ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
<ApplicationVersion>1</ApplicationVersion>
<!-- Package Publisher -->
<ApplicationPublisher>Martin</ApplicationPublisher>
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.).

Copilot uses AI. Check for mistakes.
Comment on lines +333 to +335
### 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.
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot generated this review using guidance from organization custom instructions.
Comment on lines +10 to +14
private Border[] _cards;
private PlaneProjection[] _cardProjs;
private PlaneProjection[] _tileProjs;
private PlaneProjection[] _ringProjs;
private Matrix3DProjection[] _waveProjs;
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
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!;

Copilot uses AI. Check for mistakes.

[Browse source](https://github.com/unoplatform/Uno.Samples/tree/master/UI/PongWars)

### Projection Showcase
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)").

Copilot generated this review using guidance from organization custom instructions.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<customErrors mode="Off"/>
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants