fix profile overlay size and glitch when dragging

This commit is contained in:
vcoppe
2024-07-15 11:37:22 +02:00
parent 111eb5c4df
commit 339ecc1c87

View File

@@ -179,9 +179,8 @@
} }
}, },
stacked: false, stacked: false,
onResize: function (chart, size) { onResize: function () {
overlay.width = size.width; updateOverlay();
overlay.height = size.height;
updateShowAdditionalScales(); updateShowAdditionalScales();
} }
}; };
@@ -280,10 +279,6 @@
updateShowAdditionalScales(); updateShowAdditionalScales();
// Overlay canvas to create a selection rectangle
overlay.width = canvas.width;
overlay.height = canvas.height;
let startIndex = 0; let startIndex = 0;
let endIndex = 0; let endIndex = 0;
function getIndex(evt) { function getIndex(evt) {
@@ -295,13 +290,18 @@
}, },
true true
); );
const rect = canvas.getBoundingClientRect();
if (points.length === 0) { if (points.length === 0) {
return evt.x - rect.left <= chart.chartArea.left const rect = canvas.getBoundingClientRect();
? 0 if (evt.x - rect.left <= chart.chartArea.left) {
: $gpxStatistics.local.points.length - 1; return 0;
} else if (evt.x - rect.left >= chart.chartArea.right) {
return $gpxStatistics.local.points.length - 1;
} else {
return undefined;
} }
}
let point = points.find((point) => point.element.raw); let point = points.find((point) => point.element.raw);
if (point) { if (point) {
return point.element.raw.index; return point.element.raw.index;
@@ -320,7 +320,10 @@
if (dragStarted) { if (dragStarted) {
dragging = true; dragging = true;
endIndex = getIndex(evt); endIndex = getIndex(evt);
if (startIndex !== endIndex) { if (endIndex !== undefined) {
if (startIndex === undefined) {
startIndex = endIndex;
} else if (startIndex !== endIndex) {
$slicedGPXStatistics = [ $slicedGPXStatistics = [
$gpxStatistics.slice(Math.min(startIndex, endIndex), Math.max(startIndex, endIndex)), $gpxStatistics.slice(Math.min(startIndex, endIndex), Math.max(startIndex, endIndex)),
Math.min(startIndex, endIndex), Math.min(startIndex, endIndex),
@@ -329,6 +332,7 @@
} }
} }
} }
}
function onMouseUp(evt) { function onMouseUp(evt) {
dragStarted = false; dragStarted = false;
dragging = false; dragging = false;
@@ -506,7 +510,15 @@
chart.update(); chart.update();
} }
$: if ($slicedGPXStatistics) { function updateOverlay() {
if (!canvas) {
return;
}
overlay.width = canvas.width / window.devicePixelRatio;
overlay.height = canvas.height / window.devicePixelRatio;
if ($slicedGPXStatistics) {
let startIndex = $slicedGPXStatistics[1]; let startIndex = $slicedGPXStatistics[1];
let endIndex = $slicedGPXStatistics[2]; let endIndex = $slicedGPXStatistics[2];
@@ -536,6 +548,9 @@
selectionContext.clearRect(0, 0, overlay.width, overlay.height); selectionContext.clearRect(0, 0, overlay.width, overlay.height);
} }
} }
}
$: $slicedGPXStatistics, updateOverlay();
onDestroy(() => { onDestroy(() => {
if (chart) { if (chart) {