Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 57 additions & 3 deletions src/Frontend/VanDaemon.Web/Pages/Index.razor
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,11 @@
<!-- Van Diagram Container -->
<div class="diagram-area"
@onmousemove="OnMouseMove"
@onmouseup="OnMouseUp">
@onmouseup="OnMouseUp"
@ontouchmove="OnTouchMove"
@ontouchend="OnTouchEnd"
@ontouchmove:preventDefault="isEditMode"
@ontouchend:preventDefault="isEditMode">
<div class="van-diagram-container" @ref="diagramContainer">
@if (!string.IsNullOrEmpty(backgroundImage))
{
Expand All @@ -106,10 +110,12 @@
@foreach (var overlay in overlays)
{
<div class="overlay-item @(isEditMode ? "edit-mode" : "")"
style="position: absolute; left: @(overlay.X)%; top: @(overlay.Y)%; transform: translate(-50%, -50%); cursor: @(isEditMode ? "move" : "pointer"); user-select: none;"
style="position: absolute; left: @(overlay.X)%; top: @(overlay.Y)%; transform: translate(-50%, -50%); cursor: @(isEditMode ? "move" : "pointer"); user-select: none; touch-action: none;"
@onclick="() => OnOverlayClick(overlay)"
@onmousedown="(e) => OnMouseDown(e, overlay)"
@onmousedown:preventDefault="isEditMode">
@onmousedown:preventDefault="isEditMode"
@ontouchstart="(e) => OnTouchStart(e, overlay)"
@ontouchstart:preventDefault="isEditMode">

@if (overlay.Type == OverlayType.Tank)
{
Expand Down Expand Up @@ -440,6 +446,54 @@
}
}

// Touch event handlers for mobile devices
private void OnTouchStart(TouchEventArgs e, OverlayItem overlay)
{
if (isEditMode && e.Touches.Length > 0)
{
draggedOverlay = overlay;
var touch = e.Touches[0];
dragStartX = touch.ClientX;
dragStartY = touch.ClientY;
}
}

private async Task OnTouchMove(TouchEventArgs e)
{
if (draggedOverlay != null && isEditMode && e.Touches.Length > 0)
{
var touch = e.Touches[0];

// Calculate the change in touch position
double deltaX = touch.ClientX - dragStartX;
double deltaY = touch.ClientY - dragStartY;

// Convert pixel delta to percentage
double deltaXPercent = (deltaX / containerWidth) * 100;
double deltaYPercent = (deltaY / containerHeight) * 100;

// Update overlay position
draggedOverlay.X = Math.Max(0, Math.Min(100, draggedOverlay.X + deltaXPercent));
draggedOverlay.Y = Math.Max(0, Math.Min(100, draggedOverlay.Y + deltaYPercent));

// Update drag start position for next move
dragStartX = touch.ClientX;
dragStartY = touch.ClientY;

await InvokeAsync(StateHasChanged);
}
}

private async Task OnTouchEnd(TouchEventArgs e)
{
if (draggedOverlay != null && isEditMode)
{
// Save position to backend
await SaveOverlayPosition(draggedOverlay);
draggedOverlay = null;
}
}

private async Task OnControlToggle(OverlayItem overlay, bool value)
{
try
Expand Down
Loading