Skip to content

Commit 7bc68e5

Browse files
authored
Make drag handles follow cursor more closely (#1003)
1 parent 7bfabe3 commit 7bc68e5

File tree

3 files changed

+44
-44
lines changed

3 files changed

+44
-44
lines changed

src/components/console/ConsoleDragHandle.svelte

+21-14
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
1111
const dispatch = createEventDispatcher();
1212
13-
let clientY: number | null = null;
13+
let dragElement: HTMLElement;
14+
let previousHeight: number = 0;
1415
1516
function getPixelHeight(value: string | number): number {
1617
if (typeof value === 'string' && /%/.test(value)) {
@@ -22,33 +23,33 @@
2223
}
2324
2425
function onMouseMove(event: MouseEvent): void {
25-
if (clientY == null) {
26-
return;
27-
}
28-
29-
const dy = event.clientY - clientY;
30-
const newHeight = rowHeight - dy;
26+
const dy = event.clientY - dragElement.getBoundingClientRect().y;
27+
const newHeight = clamp(rowHeight - dy, getPixelHeight(minHeight), getPixelHeight(maxHeight));
3128
32-
dispatch('updateRowHeight', { newHeight: clamp(newHeight, getPixelHeight(minHeight), getPixelHeight(maxHeight)) });
33-
34-
clientY = event.clientY;
29+
if (newHeight !== previousHeight) {
30+
dispatch('updateRowHeight', { newHeight });
31+
previousHeight = newHeight;
32+
}
3533
}
3634
37-
function onMouseDown(event: MouseEvent): void {
38-
clientY = event.clientY;
35+
function onMouseDown(): void {
3936
document.addEventListener('mousemove', onMouseMove, false);
4037
}
4138
4239
function onMouseUp(): void {
43-
clientY = null;
4440
document.removeEventListener('mousemove', onMouseMove, false);
4541
}
4642
</script>
4743

4844
<svelte:window on:mouseup={onMouseUp} />
4945

5046
<div class="console-drag-handle-container">
51-
<div class="console-drag-handle-height" role="none" on:mousedown|preventDefault={onMouseDown} />
47+
<div
48+
bind:this={dragElement}
49+
class="console-drag-handle-height"
50+
role="none"
51+
on:mousedown|preventDefault={onMouseDown}
52+
/>
5253
</div>
5354

5455
<style>
@@ -75,4 +76,10 @@
7576
.console-drag-handle-height:hover {
7677
background-color: var(--st-gray-30);
7778
}
79+
80+
.console-drag-handle-height:hover,
81+
.console-drag-handle-height:active {
82+
background-color: var(--st-gray-30);
83+
z-index: 4;
84+
}
7885
</style>

src/components/timeline/RowDragHandleHeight.svelte

+8-12
Original file line numberDiff line numberDiff line change
@@ -8,35 +8,31 @@
88
99
const dispatch = createEventDispatcher();
1010
11-
let clientY: number | null = null;
11+
let dragElement: HTMLElement;
12+
let previousHeight: number = 0;
1213
1314
function onMouseMove(event: MouseEvent): void {
14-
if (clientY == null) {
15-
return;
16-
}
15+
const dy = event.clientY - dragElement.getBoundingClientRect().y;
16+
const newHeight = Math.max(rowHeight + dy, ViewConstants.MIN_ROW_HEIGHT);
1717
18-
const dy = event.clientY - clientY;
19-
const newHeight = rowHeight + dy;
20-
if (newHeight >= ViewConstants.MIN_ROW_HEIGHT) {
18+
if (newHeight !== previousHeight) {
2119
dispatch('updateRowHeight', { newHeight });
20+
previousHeight = newHeight;
2221
}
23-
clientY = event.clientY;
2422
}
2523
26-
function onMouseDown(event: MouseEvent): void {
27-
clientY = event.clientY;
24+
function onMouseDown(): void {
2825
document.addEventListener('mousemove', onMouseMove, false);
2926
}
3027
3128
function onMouseUp(): void {
32-
clientY = null;
3329
document.removeEventListener('mousemove', onMouseMove, false);
3430
}
3531
</script>
3632

3733
<svelte:window on:mouseup={onMouseUp} />
3834

39-
<div class="row-drag-handle-height" role="none" on:mousedown|capture={onMouseDown} />
35+
<div bind:this={dragElement} class="row-drag-handle-height" role="none" on:mousedown|capture={onMouseDown} />
4036

4137
<style>
4238
div {

src/components/timeline/RowHeaderDragHandleWidth.svelte

+15-18
Original file line numberDiff line numberDiff line change
@@ -9,55 +9,52 @@
99
1010
const dispatch = createEventDispatcher();
1111
12-
let clientX: number | null = null;
12+
let dragElement: HTMLElement;
13+
let previousWidth: number = 0;
1314
1415
function onMouseMove(event: MouseEvent): void {
15-
if (clientX == null) {
16-
return;
17-
}
16+
const dx = event.clientX - dragElement.getBoundingClientRect().x;
17+
const newWidth = Math.max(rowHeaderWidth + dx, ViewConstants.MIN_MARGIN_LEFT);
1818
19-
const dx = event.clientX - clientX;
20-
const newWidth = rowHeaderWidth + dx;
21-
dispatch('updateRowHeaderWidth', {
22-
newWidth: newWidth >= ViewConstants.MIN_MARGIN_LEFT ? newWidth : ViewConstants.MIN_MARGIN_LEFT,
23-
});
19+
if (newWidth !== previousWidth) {
20+
dispatch('updateRowHeaderWidth', { newWidth });
21+
previousWidth = newWidth;
22+
}
2423
25-
clientX = event.clientX;
2624
event.stopPropagation();
2725
event.preventDefault();
2826
}
2927
30-
function onMouseDown(event: MouseEvent): void {
31-
clientX = event.clientX;
28+
function onMouseDown(): void {
3229
document.addEventListener('mousemove', onMouseMove, false);
3330
}
3431
3532
function onMouseUp(): void {
36-
clientX = null;
3733
document.removeEventListener('mousemove', onMouseMove, false);
3834
}
3935
</script>
4036

4137
<svelte:window on:mouseup={onMouseUp} />
4238

43-
<div class="row-header-drag-handle-height">
39+
<div class="row-header-drag-handle-width">
4440
<div
41+
bind:this={dragElement}
4542
style={`transform: translateX(${rowHeaderWidth || 0}px); left: -${width}px; width: ${width}px`}
46-
class="row-header-drag-handle-height--handle"
43+
class="row-header-drag-handle-width--handle"
4744
role="none"
4845
on:mousedown|capture={onMouseDown}
4946
/>
5047
</div>
5148

5249
<style>
53-
.row-header-drag-handle-height {
50+
.row-header-drag-handle-width {
5451
height: 100%;
5552
pointer-events: none;
5653
position: absolute;
5754
width: 100%;
5855
}
5956
60-
.row-header-drag-handle-height--handle {
57+
.row-header-drag-handle-width--handle {
6158
background-color: var(--st-gray-20);
6259
cursor: col-resize;
6360
height: 100%;
@@ -66,7 +63,7 @@
6663
z-index: 4;
6764
}
6865
69-
.row-header-drag-handle-height--handle:hover {
66+
.row-header-drag-handle-width--handle:hover {
7067
background-color: var(--st-gray-30);
7168
}
7269
</style>

0 commit comments

Comments
 (0)