Merge pull request #17664 from calixteman/bug1879281
[Editor] Ends a free highlight where the mouse pointer is (bug 1879281)
This commit is contained in:
commit
05b035602e
@ -363,6 +363,10 @@ class FreeOutliner {
|
|||||||
// - compute the control points of the quadratic Bézier curve.
|
// - compute the control points of the quadratic Bézier curve.
|
||||||
#last = new Float64Array(18);
|
#last = new Float64Array(18);
|
||||||
|
|
||||||
|
#lastX;
|
||||||
|
|
||||||
|
#lastY;
|
||||||
|
|
||||||
#min;
|
#min;
|
||||||
|
|
||||||
#min_dist;
|
#min_dist;
|
||||||
@ -402,7 +406,22 @@ class FreeOutliner {
|
|||||||
return isNaN(this.#last[8]);
|
return isNaN(this.#last[8]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#getLastCoords() {
|
||||||
|
const lastTop = this.#last.subarray(4, 6);
|
||||||
|
const lastBottom = this.#last.subarray(16, 18);
|
||||||
|
const [x, y, width, height] = this.#box;
|
||||||
|
|
||||||
|
return [
|
||||||
|
(this.#lastX + (lastTop[0] - lastBottom[0]) / 2 - x) / width,
|
||||||
|
(this.#lastY + (lastTop[1] - lastBottom[1]) / 2 - y) / height,
|
||||||
|
(this.#lastX + (lastBottom[0] - lastTop[0]) / 2 - x) / width,
|
||||||
|
(this.#lastY + (lastBottom[1] - lastTop[1]) / 2 - y) / height,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
add({ x, y }) {
|
add({ x, y }) {
|
||||||
|
this.#lastX = x;
|
||||||
|
this.#lastY = y;
|
||||||
const [layerX, layerY, layerWidth, layerHeight] = this.#box;
|
const [layerX, layerY, layerWidth, layerHeight] = this.#box;
|
||||||
let [x1, y1, x2, y2] = this.#last.subarray(8, 12);
|
let [x1, y1, x2, y2] = this.#last.subarray(8, 12);
|
||||||
const diffX = x - x2;
|
const diffX = x - x2;
|
||||||
@ -528,12 +547,14 @@ class FreeOutliner {
|
|||||||
const lastTop = this.#last.subarray(4, 6);
|
const lastTop = this.#last.subarray(4, 6);
|
||||||
const lastBottom = this.#last.subarray(16, 18);
|
const lastBottom = this.#last.subarray(16, 18);
|
||||||
const [x, y, width, height] = this.#box;
|
const [x, y, width, height] = this.#box;
|
||||||
|
const [lastTopX, lastTopY, lastBottomX, lastBottomY] =
|
||||||
|
this.#getLastCoords();
|
||||||
|
|
||||||
if (isNaN(this.#last[6]) && !this.isEmpty()) {
|
if (isNaN(this.#last[6]) && !this.isEmpty()) {
|
||||||
// We've only two points.
|
// We've only two points.
|
||||||
return `M${(this.#last[2] - x) / width} ${
|
return `M${(this.#last[2] - x) / width} ${
|
||||||
(this.#last[3] - y) / height
|
(this.#last[3] - y) / height
|
||||||
} L${(this.#last[4] - x) / width} ${(this.#last[5] - y) / height} L${
|
} L${(this.#last[4] - x) / width} ${(this.#last[5] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${
|
||||||
(this.#last[16] - x) / width
|
(this.#last[16] - x) / width
|
||||||
} ${(this.#last[17] - y) / height} L${(this.#last[14] - x) / width} ${
|
} ${(this.#last[17] - y) / height} L${(this.#last[14] - x) / width} ${
|
||||||
(this.#last[15] - y) / height
|
(this.#last[15] - y) / height
|
||||||
@ -553,8 +574,9 @@ class FreeOutliner {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer.push(
|
buffer.push(
|
||||||
`L${(lastTop[0] - x) / width} ${(lastTop[1] - y) / height} L${
|
`L${(lastTop[0] - x) / width} ${(lastTop[1] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${
|
||||||
(lastBottom[0] - x) / width
|
(lastBottom[0] - x) / width
|
||||||
} ${(lastBottom[1] - y) / height}`
|
} ${(lastBottom[1] - y) / height}`
|
||||||
);
|
);
|
||||||
@ -582,15 +604,19 @@ class FreeOutliner {
|
|||||||
const lastBottom = last.subarray(16, 18);
|
const lastBottom = last.subarray(16, 18);
|
||||||
const [layerX, layerY, layerWidth, layerHeight] = this.#box;
|
const [layerX, layerY, layerWidth, layerHeight] = this.#box;
|
||||||
|
|
||||||
const points = new Float64Array(this.#points?.length ?? 0);
|
const points = new Float64Array((this.#points?.length ?? 0) + 2);
|
||||||
for (let i = 0, ii = points.length; i < ii; i += 2) {
|
for (let i = 0, ii = points.length - 2; i < ii; i += 2) {
|
||||||
points[i] = (this.#points[i] - layerX) / layerWidth;
|
points[i] = (this.#points[i] - layerX) / layerWidth;
|
||||||
points[i + 1] = (this.#points[i + 1] - layerY) / layerHeight;
|
points[i + 1] = (this.#points[i + 1] - layerY) / layerHeight;
|
||||||
}
|
}
|
||||||
|
points[points.length - 2] = (this.#lastX - layerX) / layerWidth;
|
||||||
|
points[points.length - 1] = (this.#lastY - layerY) / layerHeight;
|
||||||
|
const [lastTopX, lastTopY, lastBottomX, lastBottomY] =
|
||||||
|
this.#getLastCoords();
|
||||||
|
|
||||||
if (isNaN(last[6]) && !this.isEmpty()) {
|
if (isNaN(last[6]) && !this.isEmpty()) {
|
||||||
// We've only two points.
|
// We've only two points.
|
||||||
const outline = new Float64Array(24);
|
const outline = new Float64Array(36);
|
||||||
outline.set(
|
outline.set(
|
||||||
[
|
[
|
||||||
NaN,
|
NaN,
|
||||||
@ -609,6 +635,18 @@ class FreeOutliner {
|
|||||||
NaN,
|
NaN,
|
||||||
NaN,
|
NaN,
|
||||||
NaN,
|
NaN,
|
||||||
|
lastTopX,
|
||||||
|
lastTopY,
|
||||||
|
NaN,
|
||||||
|
NaN,
|
||||||
|
NaN,
|
||||||
|
NaN,
|
||||||
|
lastBottomX,
|
||||||
|
lastBottomY,
|
||||||
|
NaN,
|
||||||
|
NaN,
|
||||||
|
NaN,
|
||||||
|
NaN,
|
||||||
(last[16] - layerX) / layerWidth,
|
(last[16] - layerX) / layerWidth,
|
||||||
(last[17] - layerY) / layerHeight,
|
(last[17] - layerY) / layerHeight,
|
||||||
NaN,
|
NaN,
|
||||||
@ -631,7 +669,7 @@ class FreeOutliner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const outline = new Float64Array(
|
const outline = new Float64Array(
|
||||||
this.#top.length + 12 + this.#bottom.length
|
this.#top.length + 24 + this.#bottom.length
|
||||||
);
|
);
|
||||||
let N = top.length;
|
let N = top.length;
|
||||||
for (let i = 0; i < N; i += 2) {
|
for (let i = 0; i < N; i += 2) {
|
||||||
@ -642,6 +680,7 @@ class FreeOutliner {
|
|||||||
outline[i] = top[i];
|
outline[i] = top[i];
|
||||||
outline[i + 1] = top[i + 1];
|
outline[i + 1] = top[i + 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
outline.set(
|
outline.set(
|
||||||
[
|
[
|
||||||
NaN,
|
NaN,
|
||||||
@ -654,12 +693,24 @@ class FreeOutliner {
|
|||||||
NaN,
|
NaN,
|
||||||
NaN,
|
NaN,
|
||||||
NaN,
|
NaN,
|
||||||
|
lastTopX,
|
||||||
|
lastTopY,
|
||||||
|
NaN,
|
||||||
|
NaN,
|
||||||
|
NaN,
|
||||||
|
NaN,
|
||||||
|
lastBottomX,
|
||||||
|
lastBottomY,
|
||||||
|
NaN,
|
||||||
|
NaN,
|
||||||
|
NaN,
|
||||||
|
NaN,
|
||||||
(lastBottom[0] - layerX) / layerWidth,
|
(lastBottom[0] - layerX) / layerWidth,
|
||||||
(lastBottom[1] - layerY) / layerHeight,
|
(lastBottom[1] - layerY) / layerHeight,
|
||||||
],
|
],
|
||||||
N
|
N
|
||||||
);
|
);
|
||||||
N += 12;
|
N += 24;
|
||||||
|
|
||||||
for (let i = bottom.length - 6; i >= 6; i -= 6) {
|
for (let i = bottom.length - 6; i >= 6; i -= 6) {
|
||||||
for (let j = 0; j < 6; j += 2) {
|
for (let j = 0; j < 6; j += 2) {
|
||||||
|
Loading…
Reference in New Issue
Block a user