From c64851492cf65ec2bc818f197e8c94202c986a99 Mon Sep 17 00:00:00 2001 From: dsehnal <david.sehnal@gmail.com> Date: Tue, 21 Sep 2021 18:38:05 +0200 Subject: [PATCH] applyMarkerAction take 2 --- src/mol-util/marker-action.ts | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/mol-util/marker-action.ts b/src/mol-util/marker-action.ts index 7ebe4f7b8..324b625b6 100644 --- a/src/mol-util/marker-action.ts +++ b/src/mol-util/marker-action.ts @@ -68,11 +68,19 @@ export function applyMarkerAction(array: Uint8Array, set: OrderedSet, action: Ma if (Interval.is(set)) { const start = Interval.start(set); const end = Interval.end(set); - const view = new Uint32Array(array.buffer, 0, array.buffer.byteLength >> 2); - const viewStart = (start + 3) >> 2; const viewEnd = viewStart + ((end - 4 * viewStart) >> 2); + if (viewEnd <= viewStart) { + // avoid edge cases with overlapping front/end intervals + for (let i = start; i < end; ++i) { + applyMarkerActionAtPosition(array, i, action); + } + return true; + } + + const view = new Uint32Array(array.buffer, 0, array.buffer.byteLength >> 2); + const frontStart = start; const frontEnd = Math.min(4 * viewStart, end); const backStart = Math.max(start, 4 * viewEnd); @@ -105,13 +113,8 @@ export function applyMarkerAction(array: Uint8Array, set: OrderedSet, action: Ma applyMarkerActionAtPosition(array, i, action); } - // to prevent applying "toggle" twice check for edge case where - // viewEnd <= viewStart, which resolves to the "front" and "back" - // intervals being the same range - if (frontStart !== backStart) { - for (let i = backStart; i < backEnd; ++i) { - applyMarkerActionAtPosition(array, i, action); - } + for (let i = backStart; i < backEnd; ++i) { + applyMarkerActionAtPosition(array, i, action); } } else { switch (action) { -- GitLab