From c2dcffc04344d00fe4146cb2fcf39ae4ff424488 Mon Sep 17 00:00:00 2001 From: "Joshua A. Horton" Date: Thu, 1 Sep 2022 11:50:20 +0700 Subject: [PATCH] fix(web): clear of pending subsegment should refresh segment stats --- .../src/constructingSegment.ts | 3 +++ common/web/gesture-recognizer/src/segment.ts | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/common/web/gesture-recognizer/src/constructingSegment.ts b/common/web/gesture-recognizer/src/constructingSegment.ts index 85aade6250..1361bab6c9 100644 --- a/common/web/gesture-recognizer/src/constructingSegment.ts +++ b/common/web/gesture-recognizer/src/constructingSegment.ts @@ -232,6 +232,9 @@ namespace com.keyman.osk { // the need to rely on Segment events for that; even that's better off handled with path.coords // events instead. this.pendingSubsegmentation = null; + + // If there was a pending subsegment, we need to remove its components from the published segment stats. + this.pathSegment.updateStats(this.committedInterval); } /** diff --git a/common/web/gesture-recognizer/src/segment.ts b/common/web/gesture-recognizer/src/segment.ts index ee605d4426..f8da0be100 100644 --- a/common/web/gesture-recognizer/src/segment.ts +++ b/common/web/gesture-recognizer/src/segment.ts @@ -42,6 +42,8 @@ namespace com.keyman.osk { private _resolutionPromise: Promise; private _resolutionPromiseResolver: () => void; + private _isResolved: boolean = false; + /** * Intended for internal-use only; this is utilized during the segmentation process. */ @@ -69,7 +71,10 @@ namespace com.keyman.osk { }); this._resolutionPromise = new Promise((resolve) => { - this._resolutionPromiseResolver = resolve; + this._resolutionPromiseResolver = () => { + this._isResolved = true; + resolve(); + } }) } } @@ -85,10 +90,16 @@ namespace com.keyman.osk { } protected setPeakSpeed(speed: number) { + if(this._isResolved) { + throw new Error("May not modify a resolved segment!"); + } this._peakSpeed = speed; } protected updateStats(totalStats: CumulativePathStats) { + if(this._isResolved) { + throw new Error("May not modify a resolved segment!"); + } this._stats = totalStats; } @@ -97,6 +108,10 @@ namespace com.keyman.osk { throw new Error("Cannot recognize the segment - lacking critical metadata"); } + if(this._isResolved) { + throw new Error("May not modify a resolved segment!"); + } + if(this._type === undefined) { this._type = type;