Gondwana Game Engine Development (master) - 2.6.1
Gondwana is a cross-platform 2.5D game and rendering engine written in C#/.NET 8. It provides fine-grained control over rendering, timing, and scene composition, with built-in support for parallax, z-ordering, pixel overhang, collision detection, and particle effects. Gondwana targets desktop and web platforms using SkiaSharp for graphics and pluggable audio backends for desktop and browser targets.
Loading...
Searching...
No Matches
BlazorRenderSurfaceComponentBase.cs
1using Microsoft.AspNetCore.Components;
2using Microsoft.AspNetCore.Components.Web;
3
5
14public abstract class BlazorRenderSurfaceComponentBase : ComponentBase, IDisposable
15{
16 internal virtual Gondwana.Rendering.RenderSurfaceAdapterBase? InputSurfaceAdapter => null;
17
18 internal System.Drawing.Point ToScreenPx(double x, double y)
19 => InputSurfaceAdapter?.AdapterPxToScreenPx(new System.Drawing.PointF((float)x, (float)y))
20 ?? new System.Drawing.Point((int)Math.Floor(x), (int)Math.Floor(y));
21
22 private const string DefaultCanvasStyle =
23 "width: 100%; height: 100%; display: block; outline: none;";
24
25 internal event Action<KeyboardEventArgs>? KeyDown;
26 internal event Action<KeyboardEventArgs>? KeyUp;
27 internal event Action<MouseEventArgs>? MouseMove;
28 internal event Action<MouseEventArgs>? MouseDown;
29 internal event Action<MouseEventArgs>? MouseUp;
30 internal event Action<WheelEventArgs>? Wheel;
31 internal event Action<TouchEventArgs>? TouchStart;
32 internal event Action<TouchEventArgs>? TouchMove;
33 internal event Action<TouchEventArgs>? TouchEnd;
34 internal event Action<TouchEventArgs>? TouchCancel;
35
39 [Parameter(CaptureUnmatchedValues = true)]
40 public Dictionary<string, object>? AdditionalAttributes { get; set; }
41
45 protected IReadOnlyDictionary<string, object>? CanvasAttributes { get; private set; }
46
50 protected string CanvasStyle { get; private set; } = DefaultCanvasStyle;
51
53 protected override void OnParametersSet()
54 {
55 if (AdditionalAttributes is null)
56 {
57 CanvasAttributes = null;
58 CanvasStyle = DefaultCanvasStyle;
59 return;
60 }
61
62 CanvasStyle = DefaultCanvasStyle;
63 if (AdditionalAttributes.TryGetValue("style", out var styleObj) && styleObj is not null)
64 CanvasStyle = $"{DefaultCanvasStyle} {styleObj}";
65
66 var attributes = new Dictionary<string, object>(
68 StringComparer.OrdinalIgnoreCase);
69 attributes.Remove("style");
70 CanvasAttributes = attributes;
71 }
72
75 protected void HandleKeyDown(KeyboardEventArgs e) => KeyDown?.Invoke(e);
76
79 protected void HandleKeyUp(KeyboardEventArgs e) => KeyUp?.Invoke(e);
80
83 protected void HandleMouseMove(MouseEventArgs e) => MouseMove?.Invoke(e);
84
87 protected void HandleMouseDown(MouseEventArgs e) => MouseDown?.Invoke(e);
88
91 protected void HandleMouseUp(MouseEventArgs e) => MouseUp?.Invoke(e);
92
95 protected void HandleWheel(WheelEventArgs e) => Wheel?.Invoke(e);
96
97 internal readonly record struct CanvasOffset(float Left, float Top);
98 internal virtual ValueTask<CanvasOffset> GetCanvasOffsetAsync() => ValueTask.FromResult(default(CanvasOffset));
99
100 private async Task ForwardTouch(TouchEventArgs args, Action<TouchEventArgs>? handler)
101 {
102 if (handler is null) return;
103 var offset = await GetCanvasOffsetAsync();
104 foreach (var point in args.ChangedTouches)
105 {
106 point.ClientX -= offset.Left;
107 point.ClientY -= offset.Top;
108 }
109 handler(args);
110 }
111
115 protected Task HandleTouchStart(TouchEventArgs e) => ForwardTouch(e, TouchStart);
116
120 protected Task HandleTouchMove(TouchEventArgs e) => ForwardTouch(e, TouchMove);
121
125 protected Task HandleTouchEnd(TouchEventArgs e) => ForwardTouch(e, TouchEnd);
126
129 protected void HandleTouchCancel(TouchEventArgs e) => TouchCancel?.Invoke(e);
130
132 public abstract void Dispose();
133}
Provides the shared DOM input surface used by Gondwana's Blazor bitmap and GPU render components.
Task HandleTouchMove(TouchEventArgs e)
Forwards a browser touch-move event to registered input adapters.
Dictionary< string, object >? AdditionalAttributes
Gets or sets additional attributes applied to the underlying HTML canvas element.
Task HandleTouchStart(TouchEventArgs e)
Forwards a browser touch-start event to registered input adapters.
void HandleMouseDown(MouseEventArgs e)
Forwards a browser mouse-down event to registered input adapters.
void HandleKeyUp(KeyboardEventArgs e)
Forwards a browser key-up event to registered input adapters.
void HandleWheel(WheelEventArgs e)
Forwards a browser wheel event to registered input adapters.
void HandleTouchCancel(TouchEventArgs e)
Forwards a browser touch-cancel event to registered input adapters.
string CanvasStyle
Gets the effective canvas style, including Gondwana's required defaults.
void HandleMouseUp(MouseEventArgs e)
Forwards a browser mouse-up event to registered input adapters.
void Dispose()
Releases resources owned by the concrete render surface component.
IReadOnlyDictionary< string, object >? CanvasAttributes
Gets the canvas attributes with the component-owned style attribute removed.
void HandleMouseMove(MouseEventArgs e)
Forwards a browser mouse-move event to registered input adapters.
void HandleKeyDown(KeyboardEventArgs e)
Forwards a browser key-down event to registered input adapters.
Task HandleTouchEnd(TouchEventArgs e)
Forwards a browser touch-end event to registered input adapters.
Represents the abstract base class for render surface adapters that present backbuffer output to a de...
Point AdapterPxToScreenPx(PointF adapterPx)
Converts adapter input to logical ScreenPx, retaining outside coordinates for capture/leave.