From 09413bc7f345aa9fd7f3a41596163d6d9cf6ec65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Z=C3=B6ller?= Date: Wed, 3 Dec 2025 20:33:09 +0100 Subject: [PATCH] Moar federation --- .../fitpub/service/ActivityImageService.java | 26 ++++++++++++++----- .../templates/activities/detail.html | 2 +- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/operaton/fitpub/service/ActivityImageService.java b/src/main/java/org/operaton/fitpub/service/ActivityImageService.java index 2184ba8..6ee1d93 100644 --- a/src/main/java/org/operaton/fitpub/service/ActivityImageService.java +++ b/src/main/java/org/operaton/fitpub/service/ActivityImageService.java @@ -137,7 +137,8 @@ public class ActivityImageService { // Draw track segments with privacy fade g2d.setStroke(new BasicStroke(4.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); - final double FADE_DISTANCE = 300.0; // 300 meters fade zone + final double HIDDEN_DISTANCE = 100.0; // First/last 100m completely hidden + final double FADE_DISTANCE = 200.0; // Fade zone from 100m to 200m for (int i = 0; i < trackPoints.size() - 1; i++) { Map point1 = trackPoints.get(i); @@ -161,14 +162,25 @@ public class ActivityImageService { // Calculate fade opacity (0.0 to 1.0) float opacity = 1.0f; - if (distanceFromStart < FADE_DISTANCE) { - // Fade in from start - opacity = Math.min(opacity, (float) (distanceFromStart / FADE_DISTANCE)); + // Hide first 100m completely, fade in from 100m to 200m + if (distanceFromStart < HIDDEN_DISTANCE) { + opacity = 0.0f; + } else if (distanceFromStart < FADE_DISTANCE) { + // Fade in from 100m to 200m + opacity = Math.min(opacity, (float) ((distanceFromStart - HIDDEN_DISTANCE) / (FADE_DISTANCE - HIDDEN_DISTANCE))); } - if (distanceFromEnd < FADE_DISTANCE) { - // Fade out at end - opacity = Math.min(opacity, (float) (distanceFromEnd / FADE_DISTANCE)); + // Hide last 100m completely, fade out from 200m to 100m before end + if (distanceFromEnd < HIDDEN_DISTANCE) { + opacity = 0.0f; + } else if (distanceFromEnd < FADE_DISTANCE) { + // Fade out from 200m to 100m before end + opacity = Math.min(opacity, (float) ((distanceFromEnd - HIDDEN_DISTANCE) / (FADE_DISTANCE - HIDDEN_DISTANCE))); + } + + // Skip completely transparent segments + if (opacity <= 0.0f) { + continue; } // Apply opacity to track color diff --git a/src/main/resources/templates/activities/detail.html b/src/main/resources/templates/activities/detail.html index ad109ad..3c2205d 100644 --- a/src/main/resources/templates/activities/detail.html +++ b/src/main/resources/templates/activities/detail.html @@ -384,7 +384,7 @@ // Create map (needs to be done after container is visible) setTimeout(() => { const map = FitPub.createActivityMap('activityMap', geoJson, { - showStartEnd: true, + showStartEnd: false, // Privacy: Do not show start/end markers fitBounds: true });